首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使没有左递归的上下文无关文法包含左递归(而不改变语法的语言)?

要使没有左递归的上下文无关文法包含左递归,可以通过引入新的非终结符和产生式来实现。下面是一种常见的方法:

  1. 首先,将原始文法中的所有直接左递归消除。对于每个产生式A -> Aα,可以将其拆分为A -> βB和B -> α,其中B是一个新的非终结符,β是一个不包含A的符号串。
  2. 接下来,对于每个非终结符A,检查其所有的产生式是否存在间接左递归。如果存在间接左递归,需要进行进一步处理。
  3. 对于存在间接左递归的非终结符A,可以使用左因子提取的方法来消除。具体步骤如下: a. 找到A的所有产生式中的公共前缀,将其提取为一个新的非终结符B。 b. 将原始产生式中的公共前缀替换为B,并为B添加一个新的产生式B -> α,其中α是原始产生式中去除公共前缀后的部分。 c. 对于原始产生式中以公共前缀开头的产生式,将其替换为B。
  4. 重复步骤3,直到所有的间接左递归都被消除。

通过以上步骤,可以将没有左递归的上下文无关文法包含左递归,而不改变语法的语言。

请注意,以上方法是一种常见的处理方式,但并不是唯一的方法。在实际应用中,可能会根据具体情况采用不同的处理策略。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

编译原理复习总结-耗子尾汁

上下文无关法 一个上下文无关法G是一个四元式 ,其中 :终结符集合(非空) :非终结符集合(非空),且 :文法开始符号, :产生式集合(有限),每个产生式形式为...{1}和{2,4}包含于{0,1}、{2,3,4,5},故{0,1}拆分; {0,1,3,5}没有包含于{0,1}、{2,3,4,5};又状态24经弧a到达状态10,包含于{0,1},应拆24为一组...语法分析 自上向下分析 消除递归 含有递归文法将使自上而下分析过程写入无限循环,如 , 消除递归可以在原产生式中增加一个非终结符,如 改写为(注意 不以 开头):...安利DZ大佬讲解 4.LL(1)文法文法不含递归 ②对于文法中每一个非终结符A各个产生式候选首符集两两不相交 即,若 则 ③对文法每个非终结符A,若它存在某个候选首符集合包含...语义分析和是中间代码产生 中间代码生成对编译器构造意义 便于进行与机器无关代码优化工作; 使编译程序改变目标机更容易; 使编译程序结构在逻辑上更为简单明确。

1.2K30

看懂编译原理:词法语法语义分析阶段 原理

:使用上下文无关语法-文法规则词法分析用是正则表达式(也就是状态机),语法分析用文法规则进行匹配使用文法规则不是正则,是因为单纯正则已经无法表示复杂算数表达式语法ast结构。...无上下文因为预读peektoken只能够用于生成ast,没有额外token作为上下文进行优化ast,优化ast和上下文token信息读取是在语义阶段进行)此处语法分析用是无上下文文法结构 只是为了生成正确...耗时长且优化效果很差因此将ast优化放置在了分析阶段最后一个阶段:语义分析语法分析阶段:递归问题递归问题定义递归问题:匹配加法文法时 由于第二个文法(add+mutil)第一个条件也是加法文法...(也叫回溯)注意:文法结构只表达对应构成规则,对于如何用算法实现文法结构规则是算法事情(如出现递归 说明文法节点结构中第一个条件就是再次判断是否符合该文法父节点,如此循环。)...语法分析阶段使用上下文无关语法产生ast;语义分析阶段通过生成ast节点,使用上下文有关语法对其进行转换字节码(上下文有关意味着要预读取更多节点并解析这些节点)。

83320
  • 编译原理 第二章下: 推导,规约,句型句子,语言文法分类,二义性

    例:2.6 文法分类对文法不同规则施加不同限制,将文法语言分为四大类0型文法:0型语言或短语结构语言1型文法:1型语言上下文有关语言==2型文法==:2型语言上下文无关语言2型文法是程序设计语言语法规则...==3型文法==:3型语言或正则语言3型文法是程序设计语言构词规则2.6.1 0型文法对产生式基本无限制2.6.2 1型文法文法部符号个数超过右部符号个数2.6.3 2型文法任意产生式A→B,A属于非终结符号...如上小节给出语法树中,包含根节点S,S1,S2,S3,S4五棵子树注意叶子结点不算子树短语短语是相对一个句型,一个句型对应多个短语。短语就是该句型子树叶子结点如何寻找一个句型短语?...→TF*|F , F→F^|a 求证FF^^*是文法句型,指出短语,简单短语和句柄2.8 递归规则和递归文法递归规则指的是在规则右部含有和部相同符号规则,如U→xUy;其中这种U→Uy称为递归,...递归文法使人们能用有穷文法刻画无穷语言。2.9 文法二义性若一个文法存在某个句子或句型,它存在两棵不同语法树,则称该句子或句型是二义性,对应文法也是二义性

    30710

    65.精读《手写 SQL 编译器 - 文法介绍》

    1 引言 文法用来描述语言语法规则,所以不仅可以用在编程语言上,也可用在汉语、英语上。...上下文无关文法 根据是否依赖上下文文法分为 上下文相关文法上下文无关文法,一般来说 上下文相关文法 都可以转换为一堆 上下文无关文法 来处理,而用程序处理 上下文无关文法 相对轻松。...附上一个 mysql 上下文无关文法集合。 推导与右推导 上面提到推导符号 => 在实际运行过程中,显然有两种方向左和右: E + E => ?...消除递归 消除递归一般通过转化为右递归方式,因为递归完全不消耗 Token,递归可以通过消耗 Token 方式跳出死循环。...> 提取公因式 即便是上下文无关文法,通过递归下降方式,许多时候也必须从左向右超前查看 K 个字符才能确定使用哪个产生式,这种文法称为 LL(k)。

    56020

    编译原理学习笔记-5:自顶向下语法分析

    本篇笔记将继续讲解编译第二步:自顶向下语法分析。 下面是这篇笔记思维导图: 注意:以下所有分析基于上下文无关文法。 1....更直接点,我们可以说语法分析器是用来判断句子是否符合某个给定上下文无关文法。 1.2 语法分析方法 本篇笔记主要讲解自顶向下语法分析。...要判断句子是否符合某个给定上下文无关文法,可以尝试从文法开始符号出发,若经过一系列推导之后可以得到完全匹配原句子句子,则可以说原句子来自于给定文法。 2....首先将第一条产生式代入第二条,得到 Q → Sab|ab|b,它仍然包含递归,所以继续代入第三条,得到 S → Sabc|abc|bc|c,它包含直接递归,所以按照前面说过一般递归消除方法对其进行处理...我们试着用预测分析程序进行语法分析。 ① LL(1) 判断 有没有递归? 很明显,这个文法存在直接递归,为了方便后续工作开展,这里先消除递归

    5K72

    编译原理文法详解_编译原理为什么存在递归文法

    这里主要讨论上下文无关文法构成语法和自顶向下、自底向上语法分析。...上下文无关文法 定义为一个四元组(VT,VN,S,P) VT:终结符有限集合 VN:非终结符有限集合,与VT无交集 S:开始符号 P:产生式有限集合。...形如A->α,α∈(VN∪VT)* 类似自动机定义,不过是语法产生式。 为什么要叫上下文无关文法呢?...递归判定和消除 递归判定:一个文法G,若存在P经过一次或多次推导得到Pa(即能推导出以P开头式子), 则称G是递归。...总结 这一节主要内容应该是自顶向下分析,为了构建这一棵语法树,我们使用上下文无关文法,定义了推导概念,发现我们要使用推导,并且解决了二义性,顺便消除了递归,这才成功构建出这样一棵语法树。

    71210

    懂前端你也可以轻松定义自己业务DSL

    上面这一堆精准定义规则都是一些上下文无关文法,要准确写出flex可以用规则,必须对上下文无关文法比较熟悉,比如不能出现递归、不能出现空规则等等:上下文无关文法上下文无关文法(Context-Free...Grammar)指的是一种形式文法,其中所有规则部只包含一个非终结符号,右部可以是任意长度终结符和非终结符序列。...上下文无关文法是自然语言处理、编译原理和计算机语言设计等领域中广泛使用一种形式化表示方法。要轻松写一个上下文无关文法,可以按照以下步骤进行:1. 确定终结符号集和非终结符号集。...例如,一个简单上下文无关文法可以表示一个简单算术表达式:1. 终结符号集:数字(0-9)、加号(+)、减号(-)、括号(()、右括号())2....起始符号:E这个文法可以生成类似于“3+4*5”算术表达式。递归和空规则递归:在一个产生式右部出现了该产生式本身作为情况,例如:A->Aα(α为任意串)。

    2.3K41

    2016 腾讯软件开发面试题(部分)

    该类型文法能够产生所有可被图灵机识别的语言。可被图灵机识别的语言是指能够使图灵机停机字串,这类语言又被称为递归可枚举语言。...注意递归可枚举语言递归语言区别,后者是前者一个真子集,是能够被一个总停机图灵机判定语言。 1-型文法上下文相关文法)生成上下文相关语言。...这里A 是非终结符号,γ 是包含非终结符号与终结符号字串。这种文法规定语言可以被非确定下推自动机接受。上下文无关语言为大多数程序设计语言语法提供了理论基础。...正规语言包含上下文无关语言类,上下文无关语言包含上下文相关语言类,上下文相关语言包含递归可枚举语言类。...这里包含都是集合包含关系,也就是说:存在递归可枚举语言不属于上下文相关语言类,存在上下文相关语言不属于上下文无关语言类,存在上下文无关语言不属于正规语言类。 四种类型文法主要特点: ?

    89880

    大学课程 | 编译原理知识点

    什么是字母表,元符号,正则表达式三种基本操作 0/1/2/3型文法?什么是最左推导?最右推导?什么是终结符,非终结符?什么是产生式?如何识别二义性,消除方法?语言文法递归下降?...编译器分类结构 根据语言文法难易程度以及识别它们所需要算法分类:如乔姆斯基分类结构: 4类:分为0型,1型,2型,3型文法 0型文法为:无限制文法 1型文法为:上下文有关文法 2型文法为:上下文无关文法...DFA(确定性有穷自动机) 给出一个状态和字符,通常肯定会有一个指向单个新状态唯一转换 NFA(非确定性有穷自动机) 第三章 上下文无关文法 上下文无关文法与正则表达式主要区别: 上下文无关文法规则是递归...二,将文法改变成一个强制正确分析树构造格式 语法分析器作用 编译过程中,语法分析器任务是 (1) 分析单词串是如何构成语句和说明 (2) 分析语句和说明是如何构成程序 (3) 分析程序结构...这样环境可用来实现没有指针或动态分配,且过程不可递归调用语言。 基于栈环境:C,C++,Pascal,Ada。在允许递归调用以及每一个调用中都重新分配局部变量语言中,不能静态地分配活动记录。

    1.3K30

    2016腾讯软件开发面试题之不定项选择题

    该类型文法能够产生所有可被图灵机识别的语言。可被图灵机识别的语言是指能够使图灵机停机字串,这类语言又被称为递归可枚举语言。...注意递归可枚举语言递归语言区别,后者是前者一个真子集,是能够被一个总停机图灵机判定语言。 1-型文法上下文相关文法)生成上下文相关语言。...这里A 是非终结符号,γ 是包含非终结符号与终结符号字串。这种文法规定语言可以被非确定下推自动机接受。上下文无关语言为大多数程序设计语言语法提供了理论基础。...正规语言包含上下文无关语言类,上下文无关语言包含上下文相关语言类,上下文相关语言包含递归可枚举语言类。...这里包含都是集合包含关系,也就是说:存在递归可枚举语言不属于上下文相关语言类,存在上下文相关语言不属于上下文无关语言类,存在上下文无关语言不属于正规语言类。 四种类型文法主要特点: ?

    1.5K100

    用c语言手搓一个500+行类c语言解释器: 给编程初学者解释器教程(4)- 语法分析1

    项目github地址及源码: https://github.com/yunwei37/tryC 这一章开始进入解释器核心部分: 语法分析器; 我们来看看两个概念,EBNF和递归下降文法,以及如何用这两个方法来计算...BNF与上下文无关文法 Backus-Naur符号(就是众所周知BNF或Backus-Naur Form)是描述语言形式化数学方法,由John Backus (也许是Peter Naur)开发,最早用于描述...Algol 60编程语言语法。...上下文无关文法就是说,这个文法中所有的产生式左边只有一个非终结符,就像上面写那个文法一样。通常我们在编译器构建中使用都是上下文无关文法。...当然,递归下降分析并不是对于所有的文法都能正常使用,例如经典递归问题:比如这样一个文法 exp -> exp { op exp } | ( exp ) | number op -> + | - |

    1.7K00

    用c语言手搓一个600行类c语言解释器: 给编程初学者解释器教程(4)- 语法分析1:EBNF和递归下降文法

    用c语言手搓一个600行类c语言解释器: 给编程初学者解释器教程(4)- 语法分析1:EBNF和递归下降文法 用c语言手搓一个600行类c语言解释器: 给编程初学者解释器教程(1)- 目标和前言...600行类c语言解释器: 给编程初学者解释器教程(4)- 语法分析1:EBNF和递归下降文法 用c语言手搓一个600行类c语言解释器: 给编程初学者解释器教程(5)- 语法分析2: tryC语法分析实现...这一章开始进入解释器核心部分: 语法分析器; 我们来看看两个概念,EBNF和递归下降文法,以及如何用这两个方法来计算tryC中表达式。...BNF与上下文无关文法 Backus-Naur符号(就是众所周知BNF或Backus-Naur Form)是描述语言形式化数学方法,由John Backus (也许是Peter Naur)开发,最早用于描述...上下文无关文法就是说,这个文法中所有的产生式左边只有一个非终结符,就像上面写那个文法一样。通常我们在编译器构建中使用都是上下文无关文法

    49520

    编译原理 | 期末复习笔记

    编译前端:与源语言有关,如词法分析、语法分析、语义分析、与目标机无关代码优化等与机器无关事务 编译前端:与目标机器有关,如目标代码生成、与目标机有关代码优化 好处:可组装、省力、有利于移植 --...,P,S)V_N:非终结符集V_T:终结符集P:产生式集S:开始符(识别符) 文法分类0型文法(短语文法)1型文法上下文有关文法)2型文法上下文无关文法)形如 \alpha \rightarrow...形式化定义为:一个上下文无关文法是LL(1)文法充分必要条件是,对每个非终结符A两个不同产生式,A→α, A→β,满足SELECT(A→α)∩SELECT(A→β)=空集 其中α,β不同时能推导出ε...4.2 非LL(1)文法转换为LL(1)文法 一个文法若含直接或间接递归,或含有公共因子,则该文法肯定不是LL(1)文法。...常用LR文法有:LR(0),SLR(1)、LALR(1)、LR(1) 其包含关系结构如图: 一个文法G[S],若列出LR(0)项目集规范族C后,C中没有项目集中有移进-规约冲突,那么该文法G[S

    1.6K20

    【编译原理】第二讲:程序设计语言及其文法【笔记】

    ,最后形式是一个字母数字串 S 可推出,是一个字母开头字母数字串 (4) 文法分类 A:0型文法 α --> β 无限制文法 ∀ α --> β ∈ P,α中至少包含一个非终结符 0型语言 由...0型文法G生成语言L(G) B:1型文法 上下文有关文法 ∀ α --> β ∈ P,|α|≤|β| 产生式一般形式:α1 A α2 --> α1 β α2 上下文有关语言上下文有关文法G构成语言...L(G) 包含 ε-产生式 C:2型文法 上下文无关文法 ∀α → β ∈P,α ∈ 非终结符 产生式一般形式:A --> β 上下文无关语言上下文无关文法G构成语言L D:3型文法 正则文法...句子 5、若文法G定义语言是无限集,则文法必然是( ) 正确答案(A) A. 递归 B. 上下文无关 C. 二义性 D....句型 8、若一个文法递归,则它所产生语言句子( ) 正确答案(A) A. 是无穷多个 B. 是有穷多个 C. 是可枚举 D.

    1.5K40

    侃一侃编译原理文法

    一.文法涉及几个简单概念 假设Σ是一个有限字母表集合,它每一元素都是一个符号。Σ上一个符号串就是指由Σ中符号组成一个有限序列。如果一个符号串包含任何符号,就叫它空串,记为ε。...可能你一脸黑人问号…… 其实,就是指怎么由一堆符号组成一个有含义句子规则和协议。 所谓上下文无关文法就是文法一种,它所定义语法单位是完全上下文无关。...(ˇˍˇ) 想~ 所以说,上下文无关文法不能用来描述自然语言,但是对于当今程序语言来说,上下文无关文法基本够用了。下文中文法”,如果没有特殊说明,都是之指“上下文无关文法”。...或者这么说,有了这些规则,我们可以这么干: 我们可以画一个更形象图(语法分析树)来说明这种推导。 上面定义英文句子规则就可以说是一个上下文无关文法。...下面上精确定义: 二.递归定义例子 有时候,只用一个产生式是不足以定义一个语法单位,需要几个产生式相互配合。有时候会需要递归形式。

    68620

    漫谈模式之解释器模式

    解释(Interprete)一般要递归地调用表示R1到Rn那些对象操作。 Context(上下文包含解释器之外一些全局信息。...Client(客户端) 构建(或被给定)表示该文法定义语言一个特定句子抽象语法树。...2、每一个非终结符表达式节点定义相应子表达式解释操作。各终结符号表达式解释操作构成了递归基础。 3、每一个节点解释操作用上下文来存储和访问解释器状态。...因为该模式使用类来表示文法规则,你可以使用继承来改变或扩展该文法。已有的表达式可被增量式地改变表达式可被定义为旧表达式变体。 也易于实现文法。定义抽象语法树中各节点实现大体类似。...这些类易于直接编写,通常它们也可用一个编译器或语法分析程序生成器自动生成。 缺点: 复杂文法难以维护。解释器模式为文法每一条规则至少定义一个类。因此包含许多规则文法可能难以维护。

    54760

    理解递归下降分析和parsec应用

    前言 本文将会从上下文无关文法开始介绍,从使用 BNF 描述语法到理解递归下降分析思想,最后实现一个简单 html 解析器收尾。...巴科斯范式 - 语法描述语言 巴科斯范式 Backus Normal Form,缩写为 BNF, 是一种用于表示上下文无关文法语言。...,即上下文无关。...在含有递归语法中,不能出现递归(包括间接递归),也不能有二义性,没有递归没有二义性语法符合 LL(1)文法,就可以使用递归下降分析法解析。...递归无法使用递归下降分析原因是会让程序死循环,具体可以参考编译原理龙书 2.4.5 Left Recursion 章节。 3. 递归下降分析 符合 LL(1)文法语法可以使用递归下降分析法解析。

    1.7K00

    第四章 自顶向下语法分析方法

    一、确定自顶向下语法分析思想 基本方法:对任何输入串,试图从文法开始符号出发, 自上而下地为输入串建立一棵语法树,或者说为输入串寻找一个最左推导。...过程本质:是一种试探过程,是反复使用不同产生式谋求匹配输入串过程如何选择哪个产生式进行推导,某文法符号对应当前输入符号时,有唯一产生式进行替换并向下推导。...1.4.1 定义 一个上下文无关文法是 LL(1) 文法充分必要条件是,对每个非终结符两个不同产生式,A→α,A→β,满足:SELECT(A→α)∩SELECT(A→β)= φ 1.4.2 举例...二、LL(1)文法判别 一个上下文无关文法是 LL(1) 文法充分必要条件是,对每个非终结符两个不同产生式,A→α,A→β,满足:SELECT(A→α)∩SELECT(A→β)= φ 2.1 FIRST...下方法分析能力 按照 LL(1) 文法构造预测分析表 实现预测分析器

    1.2K30

    编译原理学习笔记-2:文法语言

    文法 2.1 文法语言体系中位置 语言包括语法和语义两个方面,但是语法和语义都是比较抽象东西,所以我们需要借助一些工具来阐述它们。以语法来说,文法就是阐述它一个工具。...作为描述程序语言上下文无关文法,我们对它还有一些限制: 文法包含形如 P → P 产生式 每个非终结符一定可以被用到,或者本身被 S 推导得到,或者本身推导得到其它终结符串。 4....(3) 2 型文法 在 1 型文法基础上加以限制,规定对于每一个 α→β,都必须满足 α 是一个非终结符。也就是说,产生式部必须得是一个非终结符。 2 型文法也叫上下文无关文法。...下面我们用更加通俗例子来解释这两种文法: 定义上下文无关文法 G : Grammar → X Y Z X → 我 | 学校 Y → 去 | 没有 Z → 公园 | 人 那么以 Grammar 作为开始符号...这是因为我们没有给定上下文约束,也就是说,因为有了 Y → 去 | 没有 这条产生式,所以只要遇到 Y,推导出“去”或者“没有”就都是合理全然不需要关注“去“上文是什么,”去“下文是什么。

    1.9K11
    领券