Итак, вот в чем дело.
На моем языке у меня есть несколько команд, скажем
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
В команды, все еще возвращая ЦИФРЫ?
Также, когда мой Lex возвращает STRING [0-9a-zA-Z]+, и я хочу проверить его длину, должен ли я сделать это как
rule: STRING STRING { if (strlen($1) < 5 ) /* Do some shit else error */ }
или на самом деле у меня есть токен в моем Lex, который возвращает разные токены в зависимости от длины?