扩展巴科斯-诺尔范式的运算顺序

2023-11-24

我正在为一种非常简单的规则语言创建正式规范,非常简单。 我想使用 EBNF,因为这是一个标准,但我不知道如何指定操作顺序。这是到目前为止的规范。

rule = statement, { (‘AND’|’OR’), statement};

variable = ‘$’,alphabetic character, {alphabetic character | digit};

statement = variable, [ ‘count’,[white space ],’>’,[white space],number ];

alphabetic character = "A" | "B" | "C" | "D" | "E" | "F" | "G"
                     | "H" | "I" | "J" | "K" | "L" | "M" | "N"
                     | "O" | "P" | "Q" | "R" | "S" | "T" | "U"
                     | "V" | "W" | "X" | "Y" | "Z" ;

number = [ "-" ] , digit , { digit } ;

digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;

white space = ? white space characters ? ; 

我的问题是如何表明应该首先评估括号中的内容。 所以像这样的事情

$strap AND ($greenSticker count > 5 OR ($greenSticker AND $redSticker))

这似乎是大多数语言的共同特征,但我的谷歌技能让我失败,我似乎找不到例子。


将此作为 LL 语法的简化示例:

expression -> (+|-|ε) term ((+|-) term)*
term -> factor ((*|/) factor)*
factor -> var | number | (expression)

如您所见,优先级较低的运算符 (+ and -) 比更高优先级的运算符 (* and /)。这一切都是为了生成正确的解析树。但根据经验,“外部”或更一般的规则的优先级较低,这就是为什么加法和减法运算符被放置在旁边term, 因为term必须进一步推导。如果您查看更复杂的语法,您会发现这是为了获得适当的优先级而采取的极端做法。

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

扩展巴科斯-诺尔范式的运算顺序 的相关文章

  • 在Python中,为什么负数的偶次方仍然是负数? [复制]

    这个问题在这里已经有答案了 在Python中 gt gt gt i 3 gt gt gt i 4 81 Why is i 4不评价为 i 4 但作为 i 4 我想有人可能会争辩说 求幂优先于 隐式 乘法i减一 即你应该阅读 1 i 4 但我
  • NLTK 中解析的英语语法

    是否有现成的英语语法可供我加载并在 NLTK 中使用 我搜索了使用 NLTK 进行解析的示例 但似乎我必须在解析句子之前手动指定语法 多谢 你可以看一下pyStat解析器 https github com emilmont pyStatPa
  • 相同运算符优先级的结合性 -- *start++

    为什么会出现下面的表达式 total start 评估为 total start And not total start though this doesn t really matter either it would be the sa
  • Python 中 NOT、AND、OR 的逻辑运算符(运算顺序)的优先级(优先级)

    据我所知 在C C 中 NOT AND OR的优先级顺序是NOT gt AND gt OR 但这在 Python 中似乎并没有以类似的方式工作 我尝试在Python文档中搜索它但失败了 我猜我有点不耐烦 有人可以帮我解决这个问题吗 It s
  • 对拳击感到困惑。将 -1 转换为 Int64 会抛出 InvalidCastException

    好吧 我一定忽略了一些非常简单的事情 但我迷路了 鉴于这种 object val 1 var foo Int32 val var bar Int64 val 转换为 Int64 会引发 InvalidCastException 我知道这与拳
  • 我想我需要一个简单的规则引擎? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么 C# 运算符重载必须是静态的?

    为什么 C 要求运算符重载是静态方法而不是成员函数 如 C 也许更具体地说 这个决定的设计动机是什么 埃里克 利珀特 Eric Lippert 在一篇文章中对此进行了极其详细的回答 博客文章 https ericlippert com 20
  • 操作员 '??'不能应用于子类类型的操作数

    以下代码给出了 Main 函数第二行标题中的错误 public class P public class B P public class A P void Main P p GetA GetB public A GetA return n
  • 为什么值类型存储在堆栈中?

    为什么 C Net 更喜欢使用堆栈来存储值类型 这种设计背后的主要原因是什么 是因为对堆栈的读 写操作更好地利用了机器处理器吗 另外 也许你可以证明为什么其他人不可以 埃里克 利珀特讨论了这个here https learn microso
  • java 中 (--i + ++i) 中表达式的输出

    int i 9 System out println i i 执行输出 17i 的最终值为 9 但是根据java中的结合性和优先级规则 i应该首先执行 即从右到左 给出10 然后 i给出9 将两者相加 答案应该是19 至于我知道这样的代码在
  • C 中逻辑运算符的优先级[重复]

    这个问题在这里已经有答案了 可能的重复 如果您查看 C 的优先级表 您会发现 的优先级高于 但请看下面的代码 a b c 1 a b c printf d d d n a b c 它打印出 2 1 1 这意味着 a 首先被评估 一旦程序看到
  • [“03C0”]如何匹配附件P中的语法?

    我正在编写一个工具来使用 2005 年附录 P 中提供的语法来解析 Ada 源文件 通过下面的代码 我知道 03C0 代表 希腊字母Pi 但它是合法的变量名吗 01 package Ada Numerics is 02 Pi constan
  • 为什么正则表达式不能使用关键字而不是字符?

    好吧 我几乎不了解 RegEx 基础知识 但为什么他们不能将其设计为使用关键字 如 SQL 而不是一些神秘的通配符和符号呢 由于正则表达式是在运行时解释 解析的 所以是为了性能吗 未编译 或者也许是为了写作速度 考虑到当您学习一些 简单 字
  • Foreach 可以抛出 InvalidCastException 吗?

    想象一下下面的代码 class foreach convert public static void method2 List
  • 编程语言语法中尾随逗号的历史

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

    我想知道用于 Cloud Firestore 安全规则的语法名称 如下所述https firebase google com docs firestore security get started authuser 0 https fire
  • 为什么 C++ 标准没有将 sizeof(bool) 定义为 1?

    Size of char signed char and unsigned char由 C 标准本身定义为 1 个字节 我想知道为什么它没有定义sizeof bool also C 03 标准 5 3 3 1 说 sizeof char s
  • 避免重复 GNU Make 规则

    我一直在编写一个执行一些依赖项生成的 Makefile 我发现自己必须重复规则 因为 遗留 代码库包含以下内容的混合 cpp and cc文件 好像有点难看 无论如何 是否可以指定目标的先决条件可以是 cpp or cc files 所以而
  • Java 枚举相对于旧的“类型安全枚举”模式的优势?

    在 JDK1 5 之前的 Java 中 Typesafe Enum 模式是实现只能采用有限数量值的类型的常用方法 public class Suit private final String name public static final
  • 使用 ANTLR 验证 LL(1) 语法

    我知道 ANTLR 可以接受 LL 语法 但是 有什么方法可以使用 ANTLR 检查语法是否是 LL 1 吗 options k 1 如果你的语法不在 LL 1 中 它会发出警告

随机推荐

  • 选择 PHP 缓存技术:输出缓存到文件与操作码缓存

    我听说过两种 PHP 代码缓存技术 当 PHP 脚本生成输出时 它将其存储到本地文件中 当再次调用该脚本时 它会检查先前输出的文件是否存在 如果为 true 则返回该文件的内容 它主要是通过 输出缓冲区 来完成的 像这样的事情被描述在thi
  • Android Compose:在图像上绘制透明圆圈

    I have an image and I want to draw dark rectangle over it with a transparent circle so the result will be something like
  • UIStoryboard如何以编程方式替换约束?

    我在故事板中放置了一个视图控制器 并启用了自动布局 并且正在寻找一种方法来更改约束 以允许我的视图旋转为横向并重新排列屏幕上的按钮 当我尝试下面的代码时 我收到大约两打 无法满足约束 破坏约束 的消息 我无法真正解码 有没有办法用我以编程方
  • Rust 如何处理隐藏变量?

    我有很强的 C C 背景 最近正在学习 Rust 对 Rust 如何处理隐藏变量感到困惑 特别是 我期望以下代码段运行没有问题 因为guess在下一次将其作为字符串调用之前 将其从字符串隐藏为整数read line 看了API文档 我明白了
  • PHP 中规范 uuid 表示的 16 字节二进制形式

    如何从 uuid 的字符串 规范表示形式中获取 16 字节二进制形式 ex 1968ec4a 2a73 11df 9aca 00012e27a270 干杯 马尔辛 bin pack h str replace guid pack
  • 如何在 wsgi 中启动 pdftk 子进程?

    我需要在 Django 中提供 Web 请求时启动 pdftk 进程 并等待它完成 我当前的 pdftk 代码如下所示 proc subprocess Popen usr bin pdftk tmp infile1 pdf tmp infi
  • java.lang.NoClassDefFoundError:无法初始化类 javax.media.jai.JAI

    我最近使用 GeoTools 开始了我的第一个程序 其中我还使用了 JAI Java Advanced Imaging 1 1 2 01 和 JDK 1 7 在我添加 GeoTiff Jars 之前它工作得很好 我发现以下错误 线程 mai
  • Haskell 中函数的类型推断

    我正在为 Haskell 做练习题 其中一个问题是 test3 x y x x y 我必须找到它的类型 解决办法是 test3 a gt a gt a gt a 我不明白为什么解决方案中的变量都是 a 而不是将 x 和 y 视为两个不同的变
  • 如何从 VBA 访问 SQLite?

    我有一个 Excel 工作簿 其中包含一些查询本地访问数据库的 adodb 代码 我想对 SQLite 做同样的事情 因为我相信这会提供更好的性能 我怎么做 我可以使用 adodb 或 odbc 连接到 SQLite 文件吗 我需要一些简单
  • PHP 中最快的 PDF 生成速度?

    我正在尝试动态生成一些报告 非常简单的带边框的 HTML 表格 我尝试过 TCPDF 它最多可以渲染 400 行 但超过这个数量 大约 20 页 它就无法处理 DOMPDF 甚至无法做到这一点 这些报告可能有数千行 关于更快的库或更好的攻击
  • 为什么 undef 值会成为 Perl 中的有效数组引用?

    在 perl 5 8 5 中 如果我执行以下操作 则不会收到错误 use strict my a undef foreach my el a whatever 这里发生了什么 打印输出ref a 表明 a在某个时刻更改为有效的数组引用 但我
  • ELMAH 与企业库异常处理块

    我的团队目前正在构建 ASP NET MVC 应用程序 我们正在尝试决定实施哪些框架来处理错误处理和日志记录 选择其中之一而不是其他的原因是什么 就我个人而言 我一直在为许多客户使用 Enterprise Library 但尚未使用 ELM
  • 如何防止条形图中两个标签重叠?

    下图显示了我使用下面的代码创建的图表 我突出显示了缺失或重叠的标签 有没有办法告诉 ggplot2 不要重叠标签 week c 0 1 1 1 1 2 2 3 4 5 statuses c Shipped Shipped Shipped S
  • TensorFlow 中 Variable 和 get_variable 的区别

    据我所知 Variable是创建变量的默认操作 并且get variable主要用于权重共享 一方面 有人建议使用get variable而不是原始的Variable每当您需要变量时进行操作 另一方面 我只看到任何用途get variabl
  • C# String.Format - 无效的输入字符串

    我有一个像这样的 MVC3 HtmlHelper 扩展 public static MvcHtmlString ShowInfoBar this HtmlHelper helper string message InfoMessageTyp
  • 警告:组件“sparks.component.TextInput”不支持 CSS 类型选择器

    我正在尝试做一个简单的 CSS 声明 但是 我收到了上面的警告 不知道如何解决 我认为 s type 应该为我声明样式
  • Beautifulsoup 通过
    分割标签中的文本

    是否可以通过 br 标签将文本与标签分开 我有这个标签内容 u 420 777 593 531 br u 420 776 593 531 br u 420 775 593 531 我只想得到数字 有什么建议吗 EDIT x for x in
  • 不出现对话框

    我使用以下代码 public class Settings extends Activity implements OnClickListener private Activity activity private AlertDialog
  • 在闪亮的应用程序中以模式显示 dataTableOutput

    伟大的 R 社区 我只是想知道是否可以显示DT dataTableOutput在模式中按下操作按钮 例如 数据表输出如下所示 下面是一些代码 app R library shiny library shinydashboard ui lt
  • 扩展巴科斯-诺尔范式的运算顺序

    我正在为一种非常简单的规则语言创建正式规范 非常简单 我想使用 EBNF 因为这是一个标准 但我不知道如何指定操作顺序 这是到目前为止的规范 rule statement AND OR statement variable alphabet