2011-04-29 61 views
2

我正在寫一個小型的表達式分析器爲我工作的公司項目。解析器應該檢查,例如,除零或未定義的標識符,報告錯誤並停止。做這個的最好方式是什麼?假設我自己的代碼有沒有內存泄漏,我可以簡單地這樣做:乾淨的方式來結束解析的野牛分析器

if ($3 == 0) { 
    yyerror("Division by zero"); 
    return 1; 
} 

應該我寧願做:

if ($3 == 0) { 
    yyerror("Division by zero"); 
    YYERROR; 
} 

有三分之一更好的選擇?

回答

2

如果您明確呼叫yyerror,那麼使用YYABORT怎麼樣? 據我所知,bison似乎在退出時執行一些清理。 因此,YYABORTYYERROR將更優選爲return 1

4

確實存在第三種選擇:YYACCEPT

如果你想停止解析,因爲輸入是有效的,並沒有錯誤(因爲你是一個解析器來檢測錯誤,那麼它是不是一個解析錯誤,輸入符合語法規則)。

這使得YYERROR語法錯誤(比如從另一種語言接收一個字符串)

+0

感謝,這正是需要清理停止沒有錯誤 – pugnator 2014-10-13 13:59:02