私はと協力していますレキシカル分析このため私はFlex
を使用しており、以下の問題を取ります。関数 'yylex': '変数'は宣言されていません
work.l
int cnt = 0,num_lines=0,num_chars=0; // Problem here.
%%
[" "]+[a-zA-Z0-9]+ {++cnt;}
\n {++num_lines; ++num_chars;}
. {++num_chars;}
%%
int yywrap()
{
return 1;
}
int main()
{ yyin = freopen("in.txt", "r", stdin);
yylex();
printf("%d %d %d\n", cnt, num_lines,num_chars);
return 0;
}
そして、私は、次のコマンドを使用し、それが正常に動作してlex.yy.c
を作成します。
Rezwans-のiMac:laqb-2 rezwan $フレックスwork.l
そして、私は、以下のコマンドを使用します。 error
次
となっ-ob laqb-2 rezwanの$のgcc lex.yy.cを::
Rezwans-のiMac
work.l: In function ‘yylex’: work.l:3:4: error: ‘cnt’ undeclared (first use in this function); did you mean int’? [" "]+[a-zA-Z0-9]+ {++cnt;} ^~~ int work.l:3:4: note: each undeclared identifier is reported only once for each function it appears in work.l:4:4: error: ‘num_lines’ undeclared (first use in this function) \n {++num_lines; ++num_chars;} ^~~~~~~~~ work.l:4:17: error: ‘num_chars’ undeclared (first use in this function); did you mean ‘num_lines’? \n {++num_lines; ++num_chars;} ^~~~~~~~~ num_lines work.l: In function ‘main’: work.l:15:23: error: ‘cnt’ undeclared (first use in this function); did you mean ‘int’? return 0; ^ int work.l:15:28: error: ‘num_lines’ undeclared (first use in this function) return 0; ^ work.l:15:38: error: ‘num_chars’ undeclared (first use in this function); did you mean ‘num_lines’? return 0; ^ num_lines
私ならば、私は、
error
上になっておりませんこのようなファイルをwork.l
に変更してください。私は、この行の前にint cnt = 0,num_lines=0,num_chars=0;
1 tab
を使用する場合は、と言うことですint cnt = 0,num_lines=0,num_chars=0; // then work properly above command. %% [" "]+[a-zA-Z0-9]+ {++cnt;} \n {++num_lines; ++num_chars;} . {++num_chars;} %% int yywrap() { return 1; } int main() { yyin = freopen("in.txt", "r", stdin); yylex(); printf("%d %d %d\n", cnt, num_lines,num_chars); return 0; }
は、それが正常に動作します。
このライン
int cnt = 0,num_lines=0,num_chars=0;
前に、必要に応じて使用1 tab
です:は今、私は2つの質問がありますか?どうして?論理的に説明する。
このエラーを解決するためのもう1つの解決策はありますか?
定義セクションの形式に関するドキュメントを読んだことがありますか? – molbdnilo
うん@molbdnilo。しかし、私はそのようなものを見つけることができませんでした。 –