文档详情

编译原理个实验.docx

发布:2017-03-25约6.68千字共15页下载文档
文本预览下载声明
?编译原理 实验2 语法分析器的构造分类:?算法?C2013-06-23 13:49?1955人阅读?评论(3)?收藏?举报【实验目的】 练习构造语法分析程序的方法,熟悉上下文无关文法的使用,加深对课堂教学的理解;提高词法分析方法的实践能力【实验要求】 利用某一高级程序设计语言构造语法分析程序?【具体要求】对于给定的文法G[E] E-TE’ E’-+TE’ | ε T-FT’ T’-*F T’| ε F-(E) | i 采用递归下降分析法编写语法分析程序及LL(1)语法分析法编写语法分析程序,该语法分析程序判断输入的字符串是否符合上述文法,并能够输出相应的结果(是语法成分或不是语法成分)。Cpp1?/* 实验名称:实验2 语法分析器实验 学号: 姓名:niu91(859222829) 班级: */ #includestdio.h#includestring.h#includemalloc.h#define N 100int seekProd(int stackTop,int inputstrTop);//char inputstr[10]=i*i+i#;char inputstr[20];char stack[10]=;typedef struct production{char leftChar;char rightChars[4];char allChars[8];}Prod;Prod productions[8];void init();int stackPush(int *top, Prod prod);int matching(int *top, char *inputstr);int main(){int len;//输入串的长度int stackTop=1;int inputstrTop=0;int i;char *z=#;int index=0;init();//产生式初始化stack[0]=#;stack[stackTop]=E;printf(请输入字符串:);gets(inputstr);len=strlen(inputstr);inputstr[len]=#;while( stackTop=0 ){//printf(%d,%d\n,stackTop,inputstrTop);printf(第%2d步:,++index);printf(当前栈:%-8s,stack);printf(输入字符串:%8s,inputstr);//根据栈定元素和字符串首字母if(matching(stackTop,inputstr)){printf(\n);}else{i=seekProd(stackTop,inputstrTop);stackPush(stackTop,productions[i]);//压栈printf(进行下一步所用的产生式:%s\n,productions[i].allChars);}}if(stackTop+1==0){printf(分析成功!\n);}return 0;}//搜索分析表int seekProd(int stackTop,int inputstrTop){//printf(stack[stackTop]=%c\n,stack[stackTop]);if(stack[stackTop]==E){if(inputstr[inputstrTop]==i){return 0;}else if(inputstr[inputstrTop]==(){return 0;}else{return -1;}}else if(stack[stackTop]==X){if(inputstr[inputstrTop]==+){return 1;}else if(inputstr[inputstrTop]==)){return 2;}else if(inputstr[inputstrTop]==#){return 2;}else{return -1;}}else if(stack[stackTop]==T){if(inputstr[inputstrTop]==i){return 3;}else if(inputstr[inputstrTop]==(){return 3;}else{return -1;}}else if(stack[stackTop]==Y){if(inputstr[inputstrTop]==+){return 5;}else if(inputstr[inputstrTop]==*){return 4;}else if(inputstr[inputstrTop]==)){return 5;}else if(inputstr[inputstrTop]==#){return 5;}else{re
显示全部
相似文档