无法理解教授在说什么。 LL(1)解析

时间:2015-01-08 21:14:50

标签: parsing compiler-construction programming-languages

我一次又一次地阅读它但却无法理解。

http://awesomescreenshot.com/09c45nhted

我不明白的一些事情:

Epsilon的意思是,除了"空字符串"。

$含义

R3如何可能?它有一个术语可以用于输入流中不存在的因素。

第二页上的第3个要点

我感谢任何帮助。谢谢!

1 个答案:

答案 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()函数的规则时,你将能够计算出来。

注意(非常重要): -

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

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