考虑以下语法规则:
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?
有没有人遇到过这样的问题?