Как описано в шапке, я использую Bison и Flex для получения парсера, но мне нужно обработать ошибку и продолжить после того, как я ее найду. Таким образом, я использую:
Stmt: Reference '=' Expr ';' { printf(" Reference = Expr ;\n");}
| '{' Stmts '}' { printf("{ Stmts }");}
| WHILE '(' Bool ')' '{' Stmts '}' { printf(" WHILE ( Bool ) { Stmts } ");}
| FOR NAME '=' Expr TO Expr BY Expr '{' Stmts '}' { printf(" FOR NAME = Expr TO Expr BY Expr { Stmts } ");}
| IF '(' Bool ')' THEN Stmt { printf(" IF ( Bool ) THEN Stmt ");}
| IF '(' Bool ')' THEN Stmt ELSE Stmt { printf(" IF ( Bool ) THEN Stmt ELSE Stmt ");}
| READ Reference ';' { printf(" READ Reference ;");}
| WRITE Expr ';' { printf(" WRITE Expr ;");}
| error ';' { yyerror("Statement is not valid"); yyclearin; yyerrok;}
;
, однако, я всегда получаю сообщение об ошибке «Синтаксическая ошибка», и я не знаю, откуда она и как ее предотвратить, чтобы мой собственный «код ошибки» был выполнен , Я пытаюсь исправить ошибки здесь, чтобы мой анализатор продолжал анализировать ввод до EOF.