私は 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 に追加してから、スキャナーがスキップするエラー ルーチンを検討する必要がありますか?
通常の言語仕様はこれをどのように処理しますか?