檢視原始碼 erl_id_trans (stdlib v6.2)
此模組執行 Erlang 程式碼的識別解析轉換。
它被包含在內作為想要編寫自己的解析轉換器的使用者的範例。如果將選項 {parse_transform,Module}
傳遞給編譯器,則使用者編寫的函式 parse_transform/2
將在程式碼檢查錯誤之前被編譯器呼叫。
在函式 parse_transform/2
被呼叫之前,Erlang 編譯器會檢查解析轉換是否可以處理帶有欄數的抽象程式碼:如果函式 parse_transform_info/0
已實作並且傳回一個 map,其中 key error_location
與 value line
相關聯,則編譯器會在呼叫解析轉換之前從抽象程式碼中移除欄數。否則,編譯器將在不修改的情況下傳遞抽象程式碼。
解析轉換
如果程式設計師想要使用 Erlang 語法,但使用不同的語意,則會使用解析轉換。原始的 Erlang 程式碼隨後被轉換為其他 Erlang 程式碼。
注意
強烈建議程式設計師不要進行解析轉換。不對遇到的問題提供支援。
參閱
總結
函式
-spec parse_transform(Forms, Options) -> NewForms when Forms :: [erl_parse:abstract_form() | erl_parse:form_info()], NewForms :: Forms, Options :: [compile:option()].
作為範例,對 Erlang 表單執行識別轉換。
-spec parse_transform_info() -> #{error_location => column | line}.
傳回關於解析轉換本身的資訊。