无需登录 数据私有 本地保存

LL(1) 分析表生成器 - 上下文无关文法解析

35
0
0
0
上下文无关文法输入

输入产生式规则,每行一条,使用 -> 分隔,| 分隔候选式,ε 表示空串

格式说明:符号之间请用空格分隔。非终结符通常为大写字母(可带撇号如 E'),终结符为小写标识符或运算符符号。空串用 ε 表示。开始符号默认为第一条产生式的左部。
FIRST 集
FOLLOW 集
LL(1) 预测分析表
正常条目 冲突条目 空条目

输入文法并点击"生成分析表"查看结果

支持 FIRST集、FOLLOW集、LL(1)分析表生成与冲突检测

常见问题与知识点
什么是LL(1)文法?
LL(1)文法是一种上下文无关文法,可以通过自顶向下、从左到右扫描输入、每次只向前查看1个符号来进行确定性解析。"LL"代表Left-to-right scan, Leftmost derivation。LL(1)文法没有左递归和左公共因子,其预测分析表中每个单元格最多只有一个产生式
FIRST集是什么?
FIRST(X)是从符号X可以推导出的所有串的首终结符集合。如果X可以推导出空串ε,则ε也属于FIRST(X)。对于终结符a,FIRST(a) = {a}。FIRST集是构建LL(1)分析表的关键步骤之一。
FOLLOW集是什么?
FOLLOW(A)是在某个句型中紧跟在非终结符A之后的所有终结符的集合(包括输入结束标记$)。如果A是开始符号,则$ ∈ FOLLOW(A)。FOLLOW集用于在分析表中放置ε产生式。
如何判断文法是否为LL(1)?
构建预测分析表后,检查每个单元格:如果任意单元格包含多个不同的产生式,则该文法不是LL(1)文法。常见原因包括:存在左递归、存在左公共因子、存在二义性(如悬空else问题)。
分析表中的$符号代表什么?
$(或称为EOF)代表输入结束标记。当解析器看到$时,表示输入已全部读取完毕。在FOLLOW集中,开始符号的FOLLOW集初始包含$。在分析表中,$是一列,用于指导解析器在输入结束时采取的动作。
为什么我的文法有冲突?
分析表冲突通常由以下原因引起:①左递归(如A→Aa|b),需要先消除左递归;②左公共因子(如A→ab|ac),需要提取左公因子;③二义性(如经典悬空else问题)。消除这些问题后,通常可以得到LL(1)文法。