《完整版)词法分析器(c语言实现》由会员分享,可在线阅读,更多相关《完整版)词法分析器(c语言实现(5页珍藏版)》请在人人文库网上搜索。
1、词法分析c实现一、实验目的设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。二、实验要求2.1待分析的简单的词法(1)关键字:beg in if the n while do end所有的关键字都是小写。(2)运算符和界符:= + -*/= = ;()#(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:ID = letter (letter | digit)*NUM = digit digit*(4) 空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符 和关键字,词法分析阶段通常被忽略。2.2各种单词符号对应的种别码:表2.1各种单词符号。
2、对应的种别码单词符号种别码单词符号种别码bgin1:17If218The n321do523lettet (letter|digit) *10=24dight dight*11=25+13;26一14(27*15)28/16#02.3词法分析程序的功能:输入:所给文法的源程序字符串。输出:二元组(syn,token或sum)构成的序列。其中:syn为单词种别码;token为存放的单词自身字符串; sum为整型常数。例如:对源程序 begi n x:=9: if x9 then x:=2*x+1/3; end #的源文件,经过词法分析后输出如下序列:(1,begi n)(10,x)(18,:=)。
3、(11,9)(26,;)(2,if)三、词法分析程序的C语言程序源代码:#i nclude #in clude char prog80,toke n 8,ch;int syn,p,m,n,sum;char *rwtab6=begin,if,then,while,do,end;scaner();main()p=0;printf(n please input a string(end with #):/n);do scanf(%c,&ch); progp+=ch; while(ch!=#);p=0;doscaner();switch(syn)case 11:printf( %-10d%5d )n,。
4、sum,syn); break;case -1:printf(you have input a wrong stringn);getch();exit(0);default: printf( %-10s%5d )n,token,syn); break; while(syn!=0); getch();scaner() sum=0; for(m=0;m=a)|(ch=A) while(ch=a)|(ch=A)|(ch=0)&(ch=0)&(ch=0)&(ch:tokenm+=ch; ch=progp+; if(ch=) syn=24; tokenm+=ch;else syn=23; p-;brea。
5、k;case +: tokenm+=ch; ch=progp+; if(ch=+) syn=17; tokenm+=ch;else syn=13; p-;break;case -:tokenm+=ch; ch=progp+; if(ch=-) syn=29; tokenm+=ch;else syn=14; p-;break;case !:ch=progp+; if(ch=) syn=21; tokenm+=ch; else syn=31; p-;break;case =:tokenm+=ch; ch=progp+; if(ch=) syn=25; tokenm+=ch;else syn=18;。
6、p-;break; case *: syn=15; tokenm+=ch; break;case /: syn=16; tokenm+=ch; break;case (: syn=27; tokenm+=ch; break;case ): syn=28;toke n m+=ch; break;case : syn=5;toke n m+=ch; break;case : syn=6;toke n m+=ch; break;case ;: syn=26; toke n m+=ch; break;case 、: syn=30; toke n m+=ch; break;case #: syn=0; 。
7、toke n m+=ch; break;case :s yn=17;toke n m+=ch; break;default: syn=-1; break;toke n m+=0;四、结果分析:输入 beg in x:=9: if x9 then x:=2*x+1/3; end #后经词法分析输出如下序列:(begin 1)(x如图5-1所示:10)(: 17)(=18)(911)(; 26)(if2);HC三卜TV译原理比IFAFE exeX9Xend ttbegin Xx01 y 10) 17 is y 11 26、2 ?IH、 23 ) 11 y3 io y 17 18 II、15 10 ) 13 ? 1116 ) 11 2 m、u y。