我希望能夠得到給定的OCaml程序的AST(例如,我想走AST,生成代碼版本或進行某種轉換)。是否有任何OCaml工具支持此功能?是否有可能獲得一個OCaml程序的AST?
5
A
回答
4
camlp4是一種方法。這是一個motivating example。文檔很少 - 真實,但可以通過wiki,現有示例,tutorials,甚至可能是camlp4源文件來閱讀。
2
您要找的是[camlp4] [1]。我之前沒有使用camlp4,所以我不能證明它是軟件的優點。我聽說有人使用camlp5 [http://pauillac.inria.fr/~ddr/camlp5/]],根據維基百科,它比當前版本的camlp4有更好的文檔。
+0
我以爲camlp4被用來修改和自定義OCaml語法,但我想它是有道理的,它可以以某種方式到達AST。 – aneccodeal 2010-06-30 03:03:25
1
由於OCaml 4.02.1可以使用PPX tools written bu Alain Frisch來精確地做到這一點。例如:
% ocamlfind ppx_tools/dumpast -e "1 + 2"
1 + 2
==>
{pexp_desc =
Pexp_apply ({pexp_desc = Pexp_ident {txt = Lident "+"}},
[("", {pexp_desc = Pexp_constant (Const_int 1)});
("", {pexp_desc = Pexp_constant (Const_int 2)})])}
=========
,能夠使用該程序來轉儲正常代碼文件的AST,以及,和各種選項控制的傾卸的精確度。例如,在上面的例子中,AST的位置參數是隱藏的。
0
您可以使用compiler-libs
來實現此目的。見Parsetree
,Asttypes
和Ast_helper
。
相關問題
- 1. OCaml是否有popcnt功能?
- 2. 是否有可能獲得代理到一個字節數組?
- 3. 是否有可能獲得一個SSL證書* .mysubdomain.example.com和mysubdomain.example.com
- 4. 是否有可能獲得所有可能的網址?
- 5. 是否有可能獲得鏈數?
- 6. 是否有可能獲得參考值?
- 7. 是否有可能獲得AngularJS認證?
- 8. DDS TIMFMT。是否有可能獲得hh:mm?
- 9. 是否有可能獲得RSS存檔
- 10. 是否有可能獲得C#應用程序的進程開始信息?
- 11. 是否有可能只獲得一個字符串的第一個字符?
- 12. 是否有可能有一個Java程序只用import語句
- 13. 是否有可能獲得變量的最大可能長度
- 14. 是否有可能獲得進程TCP連接的5元組?
- 15. 是否有可能獲得自己的進程名稱?
- 16. 是否有可能獲得一行被刪除的SQL查詢?
- 17. 是否有可能從android中的另一個應用程序獲取數據?
- 18. 是否有可能獲得我的Flash應用程序嵌入的域名?
- 19. 是否有可能獲得我的android應用程序的意圖?
- 20. 如何在OCaml程序中使用camlp4將另一個OCaml程序解析爲AST?
- 21. Android:是否有可能獲得其他應用程序的通知信息?
- 22. 是否有可能在我的應用程序中獲得Apple ID?
- 23. 是否有可能獲得嵌入在移動應用程序中的密鑰
- 24. 是否有可能獲得互聯網上的程序集版本,如onedrive?
- 25. 是否有可能在C#中獲得事件處理程序的實例?
- 26. 是否有可能獲得應用程序實例上的GCM主題訂閱
- 27. 是否有可能路由到另一個angularjs應用程序?
- 28. 是否有可能從javax.naming.InitialContext獲得「一切」?
- 29. 是否有可能獲得第一類參數包在單線?
- 30. NSUserDefaults:是否有可能從另一個應用程序獲取userDefaults?
這個動機的例子是什麼? – aneccodeal 2010-06-30 15:46:04
在每個經過分析的函數定義的開頭傳入名稱和位置參數,插入調用函數Camlp4prof.count(讀取「任意」)函數。 – ygrek 2010-06-30 16:32:35
積極討論學習camlp4的資源:http://groups.google.com/group/fa.caml/browse_thread/thread/1751a2c308742ac3?hl=zh-CN – nlucaroni 2010-09-28 13:29:46