考虑以下语法规则:
forstmt: for openparentheses nexpr semicolon expr semicolon nexpr closeparentheses stmt {}
nexpr: expr { }
| %empty { }
expr: .
.
.
// something huge
.
.
.
它是如下 for 循环的解析器规则(通常的 C 类 for 循环):
for(i=0; i<10; i++){
Print("hello world");
}
我必须为这个 C 生成 IR,比如 for 循环(forstmt
)。
IR forexpr
已经写好了。
关键是 lastnexpr
的 IR 应该在stmt
.
我知道中间规则动作,我认为我可以使用堆栈以某种方式解决这个问题,但我的想法并没有得出任何结论。
究竟有没有办法阻止野牛最后生成 IRnexpr
并使其在stmt
?
换句话说,如何使最后的所有动作都nexpr
在stmt
?
有没有人遇到过这样的问题?