簡體   English   中英

開發抽象語法樹

[英]Developing Abstract Syntax Tree

我在互聯網上搜索了一些有關開發C#抽象語法樹的新手信息,但我只能找到已經“知道”的人的信息。 我是一個業務線應用程序開發人員,所以這些主題有點過頭,但這是我自己的教育,所以我願意花時間學習任何必要的概念。

通常,我想了解從代碼字符串開發代碼的抽象表示背后的技術。 更具體地說,我希望能夠使用此AST來執行C#語法突出顯示。 (我意識到語法高亮並不需要AST,但這似乎是學習一些“編譯器”級技術的好機會。)

如果這個問題有點寬泛,我很抱歉,但我不知道該怎么回答。

謝謝!

首先,您需要了解解析的內容以及樹的抽象語法。 為此,您可以首先查看抽象語法樹上的Wikipedia

您真的需要花一些時間使用編譯器教科書來理解抽象語法樹如何與解析相關,並且可以在解析時構建; 經典的參考文獻是Aho / Ullman / Sethi的“編制者”一書(很容易在網上找到)。 您可以找到SO答案是否有任何“有趣”的方式來學習語言,語法,解析和編譯器? 啟發。

一旦你理解了如何為簡單的語法構建AST,你就可以將注意力轉向像C#這樣的東西。 這里的問題是規模龐大; 用20種語法規則玩玩具語言是一回事。 使用幾百或一千條規則的語法是另一種方法。 小經驗將使人們更容易理解大的如何組合,以及如何與他們共處。

您可能不希望構建自己的C#語法(或實現C#標准中的語法); 它做了很多工作。 您可以獲得可用於提供C#AST的工具(Roslyn已被提及; ANTLR有一個C#解析器,還有更多)。

確實,您可以使用AST進行語法突出顯示(盡管這可能會使用大錘殺死一個gnat)。 大多數人沒有太多考慮(但編譯器書籍強調),就是你擁有AST之后會發生的事情; 大多數情況下他們自己都沒用。 你真的需要更多的機器來做任何有趣的事情。 而不是一遍又一遍地重復(我一直看到同樣的問題),你可以看到我對解析后的生活的討論了解更多細節。

你應該看看Phil Trelford的這個演講:

在24小時內編寫自己的編譯器

這個人是天才,會讓你開火學習編譯器。 他對一個五歲的孩子的理解很容易解釋。 這個五歲的孩子是他的兒子,所以可能有一個不公平的優勢,但五個是五個。

看看羅斯林吧。 我想這可能就是你要找的東西。 它使您可以訪問編譯器AST,以及許多其他令人驚嘆的東西!

http://blogs.msdn.com/b/visualstudio/archive/2011/10/19/introducing-the-microsoft-roslyn-ctp.aspx

除此之外,我建議編寫一本關於編譯器的教科書。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM