YACC中的用户自定义错误

问题描述:

我正在使用Lex和YACC解析XML文件。我的语法就像。YACC中的用户自定义错误

START_TAG attributes AN_CLOSE childelements data END_TAG AN_CLOSE 
{ 
    if(strcmp(getSubStr($1,1,strlen($1)-1),getSubStr($6,2,strlen($6)-1))==0) 
     { 
      //Here comes action to be performed if elements match 
     } 
     else 
     { 
      yyerror("Invalid Input File"); 
      //In such message should be printed and parsing should stop 
     } 
} 

其中START_TAG,AN_CLOSE,END_TAG和AN_CLOSE是由Lex文件返回的标记。 什么每个令牌标识下面给出:

START_TAG :<element 
AN_CLOSE : > 
END_TAG :</element 

我们检查,如果输入的XML文件是有效的,我检查元素START_TAG的“元素”,即$ 1 END_TAG的‘元素’,即$ 6的文本。如果元素不匹配,我必须打印消息并停止解析。我的错误消息正在打印,但解析仍在继续。任何关于如何停止解析的建议将不胜感激。

感谢。

使用YYABORT宏,这将导致yyparse与状态1.

+0

感谢RICI返回。如果(){else} yyerror(“Invalid Input File”); YYABORT; YYABORT; }工作正常。 – Kunal