0

LexとYaccを使用してパーサーを設計していますが、コメントに関する問題が発生しています。

次のLexルールを使用します。

'#'[^('\r'|'\n')]*    { /* do nothing */ }

動作しますが、実行の最後にすべてのコメントが標準出力に出力されます。それをクリアする方法はありますか?提案ありがとうございます。

4

1 に答える 1

1

文字、、、、'およびは|で特別な意味を持たないため、それらを含まないコメントのみを照合(および破棄)します。さらに、lexのほとんどのバージョンでは、特別な意味はまったくありません。リテラル文字列を引用するためにのみ使用できます。おそらく必要なものは次のとおりです。()[]'"

"#"[^\r\n]*     { /* do nothing */ }

また、#特別な意味もありませんので、引用する必要はありません。

一般に、パーサーへの入力としてlex(またはflex)を使用している場合、デフォルトのエコー動作は必要ないため、最後に「catch-all」ルールを追加するのが最善です。

.|\n            { fprintf(stderr, "Unexpected character '%c' in input\n", *yytext); }
于 2012-09-11T22:43:21.407 に答える