grammar - Bjarne 的编程书中的列表语法示例有误吗?

标签 grammar

此时此刻,我正在阅读 Bjarne Stroustrups 的书“使用 C++ 编程原则和实践”的第 6.4.2 段。在本段中,他演示了以下列表语法:

List:
    "{" Sequence "}"
Sequence:
    Element
    Element "," Sequence
Element:
    "A"
    "B"

他说下面是按照上面语法的List:

{ A }
{ B }
{ A,B }
{A,A,A,A,B }

不应该 Element ","SequenceSequence ","Element 来制作 { A,B } { A,A,A,A,B } 根据此语法正确列表?

我如何理解这个语法,A 是一个Sequence。这使得 B 成为 Element,对吧?

最佳答案

Element ","SequenceSequence ","Element 在这里是等价的。

AB 都是元素:

Element:
    "A"
    "B"

但每个 Element 也是一个有效的 Sequence:

Sequence:
    Element

基本上,

Sequence:
  Element "," Sequence

的意思是“如果你有一个元素、一个逗号和一个序列,那就形成了另一个序列”。 IE。此规则允许您在序列的开头添加元素以扩展它。

Sequence:
  Sequence "," Element

的意思是“如果你有一个序列、一个逗号和一个元素,那将形成另一个序列”。此规则允许您在序列末尾添加元素以扩展它。

无论哪种情况,最终结果都是(逗号分隔)元素的列表。

关于grammar - Bjarne 的编程书中的列表语法示例有误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56040128/

相关文章:

grammar - Peg.JS 中的左递归错误

c++ - 帮助 boost 语法

grammar - 如何解决移位/减少冲突?

parsing - 带 epsilon 的 SLR(1) 解析器

javascript - 在哪里可以找到 ECMAscript/Actionscript/Javascript 的 yacc 语法

grammar - 正则语言和正则文法的区别

javascript - 在 Jison 中制作数组

algorithm - 如何将扩展巴科斯诺尔文法转换为其正常表示形式?

dictionary - 名词、动词、形容词等的单独单词列表

java - Antlr:对尚未解析的数据的引用