2024年5月25日发(作者:)

递归下降分析程序实验报告

1.实验内容

编程实现给定算术表达式的递归下降分析器。

算术表达式文法如下:

EE+T | T

TT*F | F

F(E) | i

2.实验分析

(1 ) 对所给表达式进行分析,如果是左递归则对算术表达式进行改写消除其左递归。

改写的算术表达式如下:

E→TE’

E’→+TE’| ε

T→FT’

T’→*FT’ | ε

F→(E) | i

( 2) 写出上面表达式的FIRST集和FOLLOW集,然后对有多个规则的FIRST集求并

集,看是否等于空集;对规则右部出现空串的FIRST集与FOLLOW集求并集,看是否等

于空集。

对E’:FIRST(+TE′) ∩FOLLOW(E′)={+,ε} ∩{#, )}=Φ

对T’:FIRST(*FT′) ∩FOLLOW(T′)={* ,ε} ∩{+,#, )}=Φ

对F: FIRST(i) ∩FIRST( (E) )={i} ∩{ ( }=Φ

故由上面可知此改写后的文法是LL(1)文法。

(3)对上述LL(1)文法编程。编程规则如下:

①当遇到终结符a时,则编写语句

If(当前读来的输入符号==a)读下一个输入符号

②当前遇到非终结符A时,则编写语句调用A()。

③当前遇到A→ε规则时,则编写语句

If(当前读来的输入符号不属于FOLLOW(A)) error()