0

私は LL(1) パーサーのジェネレーターを作成しています。私の入力は CoCo/R 言語仕様です。その入力用のスキャナージェネレーターは既に持っています。次の仕様があるとします。

COMPILER 1

CHARACTERS

digit="0123456789".

TOKENS
number = digit{digit}. 
decnumber = digit{digit}"."digit{digit}.

PRODUCTIONS

Expression = Term{"+"Term|"-"Term}.      
Term = Factor{"*"Factor|"/"Factor}.       
Factor = ["-"](Number|"("Expression")").
Number = (number|decnumber).

END 1.

したがって、この文法によって生成されたパーサーが単語「1+1」を受け取った場合、それは受け入れられます。つまり、解析ツリーが見つかります。

私の質問は、文字「+」はトークンで定義されたことはありませんが、非終端の「式」に表示されます。生成された Scanner をどのように認識すればよいですか? それはトークンとして認識されません。

これは有効な入力ですか?この端末を TOKENS に追加してから、スキャナーがスキップするエラー ルーチンを検討する必要がありますか?

通常の言語仕様はこれをどのように処理しますか?

4

1 に答える 1

1

文法規則 (文法表記自体の一部ではない) の RHS にあるものはすべて、非終端記号または終端記号 (「トークン」と同義) のいずれかでなければなりません。そうです、オペレータートークンを作成する必要があります。CoCo/R のドキュメントを見ると、リテラル文字列を PRODUCTIONS セクションの終端記号として受け入れるように見えるので、他に何もする必要はないかもしれません...パーサー ジェネレーターは既にそれらをトークンとして扱っているはずです。

于 2010-05-30T08:47:20.100 に答える