莱克斯部分:
%%
[0-9]+ { yyval = atoi (yytext); return num; }
%%
雅克部分:
%token num
%%
exp:num '+' num ; {$$ = $1 + $3;}
%%
$$
, $1
和 $2
代表? $$
现在? 5+9
作为此程序的输入 5
和 9
由 lex 程序识别,但是 +
呢? ?是符号+
发送到 lex 或不? 最佳答案
exp:num ‘+’ num ; {$$ = $1 + $3;}
那些 $$ , $1 , $3 是规则中使用的符号和标记的语义值,按它们出现的顺序排列。语义值是您在 yylval 中在扫描器获得新 token 时获得的值。
$1 具有第一个 num 的语义值。
$3 具有第二个 num 的语义值
$2 未使用,因为它是标记“+”。词法分析器确实将此标记发送给解析器。它还具有语义值“0”。
$$ 标识“exp”的语义值(该规则下的整个分组)。
你有没有尝试过:
exp:num ‘+’ num ; {$$ = $1 + $3;printf("%d", $$);}
另请检查:why does $1 in yacc/bison has a value of 0
关于yacc - $$ = $1 + $3 在 yacc 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52821586/