raj*_*mar 6 compiler-construction recursion parsing automata pushdown-automaton
最近我遇到了先查找后跟踪的问题
S->cAd
A->Ab|a
Run Code Online (Sandbox Code Playgroud)
在这里,我对 A 的第一个感到困惑,哪个是正确的 {a} , {empty,a} ,因为 A 的产生式中存在左递归。我很困惑是否在 A 的第一个中包含空字符串 任何帮助将不胜感激。-------------已编辑----------------
第一个和接下来的是什么,,这是我见过的如此令人困惑的语法
S->SA|A
A->a
Run Code Online (Sandbox Code Playgroud)
我需要使用解析表证明这个语法不在 LL(1) 中,但无法做到,因为我没有在单个单元格中获得 2 个条目。
首先,您需要删除导致的左递归
S -> cAd
A -> aA'
A' -> bA' | epsilon
Run Code Online (Sandbox Code Playgroud)
然后,你可以计算
FIRST(A) = a // as a is the only terminal nderived first from A.
Run Code Online (Sandbox Code Playgroud)
EDIT :-
对于你的第二个问题,
S -> AS'
S' -> AS' | epsilon
A -> a
FIRST(A) = a
FIRST(S) = a
FIRST(S') = {a,epsilon}.
Run Code Online (Sandbox Code Playgroud)
在计算之前去除左递归的思想FIRST()
可以在这里FOLLOW()
学习。