2010-11-26 43 views
0

私は以下の文法を持っています。それを修正する方法はわかりません。私はそれがヴィルト条件にambiguosですが、バイソンはLRパーザ使用しているので、多分これが無関係である場合いることを確認しますこの文法の助けを借りて、BisonのXMl

最初のバージョンを、7シフト/削減

S->DE 
D->aKc 
E-><J K E2 
E2-> /> | > H I 
I-> </J> 
K-> | KL 
L-> j ='N' 
H-> | HT 
T-> N E3 
E3-> | E N 
N -> | N N2 
N2-> text | j 
jは有効な単語である

、テキストは特別な文字列を含まないテキストのみであり、aとcはxml宣言を囲む文字列です。 表示される競合の1つはシフト/リダクションで、ルールE3 - >/が空の場合 /が役に立たなくなります。私はイプシロン遷移

セカンドバージョン2shift/

S-> D E 
D-> a D2 
D2->|K c 
E-> <J E1 
E1-> E2 | K E2 
E2-> /> | > HI 
I-> </J> 
K-> L | K L 
L-> J= 'N' 
N-> N N2 | N2 
N2-> X | J 
H-> HT | T 
T-> N|E 

を減らす2シフトでいくつかの改善が問題を軽減します

は、後にXまたはJを読むことで、他のXまたはJが来ますそれはTまたはシフトを減らし、N> N N2を使用する準備ができているかどうかを知らない。 N2

第三版2shift /減らすが、

S-> D E 
D-> a D2 
D2-> K c | c  // a is "<?xml version=\"1.0\"" and c is "?>" 
E-> <J E1 
E1-> E2 | K E2 
E2-> /> | > E3 // this is the other correction, for the case of an empty element 
E3-> HI | I 
I-> </J> 
K-> L | K L 
L-> J= 'N' 
N-> N N2 | N2 
N2-> X | J // X and J are word(any strange word) and ValidWord(used in element and atributes names) 
H-> HT | T 
T-> N|E 
+0

この宿題はありますか? – LarsH

答えて

1

よく私のサンプルXMLファイルを認識することは、それが得ることができると私はあなたが紛争の多くを取得している想像と同じくらい不可解です。

節Nの左回帰| - | N N2は無限ループを示唆し、第2のNは第1の規則を使用して空になるまで連続的に減少する。

E3->空でN->空で、かつT->空で、最初の節でH->空の場合、HT->空であるため、H->空に従います。等々。

私は、パーサ記述をよりよく理解するために何か簡単に始めたいと思います。

+0

ありがとう、ちなみに私はこれに重大なトラブルを抱えています。私はバイソンの文書を読んで、再帰を入れなければならない場合は、左になければなりません。私はいくつかのおもちゃの例をしましたが、私が必要としているのは、これはxmlのパーサです...私は合計7シフト/競合を減らしています、私の主な制限はどのようにεの遷移と対処し、パーサーの妥当性を破ることはありません.. ..あなたが改善を私に知らせるならば、読書を続けるつもりです – mjsr

+0

私はいくつかの改善を行います、第二のバージョンを見てください – mjsr

+0

あなたが暗闇の中で推測するのではなく、SR/RRあなたが得ているコンフリクト – smirkingman

関連する問題