三地址代码是编译原理语法分析后的中间语言的一种,这是我刚完成的三地址代码生成器,符合的语法规则及其语义规则如下(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
输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,,否则输出“输入有误,输入了错误的符号:‘ ’”。 例如: 输入 {height=2;}# 输出 { ID= NUM;} =>simpleexpr = NUM =>multexprprime = empty =>multexpr = simpleexpr multexprprime =>assgstmt = ID=arithexpr; =>stmt = assgstmt =>stmts = empty =>stmts = stmt stmts =>compoundstmt = { stmts } =>program = compoundstmt 接受! 输入 {aa}# 输出 { ID}输入有误,输入了错误的符号:‘}’
2019-12-21 19:28:51 49KB LR(0) 语法分析
1
分析语法功能,输出字符流,中间代码生成,递归子程序法
2019-12-21 19:28:48 66KB 语法分析 pl0
1
编译原理课程设计。 里面附有完整的C Minus词法分析器和语法分析器。 代码注释相当详细! 并且附有课程设计的报告。 词法分析器采用表驱动构造。 语法分析器采用LL1,文法为手动输入的文件,即可处理多种不同的文法。并生成相应的分析表,根据输入待分析文件生成对应的抽象语法树。 看了觉得不错一定给好评哦!
2019-12-21 19:28:45 3.16MB 词法分析 语法分析 编译原理 CMinus
1
1、输入如下正确的常量说明串: const count=10,sum=81.5,char1=‘f’,max=169,str1=“h*54 2..4S!AAsj”, char2=‘@’,str2=“aa!+h”; 输出: count(integer,10) sum(float,81.5) char1(char, ‘f’) max(integer,169) str1(string,“h*54 2..4S!AAsj”) char2(char, ‘@’) str2(string,“aa!+h”) int_num=2; char_num=2; string_num=2; float_num=1. 2、输入类似如下的保留字const错误的常量说明串: Aconstt count=10,sum=81.5,char1=‘f’; 输出类似下面的错误提示信息: It is not a constant declaration statement! Please input a string again! 3、输入类似如下含常量名或常量值错误的常量说明串: const count=10,12sum=81.5,char1=‘ff’,max=0016; 输出类似下面的错误提示信息: count(integer,10) 12sum(Wrong! It is not a identifier!) char1(Wrong! There are more than one char in ‘’.) max(Wrong! The integer can’t be started with ‘0’.) int_num=1; char_num=0; string_num=0; float_num=0.
2019-12-21 19:28:14 3KB 编译原理
1
c++ ,词法分析器, 编译原理, c语言的词法分析,代码详细,很易懂
2019-12-21 19:27:38 11KB c++ 词法分析器 编译原理
1
借助于词法分析程序提供的分析结果,编写一个算符优先语法分析程序,程序能进行语法结构分析和错误检查,并产生相应的归约信息。同时给出出错信息和错误类型,从而加深对语法分析的理解。
2019-12-21 19:27:08 242KB 编译原理
1
四川大学 编译原理课程设计 C minus语法分析器 纯代码 VS2013版
2019-12-21 19:26:50 37KB 四川大学 编译原理
1
手工构造一个能够识别 C语言的所有典型单词,如:标识符、数字、运算 符,和 if、while 等保留字的确定有限自动机,并写出对应该自动机的程 序;然后以一个简化的 C语言程序为输入文件,通过所设计的基于上述自 动机的词法分析程序获得输入文件中的各个单词及其内码对照表,并以文 件形式保存结果(也就是TOKEN序列) 。
2019-12-21 19:25:53 112KB 编译原理 最终为cpp 词法分析器
1
使用lex语言编写一个词法分析器,在文档中已说得很清楚,有什么问题可以留言,大家一起探讨探讨,其实对于lex语言我也有不懂的地方,其中我想把关键字给识别出来就没做出来,所以有会的可以告诉一下啊,先谢了
2019-12-21 19:25:40 184KB flex lex 词法分析器
1