实验名称:班级:10级软件工程2班班号:10级软件工程2班学号:1025116031姓名:张越2013年04月17日1、实验目的1、为初等函数运算语言构造LL(1)语法分析器。2、掌握LL(1)语法分析器的方法,加深对自上而下语法分析原理的理解。3、掌握设计、编制并调试LL(1)语法分析程序的思想和方法。2、实验内容2.1、根据初等函数运算语言运算法则,将语法模式用上下文无关文法表达。注意运算的优先性,避免产生二义性文法。SA?B;#SC;A|εC变量=BBB+C|B-C|CCC*D|C/D|DDE|sin(E)|cos(E)|tg(E)|ctg(E)|lg(E)|ln(E)|log(E)|log(E,E)|E^EE(B)|-E|变量|实数注:本文法的?前面是一些赋值语句(如:a=x+y;)?后面是一个算术表达式(如a+b*sin(y);以#结束)2.2、将上述文法改写为LL(1)文法。SA?B;#AC;A|εC变量=BBDEE+DE|-DE|εDFGG*FG|/FG|εFHI|cos(H)|sin(H)|tg(H)|ctg(H)|lg(H)|ln(H)|log(HJI^H|εJ,H)|)H(B)|-H|变量|实数2.3、根据LL(1)文法给出预测分析表。2.3.1First集First(S)={ε变量?}First(A)={ε变量}First(B)={(-变量实数logsincostgctglgln}First(C)={变量}First(D)={(-变量实数logsincostgctglgln}First(E)={ε+-}First(F)={(-变量实数logsincostgctglgln}First(G)={ε*/}First(H)={(-变量实数}First(I)={ε^}First(J)={,)}2.3.2Follow集Follow(S)={#}Follow(A)={?}Follow(B)={;)}Follow(C)={;}Follow(D)={+-;)}Follow(E)={;)}Follow(F)={*/+-;)}Follow(G)={+-;)}Follow(H)={*/+-;)^,}Follow(I)={*/+-;)}Follow(J)={*/+-;)}2.3.3记号表非终结符iostclg记号1234567意义变量cossintgctglnlg非终结符an+-*/^记号891011121314意义log实数+-*/^非终结符=,;()?#记号15161718192021意义=,;()?结束标志2.3.4预测分析表2.4、根据预测分析表,给出解析LL(1)文法的递归下降子程序。2.5、本语法分析程序的输入是实验一生成的记号流;本程序需定义语法树的数据结构;语法分析的输出是一棵语法树。2.6、当输入存在语法错误时,需给出语法错误的提示,指出语法错误发生的位置和错误类型。3、实验程序清单(包括词法分析部分)4、调试过程和运行结果5、程序的主要部分及其功能说明6、实验收获体会基本掌握求First和Follow集,懂了构造预测分析表的过程,最后用非递归的预测分析法语法分析,并能得到出错的地方。在分析时候构造的语法树,及其显示的基本原理在分析时是一致的。7、改进意见实验的内容较多,单个人独立完成所有任务,较为吃力,占用的课余时间有点过多。