2015-09-30 34 views
1

我在读Dick Grune的Parsing Techniques - A Practical Guide,我被卡在一个正式语法的例子上(起始页22)。他开始用这样的:(书中图2.2)以上对创建正式语法的例子感到困惑

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 

重新编写引入了“清单”:

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 

然后,他更正式如下重新写这个。我认为列表是一个非终端,但我不知道它来自哪里或它的意思。另外,除非我误读文本,否则图2.2与第一个图应该是相同的,但它们并不完全匹配。例如,图1中第一个数字的规则#2(“句子可以被句子替换,名称”)在哪里。 2.2?

回答

1

您没有正确复制表格。 2必须是:

列表 - >名称

列表 - >列表,名称

列表可以是单个名称或列表,逗号和名字。

例如“迪克,汤姆和哈里”是一个有效的句子,因为我们构造它的方式如下:

句子(替换句子)

列表结束(列表将被替换为“列表中,名称”)

列表,名称结束(更换名单与“列表,名称”再次)

列表,名称,名称结尾(现在更换名称列表)

名称,姓名,名称结束(更换“名称结束”与“和名称”)

名称,姓名和名称(更换名称)

家伙,汤姆和哈里

我希望这会回答你的第二个问题也是如此。

+0

感谢您指出错字。但是,这并不能让我在那里。 “列表”只是一个符号,如“结束”和“名称”? – WebUserLearner

+0

是的。它不是终端。唯一的终端是“汤姆”,“迪克”和“哈里”。 您可以在规则1.2和2.2的组合中找到规则#2,因为“语句”可能被“列表结尾”替换,“列表”可能会被替换为“列表,名称”。因此,您可以在上面的文本中获得对应于句子,名称的“List,Name End”。 – Pluto