将 EBNF 转换为 BNF

2024-04-11

我的计算机语言课已经过去几年了,所以我已经忘记了 BNF 和 EBNF 的要点,而且我身边也没有教科书。具体来说,我忘记了如何将 EBNF 转换为 BNF。

据我所知,我知道要点之一是转换

{ term }

into

<term> | <many-terms>

但其他的规则我不记得了。我试图在网上查找此内容,但我只能找到家庭作业问题的链接,或有关用大括号转换术语的小评论。我找不到定义翻译的详尽规则列表。


See this page http://lampwww.epfl.ch/teaching/archive/compilation-ssc/2000/part4/parsing/node3.html.???? https://archive.vn/nsP4r It contains instructions for each production that needs to be converted:

从 EBNF 到 BNF


对于构建解析器(尤其是自下而上),BNF 语法通常比 EBNF 更好。但将 EBNF 语法转换为 BNF 很容易:

  • 转换每次重复{ E }到一个新鲜的非终端X and add

    X = ε | X E.
    
  • 转换每个选项[ E ]到一个新鲜的非终端X and add

    X = ε | E.
    

    (我们可以转换X = A [ E ] B. to X = A E B | A B.)

  • 转换每个组( E )到一个新鲜的非终端X and add

    X = E.
    
  • 我们甚至可以通过使用相同的非终结符进行多个产生式来消除替代方案。

    X = E | E'.变成X = E. X = E'.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 EBNF 转换为 BNF 的相关文章

  • 封装和抽象之间的区别

    我今天去面试了 我有一个问题来自OOP 关于之间的区别封装 抽象 我据我所知回答说封装基本上将数据成员和成员函数绑定到一个称为Class 然而抽象基本上是为了隐藏实现的复杂性并为用户提供方便的访问 我以为她会同意我的回答 但她质疑 如果两者
  • 与编程语言/API 相关的常用“语义”的简单定义?

    今天我突然想到 虽然我在提到语言元素和命名约定时已经采用并且不经常使用 语义 一词 但我对正式定义没有任何感觉 我试图在编程领域找到一个正式的定义 http en wikipedia org wiki Formal semantics of
  • 代码高尔夫:弗罗贝尼乌斯数

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 编写最短的程序来计算给定正数集的弗罗贝尼乌斯数 弗罗贝尼乌斯数是不能写成集合中数字的正倍数之和
  • 让人们在电影院就座

    这是基于我读到的一篇关于大型软件公司提出的谜题和面试问题的文章 但它有一个转折 一般问题 有一种算法可以让人们在电影院就座 让他们直接坐在朋友旁边 而不是敌人旁边 技术问题 给定一个 N M 网格 用 N M 1 项填充网格 每个项目都有一
  • 额外的函数/方法定义是否会增加程序的内存占用?

    在 C 中 定义不使用的附加方法或函数是否会导致更大的内存占用或更慢的执行速度 基本上 我在一个类中有几种实用程序调试方法 这些方法对于该类的正常使用都不是必需的 如果从未使用过这些定义 是否保留这些定义会在内存占用或速度方面产生影响吗 例
  • 在未排序的数组中查找 2 个等于给定总和的数字

    我们需要在数组中找到总和等于给定值的数字对 A 6 4 5 7 9 1 2 总和 10 那么这些对是 6 4 9 1 我对此有两个解决方案 O nlogn 解决方案 使用 2 个迭代器 开始和结束 进行排序 校验和 O n 解决方案 对数组
  • 什么时候函数名太长?

    在可能的情况下 我尝试对我的函数名称进行描述 这有时会导致函数名称在二十到三十个字符范围内 例如GetActionFromTypeName or GetSelectedActionType 在什么时候函数会变得太长而难以管理 对于编译器来说
  • 两个平面之间的交线

    如何找到两个平面之间的交线 我知道数学思想 并且我做了平面法向量之间的叉积 但如何以编程方式从结果向量中获取行 平面的方程为ax by cz d 0 其中 a b c 是平面的法线 d 是到原点的距离 这意味着满足该方程的每个点 x y z
  • 为什么要使用继承? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 是否可以有效地计算 lambda 演算项?

    我最近用 lambda 演算编写了很多程序 我希望能够实时运行其中一些程序 然而 尽管趋势函数范式基于 lambda 演算和 B 约简规则 但我找不到一个不是玩具 不以效率为目的的评估器 函数式语言应该很快 但我所知道的那些语言实际上并不提
  • 根据索引查找金字塔的行?

    给定一个像这样的金字塔 0 1 2 3 4 5 6 7 8 9 并给出金字塔的索引i where i代表i金字塔的第一个数字 有没有办法找到金字塔的行的索引i第一个元素属于 例如 如果i 6 7 8 9 它位于第 3 行 从第 0 行开始
  • 有效地将相似的数字分组在一起[重复]

    这个问题在这里已经有答案了 可能的重复 一维数数组聚类 https stackoverflow com questions 11513484 1d number array clustering 我有一个数字数组 例如 1 20 300 4
  • 使用动态编程理解正则表达式字符串匹配

    我遇到了这个问题 要求您实现一个支持 的正则表达式匹配器 和 其中 匹配任何单个字符 匹配零个或多个前面的元素 isMatch aa a false isMatch aa aa true isMatch aaa aa false isMat
  • 什么是样板代码、热点代码和热点?

    我知道这些术语是在性能实现 优化的背景下使用的 最近一直在研究这个问题 并尝试过搜索 但没有得到任何例子 清楚地阐述 描述这些概念以及在现实世界开发场景中实现这些问题 概念 有人可以彻底解释这些术语 示例场景以及可能使用这些概念和术语的地方
  • 如何检查一个盒子是否适合另一个盒子(允许任何旋转)

    假设我有两个盒子 每个盒子都是一个长方体 http en wikipedia org wiki Rectangular cuboid aka长方体 我需要编写一个函数来决定盒子是否具有尺寸 一 二 三 可以装入具有尺寸的盒子中 甲 乙 丙
  • 编程语言语法中尾随逗号的历史

    许多编程语言允许在其语法中在列表中的最后一项后面使用尾随逗号 据说这样做是为了简化自动代码生成 这是可以理解的 作为示例 以下是 Java 中完全合法的数组初始化 JLS 10 6 数组初始值设定项 http java sun com do
  • 什么是悲观主义?

    该问题有评论可以使用C 11的吗auto提高性能 https stackoverflow com questions 32510183 can the use of c11s auto improve performance这获得了很多选票
  • Windows 应用程序事实上的标准键盘快捷键列表?

    假设我正在为 Windows 开发一个新的桌面应用程序 是否有我可以查阅的所有 Windows 应用程序都应支持的键盘快捷键列表 来自 Microsoft 或第三方 注意 当我在这里说 所有 Windows 应用程序 时 我的真正意思是 特
  • 无法弄清楚为什么 Bison 抛出“由于冲突,规则在解析器中无用”

    我正在为一种非常简单的编程语言编写 BNF 语法 并使用 Flex 和 Bison 进行编译 我只有 3 种变量和常量类型 实数 整数 字符串 我的 l 文件具有 ID 的标记定义 如下所示 DIGIT 0 9 LETTER a zA Z
  • 如何为抽象工厂创建的类设置特定属性?

    是否可以让具体工厂使用抽象工厂模式为其创建具有特定类型参数的具体类 或者由各自的具体工厂创建的不同具体类是否需要具有相同的字段 例如 在下图中 您将如何使用客户端 应用程序 给出的不同参数集来实例化 WinButton 和 OSXButto

随机推荐