我正在使用 Megaparsec 來獲取代碼的樹表示,然后由單獨的函式對其進行評估。我想將具有當前背景關系的 parsec 函式添加到樹表示的節點中以格式化錯誤。
為什么?例如。語法可能沒問題,但代碼中的某些變數可能不存在,只有稍后處理樹的分離函式才能發現。這些函式將不得不拋出錯誤,該變數不存在,我會很高興,如果我可以為此使用 Megaparsec 格式良好的錯誤(帶有行號,背景關系,...)。
請問有什么辦法嗎?
謝謝。
uj5u.com熱心網友回復:
我相信您可以通過getSourcePos. 例如,在樹生成的開放遞回風格中,您可以撰寫
data Annotated f = Annotated
{ start :: SourcePos
, term :: f (Annotated f)
, end :: SourcePos
}
annotated :: (MonadParser e s m, TraversableStream s) =>
m (f (Annotated f)) -> m (Annotated f)
annotated p = liftA3 Annotated getSourcePos p getSourcePos
(注意,我沒有嘗試過,甚至沒有對它進行型別檢查;只是盡我所能用專家的眼光解釋 megaparsec 的檔案。警告講師。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/434071.html
