ZH
我的工具

FIRST 与 FOLLOW 计算器(LL(1) 分析表)

计算文法的 nullable、FIRST、FOLLOW 集合和 LL(1) 分析表,找出冲突和左递归,并逐步演示预测分析的过程。

LL(1)
Yes
无冲突
FIRST 与 FOLLOW
分析结果
接受

开始符号:E(第一条规则的左部)。$ 表示输入结束。

集合
非终结符可推出空串FIRSTFOLLOW
E否{ (, id }{ ), $ }
E'是{ +, ε }{ ), $ }
T否{ (, id }{ +, ), $ }
T'是{ *, ε }{ +, ), $ }
F否{ (, id }{ +, *, ), $ }
LL(1) 分析表
+*()id$
EE → T E'E → T E'
E'E' → + T E'E' → εE' → ε
TT → F T'T → F T'
T'T' → εT' → * F T'T' → εT' → ε
FF → ( E )F → id
"id + id * id" 的预测分析
栈输入动作
E $id + id * id $E → T E'
T E' $id + id * id $T → F T'
F T' E' $id + id * id $F → id
id T' E' $id + id * id $匹配:id
T' E' $+ id * id $T' → ε
E' $+ id * id $E' → + T E'
+ T E' $+ id * id $匹配:+
T E' $id * id $T → F T'
F T' E' $id * id $F → id
id T' E' $id * id $匹配:id
T' E' $* id $T' → * F T'
* F T' E' $* id $匹配:*
F T' E' $id $F → id
id T' E' $id $匹配:id
T' E' $$T' → ε
E' $$E' → ε
$$接受
我的工具 →
广告

构造自顶向下(LL(1))分析器,要先为每个非终结符求出三样东西:它能否推出空串、它的 FIRST 集合和它的 FOLLOW 集合。由此得到预测分析表,表中任何一格出现两条规则就是冲突,说明文法不适合 LL(1)。这个计算器会算出这一切,列出冲突、消除左递归,并跟踪你输入的预测分析过程。

使用方法

  1. 每行输入一条规则,如 E -> T E',候选式之间用 | 分隔。
  2. 空串用 ε(或 eps)表示;第一条规则的左部是开始符号。
  3. 可选:输入要分析的字符串。
  4. 查看各集合、LL(1) 表、冲突和分析过程。

计算公式

FIRST(αβ) = FIRST(α) ∪ (若 α ⇒* ε 则加上 FIRST(β)) · A → αBβ: FIRST(β) − {ε} ⊆ FOLLOW(B),若 β ⇒* ε 则 FOLLOW(A) ⊆ FOLLOW(B)

这些集合通过反复应用上述规则直到不再变化而得到,开始符号的 FOLLOW 中加入 $。规则 A → α 会放入表格 M[A, a] 中,a 取遍 FIRST(α) 中的每个终结符;当 α 可以推出空串时,还要对 FOLLOW(A) 中的每个符号放入。左递归的检测也包括经过可推出空串的前缀的情形(间接左递归),并按 Aho、Lam、Sethi、Ullman 的标准算法通过添加带撇的非终结符来消除。

示例

对输入框中的表达式文法,FIRST(E) = FIRST(T) = FIRST(F) = { (, id },FIRST(E') = { +, ε },FIRST(T') = { *, ε };FOLLOW(E) = FOLLOW(E') = { ), $ },FOLLOW(T) = FOLLOW(T') = { +, ), $ },FOLLOW(F) = { +, *, ), $ }。没有任何一格有两条规则,所以这个文法是 LL(1),并且 "id + id * id" 被接受。左递归的 E -> E + T | T 会被改写成正是这个文法。

常见问题

为什么 FIRST 里有 ε,而 FOLLOW 里从来没有?

当 A 能推出空串时,FIRST(A) 含有 ε。FOLLOW(A) 列出的是可以紧跟在 A 后面的终结符,外加表示输入结束的 $;ε 并不是能跟在任何符号后面的符号。

怎样写长度超过一个字符的符号?

用空格分隔每个符号,例如 E -> E + T | id。在单字符模式下,大写字母(可带 ' 或数字)是非终结符,其他字符都是终结符。

冲突是什么意思?

同一个非终结符的两条规则以相同的向前看记号开头,预测分析器无法选择。提取左公因子、消除左递归或修改语言通常能解决;有些语言,例如悬空 else,根本不是 LL(1)。

资料来源

最后更新:

引用此工具
APA

kakaoCalc. (2026, November 8). FIRST 与 FOLLOW 计算器(LL(1) 分析表). https://kakao.mobile/zh/tools/context-free-grammar-tool/

MLA

“FIRST 与 FOLLOW 计算器(LL(1) 分析表).” kakaoCalc, 8 Nov. 2026, kakao.mobile/zh/tools/context-free-grammar-tool/.

广告