2010-06-29 14 views
5

मैं किसी दिए गए ओकैमल प्रोग्राम के लिए एएसटी प्राप्त करने में सक्षम होना चाहता हूं (मैं एएसटी चलना चाहता हूं और कोड का एक वाद्य संस्करण उत्पन्न करना चाहता हूं या उदाहरण के लिए कुछ प्रकार का परिवर्तन करना चाहता हूं)। क्या ओकैमल उपकरण में से कोई भी इस कार्यक्षमता का समर्थन करता है?क्या यह संभव है कि ओएसएएमएल कार्यक्रम के लिए एएसटी प्राप्त करें?

उत्तर

4

camlp4 जाने का एक तरीका है। यहां एक motivating example है। दस्तावेज़ स्पैस हैं - सच है, लेकिन कोई विकी, मौजूदा उदाहरण, tutorials, और यहां तक ​​कि camlp4 स्रोतों के माध्यम से अपना रास्ता पढ़ सकता है।

+0

वह प्रेरक उदाहरण क्या करता है? – aneccodeal

+0

नाम और स्थान पैरामीटर पास करने वाले प्रत्येक पार्स फ़ंक्शन परिभाषा की शुरुआत में कॉल सह Camlp4prof.count ("मनमानी" पढ़ें) फ़ंक्शन डालें। – ygrek

+0

camlp4 सीखने के लिए संसाधनों पर एक सक्रिय चर्चा: http://groups.google.com/group/fa.caml/browse_thread/thread/1751a2c308742ac3?hl=hi – nlucaroni

2

जो आप खोज रहे हैं वह है [camlp4] [1]। मैंने पहले camlp4 का उपयोग नहीं किया है, इसलिए मैं सॉफ्टवेयर के रूप में इसके गुणों को प्रमाणित नहीं कर सकता। मैंने camlp5 [http://pauillac.inria.fr/~ddr/camlp5/] का उपयोग करने वाले लोगों के बारे में सुना है, जो विकिपीडिया के अनुसार, camlp4 के वर्तमान संस्करण की तुलना में बेहतर दस्तावेज़ीकरण है।

+0

मैंने सोचा था कि camlp4 का उपयोग ओकैम सिंटैक्स को संशोधित और अनुकूलित करने के लिए किया गया था, लेकिन मुझे लगता है कि यह समझ में आता है कि यह किसी भी तरह एएसटी तक पहुंच सकता है। – aneccodeal

1

ओकैम 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)})])} 
========= 

यह इस कार्यक्रम का उपयोग करने के लिए एक सामान्य कोड फ़ाइल की एएसटी डंप करने के साथ ही संभव है, और विभिन्न विकल्पों डंप की शुद्धता की डिग्री नियंत्रित करते हैं। उदाहरण के लिए, उदाहरण के लिए, एएसटी के स्थान पैरामीटर छुपाए गए हैं।

0

आप इसे प्राप्त करने के लिए compiler-libs का उपयोग कर सकते हैं। Parsetree, Asttypes, और Ast_helper देखें।