听不懂教授在说什么。 LL(1) 解析

Can't understand what professor is saying. LL(1) parsing

我看了一遍又一遍,还是看不懂。

http://awesomescreenshot.com/09c45nhted

有几点不明白:

Epsilon 的意思,除了 "empty string"。

$ 含义

R3怎么可能?它有一个术语,它会去因子,它会去输入流中不存在的东西。

第二页的第 3 个要点

感谢任何帮助。谢谢!

Epsilon meaning, aside from "empty string"?

这个最简单的ε符号没有任何意义。

$ meaning ?

$ 可以表示输入的开始或输入的结束。但是,这意味着 end of input 作为输入的开始不能以 $ 开头,因为这样的 CFG 具有开始状态 stmt.

How R3 is possible? It has term which would go to factor which would go to something that is not exist in input stream.

初学者处理这种事情有问题。这是正常的,应该是。这种产生式是一种递归production.But,在解析输入时很容易解决。您可以注意到下一个产生式 R4:term_tail---> ϵ。每当替换 term_tail 不需要任何输入时,此产生式可用于处理该阶段。所以,关于你可能一直在想的事情没有无限递归......

3rd bullet point on second page?

是语法中可以跟在term_tail后面的输入字符。这句话是对第二个要点提到的问题的回答 "So what input character can be consumed if we apply R4?" 实际上,要为 term_tail 派生的输入字符串可以通过两种方式完成:-

EITHER term_tail ---> add_op term term_tail   OR   term_tail ---> ϵ

通过这些要点的帮助,作者试图突出 FOLLOW() 函数在自顶向下解析中的实际意义.作者的意图是评估 R4 可以应用于第 2 页顶部提到的自上而下解析的条件 "the possible input characters for which R4 can be applied?".

FOLLOW() of term_tail结果是'$',')'。当你学习 FOLLOW() 函数的规则时,你将能够计算它。

注意(非常非常重要):-

  1. FOLLOW() 向我们展示了可以在派生的非终端之后出现的终端。注意,这并不意味着最后一个终端派生自一个非终端。它是可以跟随它的一组终端。我们为文法中的所有非终结符定义 FOLLOW()。

  2. 我们如何计算 FOLLOW()?我们没有查看箭头右侧每个短语的第一个终端,而是找到我们的非终端位于任何箭头右侧的每个位置。然后我们寻找一些终端。