0

I would like to learn how to solve transferring grammar to LL(1). I have following problem:

E -> E + E
E -> E * E
E -> E[ E ]
E -> int
E -> id

Regarding operators '+' and '*' I know the solution:

E -> TA
A -> + TA
A -> epsilon

T -> FB
B -> * FB
B -> epsilon

the problem is what to do with indexing operator while in the same time we have to avoid left recursion?

Does anybody know the solution?

Thanks.

4

1 に答える 1

1

(コメントから昇格):

算術演算子の提案されたソリューションに基づいて:

E -> T A
A -> + T A
A -> epsilon

T -> F B
B -> * F B
B -> epsilon

ほとんど類似したものを追加できます。

F -> G C
F -> int
C -> [ E ] C
C -> epsilon

そして、次で終了します。

G -> id
G -> ( E )

最後の行の括弧内の表現は元の問題にはありませんでしたが、追加するのが妥当と思われます。このスタンザは、整数リテラルのインデックス付き式 (など) を拒否Fするという点で他の 2 つと異なります。3[x]CF -> intG -> int

于 2013-08-15T15:20:39.423 に答える