精品资料
3.1目的和要求
1、掌握LL(1)语法分析的基本原理和方法。 2、掌握相应数据结构的设计方法。
3.2实验环境
Windows 7 + DEVC++6.0
3.3实验准备
首先将下列算术表达式文法 E-->E+T|T
T-->T*F|F F-->(E)|i
改写文法为LL(1)文法;构造LL(1)预测分析表。 解:1)该文法为左递归文法,设非终结符A,B;
E=〉TA
A=〉+TA|ε
T=>FB B=>*FB|ε F=>(E)|i
2)计算FIRST,FELLOW,SELECT集:
可编辑修改
精品资料 E=〉TA A=>+TA A=>ε T=>FB B=>*FB B=>ε F=>(E) F=i
FIRST {( , i) {+} {ε} { (, i } {* } {ε} {( } {i} FELLOW {#, ) } {# , ) } ESLECT {( , i) {+} {# , ) } {+ ,#, ) } {+ ,#, ) } { (, i } {* } {+ ,#, ) } {*, +, #, ), } {( } {i} 因为A,B,F的的两个产生式的选择集都没有交集,所以,该文法为LL(1)文法。、
3)构造预测分析表 E A T B F i TA FB i ( TA FB (E) ) ε ε + +TA ε * *FB # ε ε 4)给出i+i的预测分析过程。
可编辑修改
精品资料 步骤 1 2 3 4 5 6 7 8 9 10 11 12 13
分析栈 #E #AT #ABF #ABi #AB #A #AT+ #AT #ABF #ABi #AB #A #
输入串栈 下一步动作 i+i# TA逆序替换E i+i# FB逆序替换T i+i# i替换F i+i# i匹配成功,出栈 +i# B出栈 +i# +TA逆序替换A +i# +匹配成功,出栈 i# FB逆序替换T i# i替换F i# i匹配成功,出栈 # B出栈 # A出栈 # acc 3.4实验内容及步骤
1、根据预测分析表编写预测分析程序yuce。
2、编译成功后,提示输入符号串,用回车键查看输出的结果。
可编辑修改
精品资料
3、比较自己分析的结果和屏幕上的输出结果。
3.5实验小结
1、得到的经验。 2、遇到的主要问题。 3、改进方案。 自拟LL1文法G[A]: E=>aAE E=>b A=>bA A=>ε
1) 计算FIRST,FOLLOW,SELECT集。
可编辑修改
精品资料 E=>aAE E=>b A=>bAc A=>ε FIRST {a,} {b} {b} {ε} FOLLOW {#} SELECT {a,} {b} {#,c} {b} {#,c} 2) 构造预测分析表。 E A E=>aAE =>abAcE =>abcb
3) 给出abcb的预测分析过程。 步骤 1 2 3 4 5 分析栈 #E #EAa #EA #EcAb #EcA 输入串栈 下一步动作 abcb# aAE逆序替换E abcb# a匹配成功,出栈 bcb# bAc逆序替换A bcb# b匹配成功,出栈 cb# A出栈 a aAE b b bAc c ε ε # ε 可编辑修改