首页 > 解决方案 > 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 ifand whileloop ...

标签: c++bisoninterpreterflex-lexer

解决方案


在一个循环中,代码需要执行多次(通常)。所以它不能在解析时执行,因为它只解析一次。

类似地,在条件中,目标被执行一次或零次,但只被解析一次。执行零次的,解析时显然无法执行;正如你所观察到的,那将是一次太多的处决。

所以你必须将解析的结果记录为语法树、三地址码或其他方式,等程序完全解析后才执行。


推荐阅读