yacc - $$ = $1 + $3 在 yacc 中是什么意思?

标签 yacc lex

莱克斯部分:

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

雅克部分:
%token num 
%%
exp:num '+' num ; {$$ = $1 + $3;}
%%
  • 在这部分代码中做什么$$ , $1$2代表?
  • 如何打印 $$现在?
  • 如果我发送 5+9作为此程序的输入 59由 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/

    相关文章:

    c - 从输入文件中删除注释的 Lex 程序

    c - yylineno 在 yacc 文件中始终具有相同的值

    c - sql 解析器的 Makefile...编写依赖项

    c - Lex 和 Yacc 段错误

    fedora - fatal error :y. tab.h:fedora 上没有这样的文件或目录

    python - PLY Lex 和 Yacc 问题

    c - 有没有成熟的解决方案来创建带有 ELF 符号和 C 语法命令解析器的即时 shell?

    gcc - Bison 解析器总是打印 "syntax error"

    c - 如何使用 yacc 从 char 数组中解析?

    从 makefile 调用 flex