if - while-实施野牛

时间:2018-05-07 22:41:51

标签: c++ bison interpreter flex-lexer

我正在为口译员工作,但我无法在野牛身上实施ifwhilefor。 我在野牛中为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会运行而我的回答错误。
请帮帮我,我该怎么办?请给我一段代码ifwhile循环...

1 个答案:

答案 0 :(得分:2)

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

类似地,在条件中,目标执行一次或零次,但只解析一次。清楚地执行零次的那个在解析时不能执行;如你所见,这将是一个太多的执行。

因此,您必须将解析结果,语法树,三个地址代码或其他方式记录下来,然后在完全解析后才执行该程序。