莱克斯部分:
%%
[0-9]+ { yyval = atoi (yytext); return num; }
%%
Run Code Online (Sandbox Code Playgroud)
Yacc 部分:
%token num
%%
exp:num '+' num ; {$$ = $1 + $3;}
%%
Run Code Online (Sandbox Code Playgroud)
$$,$1和$2代表什么?$$?5+9作为输入发送到该程序5并被9lex 程序识别,但是 呢+?符号+是否发送到 lex?exp:num \xe2\x80\x98+\xe2\x80\x99 num ; {$$ = $1 + $3;} \nRun Code Online (Sandbox Code Playgroud)\n\n这些$$、$1、$3是规则中使用的符号和标记的语义值(按它们出现的顺序排列)。语义值是当扫描器获取新标记时在 yylval 中获得的值。
\n\n$1具有第一个数字的语义值。
\n\n$3具有第二个数字的语义值
\n\n$2未被使用,因为它是标记“+”。词法分析器确实将此标记发送到解析器。它还具有语义值“0”。
\n\n$$标识“exp”的语义值(该规则下的整个分组)。
\n\n你有没有尝试过类似的事情:
\n\nexp:num \xe2\x80\x98+\xe2\x80\x99 num ; {$$ = $1 + $3;printf("%d", $$);}\nRun Code Online (Sandbox Code Playgroud)\n\n另请检查:为什么 yacc/bison 中的 $1 的值为 0\n
\n| 归档时间: |
|
| 查看次数: |
13018 次 |
| 最近记录: |