完全な用語を読めるように文法を書いてみると役立つかもしれません。たとえば、次のようなことを試してみてください。
S→ターム
Term → CoreTerm OptMore
CoreTerm → a | (学期)
OptMore → ε | 用語 | + 用語 | * OptMore
たとえば、a(a+a)*a を次のように導出します。
S
⇒期間
⇒ CoreTerm OptMore
⇒オプトモア
⇒用語
⇒ CoreTerm OptMore
⇒ a(CoreTerm OptMore) OptMore
⇒ a(a OptMore) OptMore
⇒ a(a + 項) OptMore
⇒ a(a + CoreTerm OptMore) OptMore
⇒ a(a + a OptMore) OptMore
⇒ a(a + a) OptMore
⇒ a(a + a)* OptMore
⇒ a(a + a)*項
⇒ a(a + a)* CoreTerm OptMore
⇒ a(a + a)* a OptMore
⇒a(a+a)*a
これが LL(1) 文法であることを確認するために、最初のセットを次に示します。
- FIRST(S) = {
- FIRST(項) = { a, ( }
- FIRST(CoreTerm) = { a, ( }
- FIRST(OptMore) = { ε, a, (, +, * }
FOLLOW セットは次のとおりです。
- フォロー(S) = {$}
- FOLLOW(用語) = {$, )}
- FOLLOW(CoreTerm) = {a, (, +, *, $}
- FOLLOW(OptMore) = {$, )}
これで、解析テーブルに入力できます。
| a | ( | + | * | ) | $
---------+------------------+------------------+--------+-----------+-----+------
S | Term | Term | | | |
Term | CoreTerm OptMore | CoreTerm OptMore | | | |
CoreTerm | a | (Term) | | | |
OptMore | Term | Term | + Term | * OptMore | eps | eps
したがって、この文法は確かに LL(1) です。