2
這有什麼錯我的代碼? - 它編譯正確的「而」結構 - 它編譯正確結腸separeted陳述 - 但如果報告語法錯誤結腸separeted語句是在一個「而」結構。它是:多語句在一條線上
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; }
;
不,我不想限制語句列表兩個項目。我已經按照建議嘗試了,我在這裏複製粘貼:\t | WHILE'('expr')'stmt \t \t \t \t \t \t \t {$$ = opr(WHILE,2,$ 3,$ 5); } \t | '{' stmt_list \t '}' \t \t \t \t \t \t \t \t \t {$$ = $ 2; } \t |錯誤\t { \t \t的yyerror((字符*)yytext中); \t \t $$ = NULL; \t \t errorflag = 1; \t \t} \t; stmt_list: \t \t語句\t \t \t \t \t \t \t \t \t \t \t {$$ = $ 1; } \t | stmt_list ':' 語句\t \t \t \t \t \t \t \t {$$ = OPR( ':',2,$ 1,$ 3); } \t; – user2469202
>但結果是一樣的:冒號導致錯誤 – user2469202
@ user2469202:是的,我沒有想到的修復程序stmt_list將解決語法錯誤問題。查看我答案的最後一段。 – rici