
基于语法分析器的三地址代码生成器。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
三地址代码是一种编译原理中用于中间表示的语言,它是在语法分析之后生成的。我最近完成了一款三地址代码生成器,该生成器能够根据语法规则和语义规则正确地生成三地址代码。以下是该生成器的语法规则和语义规则:
产生式:
S → if C then S1 else S2,这条规则尚未实现,其余部分均已完成,可能存在一些潜在的错误,欢迎大家提出宝贵的建议。
语义规则:
S → id = E
S.code = E.code || gen(id.place’:=’E.place)
S → if C then S1
C.true = newlabel; C.false = S.next;
S1.next = S.next;
S.code = C.code || gen(E.true’:’) || S1.code
S → if C then S1 else S2
C.true = newlabel; C.false = newlabel;
S1.next = S2.next =S.next;
S.code = C.code || gen(E.true’:’) || S1.code || gen(‘goto’S.next)|| gen(E.false’:’) || S2.code
S → while C do S1
S.begin = newlabel; C.true = newlabel;
C.false = S.next; S1.next = S.begin;
S.code = gen(S.begin’:’) || C.code || gen(E,true’:’) || S1, code || gen(‘goto’S,begin);
C → E1 > E2
C, code= E1, code|| E2, code||gen(ifE1,place’>’E2,place’goto’C,true)||gen(gotoC,false)
C → E1 < E2
C, code= E1, code|| E2, code||gen(ifE1,place’<’E2,place’goto’C,true)||gen(gotoC,false)
C → E1 = E2
C , code= E1 , code|| E2 , code||gen(ifE 1 , place ’=’E 2 , place ’goto ’C , true)||gen(gotoc false )
E → E 1 + T
E . place= newtemp ; E . code= E 1 . Code||T . Code||gen (e . place ‘:= ‘e 1 . place ‘+ ‘t . place ) ;
E → E 1 - T ; //同上类似逻辑替换说明与之前一致。
E→ T ; //同上类似逻辑替换说明与之前一致。
T→ F ; //同上类似逻辑替换说明与之前一致。
T→ T 1 * F ; //同上类似逻辑替换说明与之前一致。
T→ T 1 / F ; //同上类似逻辑替换说明与之前一致。
F→ ( E ) ; //同上类似逻辑替换说明与之前一致。
F→ id ; //同上类似逻辑替换说明与之前一致。
F→ int8;//同上类似逻辑替换说明与之前一致。
F→ int 10;//同上类似逻辑替换说明与之前一致。
F→ int 16;//同上类似逻辑替换说明与之前一致。
全部评论 (0)


