语法制导方法的组成.PPT

语法制导方法的组成

* 5 表达式的中间代码生成 简单表达式的LL(1)文法 (1)E →T Es (2)Es →? (3)Es →+ T Es (4)Es →- T Es (5)T → P Ts (6)Ts→? (7)Ts →* P Ts (8)Ts →/ P Ts (9)P →C (10)P →id (11)P →( E ) * 简单表达式的带有动作符的LL(1)文法 (1)E →TEs (2)Es →? (3)Es →+T#GenCode(+)#Es (4)Es →-T#GenCode(-)#Es (5)T → PTs (6)Ts→? (7)Ts →*P#GenCode(*)#Ts (8)Ts →/P#GenCode(/)#Ts (9)P →C#Push(C)# (10)P →id#Push(id)# (11)P →(E) 当遇到常量C和简单变量id时,把它们的语义信息压入语义栈; 当处理完一个运算符(+,-,*,/)的右分量时,该运算符的左、右运算分量已经分别存放在语义栈 Sem 的次栈顶和栈顶的位置,因此可以生成相应的运算符的四元式,并把运算结果的语义信息压入语义栈。 * 简单表达式的LL(1)分析表 C id ( ) + - * / # E 1 1 1 Es 2 3 4 2 T 5 5 5 Ts 6 6 6 7 8 6 P 9 10 11 产生式 Predict集 (1 ) E → T Es C, id , ( (2)Es → ? #, ) (3)Es → + T Es + (4)Es → - T Es - (5)T → P Ts C, id , ( (6)Ts→? #, ),+,- (7)Ts → * P Ts * (8)Ts → / P Ts / (9)P → C C (10)P → id Id (11)P → ( E ) ( * 分析栈S 输入流T 动作 # E x + y * z # LL[ E ,id ] = [1] # EsT x + y * z # LL [ T ,id ] = [5] # EsTs P x + y * z # LL [ P ,id ] = [10] # EsTs #Push ( id )# id x + y * z # Match # EsTs #Push ( id )# + y * z # #Push ( id )# # EsTs + y * z # 表达式 x + y * z 的中间代码生成过程(1) (1)E → T Es { C , id, ( } (2)Es →? { # , ) } (3)Es → + T # GenCode ( + ) # Es { + } (4)Es → - T # GenCode ( - ) # Es { - } (5)T → P Ts {C, id ,( } (6)Ts→? { #, ), +, - } (7)Ts → * P # GenCode ( * ) # Ts {* } (8)Ts → / P # GenCode ( / ) # Ts { / } (9)P → C # Push ( C ) # { C } (10)P → id # Push ( id ) # { id } (11)P → ( E ) { ( } 语义栈Sem intptr (x,level,off, dir) Top Top Type Form * 分析栈S 输入流T

文档评论(0)

1亿VIP精品文档

相关文档