我一次又一次地阅读它但却无法理解。
http://awesomescreenshot.com/09c45nhted
我不明白的一些事情:
Epsilon的意思是,除了"空字符串"。
$含义
R3如何可能?它有一个术语可以用于输入流中不存在的因素。
第二页上的第3个要点
我感谢任何帮助。谢谢!
答案 0 :(得分:2)
除了“空字符串”之外,Epsilon的意思是什么?
这个ε符号以最简单的方式表示没有意义。
$含义?
$可以表示输入的开始或输入的结束。但是,这意味着end of input
作为输入的开始不能以$开头,因为这样的CFG具有开始状态stmt
。
R3如何可能?它有一个术语可以考虑哪个因素 转到输入流中不存在的东西。
初学者在处理这类事情时遇到问题。这是正常的,应该是。这种生产是一种递归生产。但是,在解析输入时它很容易解决。您可以注意到下一个生产R4:term_tail ---> ε。只要term_tail的替换不需要任何输入,那么这个生产就可以用来处理那个阶段。所以,没有无限的递归,你可能一直在想什么...
第二页上的第3个要点?
输入字符可以在语法中跟随term_tail。此语句是第二个项目符号中提到的问题的答案“那么如果我们申请,可以使用哪个输入字符R4?“实际上,为term_tail派生的输入字符串可以通过两种方式完成: -
EITHER term_tail ---> add_op term term_tail OR term_tail ---> ϵ
通过这些项目符号的帮助, 作者试图在自上而下的解析 中强调FOLLOW()函数的实际意义。作者的目的是评估R4可以应用于自上而下解析的条件,如第2页顶部所述“可以应用R4的可能输入字符?”。
FOLLOW() of term_tail
出现'$',')'。当你学习FOLLOW()函数的规则时,你将能够计算出来。
注意(非常重要): -
FOLLOW()向我们展示了可以在派生的非终端之后出现的终端。注意,这并不意味着从非终端派生的最后一个终端。这是可以追随它的终端组。我们为语法中的所有非终端定义FOLLOW()。
我们如何计算出FOLLOW()?我们发现我们的非终端位于任何箭头右侧的每个地方,而不是查看箭头右侧每个短语的第一个终端。然后我们寻找一些终端。