翻譯

編程語言翻譯

這是一個程序,自豪地做我的符號計算類的分配。 其中一個應用程序的符號計算是從一種語言翻譯到另一個。 這個程序的作用是什麼需要輸入,滿足輸入語法,輸出回使用輸出的語法。 在我們的情況下,輸入語法是“小Lisp的”文法,語法和輸出的一個子集的Haskell語法。 這樣的效果,這是一個程序,轉換成一個小Lisp程序Haskell程序。

輸入語法的定義如下,使用的EBNF符號

<表達式>::= <常數> | <標識> | <函數Call> | <條件表達式>
<常數 ::= <數字> |“<symbol>”| [{<常數}]
<標識 ::= {<字母<smallLetter> | <digit>}
<函數Call>::= <標識> [<表達式{; <表達式}]
<條件表達式>::= [<clause>中{; <clause>中}]
<clause>中 ::= <expr> - >“<expr>
<編號>::= {<digit> <digit>}
<symbol>::= <char>的
<digit>::= 0 | 1 | ... | 9
<smallLetter>::=一個| b | ... | ž
<字母>::= <smallLetter> |甲|乙| ... | ž


它是如何工作的?

它的工作程序並沒有令牌的令牌翻譯。 這是因為“,”是翻譯成“,”在一個函數調用,但它被翻譯為“否則,如果”在條件表達式。 因此,一個標準的方法稱為“ 遞歸下降 ”字。

試一試,輸入以下表達式:

[平等[x; 2] - >“顯示 [”平等“],否則” - >顯示 [減去 [x; 2]]]


採樣輸入 /輸出

在翻譯 Haskell程序中,我們使用uncurry形式的函數調用。 由於要素的名單中輸入語法(小的Lisp)既可以是String和詮釋,我們介紹自定義的數據類型不變 ,並構造“樂善堂”,“數”和“三陽”,使所有列表名單是常數。

*粗體的是用戶輸入(在輸入語法符號)和那些與常規字體是程序的輸出(在哈斯克爾符號)

利弊[美國廣播公司()]

缺點(美國廣播公司(樂善堂[]))

利弊[“美國廣播公司";()]

缺點((三陽的“ABC”),(樂善堂[]))

[缺點 [32;(2 )]-->"文“]

如果利弊((NUM個“32”),(樂善堂[(招“2 ")]))則(三陽”文森特“)

[eqp [2,3] - >“富[1; 2]; endp [列表]-->"文森特”,否則 - “3]

如果eqp((NUM個“2”),(NUM個“3”)),那麼富((NUM個“1”),(NUM個“2”))
否則,如果endp(列表),然後(三陽“文森特”)
否則,如果另有然後(招“3”)

[缺點 [1;利弊[2;名單 ]]-->"文森特“;富” - > [一 - “乙; ç - >”ð]]

如果利弊((NUM個“1”),犯((NUM個“2”),列表)),那麼(三陽“文森特”)
否則如果foo那麼一則b
否則,如果C則D


編譯程序

這個翻譯計劃用Haskell寫。 我用格拉斯哥Haskell編譯器把它深入到一個可執行文件(在Windows中)。

下載文件 下載S-Lisp/Haskell翻譯計劃

[建議/意見] [軟件聲明] [私隱政策]
©版權所有2002-2011。 保留所有權利。
Software on this web site is provided "as is". Use at your own risk.