我的代码有什么问题?- 它正确编译'while'结构 - 它正确编译冒号分隔的语句 - 但如果冒号分隔的语句在'while'结构中,则报告语法错误。这里是:
0x363> while (a>b) { a=3 }
0x36e > a=3 : b=2
0x376 > while (a>b) { a=3 : b=2 }
syntax error
我想我的 stmt_list 是错误的 - 但正确的解决方案是什么?
注意:我不使用任何特殊的终端字符,例如 ';'
stmt:
.....
| WHILE '(' expr ')' stmt_list { $$ = opr(WHILE, 2, $3, $5); }
.....
stmt_list:
stmt { $$ = $1; }
| stmt ':' stmt { $$ = opr(':', 2, $1, $3); }
| '{' stmt_list '}' { $$ = $2; }
;