首页 > 解决方案 > $$ = $1 + $3 在 yacc 中是什么意思?

问题描述

法典部分:

%%
[0-9]+ { yyval = atoi (yytext); return num; }
%%

Yacc部分:

%token num 
%%
exp:num '+' num ; {$$ = $1 + $3;}
%%
  1. 在这部分代码中,$$代表什么?$1$2
  2. 我现在如何打印$$
  3. 如果我5+9作为输入发送到该程序5并被9lex 程序识别,那么+? 符号是否+发送到 lex ?

标签: yacclex

解决方案


exp:num ‘+’ num ; {$$ = $1 + $3;} 

这些$$$1$3是规则中使用的符号和标记的语义值,按它们出现的顺序排列。语义值是当扫描器获取新令牌时您在 yylval 中获取的值。

$1具有第一个 num 的语义值。

$3具有第二个 num 的语义值

$2未使用,因为它是标记“+”。词法分析器确实将此标记发送到解析器。它还具有语义值“0”。

$$标识“exp”的语义值(该规则下的整个分组)。

您是否尝试过类似的方法:

exp:num ‘+’ num ; {$$ = $1 + $3;printf("%d", $$);}

还要检查:为什么 yacc/bison 中的 $1 的值为 0


推荐阅读