2017-05-26 66 views
0

我是新來的編譯器設計,一直在觀看Ravindrababu Ravula的series of youtube videos抽象語法樹(AST)中的常見屬性是什麼?

我創建my own language爲樂趣,我將它解析爲抽象語法樹(AST)。我的理解是,這些樹可以隨身攜帶,因爲它們遵循與其他語言相同的結構。

如何創建一個可移植的AST?

旁註:

  1. 我的解析器,目前用JavaScript編寫的,但我可以將它移動到C#。
  2. 我一直在尋找SpiderMonkey的規格指導。這是一個好方法嗎?
+0

創建它如何?許多解析器生成器會爲你生成AST類。無關。 – EJP

+0

@EJP我提供了一個鏈接到我的代碼:https://github.com/christo8989/erl。我不知道什麼是分析生成器或如何使用它。現在我的解析器在JavaScript中,但我可能會用C#重寫它。 – christo8989

+0

@EJP我重申了我的問題是關於主題。 – christo8989

回答

2

可移植性(無論如何定義)是不太可能是在建設AST你的首要目標。幾乎沒有(如果有的話)編譯器框架提供了一個允許使用外部AST的清晰接口,特定的AST結構往往會被記錄得很差,如有更改,恕不另行通知。 (即使它們有充分的文檔記錄,典型的AST實現的複雜性也是具有挑戰性的。)

AST與語言的語法細節以及所使用的特定解析策略非常緊密相關。儘管能夠將AST重新用於多個任務(編譯,分析,漂亮打印,交互式編輯,靜態分析等)非常有用,但這些不同用例的衝突需求往往會增加複雜性。特別是在語言開發的開始階段,您會希望爲自己提供很多快速原型設計的空間。

可移植AST的最有吸引力的原因是將一些其他語言作爲目標,從而節省編寫代碼生成等的成本。但是,在實踐中,通常更容易生成其他語言的文本表示而不是強迫你的解析器使用外部AST。更好的辦法是定位一個記錄良好的虛擬機(LLVM,.Net IL,JVM等),這通常比生成C代碼要少得多。

您可能想看看LLVM Kaleidoscope tutorial(第二部分介紹了AST,儘管用C++實現)。此外,你可能會發現this question on a sister site有趣的閱讀。最後,如果你打算用JavaScript實現你的實現,你至少應該看看jison parser generator,這需要大量的維護解析器和掃描器的努力(因此可以使實驗更容易)。

相關問題