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。
我正在使用 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。