Bisonビルド警告:“ -sオプションが指定されていますが、デフォルトのルールは一致する可能性があります”
質問
警告が表示されます
warning, -s option given but default rule can be matched
Googleで「オプションは指定されているがデフォルトのルールは一致する」場合、 Flexマニュアルの診断に関する章および古いFlexマンページ [診断]セクション:
warning、 '-sオプションが指定されていますがデフォルト ルールを一致させることができる」ということは、 可能(おそらく特定の場合のみ 開始条件)デフォルトルール (任意の1文字に一致)は 特定のものに一致するもののみ 入力。
-s
が指定されたため、 おそらくこれは意図されていません。
ビルドファイルに -s
オプションがありません。書いた
bison -y -d calc1.y
flex calc1.l
gcc code...
この警告を修正するにはどうすればよいですか
これは私のlexファイルの小さなバージョンです。このファイルは警告もトリガーします
%{
#include "y.tab.h"
%}
%option noyywrap nodefault yylineno
%%
[0-9]+ {
return INTEGER;
}
[-+()=/*{},;\n] { return *yytext; }
[ \t] /* skip whitespace */
[a-zA-Z0-9_]* { printf("lex Unknown character = '%s'", yytext); yyerror("lex Unknown character"); }
%%
解決
%option nodefault -s
と同等です他のヒント
" flex"システムのコマンドは、-sオプションを指定したflexコマンドにエイリアスされている可能性があります。これは、いくつかの起動スクリプトのいずれでも発生する可能性があります。
警告は、入力ファイル内のどのルールにも一致しない入力があることを示しています。警告は、正規表現ですべてのケースを考慮したことを確認するためのものです。
デフォルトのルールを本当に使用したい場合は、入力ファイルのルールの最後に追加します。ルールを追加してみてください
. ECHO;
\n ECHO;
更新: 指定する入力ファイルには、%option nodefaultが含まれています。これは、「-s」を指定するのと同じです。謎が解決されるように、コマンドラインで。また、ファイルには「。」のルールがありません。 「@」など、カバーされない文字がいくつかあります。
私も"-"を疑っています。文字クラスのシンボル。これは範囲演算子であるはずですが、最初の位置では文字として機能する場合があります。知りません。 " \-"を使用することをお勧めします。代わりに。
最後のルールを次のように変更できます
. { printf("lex Unknown character = '%s'", yytext); yyerror("lex Unknown character"); }
警告を取り除く(および、結果のスキャナーがクラッシュするのを防ぐ)。
また、質問のタイトルをbisonではなくflexに変更できますか?