1. 程式人生 > >如何寫一個簡單的直譯器-0

如何寫一個簡單的直譯器-0

在接下來的幾篇文章中,我們一起用Java寫一個簡單的程式語言(我稱之為Lan)直譯器。該語言不會有實際用處,僅僅用於演示Pratt解析演算法。目標讀者是對程式語言的解析感興趣的初學者,當然我也是。先看看Lan的一些程式碼:

變數型別(數字,布林值,字串,函式,null)

n = 123 + 1 - 23 * 21 / 3
b = true 
s = "hello lan"
hello = func(name){print "hello world" + name}
n = null

控制流(列印乘法表)

i = 1
while i < 10 {
    j = 1
while j < 10 { print i+"*"+j+"="+i*j j = j + 1 }
i = i + 1 }

函式(斐波拉契數)

func fib(n) {
    if n == 0 {
        0
    } else if n == 1 {
        1
    } else {
        fib(n-1)+fib(n-2)
    }
}
foo = fib(10)
print foo

閉包

makeAdder = func(numberToAdd) {
    return func
(n) { n + numberToAdd } } adder = makeAdder(10) print adder(5) print makeAdder(20)(5)

看起來還不錯,實現起來也非常的簡單。下一篇文章開始詞法分析,也就是把原始碼分解成一個個的詞(Token)。