我正在为口译员工作,但我无法在野牛身上实施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
会运行而我的回答错误。
请帮帮我,我该怎么办?请给我一段代码if
和while
循环...
答案 0 :(得分:2)
在循环中,代码需要多次执行(通常)。所以它不能在解析时执行,因为它只被解析一次。
类似地,在条件中,目标执行一次或零次,但只解析一次。清楚地执行零次的那个在解析时不能执行;如你所见,这将是一个太多的执行。
因此,您必须将解析结果,语法树,三个地址代码或其他方式记录下来,然后在完全解析后才执行该程序。