2016-11-29 139 views
0

我已經編寫了(並且大部分是調試的)一個處理由宏調用組成的用戶輸入文件的程序。我想現在在用戶輸入文件中添加全面的錯誤檢查。是否有一種通用的最佳實踐方法在這樣的文件上執行句法&語義錯誤檢查?我能想到的三種基本方法是1)編寫一個單獨的預處理程序來驗證文件,2)指定BNF並使用現成的編譯器編譯器作爲預處理器,或者3)將錯誤檢查集成到現有的方案。第三種方法似乎可能會更好,因爲它可以啓用更深層次的語義檢查?我想知道這些和其他方法的利弊&缺點。錯誤檢查用戶輸入文件

+0

您的輸入是否可以作爲連續的Lisp表單讀取,還是需要解析器? – coredump

+0

我不知道是否在頂層(非正常編譯)進行獨立解析會很有用,因爲輸入文件只是lisp表單(單個宏調用,由於依賴關係需要按順序處理)的列表。但是,某些宏調用中提供的用戶信息由簡短的類似於語言的邏輯「程序」組成,這些程序被基準程序用於嘗試解決用戶指定的問題。所以有一些解析涉及。但是用於處理各種邏輯程序單元的代碼已經是工作基準的一部分,以lisp編碼。 – davypough

+0

我不知道這是否是堆棧溢出格式的「可回答」,但肯定會需要一個小例子 - 但是 - 我已經做了一些類似的事情,只是通過驗證來散佈宏觀開拓者。調用者所期望的越「複雜」,輸入驗證越豐富且冗長;通常很多'Assert'和'Check-Type'都有詳細的詳細錯誤信息。 – BRFennPocock

回答

0

謝謝coredump & BRFennPocock爲您的經驗的利益。我會接受你的建議,並在現有程序中嵌入錯誤檢查,儘管肯定是一個錯誤^ 2傾向於嘗試捕捉所有事情。沒有提前白名單,但我可以根據用戶的輸入建立一個白名單,然後檢查所有用途之間的一致性(例如,覆蓋拼寫錯誤)。大多數斷言&檢查類型看起來像它們將在加載時發生。再次感謝。