1、实验一 词法分析程序设计与实现一、实验目的:加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。二、实验内容:自定义一种程序设计语言,或者选择已有的一种高级语言(C 语言),编制它的词法分析程序。词法分析程序的实现可以采用任何一种编程工具。三、实验要求:1. 对单词的构词规则有明确的定义;2. 编写的分析程序能够正确识别源程序中的单词符号;3. 识别出的单词以的形式保存在符号表中;4. 词法分析中源程序的输入以.c 格式,分析后的符号表保存在.txt 文件中。5. *对于源程序中的词法错误
2、,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成整个源程序的词法分析;6. 实验报告要求用自动机或者文法的形式对词法定义做出详细说明,说明词法分析程序的工作过程,说明错误处理的实现*。四、实验学时:6 学时五、实验步骤:1. 定义目标语言的可用符号表和构词规则;2. 依次读入源程序符号,对源程序进行单词切分和识别,直到源程序结束;3. 对正确的单词,按照它的种别以的形式保存在符号表中;4. *对不正确的单词,做出错误处理*。六、选作实验学生可以根据自身的情况完善词法分析程序的错误处理功能(实验要求 5 /用于接收输入输出文件名FILE *fin,*fout; /用于指向输入输出文件的
3、指针2. /下面定义保留,为简化程序,使用字符指针数组保存所有保留字。/如果想增加保留字,可继续添加,并修改保留字数目#define keywordSum 8char *keywordkeywordSum= “if“,“else“,“for“,“while“,“do“,“int“,“read“,“write“;3. /下面定义纯单分界符,如需要可添加char singleword50=“+-*();,:“;4. /下面定义双分界符的首字符char doubleword10=“ . VAR:;| ,| INTEGER | ; | := IFTHENELSE WHILEDO BEGINEND |+
4、|- |*|/ |() | 0| | |=|= 18 IF 5 =A /else return false;bool isBlank(char ch)if(ch= |ch=t) return true;else return false;int main()string src,ste,s;char ch0,ch,ch12;char ktt4820=“and“,“begin“,“const“,“div“,“do“,“else“,“end“,“function“,“if“,“integer“,“not“,“or“,“procedure“,“program“,“read“,“real“,“then
5、“,“type“,“var“,“while“,“write“,“标识符“,“无符号数“,“,“,“;“,“:“,“.“,“(“,“)“,“,“,“,“+“,“-“,“+“,“-“,“*“,“/“,“=“,“,“ste;break;if(j=21)ste=ste+“|“+“21“;/ coutste;break;coutste;break;cout #include char *process1(); void printend(int,char); void process(); void processb(); int issymbol(char); int iskeyword(char *
6、); int kwnum=0,valnum=0,symbolnum=0,digitnum=0,othernum=0; char keywords20010,val20030,symbol2002,digit20010,other20020; int main() char words100; clrscr(); strcpy(words,process1(); process(words, ; ); printend(kwnum, k ); printend(valnum, v ); printend(symbolnum, s ); printend(digitnum, d ); printend(othernum, o ); printf( “nPress any key to continue.n “); getch(); return 0; void printend(int number,char sign) int i; if(number) for(i=1;i , , ! , % , for(;i 30;i+) if (symbol=signi) return 1; return 0;