2012-09-14 12 views
7

कंपाइलर कोडबेस काफी बड़ा है, और मैं अपने सिर को एक बार में चारों ओर लपेट नहीं सकता :)स्कैला कंपाइलर स्टोर एएसटी कहां है?

वर्तमान में, मैं बस "टाइपर" चरण के बाद एएसटी प्राप्त करना चाहता हूं। क्या इसे करने का कोई तरीका है?

मैं संकलक नीचे दिए तरीक़े चलाएँ:

val settings = new Settings 
settings.classpath.value = ... 
val compiler = new Global(settings, new ConsoleReporter(settings)) 
new compiler.Run() { 
    override def stopPhase(name: String) = name == "superaccessors" 
} compileSources files 

उत्तर

6

उपयोग -Xprint:typer-Yshow-trees-compact (कच्चे एएसटी प्रारूप में पेड़ों डंप करने के लिए) के साथ (टाइपकर्ता के बाद पेड़ डंप करने के लिए) एक साथ। यदि आप -Yshow-trees-stringified का भी उपयोग करते हैं, तो एएसटी को अतिरिक्त रूप से छद्म स्कैला कोड के रूप में डंप किया जाएगा (नोट: अंतिम दो विकल्पों की आवश्यकता 2.10.0) है।

C:\Projects\Kepler\sandbox @ ticket/6356>cat Test.scala 
class C { 
    def x = 2 
} 

C:\Projects\Kepler\sandbox @ ticket/6356>scalac -Xprint:typer -Yshow-trees-compact -Yshow-trees-stringified Test.scala 
[[syntax trees at end of typer]]// Scala source: Test.scala 
package <empty> { 
    class C extends scala.AnyRef { 
    def <init>(): C = { 
     C.super.<init>(); 
    () 
    }; 
    def x: Int = 2 
    } 
} 
PackageDef(
    Ident(<empty>), 
    List(
    ClassDef(Modifiers(), newTypeName("C"), List(), 
     Template(List(Select(Ident(scala), newTypeName("AnyRef"))), emptyValDef, 
     List(
     DefDef(Modifiers(), nme.CONSTRUCTOR, List(), List(List()), TypeTree(), Block(List(Apply(Select(Super(This(newTypeName("C")), tpnme.EMPTY), nme.CONSTRUCTOR), List())), Literal(Constant(())))), 
     DefDef(Modifiers(), newTermName("x"), List(), List(), TypeTree(), Literal(Constant(2)))))))) 
+0

लेकिन मेरा मतलब है, मैं अपने चल रहे प्रोग्राम के अंदर एएसटी मिलता है? प्रोग्राम के रूप में? – Rogach

+0

हू। समझा। मुझे सोचने दो। –

+4

'Run.units map (_.body)' –

1

संकलक codebase काफी बड़ा है, और मैं सभी महत्वपूर्ण टाइपकर्ता के अलावा एक ही बार में यह सब के आसपास मेरे सिर लपेटो नहीं कर सकते हैं :)

, स्काला संकलक का सबसे चरण होते हैं पर विस्तार से वर्णन किया:

http://lampwww.epfl.ch/~magarcia/ScalaCompilerCornerReloaded/

+0

ठीक है, समस्या यह है कि मुझे केवल पहले चार चरणों में रुचि है - पार्सर से टाइपर तक, और उनको बिल्कुल वर्णित नहीं किया गया है :( – Rogach

संबंधित मुद्दे