abstract-syntax-tree

    5熱度

    1回答

    我正在編寫一個解析器來解析簡單的算術公式:它只需要(和限制)來支持數字和變量上的+ - * /。例如: 100.50*num*discount 它基本上用來計算產品的價格。 這是用python編寫的,我想簡單地使用python自己的解析器。這個想法首先解析輸入AST,然後走在AST,以限制一小部分的AST的節點類型,說:ast.BinOp,ast.Add,ast.Num,ast.Name等等.

    0熱度

    1回答

    我已經編寫了一個LR(1)解析器,它可以成功地將我的語法語言中的字符串解析爲具體語法樹,但我現在試圖構造一個抽象語法樹。 我使用的是繼承的設計我的AST節點: struct ASTNode { virtual Type typeCheck() = 0; } struct IDNode : public ASTNode { string name; ... }

    0熱度

    1回答

    我使用repr()和ast.literal_eval()作爲json.dumps()和json.loads()的替代方法。 一個簡單ast.literal_eval(repr(m)),其中m是一個純dict()充滿str(),別人dict()或僅set()對象,失敗,出現錯誤: ValueError: malformed node or string: <_ast.Call object at 0

    0熱度

    1回答

    這裏有一個簡單的語法: START = DECL DECL $ ; DECL = TYPE NAME '=' VAL ; TYPE = 'int' | 'float' ; NAME = 'a' | 'b' ; VAL = '4' ; 我解析此輸入流與Grako: int a = 4 float b = 4 ,我檢索該抽象語法樹(JSON): [ "int",

    1熱度

    1回答

    我有這樣的方法: public static int calc(int a, int b) { if (a >= b) return a - b; return 0; } 我想知道這是一個已知的行號使用的條件。在這種情況下,我的預期結果是條件的名稱,如「> =」。 我知道如何解析給定的ICompilationUnit的CompilationUnit。但是

    1熱度

    1回答

    我使用Pandoc進行技術報告,並修改了Python pandocfilters包示例metavars.py以提供變量替換。 Markdown中的%{test}被替換爲YAML元數據中的值test。很棒! 它適用於單線和「塊」風格的YAML。 我想要做同樣的事情,而不是放在Markdown格式化表格中的文本塊中。這裏是我最小的測試文檔(example.md): --- test: |-

    1熱度

    1回答

    Green Tree Snakes給出了一個使用ExtSlice的an example: >>> parseprint("l[1:2, 3]") Module(body=[ Expr(value=Subscript(value=Name(id='l', ctx=Load()), slice=ExtSlice(dims=[ Slice(lower=Num(n=1), uppe

    0熱度

    1回答

    我怎樣才能得到org.eclipse.jdt.core.dom.Statement在給定的行號? 假設我有這個類: 1 package foo; 2 public class Operations { 3 public static int calc(int a, int b) { 4 if (a >= b) 5 return a - b; 6 if (a<b || b==2)

    0熱度

    1回答

    我正在使用GumTree將Java文件解析爲ITree,這是GumTree的數據結構,它代表AST。然後,我通過對它執行操作來修改ITree,它是GumTree對插入,更新(重命名等),刪除和移動的表示。然後我想解開最後修改後的ITree。換句話說,我正試圖漂亮地打印AST。我已經查看了ITree方法(core/src/gumtreediff/tree)並嘗試使用PrettyString,但是它返

    0熱度

    1回答

    我試圖使其顯示第一 所以(1 + y)/(1 + 2z)^2轉化爲 /(1+y)(1+2z)^2 此代碼以重新排序「/」操作數實現這一點: object ast extends App { val s: List[String] = "1 + y/1 + 2z ^2".split(" ").toList; val removeOperatorsToBeReordered