よし、これで取り引きだ。
私の言語では、いくつかのコマンドがあります。
XYZ 3 5
GGB 8 9
HDH 8783 33
そして、私の Lex ファイルで
XYZ { return XYZ; }
GGB { return GGB; }
HDH { return HDH; }
[0-9]+ { yylval.ival = atoi(yytext); return NUMBER; }
\n { return EOL; }
私のyaccファイルで
start : commands
;
commands : command
| command EOL commands
;
command : xyz
| ggb
| hdh
;
xyz : XYZ NUMBER NUMBER { /* Do something with the numbers */ }
;
etc. etc. etc. etc.
私の質問は、どうすればテキスト全体を取得できますか
XYZ 3 5
GGB 8 9
HDH 8783 33
まだNUMBERを返している間にコマンドに入る?
また、私の Lex が STRING [0-9a-zA-Z]+ を返し、その長さを検証したい場合、次のようにする必要があります
rule: STRING STRING { if (strlen($1) < 5 ) /* Do some shit else error */ }
または、実際に長さに応じて異なるトークンを返すトークンが Lex に含まれていますか?