码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 什么是上下文无关文法、最左推导和最右推导—编译原理


    系列文章戳这里👇

    1. 什么是上下文无关文法、最左推导和最右推导
    2. 如何判断二义文法及消除文法二义性
    3. 何时需要消除左递归
    4. 什么是句柄、什么是自上而下、自下而上分析
    5. 什么是LL(1)、LR(0)、LR(1)文法、LR分析表
    6. LR(0)、SLR(1)、LR(1)、LALR(1)文法之间的关系
    7. 编译原理第三章习题
    8. 词法分析、构建DFA、上下文无关文法、LL(1)分析、提取正规式
    9. 证明LL(1)、SLR(1)、LALR(1)文法
    10. 翻译方案、属性栈代码

    编译原理-上下文无关文法、最左推导和最右推导

    • 系列文章戳这里👇
    • 什么是上下文有关文法?
      • 一、上下文无关文法
      • 二、上下文相关文法
    • 为什么需要上下文无关文法?
    • 什么是最左推导和最右推导?
      • 举个例子

    什么是上下文有关文法?

    一、上下文无关文法

    上下文无关文法就是说这个文法中所有的产生式左边只有一个非终结符,比如:
    S → a S b S → a b S → aSb\\ S → ab S→aSbS→ab
    这个文法有两个产生式,每个产生式左边只有一个非终结符 S S S,这就是上下文无关文法,因为你只要找到符合产生式右边的串,就可以把它归约为对应的非终结符。

    二、上下文相关文法

    比如:
    a S b → a a S b b S → a b aSb →aaSbb\\ S →ab aSb→aaSbbS→ab
    这就是上下文有关文法,因为它的第一个产生式左边有不止一个符号,所以你在匹配这个产生式中的 S S S的时候必需确保这个 S S S有正确的“上下文”,也就是左边的 a a a和右边的 b b b,所以叫上下文相关文法。

    为什么需要上下文无关文法?

    上下文无关文法重要的原因在于它们拥有足够强的表达力来表示大多数程序设计语言的语法;实际上,几乎所有程序设计语言都是通过上下文无关文法来定义的。另一方面,上下文无关文法又足够简单,使得我们可以构造有效的分析算法来检验一个给定字串是否是由某个上下文无关文法产生的。例子可以参见 L R LR LR 分析器和 L L LL LL分析器。

    什么是最左推导和最右推导?

    最左推导:每一步替换最左边的非终结符
    最右推导:每一步替换最右边的非终结符
    最右推导称为规范推导。最右推导对应于最左规约(规范规约)

    举个例子

    文法:
    S → A B A → a ∣ t B → + C D C → a D → a S→AB\\ A→a|t\\ B→+CD\\ C→a\\ D→a S→ABA→a∣tB→+CDC→aD→a
    最右推导:
    S → A B → A + C D → A + C a → A + a a → a + a a S→AB→A+CD→A+Ca→A+aa→a+aa S→AB→A+CD→A+Ca→A+aa→a+aa
    最左推导:
    S → A B → a B → a + C D → a + a D → a + a a S→AB→aB→a+CD→a+aD→a+aa S→AB→aB→a+CD→a+aD→a+aa

  • 相关阅读:
    前端的导入导出:「CommonJS」「ES Module」模块化规范
    HDU3595 GG and MM
    详解java重定向和转发的区别
    快速上手Linux基础开发工具
    34、Java 中有了基本数据类型,为什么还需要有包装类型?包装类型是啥?
    中高级Java程序员,你不得不掌握的基本功,挑战20k+
    C++DAY43
    冥想第九百七十六天
    c#调用谷歌浏览器打开文件 系统找不到指定的文件
    什么是脉动调查?
  • 原文地址:https://blog.csdn.net/weixin_56462041/article/details/127459899
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号