我正在阅读Dick Grune的Parsing Techniques - A Practical Guide,我仍然坚持一个正式语法的例子(从第22页开始)。他从这开始:
0. Name may be replaced by “tom”
Name may be replaced by “dick”
Name may be replaced by “harry”
1. Sentence may be replaced by Name
2. Sentence may be replaced by Sentence, Name
3. “, Name” at the end of a Sentence must be replaced by “and Name”
before Name is replaced by any of its replacements
4. a sentence is finished only when it no longer contains non-terminals
5. we start our replacement procedure with Sentence
然后他更正式地重写这个如下:
0. Name -> tom
Name -> dick
Name -> harry
1. Sentence -> Name
Sentence -> List End
2. List -> Name
List -> List , Name
3. , Name End -> and Name
4. the start symbol is Sentence
上面的重写(书中的图2.2)介绍" List"。我假设List是一个非终端,但我无法弄清楚它的来源或含义。
另外,除非我误读了文字,否则图2.2应与第一张图相同,但它们并不完全匹配。例如,图中第一个数字的规则#2(" Sentence可能被Sentence,Name"替换)在哪里? 2.2
答案 0 :(得分:1)
您没有正确复制表格。 2必须是:
列表 - >名称
列表 - >列表,名称
列表可以是单个名称,也可以是列表,逗号和名称。
e.g。 “dick,tom and harry”是一个有效的句子,因为我们按照以下方式构建它:
句子(替换句子)列表结束(列表将替换为“列表,名称”)
列表,名称结束(再次将列表替换为“列表,名称”)
列表,名称,名称结束(现在用名称替换列表)
名称,名称,名称结束(将“,名称结尾”替换为“和名称”)
名称,名称和名称(替换名称)
迪克,汤姆和哈利我希望这也能回答你的第二个问题。