文法を使用してパーサーを作成する方法を学習していますが、コメントをほとんどどこにでも表示できるため、コメントを表現するのに行き詰まりました。
これは、解析が行われる前に、コメントがトークンストリームから削除できることを示しています。
それは標準的な方法ですか、それともコメントは文法で指定されていますか?
文法を使用してパーサーを作成する方法を学習していますが、コメントをほとんどどこにでも表示できるため、コメントを表現するのに行き詰まりました。
これは、解析が行われる前に、コメントがトークンストリームから削除できることを示しています。
それは標準的な方法ですか、それともコメントは文法で指定されていますか?
回答:
それをある種の空白として扱うことは非常に一般的です。Cのようなセミコロン指向の言語の改行とほとんど同じです。
何らかの形の空白文字になると、パーサーの上位で無視されることがよくあります。
簡単な回答
はい。「レクサー」または「パーサー」のコメントを検出するのが標準的な方法です。
「パーサー」に「レクサー」が組み込まれている場合や、「パーサー」と単一のツールとして混合されている場合があります(「レクサーパーサー」)。
拡張回答
私はそのケースで働いています。
ほとんどの「スキャナー」(「トークン化」または「レクサー」とも呼ばれます)はコメントを検出しますが、トークンを「パーサー」に返すときに削除されます。
時々、プログラミング言語は、「コンパイラ指令」または「ドキュメント」のような特別な意味を持ついくつかのコメントを使用します。
標準コメントの例:
/*
This function does something cool.
*/
int doSomething()
{
return 0;
}
ディレクティブコメントの例:
/*
##override
*/
int doSomething()
{
return 0;
}
ドキュメントジェネレータの例のコメント:
/*
@description: This Function text will be turn,
into an external pdf file, togheter with other
similar comments.
*/
int doSomething()
{
return 0;
}
ほとんどのコンパイラー関連ツールは、アナライザーまたはプリプロセッサーを使用して、この特別なコメントを検出します。これは、メインのレキサーまたはパーサーではなく、独自の小さなレクサーさえ持っています。
乾杯。