字句エラーは、比較的簡単に検出され、字句アナライザーは同様に簡単に回復します。字句エラーのタイプは実際には 1 つのみです。現在のレクサー状態における終端記号には現在の位置でテキストを表すことができるものはありません。
以下の終端記号を持つと定義されるデフォルト レクサー状態の文章校正を考えてみましょう。
NewLineSymbol – 新しい行の 1 行に一致します。 「\r」、「\n」または「\r\n」。
WhitespaceSymbol – 1 つ以上のスペースまたはタブ文字に一致します。
Identifier – ゼロ個以上のアンダースコア、文字または数字が続くアンダースコアまたは文字に一致します。
解析対象のドキュメント コンテンツ: “x += y;”
レクサーがこのドキュメント コンテンツを解析している間、まず <Identifier, “x”> と <WhitespaceToken, “ ”> のトークンを作成します。次に、「+」文字が来ます。それを認識できる終端記号はありません。レクサーは、いずれかの終端記号で一致されるテキストに来るまで非認識文字を読み続けます。この場合、「=」の後ろのスペースです。レクサーは、次にすべての連続した文字を集め、 Grammar.UnrecognizedSymbol により公開される特殊な記号と一致させます。そのためこのドキュメント コンテンツのフル トークン ストリームは以下のようになります。
<Identifier, “x”> <WhitespaceToken, “ ”> <*UnrecognizedToken*, “+=”> <WhitespaceToken, “ ”> <Identifier, “y”> <*UnrecognizedToken* , “;”> <EndOfStreamToken>
このトピックの追加情報については、以下のトピックも合わせてご参照ください。