मैं किसी दिए गए ओकैमल प्रोग्राम के लिए एएसटी प्राप्त करने में सक्षम होना चाहता हूं (मैं एएसटी चलना चाहता हूं और कोड का एक वाद्य संस्करण उत्पन्न करना चाहता हूं या उदाहरण के लिए कुछ प्रकार का परिवर्तन करना चाहता हूं)। क्या ओकैमल उपकरण में से कोई भी इस कार्यक्षमता का समर्थन करता है?क्या यह संभव है कि ओएसएएमएल कार्यक्रम के लिए एएसटी प्राप्त करें?
उत्तर
camlp4 जाने का एक तरीका है। यहां एक motivating example है। दस्तावेज़ स्पैस हैं - सच है, लेकिन कोई विकी, मौजूदा उदाहरण, tutorials, और यहां तक कि camlp4 स्रोतों के माध्यम से अपना रास्ता पढ़ सकता है।
जो आप खोज रहे हैं वह है [camlp4] [1]। मैंने पहले camlp4 का उपयोग नहीं किया है, इसलिए मैं सॉफ्टवेयर के रूप में इसके गुणों को प्रमाणित नहीं कर सकता। मैंने camlp5 [http://pauillac.inria.fr/~ddr/camlp5/] का उपयोग करने वाले लोगों के बारे में सुना है, जो विकिपीडिया के अनुसार, camlp4 के वर्तमान संस्करण की तुलना में बेहतर दस्तावेज़ीकरण है।
मैंने सोचा था कि camlp4 का उपयोग ओकैम सिंटैक्स को संशोधित और अनुकूलित करने के लिए किया गया था, लेकिन मुझे लगता है कि यह समझ में आता है कि यह किसी भी तरह एएसटी तक पहुंच सकता है। – aneccodeal
ओकैम 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)})])}
=========
यह इस कार्यक्रम का उपयोग करने के लिए एक सामान्य कोड फ़ाइल की एएसटी डंप करने के साथ ही संभव है, और विभिन्न विकल्पों डंप की शुद्धता की डिग्री नियंत्रित करते हैं। उदाहरण के लिए, उदाहरण के लिए, एएसटी के स्थान पैरामीटर छुपाए गए हैं।
आप इसे प्राप्त करने के लिए compiler-libs
का उपयोग कर सकते हैं। Parsetree
, Asttypes
, और Ast_helper
देखें।
वह प्रेरक उदाहरण क्या करता है? – aneccodeal
नाम और स्थान पैरामीटर पास करने वाले प्रत्येक पार्स फ़ंक्शन परिभाषा की शुरुआत में कॉल सह Camlp4prof.count ("मनमानी" पढ़ें) फ़ंक्शन डालें। – ygrek
camlp4 सीखने के लिए संसाधनों पर एक सक्रिय चर्चा: http://groups.google.com/group/fa.caml/browse_thread/thread/1751a2c308742ac3?hl=hi – nlucaroni