Я вижу много примеров, когда некоторые передают yytext yylval, а другие нет. Вот код для простого сумматора в lex и yacc
/* add.l */
digit [0-9]
%%
{digit}+ {sscanf(yytext, "%d", &yylval);
return(INT);
}
\+ return(PLUS);
\n return(NL);
. ;
%%
int yywrap() { return 1; }
и
/* add.y */
/* L = {INT PLUS INT NL} */
%token INT PLUS NL
%%
add: INT PLUS INT NL { printf("%d\n", $1 + $3);}
%%
#include "lex.yy.c"
yyerror(char *s) { printf("%s\n", s); }
main() {
return yyparse();
}
Я не вижу такого кода, как printf (yylval) и т. Д. Почему код sscanf(yytext, "%d", &yylval)
существует здесь,Используется ли здесь как-то yylval, что произойдет, если мы не добавим эту строку? Когда нам нужно включить такую строку в lex?