c++ - if - while -for 实现野牛
问题描述
我正在开发一个解释器,但我无法在野牛中实现if
, while
, 。我在野牛中
写了这段代码:for
if
if_block:
IF '(' rule ')' '{' smt '}'
| IF '(' rule ')' '{' smt '}' ELSE '{' smt '}'
| IF '(' rule ')' '{' smt '}' elif_block ELSE '{' smt '}'
;
elif_block:
ELIF '(' rule ')' '{' smt '}'
| ELIF '(' rule ')' '{' smt '}' elif_block
;
rule:
exp EQUAL_T exp { $<int_val>$ = check($<data_val>1 ,$<data_val>3); }
;
但是当rule
= 1 或rule
= 0 时,smt
运行并且我得到了错误的答案。
请帮帮我,我该怎么办?请给我一段代码 for if
and while
loop ...
解决方案
在一个循环中,代码需要执行多次(通常)。所以它不能在解析时执行,因为它只解析一次。
类似地,在条件中,目标被执行一次或零次,但只被解析一次。执行零次的,解析时显然无法执行;正如你所观察到的,那将是一次太多的处决。
所以你必须将解析的结果记录为语法树、三地址码或其他方式,等程序完全解析后才执行。
推荐阅读
- unity3d - 如何根据 Unity 中的碰撞点找到旋转?
- linux - MailKit.Net.Smtp.SmtpClient.Send 在 linux 上不起作用
- python - 硬币翻转游戏功能
- javascript - 如何修复打开后关闭的jquery dailog框
- java - Spring Reactive:转换通量
> 到通量 - python - Python 从第一次获取时保存 cookie,在其他请求中使用
- r - 按 R 中的共同值合并
- c++ - 为什么使用 Poco Libs 时下载的文件会随机损坏和/或不完整?
- google-app-engine - 从对话流向谷歌云应用引擎上的应用程序发送请求?
- python - 我无法解决问题“轴 -1 超出维度 0 数组的范围”