为什么在Bison中为每个操作制定规则

生长激素

在搜索Bison语法时,我发现了以下C语法示例:

https://www.lysator.liu.se/c/ANSI-C-grammar-y.html

logical_and_expression
    : inclusive_or_expression
    | logical_and_expression AND_OP inclusive_or_expression
    ;
logical_or_expression
    : logical_and_expression
    | logical_or_expression OR_OP logical_and_expression
    ;

我不了解为每个逻辑操作制定规则的原因。下面的这种结构是否有优势?

binary_expression:
    : object // imagine it can be bool, int, real ...
    | binary_expression AND_OP binary_expression
    | binary_expression OR_OP binary_expression
    ;

您引用的语法是明确的。

尽管yacc / bison允许您使用优先级规则解决歧义,但您建议的模棱两可。

使用语法可以明确显示运算符优先级有一些优点:

  • 这是对该语言的精确描述。优先规则不是语法形式主义的一部分,因此可能很难推理。尤其是,没有通用的方法来证明它们已经完成了期望的工作。

  • 语法是独立的。模棱两可的语法只能通过添加优先级规则来理解。这对于语言标准中使用的语法特别重要,但是通常会影响自动构建其他基于语法的工具的尝试。

  • 显式语法更为通用。并非所有的操作员限制都可以通过数字优先级比较轻松地描述。

  • 优先规则可以通过错误地解决恰好使用某些相同标记的其他地方的移位减少冲突来隐藏语法中的错误。由于未报告已解决的冲突,因此不会警告语法编写者该问题。

另一方面,优先级规则确实具有一些优点:

  • 优先级表紧凑地描述了运算符的优先级,这对于快速参考很有用。

  • 生成的语法需要较少的单位产生,从而稍微提高了解析速度。(通常不明显,但仍然...)

  • 尽管了解冲突的解决方式可能并不明显,但使用优先级声明更容易解决某些冲突。(经典示例是悬而未决的歧义。)这种情况与对运算符优先级的直观理解几乎没有关系,因此,使用优先级规则有点不妥。

语法的总大小实际上不受使用优先级规则的影响。如前所述,优先规则避免了单位生产的需要,但是每个单位生产都对应一个优先声明,因此行的总数是相同的。非终端数量较少,但非终端成本很小;yacc / bison的主要烦人之处在于声明了所有语义类型,但这很容易实现自动化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何以Python方式为每个不同的输入制定规则?

为字符串 PHP 制定特定规则

如何制定规则“模板”

在excel中制定规则时遇到问题

在 Watson IoT Platform 上制定规则后未触发 Node-RED 操作

如何在Yacc中制定特定规则以先于其他规则先减少?

当日期高于Google Data Studio中的特定日期时,如何制定规则?

如何在makefile中为目标编写特定规则?

请问如何通过sql来制定规则?

制定规则谁可以计数之后,如何将事实布尔值放入插槽中?

Outlook:制定规则,当文件夹中的(未读)邮件数超过阈值时起作用

假设初始位置为(1,1),请确定在每个步骤中是否可以通过以下给定规则达到(x,y)

为什么要使一个特定规则循环运行3次?

为什么我生成的Flex / Bison解析器即使在规则中添加了语法,也会出现语法错误?

为什么使用议程过滤器激发特定规则时,Drools会验证所有其他规则?

为蓝牙键盘制定udev规则

如何从iptables中删除特定规则?

如何禁用FSharpLint中的特定规则?

为什么makefile在没有任何特定规则的情况下自动生成目标文件(* .o)?

如何在Apache中制定负面规则?

为什么在谷歌云盔甲中禁用了某些规则操作?

为强制定向网络networkD3 :: forceNetwork()中的每个链接指定颜色

如何在Unity3D中为每个场景强制定位

Excel-制定规则以强制显示三个数字,将“ null”替换为0

为什么要在MySQL中为UTF8文本数据设置排序规则?

为什么在安全组中可以选择为ICMP Echo Reply创建规则?

为什么 Solr 拼写检查中的排序规则结果为空

当应用特定规则时,在MySQL中合并结果

在 Fluent Validation C# 中检查特定规则的状态