LL(1)S→a |的解析表ba | C

时间:2016-03-08 02:01:57

标签: parsing context-free-grammar ll context-free-language

我是LL(1)解析的新手,我正在尝试弄清楚如何为该语言创建一个解析表:

 S → Saa|b

 S-> A|B
 A-> aa
 B-> bb

 S → AB
 A → aa
 B → bb

1 个答案:

答案 0 :(得分:3)

我将向您展示第一个语法的完整程序。告诉我你是否有任何方面需要更深入地研究。

S→Saa | B'/ P>

1。消除左递归

S→bS'

S'→aaS'| ε

2。左因素

不需要这种语法。

第3。计算FIRST和FOLLOW并检查语法是否为LL(1)

------------------------------------
|   A → α   | FIRST(α) | FOLLOW(A) |
------------------------------------
|  S → bS'  |     a    |      $    |
------------------------------------
| S' → aaS' |     a    |      $    |
------------------------------------
|   S' → ε  |     ε    |      $    |
------------------------------------

4。构建解析表

for each prodution A → α
  for each a ∈  FIRST(α)
    add production A → α to M[A,a]
  if ε ∈ FIRST(α) then
    for each b ∈ FOLLOW(A)
      add A → α to M[A,b]

结果:

-------------------------------------
|    |    a     |    b     |   $    |
-------------------------------------
| S  |          |  S → bS' |        |
-------------------------------------
| S' | S → aaS' |          | S' → ε |
-------------------------------------

语法是LL(1)。这是其他语法的结果。

1.
-------------------------------------
|    |    a     |    b     |   $    |
-------------------------------------
| S  |   S → A  |  S → B   |        |
-------------------------------------
| A  |  A → aa  |          |        |
-------------------------------------
| B  |          |  B → bb  |        |
------------------------------------- 

2.
-------------------------------------
|    |    a     |    b     |   $    |
-------------------------------------
| S  |   S → AB |          |        |
-------------------------------------
| A  |  A → aa   |         |        |
-------------------------------------
| B  |          |  B → bb  |        |
-------------------------------------