《编译原理-语法分析程序设计(预测分析法)》由会员分享,可在线阅读,更多相关《编译原理-语法分析程序设计(预测分析法)(4页珍藏版)》请在金锄头文库上搜索。
1、1 实验目的构造文法的语法分析程序实验要求,2 实验要求采用预测分析法对输入的字符串进行语法分析。3 实验环境V4 实验原理对文法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 */a,/*1. S */ ,
2、/*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()/输入待分析的句子printf(请输入待分析的句子(以$结束):n);scanf(%s,str);int lin(char c);/非终结符转换为行号int col(char c);/终结转换为
3、列号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; /栈赋初值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;
4、i-)stack+top = *(pMlin(X)col(A) + i ) ;elseprintf(Error in main()%cn,X);exit(0);int lin(char c)for(int i = 0; i %cn,c);exit(0) ;int col(char c)for (int i=0; i%cn,c);exit(0);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 程序测试结果