文档介绍:.
编译原理程序设计实验报告
――表达式语法分析器的设计与实现
班级:姓名:学号:
实验目标:用两种不同的方法设计一个表达式的语法分析器实验内容:
①LL⑴分析法
LL⑴文法是一种自上而下的语法分析方法,它是从文法的识别符号出发序代码:
(加入注释)LL⑴分析算法:
#includc<iostrcam>幷inelude<>usingnamespacesid;#dcfincSTACKSIZE50#dcfincSTACK3NCREMEXT10弾defineOK1#dcfincerror0#dcfincoverflow-1typedefcharSElcmTypc;typedefintStatus;typedefstruct{SElcmTypc"base;SElcmTypc"top;Intsucksizc;}SAStack;StatusInitStack(SqStack&S){=(SElcmTypc*)mall(>c(STACKSIZE*sizcof(SElcmTypc));if(!)cxit(ovcrfl(w);S?top=;=STACKSJZE;returnOK;}StatusPush(S<jStack&S,SElcmTypcc){if(■>=){=(SElcmTypc*)rcalloc(?(+STACK1XCREMEXT)*sizcof(SElctnTypc));if(!)cxit(ovcrfl(w);=+;+=STACK]NCREMENT;}()++;*()=C;returnOK;}StatusP(>p(SqSt:wk&S,SElcmTypc&c){if(==)returnerror;c=*();-;returnOK;StatusGrammcrAn;dysis(SqStack&S,char*ch,charc){SElcmTypcc;Push(S旳;Push(S?
whileO((*()=='伏)&&(c==*'))){Pop(S,c);if((c==砂&&(((c>=W)&&(c<=V))||(c>=T&&cV=?||(c==O)){PushCS/A1);Push(S,T);}elseif((c=='A)&&(c=='+)){PushCS/A1);Push(S,T);di++;c=*ch;}elseif((c==月&&((c==|向==X)));elseif((c==T)&&(((c>=?&&(c<=f9f))11(O=,a,&&c<=V)||(c==*O))PushCS/B*);Push(S,巧;}elseif((c=='Br)&&(c==*)){Push(S,E);Push(S巧;ch++;c=*ch;}elseif((c==助&&((c=='+?)||(c==7)||(c==?#?));)elseif((c==T1)&&((o=V&&c<=?9》||(c>二W&&c<=V))){ch++;while(((c=*ch)>