【问题标题】:Can't understand what professor is saying. LL(1) parsing [closed]听不懂教授在说什么。 LL(1) 解析 [关闭]
【发布时间】:2023-03-19 15:00:02
【问题描述】:

我一遍又一遍地阅读它,但无法理解。

http://awesomescreenshot.com/09c45nhted

一些我不明白的事情:

Epsilon 的意思,除了“空字符串”。

$的含义

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

第二页的第三个要点

感谢您的帮助。谢谢!

【问题讨论】:

  • 请阅读How to Ask。到目前为止,这个问题并不适合 SO。
  • ε 的确切意思是“什么都没有”。 $ 表示输入结束(按照惯例)。 R3 说 term-tail 是一个 add-op 后跟一个 term 后跟一个 term-tail;附加操作是+-(规则11 和12),因此它将匹配输入中的下一个标记,即+。这不是一个合适的 SO 问题。
  • @EngineerDollery 我应该删除它吗?
  • 您可以重写它,包含隐藏在该链接后面的信息,或者您可以删除它。如果您等待几个小时,这可能会为您删除。

标签: parsing compiler-construction programming-languages


【解决方案1】:

Epsilon 的意思,除了“空字符串”?

这个 ϵ 符号以最简单的方式没有任何意义。

$是什么意思?

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

R3 怎么可能?它的期限会成为影响因素 转到输入流中不存在的内容。

初学者很难处理这种事情。这是正常的,应该是。这种生产是一种递归生产。但是,解析输入很容易解决。你可以注意到下一个产生式 R4:term_tail---> ϵ。只要 term_tail 的替换不需要任何输入,那么这个产生式就可以用来处理那个阶段。因此,对于您可能一直在想的东西,没有无限递归......

第二页的第三个要点?

是语法中可以跟在term_tail后面的输入字符。这句话是对第二个要点中提到的问题的回答“那么如果我们应用什么输入字符可以被消费R4?” 实际上,将为 term_tail 派生的输入字符串可以通过两种方式完成:-

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

通过这些项目符号的帮助,作者试图强调 FOLLOW() 函数在自顶向下解析中的实际意义。作者的意图是评估 R4 可以应用于自上而下解析的条件,如第二页顶部“R4 可以应用的可能输入字符?”。

FOLLOW() of term_tail 是 '$',')'。当您学习 FOLLOW() 函数的规则时,您将能够计算出这个。

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

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

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

【讨论】:

    猜你喜欢
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    相关资源
    最近更新 更多