《编译原理词法分析和语法分析报告代码(C语言版)》由会员分享,可在线阅读,更多相关《编译原理词法分析和语法分析报告代码(C语言版)(5页珍藏版)》请在金锄头文库上搜索。
1、 词法分析一、实验目的 设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 二、实验要求词法分析程序的功能: 输入:所给文法的源程序字符串。 输出:二元组(syn,token 或 sum)构成的序列。 其中:syn 为单词种别码;token 为存放的单词自身字符串;sum 为整型常数。 三、词法分析程序的 C 语言程序源代码: #include #include char prog80,token8,ch; int syn,p,m,n,sum; char *rwtab6=“begin“,“if“,“then“,“while“,“do“,“end“;scaner(); main() p
2、=0;printf(“n please input a string(end with #):/n“);doscanf(“%c“,progp+=ch;while(ch!=#);p=0;doscaner();switch(syn)case 11:printf(“( %-10d%5d )n“,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();scan
3、er() sum=0;for(m=0;m=a)|(ch=A) while(ch=a)|(ch=A)|(ch=0)ch=progp+;if(ch=) syn=24;tokenm+=ch;else syn=23;p-;break;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;to
4、kenm+=ch;else syn=31;p-;break;case =:tokenm+=ch;ch=progp+;if(ch=) syn=25;tokenm+=ch;else syn=18;p-;break;case *: syn=15;tokenm+=ch;break;case /: syn=16;tokenm+=ch;break;case (: syn=27;tokenm+=ch;break;case ): syn=28;tokenm+=ch;break;case : syn=5;tokenm+=ch;break;case : syn=6;tokenm+=ch;break;case ;:
5、 syn=26;tokenm+=ch;break;case “: syn=30;tokenm+=ch;break;case #: syn=0;tokenm+=ch;break;case :syn=17;tokenm+=ch;break;default: syn=-1;break;tokenm+=0; 五、结果分析: 输入 begin x:=9: if x9 then x:=2*x+1/3; end # 后经词法分析输出如下序列:(begin 1) (x 10)(:17)(= 18)(9 11)(;26)(if 2) 如图 5-1 所示:图 5-1 六、总结: 词法分析的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基 本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。通过本试验的 完成,更加加深了对词法分析原理的理解。