程序设计语言的词法分析程序的设计过程(计算机程序设计步骤是怎样的)

本文目录
计算机程序设计步骤是怎样的
计算机程序设计是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程应当包括分析、设计、编码、测试、排错等不同阶段。专业的程序设计人员常被称为程序员。
计算机程序设计步骤:
1、分析问题:对于接受的任务要进行认真的分析,研究所给定的条件,分析最后应达到的目标,找出解决问题的规律,选择解题的方法,完成实际问题。
2、设计算法:即设计出解题的方法和具体步骤。
3、编写程序:将算法翻译成计算机程序设计语言,对源程序进行、编译和连接。
4、运行程序,分析结果:运行可执行程序,得到运行结果。能得到运行结果并不意味着程序正确,要对结果进行分析,看它是否合理。不合理要对程序进行调试,即通过上机发现和排除程序中的故障的过程。
5、编写程序文档:许多程序是提供给别人使用的,如同正式的产品应当提供产品说明书一样,正式提供给用户使用的程序,必须向用户提供程序说明书。内容应包括:程序名称、程序功能、运行环境、程序的装入和启动、需要输入的数据,以及使用注意事项等。
扩展资料:
计算机程序设计语言:
程序设计语言的基本成分有:①数据成分,用于描述程序所涉及的数据;②运算成分,用以描述程序中所包含的运算;③控制成分,用以描述程序中所包含的控制;④传输成分,用以表达程序中数据的传输。
程序设计语言 计算机 IT按照语言级别可以分为低级语言和高级语言。低级语言有机器语言和汇编语言。低级语言与特定的机器有关、功效高,但使用复杂、繁琐、费时、易出差错。机器语言是表示成数码形式的机器基本指令集,或者是操作码经过符号化的基本指令集。汇编语言是机器语言中地址部分符号化的结果,或进一步包括宏构造。高级语言的表示方法要比低级语言更接近于待解问题的表示方法,其特点是在一定程度上与具体机器无关,易学、易用、易维护。
参考资料来源:百度百科-程序设计
程序设计的基本过程是怎样的
从分析需求开始
1、分析需求:了解清楚程序应有的功能。
2、设计算法:根据所需的功能,理清思路,排出完成功能的具体步骤,其中每一步都应当是简单的、确定的。这一步也被称为“逻辑编程”。
3、编写程序:根据前一步设计的算法,编写符合C++语言规则的程序文本。
4、输入与程序:将程序文本输入到计算机内,并保存为文件,文件名后缀为“.cpp”。
5、编译(Compile):把C++程序编译成机器语言程序。
6、生成执行程序:从目标文件进一步连接生成Windows环境下的可执行文件,即文件名后缀为“.exe”的文件。
7、运行:在Windows环境中使用可执行文件。这是程序设计的最终目的。这一步也常被称为“Run”。
8、算法错,或算法在转变为程序时走样了,导致程序能够运行,却不能实现预想的功能,这种错误被称为“逻辑错误”。
使用直接分析法编制C语言子集的词法分析程序
选我为最佳答案吧!
南华大学
计算机科学与技术学院
实 验 报 告
( 2011~2012 学年度 第 二 学期 )
课程名称
程序设计语言与编译
姓名学号
专业电气信息类班级
地点8—209教师
题目: 用直接分析方法编制C++语言子集的词法分析程序.
一、分析
对于单词符号我们将其分成四类:保留字K、标识符I、常数C和界符P,每类单词符号均可使用一张表格表示.在词法分析过程中,保留字K和界符P这两个表格的内容是固定不变的(由语言确定),源程序字符串只能从其中选取,而标识符I、常数C这两表是在分析过程中不断形成的.
对于一个具体源程序而言,在扫描字符串时识别出一个单词,若这个单词的类型是K、I、C或P中之一,那么就以单词的二元式形式输出.每次调用词法分析程序,它均能自动继续扫描下去,形成下一个单词,直到整个源程序全部扫描完毕,从而形成相应的单词串.
各类单词的二元式表述均具有相同的结构与长度,形式如下:
(单词种别t,单词自身的值i)
t是单词种别,而单词种别共分为K、I、C、P四类且每类对应一张表格.因此,t实际上就是一个指向这四类中某一类对应表格的指针.i则为指向该类表格中一个特定项目的指针.
所以整个的词法分析过程就是从源程序中获得一个个的单词符号,将这些符号分别填入四张类表中,并且有一个二元式序列构成一个索引,这个索引为以后的语法分析提供处理上的方便.
为了减少实习量,可以适量地选取K,P中的一个子集来进行.如下表:
表1 保留字K表
内部地址 12345678910
保 留 字 BEGINCONSTDOELSE END IFPROCEDURETHENVARWHILE
表2 界符P表
内部地址 12345678910
界 符 ;+::(,)<<<
组合界符==>
保留字表包括10个有代表性的保留字,界符表包括关系运算符三种(8,9,10),算术运算符(2),分隔符三种(1,4,6),一对圆括号,加上赋值号共10种.这两表的内容表明PASCAL语言的条件语句,赋值语句,WHILE型循环语句,复合语句,过程及变量说明均可作为源程序例子输入给词法分析程序,标识符表I中的每一项包含一个标识符,常数表C中的每一项包含一个整常数,后两表的内容都是在词法分析过程中产生的.
如何从源程序中识别出一个个的单词符号呢?图1中的流图清晰地反映出这一过程.
图1中,双圆圈的状态表示终态,即能到达终态就代表识别出一个单词符号,而带有*号的终态是指处理时应回退一字符.
二、算法
词法分析器在扫描过程中,依次从源程序中取出源字符,根据图1的扫描过程状态转换图,当碰到终态时,即双圆圈的状态时就得到一个单词符号,此时可以根据第一个字符判断单词属于K,I,C,P中哪一类,从而确定单词的"单词种别"和"单词自身的值".整个词法分析的算法流程如图2.
三、实现
选择实习环境为TURBO C2.0语言. 实现程序见附录.
四、总结
上机前应做好准备.即根据实习目的、要求和分析,选择相应的数据结构,使用C语言参照算法中的流程编写词法分析的程序.将编好的程序上机进行调试.注意调试的例子应有词法正确的,也应有词法错误的或是超出所选数据结构范围的.
实验完成达到实习目的之后,若尚有余力者,可以对所选子集适当扩大或是增加相应功能如:扩充界符和保留字数目;允许实型常数;进行词法错误检查;最大范围扩充以至PASCAL语言所有字符的集合.
实验完成以后编写出完整的实验报告,反映出最后的实验学习结果.
附录
/* 实验代码:*/
实验结果:
五、结果感想
实验中需要识别的词有:
关键字:DIM、IF、DO、STOP、END单词种别码为1.2.3.4.5。
标识符;单词种别码为6。
常数为无符号整形数;单词种别码为7。
运算符包括:=、-、*、**单词种别码为8.9.10.11。
分隔符包括:,、(、); 单词种别码为12.13.14。
通过此次实验,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;熟悉了构造词法分析程序的手工方式的相关原理,根据识别语言单词的状态转换图,使用某种高级语言(例如C++语言)直接编写此法分析程序。另外,也让我重新熟悉了C++语言的相关内容,加深了对C++语言的用途的理解。
编译原理课程设计-词法分析器设计(C语言)
#include "stdio.h" /*定义I/O库所用的某些宏和变量*/
#include "string.h" /*定义字符串库函数*/
#include "conio.h" /*提供有关屏幕窗口操作函数*/
#include "ctype.h" /*分类函数*/
char prog={’\0’},
token; /*存放构成单词符号的字符串*/
char ch;
int syn, /*存放单词字符的种别码*/
n,
sum, /*存放整数型单词*/
m,p; /*p是缓冲区prog的指针,m是token的指针*/
char *rwtab={"begin","if","then","while","do","end"};
void scaner(){
m=0;
sum=0;
for(n=0;n《8;n++)
token=’\0’;
ch=prog;
while(ch==’ ’)
ch=prog;
if(isalpha(ch)) /*ch为字母字符*/{
while(isalpha(ch)||isdigit(ch)) /*ch 为字母字符或者数字字符*/{
token=ch;
ch=prog;}
token=’\0’;
ch=prog;
syn=10;
for(n=0;n《6;n++)
if(strcmp(token,rwtab)==0) /*字符串的比较*/{
syn=n+1;
break;}}
else
if(isdigit(ch)) /*ch是数字字符*/{
while(isdigit(ch)) /*ch是数字字符*/{
sum=sum*10+ch-’0’;
ch=prog;}
ch=prog;
syn=11;}
else
switch(ch){
case’《’:m=0;token;
if(ch==’》’){
syn=21;
token=ch;}
else if(ch==’=’){
syn=22;
token=ch;}
else{
syn=20;
ch=prog;}
break;
case’》’:m=0;token;
if(ch==’=’){
syn=24;
token=ch;}
else{
syn=23;
ch=prog;}
break;
case’:’:m=0;token;
if(ch==’=’){
syn=18;
token=ch;}
else{
syn=17;
ch=prog;}
break;
case’+’:syn=13;token=ch;break;
case’-’:syn=14;token=ch;break;
case’*’:syn=15;token=ch;break;
case’/’:syn=16;token=ch;break;
case’=’:syn=25;token=ch;break;
case’;’:syn=26;token=ch;break;
case’(’:syn=27;token=ch;break;
case’)’:syn=28;token=ch;break;
case’#’:syn=0;token=ch;break;
default:syn=-1;}}
main()
{
printf("\n\nThe significance of the figures:\n"
"1.figures 1 to 6 said Keyword\n"
"2.figures 10 and 11 said Other indicators\n"
"3.figures 13 to 28 said Operators\n");
p=0;
printf("\nplease input string:\n");
do {
ch=getchar();
prog=ch;
}while(ch!=’#’);
p=0;
do{
scaner();
switch(syn){
case 11: printf("(%d,%d)\n",syn,sum);break;
case -1: printf("\n ERROR;\n");break;
default: printf("(%d,%s)\n",syn,token);
}
}while(syn!=0);
getch();
}
程序测试结果
对源程序begin x:=9: if x》9 then x:=2*x+1/3; end #的源文件,经过词法分析后输出如下图5-1所示:
具体的你在修改修改吧
设计一个小语言的词法分析程序
任务1:识别小型语言所有单词的词法分析程序设计
源程序设计语言 G
《程序》→《变量说明》《BEGIN》 《语句表》 《END》.
《变量说明》→VAR《变量表》:《类型》;|《空》
《变量表》→《变量表》,《变量》|《变量》
《类型》→INTEGER
《语句表》→《语句》 | 《语句》;《语句表》
《语句》→《赋值语句》|《条件语句》|《WHILE语句》|《复合语句》
《赋值语句》→《变量》:=《算术表达式》
《条件语句》→IF《关系表达式》THEN《语句》ELSE《语句》
《WHILE语句》→WHILE《关系表达式》DO《语句》
《复合语句》→BEGIN《语句表》END
《算术表达式》→《项》|《算术表达式》+《项》|《算术表达式》-《项》
《项》→《因式》|《项》*《因式》|《项》/《因式》
《因式》→《变量》|《整数》|(《算术表达式》)
《关系表达式》→《算术表达式》《关系符》《算术表达式》
《变量》→《标识符》
《标识符》→《标识符》《字母》|《标识符》《数字》|《字母》
《整数》→0|《非零数字》《泛整数》
《泛整数》→《数字》|《数字》《泛整数》|ε
《关系符》→《|《=|==|》|》=|《》
《字母》
→A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
《非零数字》→1|2|3|4|5|6|7|8|9
《数字》→《非零数字》|0
《空》→
要求和提示:
词法分析阶段,可以打开任意位置和名称的源文件进行词法分析,可以进行非法字符和数字后边跟字母的错误判断,如果没有错误则提示“词法分析正确完成!”,并且可以选择输出token.txt(token文件)string.txt(符号表)两个文件;
1.词法分析程序的主要任务如下:
① 组织源程序的输入,识别出源程序中的各个基本语法单位(也称为单词或语法符号),按规则转换成二元式的形式;
② 删除无用的空白字符、回车符、及其它非实质性符号;
③ 删除注解行;
④ 为后面的语法和语义分析提供二元式链表;
单词 编码 单词 编码
标识符 1 《 15
正整数 2 《= 16
BEGIN 3 》 17
END 4 》= 18
IF 5 《》 19
THEN 6 == 20
ELSE 7 ; 21
WHILE 8 . 22
DO 9 := 23
INTEGER 10 , 24
+ 11 ( 25
- 12 ) 26
* 13
/ 14
1) 对标识符的长度控制在8个字符(包括8个)以内,超过的做截断处理;
2) 数字不大于65535,否则报错;
3) 能跳过源程序中的空白格:两个单词之间的任何空格,制表符,回车,换行都是白空格,除了用来分隔单词以外,没有意义;
4) 能跳过注释:
a) 接连出现的/*到下一次接连出现的*/之间的任何文字都是注释(多行);
b) 从某行接连出现的//到该行的结尾的任何文字都是注释(单行)。
3.怎样编写词法分析程序:
1) 预处理:把源文件一个字符一个字符的读入词法分析程序设置的输入字符结构体数组中(输入缓冲区),读入过程要删除注释,删除多余的白空格;
2) 从源程序字符数组中获得单词, 编码为二元式.:
二元式采用结构体数组存储, 把单词类型和词元记录下来。
分解单词的方法:
1) Case多路转换语句根据单词的特点直接编写;
2) 通过描述单词的正规文法得到相应的有穷自动机,通过case多路转换语句完成有穷自动机的处理流程。
3.编写词法分析程序要注意的问题:
1) 检查词法是否有错误
检查是否有非法字符:如 @, &, !
检查标志符和数字是否满足限制条件
检查注释符号是否配对
2) 符分隔单词
能够区分两个单词的符号为界符
有些界符不是单词:如白空格
有些界符仅仅用来分隔:如;
有些界符本身还是源程序不可缺少的单词,如(, ), +, /, 等等
有些界符包含两个字符:如《》, 》=等等
3) 输出词法错误
如果有错误,需要报告词法错误的原因。并且要能够越过错误,分解下一个单词,直到源程序结束。
4) 输出的二元式流保存在二元式结构体数组中。
你好,希望采纳!
请问程序设计的基本过程是怎样的
(1)分析需求:了解清楚程序应有的功能。
(2)设计算法:根据所需的功能,理清思路,排出完成功能的具体步骤,其中每一步都应当是简单的、确定的。这一步也被称为“逻辑编程”。
(3)编写程序:根据前一步设计的算法,编写符合C++语言规则的程序文本。
(4)输入与程序:将程序文本输入到计算机内,并保存为文件,文件名后缀为“.cpp”。
至此,产生了完整的程序文本,被称为源程序或源代码。保存源程序的文件(例如前面的c:\student\ch1_01.cpp)称为源程序文件,简称源文件,文件名的后缀是“.cpp”。
(5)编译(Compile):把C++程序编译成机器语言程序。
编译产生的程序称为目标程序,目标程序被自动保存为文件,这一文件称为目标文件,文件名的后缀是“.obj”。
VC++进行编译的依据是源程序,如果源程序中的符号、词语、整体结构等有差错,超出了VC++的“理解能力”,VC++就无法完成编译,这样的差错称为语法错误。一旦发现语法错误,VC++就不生成目标文件,并在窗口下方列出错误;如果没有语法错误,则显示“0 error(s)”,并生成目标文件,允许继续进行后面的步骤。
编译没有出现错误,仅仅说明程序中没有语法错误。
(6)生成执行程序:从目标文件进一步连接生成Windows环境下的可执行文件,即文件名后缀为“.exe”的文件。
由于可执行文件是由若干个文件拼接而成的,其中不但有目标文件,还有另一些标准的库文件,一些规模较大的程序还会有多个目标文件,所以这一步骤又被称为连接(Link)。
(7)运行:在Windows环境中使用可执行文件。这是程序设计的最终目的。这一步也常被称为“Run”。
逻辑错误:算法错,或算法在转变为程序时走样了,导致程序能够运行,却不能实现预想的功能。这种错误被称为“逻辑错误”。
在运行这一步,必须核对程序是否正确实现了预定的功能,如果功能不对,还必须到程序中寻找错误,纠正后再次经历(5)、(6)、(7)各步,直到看不出错误为止。

更多文章:
京东read1不充电?c语言中read1:是什么意思啊,它怎么用啊
2026年7月12日 17:00
幻灯片间的动画效果通过动画选项卡什么来设置(不同幻灯片之间的动画效果通过幻灯片放映菜单的什么命令来设置)
2026年9月14日 09:15
eclipse如何查看tomcat版本(eclipse中tomcat)
2025年10月17日 20:45
linux虚拟机与主机共享文件(虚拟机red hat linux共享文件夹不能共享)
2026年1月4日 03:45
carry on的用法及短语(carry out 和carry on 是一样的么在句子里可以相互变通么)
2026年7月5日 14:15
朴石医学检验实验室6人被采取刑事强制措施,会判多久?北京朴石实验室7人被批捕,该实验室违反了哪些法律法规
2025年11月14日 02:45


















