yacc - $$ = $1 + $3 在 yacc 中是什么意思?
问题描述
法典部分:
%%
[0-9]+ { yyval = atoi (yytext); return num; }
%%
Yacc部分:
%token num
%%
exp:num '+' num ; {$$ = $1 + $3;}
%%
- 在这部分代码中,
$$
代表什么?$1
$2
- 我现在如何打印
$$
? - 如果我
5+9
作为输入发送到该程序5
并被9
lex 程序识别,那么+
? 符号是否+
发送到 lex ?
解决方案
exp:num ‘+’ num ; {$$ = $1 + $3;}
这些$$、$1、$3是规则中使用的符号和标记的语义值,按它们出现的顺序排列。语义值是当扫描器获取新令牌时您在 yylval 中获取的值。
$1具有第一个 num 的语义值。
$3具有第二个 num 的语义值
$2未使用,因为它是标记“+”。词法分析器确实将此标记发送到解析器。它还具有语义值“0”。
$$标识“exp”的语义值(该规则下的整个分组)。
您是否尝试过类似的方法:
exp:num ‘+’ num ; {$$ = $1 + $3;printf("%d", $$);}
推荐阅读
- windows - 启动 PowerFactory 时出现问题,帮助台无法正常工作
- video-streaming - 如何对我的 CDN 进行 url-mask 使其看起来像我自己的网站 url
- angular - 我想在我的图表中添加列删除功能,但它工作错了
- swiftui - 关闭 .fullScreenCover 或 .sheet 后的 SwiftUI Picker 问题
- c# - 将参数传递到 Index.html Blazor WebAssembly
- php - 通过 Instagram API 发布照片出错
- ios - CarPlay CPNowPlayingTemplate 播放器按钮不起作用
- flutter - 脚手架改变方向性 rtl
- prometheus - 如何在 Grafana 中绘制每 1 秒事件速率的 max-in-1h-window?
- video - videojs-transcript 的最新工作版本是什么?