YACC 中的用户定义错误

User defined error in YACC

我正在使用 Lex 解析一个 XML 文件,YACC.My 语法是这样的。

START_TAG attributes AN_CLOSE childelements data END_TAG AN_CLOSE 
{
    if(strcmp(getSubStr(,1,strlen()-1),getSubStr(,2,strlen()-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 的 'element' 即6 美元。如果元素不匹配,我必须打印消息并停止解析。我的错误消息正在打印,但解析仍在继续。任何有关如何停止解析的建议都将不胜感激。

谢谢。

使用 YYABORT 宏,这将导致 yyparse 到 return 状态为 1。