![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编译原理
Meskjei
爱那么短 而回忆那么长
展开
-
从NFA到DFA
例:NFA:对应的转换表:状态\输入abcA{A,B}∅\emptyset∅∅\emptyset∅B∅\emptyset∅{B,C}∅\emptyset∅C∅\emptyset∅∅\emptyset∅{C,D}D∅\emptyset∅∅\emptyset∅∅\emptyset∅如果转成DFA,那么根据NFA的转换图,遇...原创 2019-01-27 16:03:58 · 3558 阅读 · 0 评论 -
非递归的预测分析法
文章目录概念例子算法流程预测分析法实现步骤概念非递归的预测分析不需要为每个非终结符编写递归下降过程,而是根据预测分析表构造一个自动机,也叫表驱动的预测分析。通过增加一个栈,来增强自动机的识别能力。例如,$L=\{a^nb^n|n\ge 1\}$。这个产生式识别一切以先是a后是b 的句子,而且a与b的个数一致。若是用有穷状态机则无法实现。若是增加了一个栈,则可以在每接收到一个a之后将a进...原创 2019-05-05 21:55:48 · 1660 阅读 · 0 评论 -
自底向上的语法分析
文章目录概念移入-规约分析工作过程可采取的动作例子存在的问题概念从分析树的 底部(叶节点)向 顶部(根节点) 方向构造分析树可以看成是将输入穿$w$规约为文法开始符号S的过程自顶向下的语法分析采用最左推导方式自底向上的语法分析采用最左规约方式(反向构造最右推导)移入-规约分析工作过程在对输入串的一次从左到右扫描过程中,语法分析器将零个或多个输入符号移入到栈的顶端,直到它可以对...原创 2019-05-05 21:57:20 · 3857 阅读 · 0 评论 -
LR(0)项目
文章目录项目的概念增广文法文法中的项目后继项目LR自动机项目的概念右部某位置标有圆点的产生式称为相应文法的一个 ·LR(0)项目(简称为项目)。例如:$S \rightarrow{bBB}$$S \rightarrow{·bBB}$为移进项目$S \rightarrow{b·BB}$、$S \rightarrow{bB·B}$为待约项目。$S \rightarrow{bBB·}$为规...原创 2019-05-10 14:52:20 · 3070 阅读 · 0 评论 -
语法制导翻译方案SDT
文章目录概念将S-SDD转换为SDTS-SDD的SDT实现将L-SDD转换为SDTL-SDD的SDT实现概念语法制导翻译方案SDT是在产生式右部嵌入了程序片段(称为语义动作)的CFG例如:SDT可以看做是SDD的具体实施方案。在两种情况下,SDT可以在语法分析过程中实现:基本文法可以使用LR分析技术,且SDD为S属性基本文法可以使用LL分析技术,且SDD为L属性将S-SDD转...原创 2019-05-15 21:49:45 · 3001 阅读 · 0 评论 -
语法制导翻译概述
文章目录部分概念语义翻译语法制导翻译语法制导翻译的基本思想语法制导翻译的相关概念语法制导定义(Syntax-Directed Definitions,SDD)语法制导翻译方案(Syntax-Directed Translation Scheme,SDT)SDD与SDTSDDSDT部分概念语义翻译语义分析的结果通常用中间代码来表示,于是语义分析与中间代码生成这两个步骤合称语义翻译。语法制导翻...原创 2019-05-11 10:03:18 · 2851 阅读 · 0 评论 -
语法制导定义SDD
文章目录概念文法符号的属性综合属性继承属性例子属性文法概念语法制导定义SDD是对CFG的推广将每个文法符号和一个语义属性集合相关联将每个产生式和一组语义规则相关联,用来计算该产生式中各文法符号的属性值文法符号的属性综合属性在分析树节点N上的非终结符A的综合属性只能通过N的子节点或N本身的属性值来定义。终结符可以具有综合属性,终结符的综合属性值是由词法分析器提供的词...原创 2019-05-11 18:05:41 · 3278 阅读 · 0 评论 -
语法制导翻译概述
文章目录部分概念语义翻译语法制导翻译语法制导翻译的基本思想语法制导翻译的相关概念语法制导定义(Syntax-Directed Definitions,SDD)语法制导翻译方案(Syntax-Directed Translation Scheme,SDT)SDD与SDTSDDSDT部分概念语义翻译语义分析的结果通常用中间代码来表示,于是语义分析与中间代码生成这两个步骤合称语义翻译。语法制导翻...原创 2019-05-11 18:06:38 · 7539 阅读 · 0 评论 -
SDD的求值顺序
文章目录依赖图属性值的计算顺序语义规则建立了属性之间的依赖关系,在对语法分析树节点的一个属性求值之前,必须首先求出这个属性值所依赖的所用属性值。依赖图依赖图是一个描述了分析树种节点属性间依赖关系的有向图分析树中每个标号为X的节点的每个属性a都对应着依赖图中的一个结点如果属相X.a的值依赖于属性Y.b的值,则依赖图中有一条从Y.b的结点指向X.a的结点的有向边例如:属性值的计算顺...原创 2019-05-11 18:50:40 · 811 阅读 · 0 评论 -
S-属性定义与L-属性定义
文章目录S-属性定义L-属性定义S-属性定义仅仅使用综合属性的SDD称为S属性的SDD,或S-属性定义、S-SDD。例如:如果一个SDD是S属性的,可以按照语法分析树节点的任何自底向上顺序来计算它的各个属性值S-属性定义可以在自底向上的语法分析过程中实现L-属性定义直观含义:在一个产生式所关联的各属性之间,依赖图的边可以从左到右,但不能从右到左。正式定义:一个SDD是L...原创 2019-05-11 20:00:43 · 14100 阅读 · 0 评论 -
LR(0)分析表的构造
文章目录文法规范句型的活前缀LR(0)项目构造识别文法所有规范举行活前缀DFA的方法定义闭包函数(CLOSURE)定义状态转移函数(GO)构造识别文法规范语句活前缀DFA的方法LR(0)分析表的构造文法规范句型的活前缀字符串的前缀是指字符串的任意首部,例如字符串"abc"的前缀有ϵ\epsilonϵ、a、ab、abc。规范语句活前缀是指规范语句的前缀,这种前缀不包括句柄右边的任何符号在...原创 2019-05-26 08:30:31 · 14771 阅读 · 0 评论 -
SLR(1)分析法
文章目录SLR分析法的基本思想SLR(1)分析表的构造LR(0)文法要求文法的每一个LR(0)项目都不含有冲突的项目,这个条件比较苛刻。对于大多数程序设计语言来说,一般都不能满足LR(0)文法的条件。例如:不难看出在状态I2I_2I2中既存在规约项目,又存在移进项目,因而这个文法不是LR(0)文法。为了对语言句子进行确定性的分析,需要解决冲突。可以采用对含有冲突的项目集向前查看一个输入...原创 2019-05-26 09:52:11 · 28805 阅读 · 4 评论 -
类型表达式
文章目录类型表达式基本类型类型构造符数组构造符指针构造符笛卡尔乘积构造符`$✖$`函数构造符`$\rightarrow$`记录构造符类型表达式基本类型基本类型是类型表达式integerrealcharbooleantype_error(出错类型)void(无类型)可以为类型表达式命名,类型名也是类型表达式,将类型构造符作用于类型表达式可以构成新的类型表达式类型构造符...原创 2019-05-17 10:16:37 · 2355 阅读 · 0 评论 -
预测分析中的错误处理
以下两种情况可以检测到错误栈顶的终结符和当前输入符号不匹配栈顶非终结符与当前输入符号在预测分析表对应项中的信息为空。文章目录预测分析中的错误恢复恐慌模式例子预测分析中的错误恢复恐慌模式忽略输入中的一些符号,直到输入中出现由设计者选定的同步词法单元(synchronizing token)集合中的某个词法单元。其效果依赖于同步集合的选取。集合的选取应该使得语法分析器能从实...原创 2019-04-27 17:07:10 · 1758 阅读 · 0 评论 -
非递归的预测分析法
文章目录概念例子算法流程预测分析法实现步骤概念非递归的预测分析不需要为每个非终结符编写递归下降过 程,而是根据预测分析表构造一个自动机,也叫表驱动的预测分析。通过增加一个栈,来增强自动机的识别能力。例如,$L=\{a^nb^n|n\ge 1\}$。这个产生式识别一切以先是a后是b 的句子,而且a与b的个数一致。若是用有穷状态机则无法实现。若是增加了一个栈,则可以在每接收到一个a之后将a...原创 2019-04-27 16:24:00 · 3192 阅读 · 0 评论 -
FIRST集和FOLLOW集的计算
文章目录`FIRST`集的计算计算`FIRST(x)`具体算法计算`$X_21,X_2,X_3,...,X_n$`的`FIRST`集FOLLOW集的计算算法FIRST集的计算计算FIRST(x)FIRST(X):可以从X中推导出的所有串首终结符构成的结合。若$X\Rightarrow^*{\epsilon}$,那么$\epsilon \in FIRST(X)$。推导过程:(2)...原创 2019-04-26 17:05:58 · 2921 阅读 · 0 评论 -
编译原理--正则表达式
文章目录定义RE的代数定理正则文法与正则表达式等价语言L={a}{a,b}∗({ϵ}∪({.,_}{a,b}{a,b}∗))L=\{a\}\{a,b\}^*(\{\epsilon \} \cup (\{.,\_\}\{a,b\}\{a,b\}^*))L={a}{a,b}∗({ϵ}∪({.,_}{a,b}{a,b}∗))这个语言是指,由a开头,后接任意长度的a、b串,然后再接空串(代表结束)。或...原创 2019-01-27 16:09:13 · 9165 阅读 · 0 评论 -
编译原理--正则定义
正则定义是具有如下形式的定义序列:d1→r1d_1 \rightarrow{r_1}d1→r1d2→r2d_2 \rightarrow{r_2}d2→r2.........dn→rnd_n \rightarrow{r_n}dn→rn其中:每个did_idi都是一个新符号,它们都不在字母表∑\sum∑中,而且各不相同每个rir_iri是字母表∑∪{d1...原创 2019-01-27 16:12:05 · 1218 阅读 · 0 评论 -
有穷自动机的分类
文章目录FA的分类确定的有穷自动机(DFA)非确定的有穷状态机(NFA)DFA和NFA的等价性FA的分类确定的FA(Deterministic finite automata, DFA)非确定的FA(Nondeterministic finite automata, NFA)确定的有穷自动机(DFA)M=(S,∑,δ,s0,F)M=(S, \sum, \delta,s_0,F)M...原创 2019-01-27 16:15:26 · 960 阅读 · 0 评论 -
从正则表达式到有穷自动机
一般实现的是从正则表达式到DFA的转换而从正则表达式直接转换成DFA是比较困难的,所以一般先转换成NFA(NFA更直观一些)。根据RE构造NFAϵ\epsilonϵ对应的NFA字母表∑\sum∑中符号α\alphaα对应的NFAr=r1r2r=r_1r_2r=r1r2对应的NFAr=r1∣r2r=r_1|r_2r=r1∣r2对应的NFAr=(r1)∗r=(r_1)^*...原创 2019-01-27 16:19:13 · 1677 阅读 · 0 评论 -
文法的形式化定义
文章目录句子的构成规则自然语言的例子文法的形式化定义产生式的简写符号的约定句子的构成规则自然语言的例子<句子>→\rightarrow→<名词短语><动词短语><形容词>→\rightarrow→未用尖括号括起来的部分表示语言的基本符号,尖括号括起来的部分称为语法成分文法的形式化定义G=(VT,VN,P,S)G=(V_T,V_N,P...原创 2019-01-16 20:21:33 · 2486 阅读 · 0 评论 -
语言的定义
文章目录推导(Derivations)和规约(Reductions)句型和句子语言的形式化定义推导(Derivations)和规约(Reductions)给定文法G={VT,VN,P,S}G=\{V_T,V_N,P,S\}G={VT,VN,P,S},如果α→β∈P\alpha \rightarrow{\beta} \in Pα→β∈P,那么可以将符号串γαδ\gamma \alpha \d...原创 2019-01-16 20:23:05 · 1136 阅读 · 0 评论 -
Chomsky文法分类
Chomsky文法分类体系文章目录Chomsky文法分类体系0型文法(Type-0 Grammar)1型文法(Type-1 Grammar)2型文法(Type-2 Grammar)3型文法(Type-3 Grammar)四种文法之间的关系0型文法(Type-0 Grammar)α→β\alpha \rightarrow{\beta}α→β无限制文法/短语结构文法∀α→β∈P\fora...原创 2019-01-16 20:24:49 · 2909 阅读 · 0 评论 -
词法分析阶段的错误处理
文章目录词法分析阶段可检测错误的类型:词法错误检测:错误处理词法分析阶段可检测错误的类型:单词拼写错误:例:int i = 0x3G(16进制数表示错误)、float j = 1.05e(指数表示错误)非法字符:例如~、@等词法错误检测:如果当前状态与当前输入符号在转换表对应项中的信息为空(意为在当前状态下不应该接受到当前接受到的字符)。则报错,并调用错误处理程序。错误处理...原创 2019-02-19 15:53:24 · 11605 阅读 · 0 评论 -
自顶向下分析概述
文章目录自顶向下的分析(Top-Down Parsing)最左推导(Left-most Derivation)最右推导最左推导和最右推导的唯一性最左推导例子自顶向下语法分析的通用形式递归下降分析(Recursive-Descent Parsing)预测分析(Predictive Parsing)自顶向下的分析(Top-Down Parsing)从分析树的顶部(根节点)向底部(叶节点)方向构造...原创 2019-02-25 20:13:14 · 5862 阅读 · 0 评论 -
语法分析---文法转换
文章目录需要文法转换的原因问题1问题2消除直接左递归消除直接左递归的一般形式消除间接左递归需要文法转换的原因问题1例如:文法G:S→aAd∣aBeS \rightarrow{aAd | aBe}S→aAd∣aBeA→cA \rightarrow{c}A→cB→bB \rightarrow{b}B→b输入:a b c当同一非终结符的多个候选式存在共同前缀,将导致回溯现象。问题...原创 2019-02-25 22:02:53 · 1253 阅读 · 0 评论 -
LL(1)文法
文章目录预测分析法的工作过程S_文法(简单的确定性文法)什么时候使用$\epsilon$产生式?非终结符的后继符号集产生式的可选集q_文法串首终结符集LL(1)文法预测分析法的工作过程从文法开始符号触发,在每一步推导过程中根据当前句型的最左非终结符A和当前输入符号a,选择正确的A-产生式。为保证分析的确定性,选出的候选式必须是唯一的。S_文法(简单的确定性文法)特点:每个产生式的右部都...原创 2019-02-26 21:13:57 · 29533 阅读 · 2 评论 -
编译原理--正则文法与正则表达式
对任何正则文法G,存在定义同一语言的正则表达式r对任何正则表达式r,存在生成同一语言的正则文法G正则文法到正则表达式的转换将正则文法中的每个非终结符表示成关于它的一个正则表达式方程,获得一个联立方程组依照求解规则:若x=αx∣βx=\alpha x | \betax=αx∣β(若x=αx+βx=\alpha x + \betax=αx+β),则解为:x=α∗βx=\alpha^*...原创 2019-04-01 06:59:04 · 20058 阅读 · 17 评论 -
LR(1)分析法
SLR(1)分析法只是简单地考察下一个输入符号b是否属于与归约项目A→αA\rightarrowαA→α相关联的FOLLOW(A),但b∈FOLLOW(A)b\in FOLLOW(A)b∈FOLLOW(A) 只是归约的一个必要条件,而非充分条件。假设栈内的符号串为 $ $ \delta\alpha $ ,规约之后变为 $ $\delta A$ ,当前读到的输入为a,若文法中不存在以 $ $\de...原创 2019-05-26 21:15:49 · 13393 阅读 · 2 评论