缺少左括号的yacc错误处理

时间:2015-09-17 13:29:59

标签: c bison yacc flex-lexer lex

我写了一个yacc文件。 目前的错误功能如下所示:

  void yyerror(char *s) {
       fprintf(stderr, "line %d: %s\n", yylineno, s);
   }

现在在给它输入的同时, 如果缺少左括号,则会给出简单的语法'错误。

  1. 您能否建议,如何针对这些类型的错误制作自定义错误消息?

  2. 即使在收到此错误后我仍然可以继续前进?

  3. 非常感谢您的建议..

1 个答案:

答案 0 :(得分:0)

你做不到。至少不是简单的。当前状态和下一个标记不产生解析的合法延续时,会出现语法错误。它可能很简单'因为下一个标记必须是'''',但在这种情况下你的语言可能定义不明确,因为'('可能是多余的。更常见的情况是一个<令牌的em> number 是一个合法的延续:并且,由于LALR(1)解析器生成器的状态压缩操作,一旦你到达了点,它并不总是可能实际枚举这些令牌问题