如果这篇博客帮助到你,可以请我喝一杯咖啡~
CC BY 4.0 (除特别声明或转载文章外)
考虑以下文法,写出每个非终端符号的 FIRST 集和 FOLLOW 集
\[S\to aTUV\vert bV\\ T\to U\vert UU\\ U\to\varepsilon\vert bV\\ V\to\varepsilon\vert cV\]| FIRST | FOLLOW | |
|---|---|---|
| $S$ | $a,b$ | $\text{\textdollar}$ |
| $T$ | $\varepsilon,b$ | $\text{\textdollar},b,c$ |
| $U$ | $\varepsilon,b$ | $\text{\textdollar},b,c$ |
| $V$ | $\varepsilon,c$ | $\text{\textdollar},b,c$ |
考虑以下文法
\[S\to(L)\vert a\\ L\to L,S\vert S\]消除文法的左递归
\[S\to(L)\vert a\\ L\to ST\\ T\to ,ST\vert\varepsilon\]构造文法的 LL(1) 分析表
根据
| FIRST | FOLLOW | |
|---|---|---|
| S | $(\ a$ | $\text{\textdollar}\ )\ a$ |
| L | $(\ a$ | $)$ |
| T | $,\ \varepsilon$ | $)$ |
可得
| $($ | $)$ | $a$ | $,$ | $\text{\textdollar}$ | |
|---|---|---|---|---|---|
| S | $S\to(L)$ | $S\to a$ | |||
| L | $L\to ST$ | $L\to ST$ | |||
| T | $T\to\varepsilon$ | $T\to,ST$ |
对于句子 $(a, (a, a))$,给出语法分析的详细过程(参照课本 228 页的图 4.21)
| MATCH | STACK | IN | OUT |
|---|---|---|---|
| $S\text{\textdollar}$ | $(a,(a,a))\text{\textdollar}$ | ||
| $(L)\text{\textdollar}$ | $(a,(a,a))\text{\textdollar}$ | $S\to(L)$ | |
| $($ | $L)\text{\textdollar}$ | $a,(a,a))\text{\textdollar}$ | |
| $($ | $ST)\text{\textdollar}$ | $a,(a,a))\text{\textdollar}$ | $L\to ST$ |
| $($ | $aT)\text{\textdollar}$ | $a,(a,a))\text{\textdollar}$ | $S\to a$ |
| $(a$ | $T)\text{\textdollar}$ | $,(a,a))\text{\textdollar}$ | |
| $(a$ | $,ST)\text{\textdollar}$ | $,(a,a))\text{\textdollar}$ | $T\to,ST$ |
| $(a,$ | $ST)\text{\textdollar}$ | $(a,a))\text{\textdollar}$ | |
| $(a,$ | $(L)T)\text{\textdollar}$ | $(a,a))\text{\textdollar}$ | $S\to L$ |
| $(a,($ | $L)T)\text{\textdollar}$ | $a,a))\text{\textdollar}$ | |
| $(a,($ | $ST)T)\text{\textdollar}$ | $a,a))\text{\textdollar}$ | $L\to ST$ |
| $(a,($ | $aT)T)\text{\textdollar}$ | $a,a))\text{\textdollar}$ | $S\to a$ |
| $(a,(a$ | $T)T)\text{\textdollar}$ | $,a))\text{\textdollar}$ | |
| $(a,(a$ | $,ST)T)\text{\textdollar}$ | $,a))\text{\textdollar}$ | $T\to,ST$ |
| $(a,(a,$ | $ST)T)\text{\textdollar}$ | $a))\text{\textdollar}$ | |
| $(a,(a,$ | $aT)T)\text{\textdollar}$ | $a))\text{\textdollar}$ | $S\to a$ |
| $(a,(a,a$ | $T)T)\text{\textdollar}$ | $))\text{\textdollar}$ | |
| $(a,(a,a$ | $)T)\text{\textdollar}$ | $))\text{\textdollar}$ | $T\to\varepsilon$ |
| $(a,(a,a)$ | $T)\text{\textdollar}$ | $)\text{\textdollar}$ | |
| $(a,(a,a)$ | $)\text{\textdollar}$ | $)\text{\textdollar}$ | $T\to\varepsilon$ |
| $(a,(a,a))$ | $\text{\textdollar}$ | $\text{\textdollar}$ |
考虑以下文法,这一文法是否是 LL(1) 文法?给出理由
\[S\to aSbS\vert bSaS\vert\varepsilon\]不是。因为 $\text{FIRST}(S)={a,b,\varepsilon},\text{FOLLOW}(S)={\text{\textdollar},a,b}$,而且 $S\to\varepsilon$ 但 $\text{FIRST}(S)\cap\text{FOLLOW}(S)\neq\emptyset$,不符合 LL(1) 文法的性质。
