首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
编译原理
marsCatXDU_李经纬
创建于2022-02-11
订阅专栏
编译原理相关学习笔记和技术分享
等 12 人订阅
共17篇文章
创建于2022-02-11
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
编译原理笔记1:概述编译相关的基本知识
内容整理自西安电子科技大学 王小兵、张南、鱼滨老师的编译原理课程。 词法分析:编程语言的语句,由一堆堆的单词组成——比如变量类型名、变量名、函数名、值、符号等。既然我们要让机器来分析源程序然后编译,那么就需要首先让计算机能够明白我们写的语句是什么意思,而理解语句的第一步就是理解…
编译原理笔记2:词法分析基础与模式的形式化描述
词法分析,是词法分析器将源程序转化为线性记号流的过程。该过程中会对各种符号进行分类,比如将变量名换为标识符。 根据规则识别输入的序列(词法分析),识别合法单词、指出非法的输入序列。 模式(Pattern): 产生和识别元素的规则。也就是定义的词法规则; 记号(Token): 按…
编译原理笔记3:有限自动机
编译,是把人能看懂的代码翻译成机器能看懂的指令(即,机器语言)的过程,说白了核心任务其实就是搞个翻译,把一堆字符串搞成二进制流罢了。想要翻译,就要先搞懂语言的含义,这就需要进行【词法分析、语法分析、语义分析】这三步。词法分析器要干的,就是这第一步的词法分析——读取并识别我们写下…
编译原理笔记4:从正规式到词法分析器(1):构造词法分析器的一般步骤、从正规式到 NFA
为每个正规式构造一个 NFA ,这个 NFA 识别正规式表示的正规集(即,将正规式转成 NFA。正规式和NFA在这里就描述同一个正规集了,他们两个是等价的); 从 上一步 得到的 DFA 来构造词法分析器。 在上面的步骤中,我们通过 NFA 构造 DFA 而非直接构造 DFA …
编译原理笔记5:从正规式到词法分析器(2):NFA 记号识别、确定化、并行算法、子集法构造DFA
之前的文章中写过的 “用一个输入字符串在一个 NFA 中逐个尝试各种路径、最终找到一条从初态到终态” 的方法被称为“NFA识别记号的串行方法”,然而这种方法效率着实不高——一条路走不通,要退回去重新走(也就是回溯),从而产生大量的无效计算。 为了解决效率问题,我们可以改变思路,…
编译原理笔记6:从正规式到词法分析器(3):DFA最小化、词法分析器的构造、Lex 使用示例
关于星闭包的补充:一个语言被认为是所有可能字的子集。所有可能字的集合可以被认为是所有可能的字符串串接的集合。 DFA 最小化的过程,就是通过某些等效转换减少原 DFA 状态数的过程——这里的“等效转换”,就是对多余的状态进行合并。 那,什么叫多余?这里的多余,指的是对于同样的输…
编译原理笔记7:语法分析(1)语法分析器的任务、语法错误的处理
检查输入中的语法 / 词法错误,并调用出错处理程序进行相应的处理。 源程序中的错误可以分为词法/语法错误、语义错误两类。前者主要形式是命名不合法、关键字书写错误、语法结构有问题(比如缺分号、该配对的东西不配对)等;后者则可分为静态/动态两种,静态例如类型使用错误、参数使用错误等…
编译原理笔记8:语法分析(2)上下文无关文法 CFG 、推导
前几篇博客中说到的词法分析,做的是从 【x+y → id+id】 的工作,也就是要将源代码变成一个记号流。语法分析,就是要通过为这个记号流序列(在“龙书”中,该序列被称为“词法单元序列”)构造一棵语法分析树,构造该树的方式就是“推导”(事实上,分析树其实是推导的图形化表示)。 …
编译原理笔记9:语法分析树、语法树、二义性的消除
语法分析树和语法树不是一种东西。习惯上,我们把前者叫做“具体语法树”,其能够体现推导的过程;后者叫做“抽象语法树”,其不体现过程,只关心最后的结果。 语法分析树是语言推导过程的图形化表示方法。这种表示方法反映了语言的实质以及语言的推导过程。 若 A 是某节点的内部标记,且 X1…
编译原理笔记10:语言与文法,正规式转CFG,正规式和CFG,文法、语言与自动机
对语言进行形式化描述的规则叫文法。 词法规则、语法规则都以形式化的方法对语言进行描述,这样的规则就叫文法。在使用 lex 的时候,我们就可以使用文法来简单地定义和修改语言。 前几篇笔记中我们比较细致地研究了正规式,当时我们用正规式来描述词法规则,然后根据正规式构造可以识别由该正…
编译原理笔记11:自上而下语法分析(1)基础概念、左递归和公共左因子处理、递归下降分析(咕咕咕)
内容整理自西安电子科技大学 王小兵、张南老师的编译原理课程。 词法分析,是把源程序分析成记号流,识别其中的单词。 语法分析,是要分析词法分析产生的记号流中的语法结构是否正确——对词法分析得到的记号流进行分析,以确认其是不是一个可以由我们定义好的文法推出来的句子。如果语法结构正确…
编译原理笔记12:自上而下语法分析(2)非递归预测分析器、FIRST & FOLLOW 集合计算
内容整理自西安电子科技大学 王小兵、张南老师的编译原理课程。 使用预测分析器进行的自上而下分析是非递归的。预测分析器模型其实是一种 PDA(下推自动机,Pushdown Definite Automata),其结构如下图所示 上图中的“有限状态转移控制”类似于词法分析中的自动机…
编译原理笔记13:自上而下语法分析(3)构造预测分析表、LL(1) 文法
预测分析表的作用,是为推导的进行指明方向——我们用当前下推栈栈顶和读写头所指向的符号的组合(即当前的状态),去查询预测分析表,以确定推导的下一步该向着何种方向前进。 推导应该前进的方向,由 FIRST、FOLLOW 集合说明——这两个集合能够说明,我们可以通过怎样的方式来一步步…
编译原理笔记14:自下而上语法分析(1)短语、句柄,规约,移进规约分析器的工作模式
在分析的过程中,每一步都总是尝试在句型中寻找一个能够被替换为产生式左部的子串。就这样一步步向上去替换,最终变成一个开始符号。 而,由于我们对记号流的扫描是从左到右的,故我们【尝试寻找句型中能够被替换为产生式左部的子串,并不断进行替换】的过程也是从左到右的。这样从记号到开始符号一…
编译原理笔记15:自下而上语法分析(2)LR 分析基础、LR 分析表、LR(0) 分析表
分析表复杂,难以手工构造。 LR 分析表和驱动器是 LR 分析的核心。 分析表分为两个部分,分别是【动作表(Action)】和【转移表(goto)】。 转移表的列首是文法中的非终结符,转移表中的数字是状态号。 #0E1:# 和 0 是配对的,E 和 1 是配对的。E 后面的 1…
编译原理笔记16:自下而上语法分析(3)构造 DFA、DFA 对下一步分析的指导(有效项目)
看了前面的内容,我们已经了解到:分析表和驱动器算法,是 LR 分析器的核心。 在分析的过程中,语法分析器总是根据栈顶的状态、当前剩余输入的第一个终结符查询分析表,以确定改变格局的动作并执行,实现对栈和剩余输入的内容的修改,从一个格局转移到另一个格局,如此往复直至分析完毕(或报错…
编译原理笔记17:自下而上语法分析(4)LR(0)、SLR(1) 分析表的构造
如下图所示就不是一个 LR(0) 文法,红框状态中的项目中均存在移进-规约冲突,且均是上面的项目为规约项、下面的项目为移进项。 假定 C = {I0, I1, ... , In} (aka. LR(0) 项目规范族、DFA 状态集) 然后令每个项目集 Ik 的下标 k 作为分析…