abstract-syntax-tree

    11熱度

    6回答

    使用F#解析AST來構建解釋器的最佳方式是什麼?有很多F#示例用於簡單的語法(基本算術操作),但我似乎無法找到具有更多功能範圍的語言的任何內容。 歧視工會看起來非常有用,但你將如何去建造一個有大量的選項?在其他地方定義類型(比如加法,減法,條件,控制流)是否更好,並將它們作爲聯合中的預定義類型一起使用? 或者我錯過了一些更有效的書寫口譯手段嗎?是否有更有效的每種類型的eval函數,或者可能使用mo

    7熱度

    1回答

    我有一個Python AST [由ast.parse()返回)。 我知道這是一個類方法的AST。 如何查找對同一類的其他方法的所有調用? 基本上,我想收集類似: ['foo', 'bar'] 的代碼片段,如: def baz(self): # this is a class method '''baz docstring''' self.foo() + self.bar()

    2熱度

    1回答

    我有一個abstract syntax tree,我需要迭代。 AST由lemon port to PHP生成。 現在「正常」,我會用全新的,有光澤(PHP 5.3.1)SPL類做到這一點,它應該是這樣的: $it = new \RecursiveIteratorIterator( new \RecursiveArrayIterator($ast['rule']), \Recur

    0熱度

    1回答

    我在分析eclipse中的源代碼之後建立了一些統計數據。但是整個過程太慢了,因爲每次編譯後我都會重新編譯我的模型。 我正在尋找一種方法來獲取代碼的變化部分(如ASTNodes)並重建我的模型的那一部分。我想即使改變了編譯單位,而不是確切的代碼元素就足夠了,用戶編譯後,仍然會是一個很好的優化。我確信eclipse能夠知道哪些代碼元素被改變(甚至知道它們的語義),因爲當我使用subclipse插件時,

    0熱度

    1回答

    是否可以做我在這裏嘗試的東西?或者,也許我接近錯了? arrayDef : { int c = 0; } ('['']' {c++;})+ -> ARRAY /* somehow inject c here */ ;

    3熱度

    1回答

    我有一個Java AST,我嘗試通過XPath在其內部找到一個變量。 讓說的變量稱爲「foobar的」我可以用 //VariableDeclarator/VariableDeclaratorId[@Image='foobar'] 但如果我不知道該文本「foobar的」,而是想從另一個元素 //VariableDeclarator/VariableDeclaratorId[@Image=//Sy

    1熱度

    1回答

    再次我有一個從 public class Test { String o = new String("hh"); public void wrong1() { synchronized(o) { // huhu } } } 創建我嘗試創建一個XPath查詢其找到synchronized塊,其中定義字符串變量o是用java A

    18熱度

    4回答

    我正在研究一個非常複雜的DSL,我想編譯成幾個高級語言。整個過程一直是一種學習體驗。編譯器是用java編寫的。 我想知道是否有人知道代碼生成器部分設計的最佳做法。我目前已將所有內容解析爲抽象語法樹。 我正在考慮使用模板系統,但我還沒有研究過這個方向,因爲我想先從堆棧溢出中聽到一些看法。 謝謝!

    6熱度

    3回答

    是否有一個Eclipse插件,可以讓您基於項目文件的Java AST(抽象語法樹)進行搜索?通過「Java搜索」功能似乎並不涵蓋樣病例: 「給我聲明爲‘X’中的所有類的所有字段」 我能想象更多的可能性,將開闢與一個基於AST的搜索,但我甚至不知道這樣的插件是否會有實際的性能。 更新:正如Kevin所指出的那樣,Java搜索功能確實覆蓋了我提到的用例。我仍然很好奇,不管是否有人編寫了允許任意類型的A

    4熱度

    4回答

    我目前在思考如何最好地採用使用Antlr生成的AST並將其轉換爲可在我的程序中使用的有用對象。 我的語法(除了學習)的目的是創建一個可執行的(運行時解釋的)語言。 例如,我將如何採取一個屬性子樹,並具有一個特定的屬性類instanciated。例如。 在我的語言下面的代碼: Print(message:"Hello stackoverflow") 將產品的以下AST: alt text htt