2016-11-12 57 views
0

我正在使用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的文本。如果元素不匹配,我必須打印消息並停止解析。我的錯誤消息正在打印,但解析仍在繼續。任何關於如何停止解析的建議將不勝感激。

感謝。

回答

0

使用YYABORT宏,這將導致yyparse與狀態1.

+0

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