Bjarne 的编程书中的列表语法示例有误吗?
Mistake in list grammar example in Bjarne's programming book?
此刻我正在阅读 Bjarne Stroustrups 的书 'Programming Principles and Practice using C++' 的第 6.4.2 段。在本段中,他演示了以下列表语法:
List:
"{" Sequence "}"
Sequence:
Element
Element "," Sequence
Element:
"A"
"B"
他说根据上面的语法,下面是List:
{ A }
{ B }
{ A,B }
{A,A,A,A,B }
Element "," Sequence
不应该是 Sequence "," Element
以使 { A,B }
和 {A,A,A,A,B }
根据此语法正确列表吗?
我怎么理解这个语法,A
是一个Sequence
。这使得 B
成为 Element
,对吧?
左右递归是等价的,最后所有出现的Sequence
都必须替换为Element
,顺序无关紧要。
{ A , B }:
- 列表
- { 序列 }
- { 元素 , 序列 }
- { 元素 , 元素 }
- {甲,乙}
{ A , A , A , A , B }:
- 列表
- { 顺序 }
- { 元素 , 序列 }
- { 元素 , 元素 , 序列 }
- { 元素 , 元素 , 元素 , 序列 }
- { 元素 , 元素 , 元素 , 元素 , 序列 }
- { 元素 , 元素 , 元素 , 元素 , 元素 }
- { A , A , A , A , B }
因此,两者都可以从语法中生成,因此都是正确的列表。
Element "," Sequence
和 Sequence "," Element
在这里是等价的。
A
和B
都是Element
:
Element:
"A"
"B"
但是每个 Element
也是有效的 Sequence
:
Sequence:
Element
基本上,
Sequence:
Element "," Sequence
表示"if you have an element, a comma, and a sequence, that forms another sequence"。 IE。此规则允许您在序列的开头添加元素以扩展它。
Sequence:
Sequence "," Element
表示"if you have a sequence, a comma, and an element, that forms another sequence"。此规则允许您在序列末尾添加元素以扩展它。
无论哪种情况,最终结果都是(逗号分隔)元素列表。
在 List {A,A,A,A,B}
中,A,A,A,A,B
是一个 Sequence.
这进一步分解为 A
、A,A,A,B
,其中 A
是 元素 (很方便,因为它是单个 terminal),A,A,A,B
是一个 Sequence。这一直持续到您到达构成序列的两个单一终端,它们都是元素。
此刻我正在阅读 Bjarne Stroustrups 的书 'Programming Principles and Practice using C++' 的第 6.4.2 段。在本段中,他演示了以下列表语法:
List:
"{" Sequence "}"
Sequence:
Element
Element "," Sequence
Element:
"A"
"B"
他说根据上面的语法,下面是List:
{ A }
{ B }
{ A,B }
{A,A,A,A,B }
Element "," Sequence
不应该是 Sequence "," Element
以使 { A,B }
和 {A,A,A,A,B }
根据此语法正确列表吗?
我怎么理解这个语法,A
是一个Sequence
。这使得 B
成为 Element
,对吧?
左右递归是等价的,最后所有出现的Sequence
都必须替换为Element
,顺序无关紧要。
{ A , B }:
- 列表
- { 序列 }
- { 元素 , 序列 }
- { 元素 , 元素 }
- {甲,乙}
{ A , A , A , A , B }:
- 列表
- { 顺序 }
- { 元素 , 序列 }
- { 元素 , 元素 , 序列 }
- { 元素 , 元素 , 元素 , 序列 }
- { 元素 , 元素 , 元素 , 元素 , 序列 }
- { 元素 , 元素 , 元素 , 元素 , 元素 }
- { A , A , A , A , B }
因此,两者都可以从语法中生成,因此都是正确的列表。
Element "," Sequence
和 Sequence "," Element
在这里是等价的。
A
和B
都是Element
:
Element:
"A"
"B"
但是每个 Element
也是有效的 Sequence
:
Sequence:
Element
基本上,
Sequence:
Element "," Sequence
表示"if you have an element, a comma, and a sequence, that forms another sequence"。 IE。此规则允许您在序列的开头添加元素以扩展它。
Sequence:
Sequence "," Element
表示"if you have a sequence, a comma, and an element, that forms another sequence"。此规则允许您在序列末尾添加元素以扩展它。
无论哪种情况,最终结果都是(逗号分隔)元素列表。
在 List {A,A,A,A,B}
中,A,A,A,A,B
是一个 Sequence.
这进一步分解为 A
、A,A,A,B
,其中 A
是 元素 (很方便,因为它是单个 terminal),A,A,A,B
是一个 Sequence。这一直持续到您到达构成序列的两个单一终端,它们都是元素。