2009-03-14 12 views
0

(括弧と単項演算子を使用して)算術式のパーサーを作成するタスクが割り当てられました。この文法が正しいかどうか、それはLL(1)形態であり、(安いものから高いものへ)この算術式の文法

S -> TS' 
S' -> +TS' | -TS' | epsilon 
T -> UT' 
T' -> *UT' | /UT' | epsilon 
U -> VX 
X -> ^U | epsilon 
V -> (W) | -W | W | epsilon 
W -> S | number 

優先

のための解析テーブルを構築し、実際の問題を持つのであれば、私はちょうどたい知っています
(), unary – 
^ 
*,/
+, - 

バイナリ演算子の結合性

^= right 
+, -, *,/= left 

+0

あなたに伝える前に、もう少し改行が必要です!それを少しフォーマットしてみてください。 –

+0

フォーマットを完了しました:D –

答えて

1

LL(1)形式ですか?

文法がLL(1)かどうかを確認するには、本番ルールを拡張する必要があります。右手側の最初のものとして左手側が現れるようなプロダクションのシーケンスを生成することができれば、文法はLL(1)ではありません。例えば

、このルールを考えてみます。

X --> X | x | epsilon 

それは左再帰的なので、あなたが一番左の生産を適用する場合、これは明らかに、LL(1)文法の一部にすることはできません。しかし、これはどうですか?

X --> Y | x 
Y --> X + X 

これはどちらかLL(1)文法ではありませんが、それはより微妙です:最初に、あなたはXを適用する必要があります - > Y、その後、Y適用 - あなたが今持っていることを確認するために> X + XをX - > X + X、これは左回帰です。

+0

左の再帰を削除し、左の分解を行いましたが、これに対して解析テーブルを作成できません: –

0

単項演算子では何も見当たりません。これを代わりに試してみてください...

V - >(W)| -W | + W |イプシロン

+0

[S ' - > + TS' | -TS '|ε [+ TS '] - > [+ UεS'] - > [+ VXεS '] - > [+εε{ –

+0

私は単項を意味するので、プラスはバイナリプラスと同じプリプリエンスを持ち、それは間違っているでしょう。 –