2010-03-10 150 views
3

我想了解語言翻譯如何工作。你們能向我指出口譯員的工作方式嗎?創建語言翻譯

我的意思是,假設我有這樣寫的

10 x = 200; 
20 for r = x to 1000 step 1 
25 z = r + 32; 
30 print z; 
40 next r; 
50 end; 

什麼是構建一個可以運行類似的東西的解釋的最佳方式的某些行?

擁有一個包含所有允許的功能和搜索匹配的大矩陣?例如,第一行:將200分配給變量x,但這些符號不存在。

如果你們可以給我的方向...

感謝您的任何幫助。

+2

爲此編寫解釋器(或編譯器)是非常複雜的。我不是這方面的專家,但是在我的大學他們有一門名爲編譯技術的課程,我的一些朋友也參加了這門課程。如果我沒有記錯的話,它包含4個步驟,首先是編寫一些代碼模式(就像你已經擁有的代碼模式一樣),然後他們使用一個程序來查看它並找到模式,並且它們構建可用於構建樹的標記的代碼。然後他們建立編譯器。正如我所說的那樣,我不太瞭解,但有人告訴我這並不容易。 – Alxandr 2010-03-10 00:10:06

+0

謝謝..就是這一點。我正試圖得到一個大概的想法。 – SpaceDog 2010-03-10 00:12:32

+1

編譯器和解釋器資源的規範問題是http://stackoverflow.com/questions/1669/learning-to-write-a-compiler。並且列出了一些資源(如Crenshaw教程),這些資源在非常簡單的級別上進行了討論。 – dmckee 2010-03-10 00:23:28

回答

3

編譯器創建是一個複雜的問題(一個解釋器可被看作是一種特殊的編譯器)。

你必須先解析它 - 嘗試理解語法,然後創建一些內部表示(抽象語法樹),然後創建一些執行邏輯。

Wikpedia表明http://mcs.une.edu.au/~comp319/

+0

謝謝!!!!!!!!!! – SpaceDog 2010-03-10 00:13:02

+0

AST是一種完全服務的編譯器或解釋器,但它不是*必需的。 – dmckee 2010-03-10 00:24:43

+0

不需要AST,但需要一些理解...至少對於當前的行/語句。 – johannes 2010-03-10 00:26:57

1

瞭解的工具,如lex/flexyacc/bison。這些是在開放式軟件世界中構建編譯器的最流行的工具。許多着名的開源程序都是使用它們編寫的(包括PHP,gcc,doxygen)。你會發現很多免費的書籍和教程。他們不僅展示瞭如何使用lex和yacc工具,還解釋了編譯器背後的一般想法。

+1

不要忘記ANTLR(http://www.antlr.org/)比法克斯或野牛更復雜,但相當相關。 – mjv 2010-03-10 00:21:08

+0

是的ANTLR值得一提。 – doc 2010-03-10 00:23:54

+0

我覺得lex/yacc對初學者來說要容易得多。 另外,shift-reduce解析更容易理解。 OP想學習,所以也許lex/yacc更適合這個目的;我已經使用了兩個,發現lex/yacc作爲初學者更好。 – rmk 2010-03-10 18:30:20

1

我很想了解更多關於此的信息。我發現道格拉斯克羅克福德的JavaScript parser有趣,但從我所瞭解的他使用與解析語言通常不同的方法。這不是完整的解釋和編譯圖片,但我發現看到一些實際的解析實現和代碼的重新構建很有幫助。

1

你可以在http://goldparser.org找到一個開源的黃金分析系統。 :)

在他們的網站上也有一些解釋的概念,你可以從中學習一些基本的流程。

1

我知道這是一箇舊線程,但大多數相關問題都標記爲重複或關閉。所以,這是我的兩分錢。

我很驚訝沒有人提到過xtext呢。它可以作爲Eclipse pluginIntelliJ plugin。它不僅提供像ANTLR這樣的解析器,而且提供DSL所需的整個管道(包括解析器,鏈接器,類型檢查器,編譯器)。您可以在Github上查看它的源代碼,以瞭解解釋器/編譯器的工作原理。