《2022年编译原理语法分析程序设计 3.pdf》由会员分享,可在线阅读,更多相关《2022年编译原理语法分析程序设计 3.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1实验目的构造文法的语法分析程序实验要求,2实验要求采用预测分析法对输入的字符串进行语法分析。3实验环境VC+6.0 4实验原理对文法 G 进行语法分析,文法G 如下所示:*0. Sa */ *1. S *2. S(T) *3. TSW * *4. W,SW *5. W;5软件设计与编程#include #include #include char str100; /存储待分析的句子const char T = a(),#; /终结符,分析表的列符const char NT = STW; / 非终结符,分析表的行符/*指向产生式右部符号串*/ const char *p = /*0. Sa *
2、/ a, /*1. S */ , /*2. S(T) */ (T), /*3. TSW */ SW, /*4. W,SW */ ,SW, /*5. W; */ ; /设 Mij=x,通过 pMij=px获取右部符号串。const int M6 = /* a ( ) , # */ /*S*/ 0, 1, 2, -1, -1, -1 , /*T*/ 3, 3, 3, -1, -1, -1 , /*W*/ -1, -1,-1, 5, 4, -1 ; void init()/ 输入待分析的句子名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
3、- 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - printf( 请输入待分析的句子(以$结束 ):n); scanf(%s,str); int lin(char c);/ 非终结符转换为行号int col(char c);/ 终结转换为列号bool isNT(char c);/isNT判断是否是非终结符bool isT(char c);/isT判断是否是终结符。void main(void) int i,j=0; int flag=1,flag2=0; char A; /设置指示句子的当前字符char stack20= #,S; /栈赋
4、初值int top = 1 ; /设置栈顶指针char X = ; /存储栈顶字符init(); A=str0; printf(t 步数 t 分析栈 t 输入串 t 所用规则 n);/在屏幕上输出列表标题while ( 1 ) printf(nt(%d)t,+j); /输出当前执行步数for ( i = 0 ; i = 0; i-) stack+top = *(pMlin(X)col(A) + i ) ; else printf(Error in main()%cn,X); exit(0); int lin(char c) for(int i = 0; i %cn,c); exit(0) ;
5、int col(char c) for (int i=0; i%cn,c); exit(0); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 4 页 - - - - - - - - - bool isNT(char c) /是否是非终结符 for (int i = 0; i (int)strlen(NT); i + ) if (c=NTi) return true; return false; bool isT(char c) /是否是终结符(不包括#) for (int i = 0; i (int)strlen(T) - 1; i + ) if (c = Ti) return true; return false; 6程序测试结果名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 4 页 - - - - - - - - -