解析中のドキュメント内のテキストが、文章校正で定義された必要な構造に準拠しない場合に構文エラーが発生します。構文エラーの検出は字句エラー検出より複雑です。これは、意味のあるエラーメッセージを提供できるように、アナライザーは問題が何かを推測するだけでなく解決法を推測する必要があるためです。
名前が VariableDeclarationStatement の非終端記号の生成例:
VariableDeclarationStatement → Type IdentifierToken SemicolonToken
VariableDeclarationStatement → Type IdentifierToken EqualsToken Expression SemicolonToken
VariableDeclarationStatement → VarKeyword IdentifierToken EqualsToken Expression SemicolonToken
解析対象のドキュメント コンテンツ: “int x = ;”
字句解析の間、以下の重要なトークンが作成されます。
<IdentifierToken, “int”>
<IdentifierToken, “x”>
<EqualsToken, “=”>
<SemicolonToken, “;”>
Syntax Parsing Engine は、重要なトークンを解析する構文を開始し、「SemicolonToken」に到達すると、上記の生産文のいずれにも処理されたトークンが一致しないためエラーが検出されたとみなします。Syntax Parsing Engine は、テキストに足りないものは何か、またはそこにあるべきでないものは何かを探し出します。そのためには、パーサーは現在の状態に組み込むことができる、可能性のあるすべての生産を特定し、解析されたトークンでそのすべてを一致させようとします。
注:
その生成には識別子のすぐ後ろにセミコロンがあるため、最初の生産が作成すべきものでないことは明らかです (サンプル テキストには等号もありません)。また、3 番目の生産は「var」キーワードで始まるため、作成すべきものでないことが明らかです。この場合、唯一の可能性のある生産は 2 番目です。その定義に基づいて、この場合のエラーは、式の抜けであることが明白です。
このトピックの追加情報については、以下のトピックも合わせてご参照ください。