编译原理
文章平均质量分 71
脱离了高级趣味♂
这个作者很懒,什么都没留下…
展开
-
构造LALR分析表
一、 本文目的\quad 在编译器工具中有lex实现词法分析,有yacc实现LALR分析。\quad 本文目的是手动造轮子,动手实现LALR分析表的自动构造。二、 构造LALR分析表的两种方法首先构造LR(1)分析表(前文已有),合并具有相同核心的LR(1)项集;高效构造LALR项集,算法详见《编译原理(本科教学版)》P162三、 LALR与LR(1)的区分\quad 本文使用的是方法1,虽然耗费空间稍微大一点,但毕竟已有LR(1)分析表在前,基于LR(1)构造LALR会容易很多。在构原创 2021-07-01 23:28:24 · 3013 阅读 · 1 评论 -
C++实现的利用LR(1)分析表对赋值表达式进行语法制导翻译生成四元式及汇编代码
赋值语句的语法制导翻译一、需要的语义过程如下:newtemp()\quad每次调用送回一个代表新临时变量的序号,可认为是送回T1、T2这样的一些临时变量ENTRY(i)\quad用于查变量i的符号表入口地址GEN(OP,ARG1,ARG2,RESULT)\quad产生一个四元式,并填入四元式序列表E.PLACE\quad含义:与非终结符E相关联的语义变量(值),值为某变量的符号表入口地址或临时变量序号二、 赋值表达式文法如下(1)S→A(2)A→i=E(3)E→−E原创 2021-06-02 21:21:20 · 5103 阅读 · 7 评论 -
C++实现LR(1)分析表的构造
构造LR(1)分析表的算法参考了龙书本科教学版:龙书给的例子:(1)S′→S(2)S→CC(3)C→cC∣d\begin{aligned}&(1) S' \rightarrow S \\ &(2) S\rightarrow CC\\&(3) C \rightarrow cC|d \\\end{aligned}(1)S′→S(2)S→CC(3)C→cC∣d以下是用上述文法,程序的输出结果:所得结果一致,理论上对其他文法都是可以自动构造相应的原创 2021-06-02 19:58:54 · 3844 阅读 · 4 评论