首先找到混淆并遵循左递归语法

时间:2014-12-30 06:28:41

标签: parsing recursion compiler-construction automata pushdown-automaton

最近我遇到了先找到并按照

的问题
S->cAd
A->Ab|a

在这里,我对A的第一个感到困惑 哪一个是正确的{a},{empty,a},因为在A的制作中有左递归。 我很困惑是否在A的第一个中包含空字符串 任何帮助,将不胜感激。 -------------编辑---------------

首先是什么,并遵循这一点,这是我见过的令人困惑的语法

S->SA|A
A->a

我需要证明这个语法不是在LL(1)中使用解析表但是无法做到,因为我没有在单个单元格中获得2个条目。

1 个答案:

答案 0 :(得分:1)

首先,您需要删除导致

的左递归
S -> cAd
A -> aA'
A' -> bA' | epsilon

然后,你可以计算

FIRST(A) = a         // as a is the only terminal nderived first from A.

<强> EDIT :-

关于第二个问题,

S -> AS'
S' -> AS' | epsilon
A -> a

FIRST(A) = a
FIRST(S) = a
FIRST(S') = {a,epsilon}.

在计算FIRST()FOLLOW()之前删除左递归的想法可以学习here