आप scaladoc (http://docs.scala-lang.org/overviews/reflection/symbols-trees-types.html#trees) पर एक नज़र डालें या स्लाइड पर सकता है (http://scalamacros.org/talks/2012-04-28-MetaprogrammingInScala210.pdf, " "भाग) सीखना सीखें।
यहां मैं आमतौर पर ऐसा करता हूं। मैंने parse
नामक एक साधारण स्क्रिप्ट लिखी, जो स्कैला कोड को तर्क के रूप में लेती है और फिर इसे -Xprint:parser -Ystop-after:parser -Yshow-trees-stringified -Yshow-trees-compact
(parse
के साथ संकलित करती है, एक और सहायक स्क्रिप्ट का उपयोग करती है: adhoc-scalac
। click here इसके स्रोतों को देखने के लिए भी)।
इस दृष्टिकोण का लाभ showRaw
है कि यह टाइप करने के लिए कोड की आवश्यकता नहीं है। आप कोड का एक छोटा सा स्निपेट लिख सकते हैं, जो अस्तित्वहीन चर या वर्गों को संदर्भित करता है, और यह अभी भी सफलतापूर्वक चलाएगा और आपको एएसटी दिखाएगा। यहाँ उत्पादन का एक उदाहरण है:
09:26 ~$ parse 'class C { def x = 2 }'
[[syntax trees at end of parser]]// Scala source: tmp36sVGp
package <empty> {
class C extends scala.AnyRef {
def <init>() = {
super.<init>();
()
};
def x = 2
}
}
PackageDef(Ident(TermName("<empty>")), List(ClassDef(Modifiers(), TypeName("C"), List(), Template(List(Select(Ident(scala), TypeName("AnyRef"))), emptyValDef, List(DefDef(Modifiers(), nme.CONSTRUCTOR, List(), List(List()), TypeTree(), Block(List(pendingSuperCall), Literal(Constant(())))), DefDef(Modifiers(), TermName("x"), List(), List(), TypeTree(), Literal(Constant(2))))))))
वहाँ भी एक स्क्रिप्ट typecheck
कहा जाता है, जो एक ही करता है, लेकिन typer
के बाद बंद हो जाता है। कभी-कभी यह समझने में उपयोगी होता है कि टाइपशेकर वास्तव में पार्सर पेड़ों को कैसे बदलता है। हालांकि, टूलबॉक्स और मैक्रोज़ दोनों पार्सर पेड़ के साथ काम करते हैं, इसलिए मैं वृक्ष निर्माण उद्देश्यों के लिए typecheck
का उपयोग करता हूं।
धन्यवाद! थीसिस एक महान संसाधन है। – Bill
धन्यवाद :-) मुझे आशा है कि यह अभी तक बहुत पुराना नहीं है .. –
हम इस तरह के ग्राफ को कैसे आकर्षित कर सकते हैं? – Freewind