一个能够进行语法分析并生成三地址代码的微型编译程序,可以运行
2021-05-31 12:14:02 21KB 三地址代码
1
输入数据示例: while (a3+15)>0xa do if x2 = 07 then while y<z do y = x * y / z; 正确结果:等效的三地址代码序列 L1: t1 := a3 + 15 if t1 > 10 goto L2 goto L0 L2: if x2 = 7 goto L3 goto L1 L3: if y < z goto L4 goto L1 L4: t2 = x * y t3 = t2 / z y = t3 goto L3 goto L1 L0: // S.next
2021-03-29 13:05:16 3KB 实验二:语法
1
利用之前的词法和语法分析器的东西做的具体要求见word文档用turbo c3.0写的 别的应该都能打开
2019-12-21 22:16:12 31KB 三地址 生成器 编译原理
1
这是一个关于C语言的一个编译器设计的一部分,生成了三地址中间代码,C++实现。应该是不错的,您下了不后悔。
2019-12-21 21:33:00 188KB 编译原理 三地址 中间代码 C
1
简单的编译原理程序,实现抽象语法树的绘制和三地址代码的输出
2019-12-21 21:24:58 19.61MB 编译原理 语法树 三地址代码
1
原程序分为 .cpp文件 与.h文件 运行时请分开 源程序可直接运行 源程序 已经包含了词法分析与三地址代码生成程序源代码
2019-12-21 21:23:55 9KB 编译原理 C语言 词法分析
1
输入数据示例: while (a3+15)>0xa do if x2 = 07 then while y 10 goto L2 goto L0 L2: if x2 = 7 goto L3 goto L1 L3: if y < z goto L4 goto L1 L4: t2 = x * y t3 = t2 / z y = t3 goto L3 goto L1 L0: // S.next
1
编译技术第6次上机内容 目的:充分理解并掌握中间代码生成的相关方法,用C++程序实现。 要求: 1.以S属性的语法制导定义为基础,将下列产生式附上一定的语义规则。即在原来语法分析的基础上插入相应的语义动作:将输入串翻译成三地址代码序列。 E ® E1 + T E ® T T ® T1 * F T ® F F® (E) F ® digit F ® id 2.以词法分析和语法分析部分的上机结果为基础,添加语义分析部分。即以LR文法为基础。当进行产生式归约时执行对应的语义动作。 3.输入:(-b+c*d)+c*d 输出: t1= -b t2= c*d t3=t1+t2 t4= c*d t5=t3+t4 4. 若输入有误,如:a++b**c(d+e) 则应提示:+后面缺少运算对象, *后面缺少运算对象, c后面缺少运算符, 请重新输入! 扩展: 将三地址代码优化为DAG代码 例如: 输入: (-b+c*d)+c*d 输出: t1= -b t2= c*d t3=t1+t2 t5=t3+t2
2019-12-21 20:13:05 8KB 大工 软院 编译原理 三地址代码
1
三地址代码是编译原理语法分析后的中间语言的一种,这是我刚完成的三地址代码生成器,符合的语法规则及其语义规则如下(S→if C then S1 else S2,这条规则没有加,其余都已完成,也许还有bug,欢迎大家给予指正):产生式 语义规则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.codeS → 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.codeS → 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(‘if’E1.place’>’E2.place’goto’C.true) ||gen(‘goto’C.false)C → E1 < E2 C.code = E1.code || E2.code ||gen(‘if’E1.place’<’E2.place’goto’C.true) ||gen(‘goto’C.false)C → E1 = E2 C.code = E1.code || E2.code ||gen(‘if’E1.place’=’E2.place’goto’C.true) ||gen(‘goto’C.false)E → E1 + T E.place = newtemp;E.code = E1.code||T.code||gen(E.place’:=’E1.place’+’T.place)E → E1 - T E.place = newtemp; E.code = E1.code || T.code ||gen(E.place’:=’E1.place’-’T.place)E → T E.place = T.place; E.code = T.codeT → F T.place = F.place; T.code = F.codeT → T1 * F T.place = newtemp;T.code = T1.code || F.code ||gen(T.place’:=’T1.place’*’F.place)T → T1 / F T.place = newtemp; T.code = T1.code || F.code ||gen(T.place’:=’T1.place’/’F.place)F → ( E ) F.place = E
2019-12-21 19:29:02 3KB 三地址 编译原理 语法分析器
1
编译原理第6次上机 将输入代码转化为三地址代码
2019-12-21 19:22:37 8KB 编译原理 上机 三地址代码
1