编译原理

2022年1月SCNU编译原理期末原题回忆

  1. 我们知道正则表达式是不能表示下面的情形的:一个b的前后跟着同样个数的a,运用编译原理知识,给出两种解决办法。
  2. 写出DFA最小化的算法(这个和下面的算法题真的是写实验的代码)
  3. 写出消除直接和间接坐公因子的算法
  4. 写出有加减乘除取余的后缀表达式的文法并画出LR(1)DFA图,构造其LALR(1)分析表
  5. 写出正则表达式的文法,并写出它生成四元组时相应的语义动作
  6. TINY语法题:
    (1) 使用自顶向下方法分析时,希望给TINY语言添加for循环,需要对原文法进行哪些改造?请写出改造后的文法规则
    (2) 请写出相应的生成语法树时的代码

这里也附上我的github地址,里面有四个实验,完成程度不高请见谅,并附上我同学用C#写的开源的语法分析完全体(包括LL1,LR0,SLR1,LR1,LALR1;且全部支持查看分析表)

四个实验分别是:

  • 实验一:Scanner
  • 实验二:正则表达式转NFA转DFA转最小化DFA并生成相应的词法分析程序
  • 实验三:LL(1)分析器
  • 实验四:TINY+语法树生成器(即TINY文法改造)

p.s:实验详情见我的GIthub仓库中的readme说明

我的Github地址:https://github.com/hjy2000?tab=repositories

我同学的项目地址:https://github.com/lgbgbl/Syntax-Analysis

最后告诫同学们,千万不要下载直接抄,自己看着代码实现一次才是对期末的最好保障。

2022/03/05更新:

补充一个0xFFFF上发现的2021年的考题,链接如下:

https://blog.charfole.top/2021%E5%B9%B41%E6%9C%88%E7%BC%96%E8%AF%91%E5%8E%9F%E7%90%86%E8%80%83%E9%A2%98%E6%B1%87%E6%80%BB.html