2011-11-04 77 views
1

我正在開發lex/yacc c編譯器。LEX&YACC中的例外

爲了處理故障和解析錯誤,我想部署一個異常系統處理程序。

實際上只是一個「解析錯誤」消息處理任何問題is.for例如:

typedef struct , struct_name{...}此輸入會產生,因爲額外的逗號的解析錯誤。

我的目的是拋出一個異常情境,給人的可能性is.such重點究竟在何處的問題,因爲這個例子: 「無效的結構聲明」

我真的需要幫助解決這個problème。

+0

我首先想到的是,我應該爲每個驗證的語法指定一組錯誤消息,並且如果處理了任何錯誤,它將拋出對應於當前語法的異常。 我不知道它是否可行! – Aymanadou

回答

1

這將進入您的解析器。當它運行時,它會從詞法分析器獲取令牌。如果下一個標記不符合當前規則,那麼您遇到了問題。幸運的是,已經有一個部分來處理這些情況!有關yacc的gnu版本,請參見bison error recovery以及如何處理此問題。它會通過概念和變量來處理你在這裏的情況。

+0

感謝您的回覆,但我無法真正使用flex/bison解決方案,只有lex和yacc.Is有沒有類似的解決方案? – Aymanadou

+1

@Aymanadou Bison是yacc的GNU版本。它應該*幾乎*相同。同樣適用於flex。他們是開源的,lex和yacc的擴展版本。 Bison的錯誤恢復部分仍應適用於yacc代碼。 –