![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编译原理
独酌101112
热爱前端的一个小白
展开
-
简单的代码生成程序
通过三地址代码序列生成计算机的目标代码,在生成算法中,对寄存器的使用顺序为:寄存器中存有 > 空寄存器 > 内存中存有 > 以后不再使用 > 最远距离使用 Input 单组输入,给定输出的三地址代码的个数和寄存器的个数.所有的变量为大写字母,寄存器的数量不超过9 Output 参照示例格式输出,不需要将最后的寄存器中的值写回内存 不再使用变量不用写回内存 Sample Input 4 2 T:=A-B U:=A-C V:=T+U W:=V+U Sample Output LD R0原创 2020-10-08 22:13:22 · 320 阅读 · 0 评论 -
DAG优化
大家都学过了代码优化,其中有一个DAG优化,这次我们就练习这个操作。 Input 输入第一行为一个整数n(n < 100),表示该组输入的表达式的个数 之后n行为表达式,每个变量为一个字母,表达式仅包括二元运算 + - * / 例如:A=B+C Output 通过构造DAG图,进行代码优化,只需要保留AB,删除无用变量,删除变量时,尽量保留最早出现的变量。 PS:保证AB的值不同 Sample Input 3 A=B+C B=B+B A=C+C Sample Output B=B+B A=C+C原创 2020-10-07 21:51:18 · 653 阅读 · 0 评论 -
翻译布尔表达式
大家都学过了布尔表达式的翻译,其中有一个拉链-回填技术,这次我们就练习这个技术。 Input 输入为一行字符串,例如: a < b or c < d and e < f 每个符号都用空格间隔。 其中逻辑运算符包含 and 和 or , 关系运算符包含 < 、> 、<= 、 >= 、== 、 != 。 Output 假链跳到0,真链跳到1,表达式序号从100开始排。 Sample Input a < b or c < d and e < f Sam原创 2020-10-06 22:24:33 · 189 阅读 · 0 评论 -
小C语言--词法分析程序
本栏目声明:为阿宁和学弟们以及正在学习编译原理的同学们总结的编译原理上机题,同时也攒一波人品。 PS:本栏目代码更新于去年这个时间段,如果进行数据更新导致代码未能AC,还请见谅。 小C语言文法 <程序>→<main关键字>(){<声明序列><语句序列>} <声明序列>→<声明序列><声明语句>|<声明语句>|<空> <声明语句>→<标识符表>; <标识符表原创 2020-10-05 20:52:30 · 157 阅读 · 0 评论 -
表达式语法分析——递归子程序法
递归子程序法是一种确定的自顶向下语法分析方法,要求文法是LL(1)文法。它的实现思想是对应文法中每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选式时能够按LL(1)形式唯一地确定选择某个候选式进行推导。请根据下面的表达式LL(1)文法,构造递归子程序,完成对表达式的语法分析。 表达式文法如下: E→TG G→+TG | ε T→FS S→*FS | ε F→(E) | i 对于给定的输入串(长度不超过50个符号),请输出分析过程中用到的所有产生原创 2020-10-05 20:54:38 · 689 阅读 · 0 评论