2015年7月13日 星期一

Lua 解譯器的用法

因為 NodeMCU 使用 Lua 語言編寫, 因此對 Lua 解譯器用法做了些測試, 整理如下, 首先下載目前最新版 Lua 5.3 :

# Lua source code download
# Lua binary for Windows
Download lua-5.3_Win32_bin.zip (293.9 kB)

解開後會有四個檔案 :


其中 luac53.exe 是 Lua 的編譯器 (Compiler), 用來編譯原始碼; 而 lua53.exe 與 wlua53.exe 則是解譯器, 我們常用的是 lua53.exe 這個程式, 它是 console 輸出版, 點擊執行時會進入 Lua 交談模式, 可以直接執行 Lua 命令 :


在交談模式下, 也可以用 = 號代表 print 指令, 例如 :

E:\Lua>lua
Lua 5.3.0  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> =("Hello World!")
Hello World!
> =a
nil
> a=100
> =a
100
>

當然我們可以把程式寫成 test1.lua 檔案如下 :

print ("Hello World!")
print (a)
a=100
print (a)

然後開啟命令提示字元視窗用 lua53.exe 執行 :

D:\lua-5.3_Win32_bin>lua53.exe test1.lua
Hello World!
nil
100

但如果用 wlua53.exe 去執行的話就不會顯示結果, 因為 wlua53.exe 不會輸出結果到 console, 適用於不需顯示輸出之用. 例如參考下列網站 :

# Lua - File I/O

寫一個 test2.lua 如下 :

file=io.open("result.txt", "a")
io.output(file)
io.write("Hello World!")
io.close(file)
print ("Hello World!")

如果用 wlua53.exe 執行, 螢幕不會顯示任何結果 :

D:\lua-5.3_Win32_bin>wlua53.exe test2.lua

D:\lua-5.3_Win32_bin>

但是檢查 result.txt 檔案, 只有一筆 Hello World! :

Hello World!

如果使用 lua53.exe 來執行, 螢幕會輸出最後那個 print 指令 :

D:\lua-5.3_Win32_bin>lua53.exe test2.lua
Hello World!

D:\lua-5.3_Win32_bin>

檢查 result.txt 檔案, 仍然只有一筆 Hello World!, 因為 print 是輸出到 console 的.

當然我們可以在控制台的環境變數 path 中指定 Lua 執行檔位置, 這樣在任何資料夾下面都能執行 Lua 程式了 :


如果嫌 lua53.exe 與 wlua53.exe 太長, 也可以把版本號 53 去掉 (但 lua53.dll 的 53 不可以去掉, 因為其它三個執行檔內部必須呼叫此動態連結檔), 變成 lua.exe 與 wlua.exe, 這樣以後只要敲 lua 就可以了 :

D:\lua-5.3_Win32_bin>lua test2.lua
Hello World!

經過設定 path 後, 就能在任何資料夾下面執行 lua, 如果不指定要執行的程式, 就會顯示版本資訊後出現大於提示號 >, 進入 Lua 的交談模式 :

C:\Users\yhhuang>lua
Lua 5.3.0  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> print ("Hello World!")
Hello World!

在直譯器交談模式下, 如果輸入的指令不完整就按 Enter, 則提示號會變成兩個大於, 等輸入完整後才會執行, 如下所示 :

D:\lua>LUA
Lua 5.3.0  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> print(
>> "Hello World!"
>> )
Hello World!
>

按 Ctrl+C 或輸入 os.exit() 就可以跳出交談模式, 回到 DOS 命令模式了 (在 Linux/Unix 是 Ctrl+D).

其實不用進 Lua 交談模式, 直接在 DOS 命令提示字元視窗就可以下 Lua 指令, 只要加一個 -e 參數即可 :

D:\>lua -e "print('ok')"

Lua 語言之父 Roberto Ierusalimschy 為巴西 Pontifical Catholic University of Rio de Janeiro 教授, 版本提示號後面出現的 PUC-Rio 就是該大學的簡稱 (Rio 表示位於里約熱內盧), 詳參 :

Lua 的創造者 -- 巴西的 Tecgraf 組織與 Roberto Ierusalimschy 教授

至於 Lua 的程式編輯器, 用記事本就可以了, 但因多年來習慣使用 EditPlus, 所以我也下載了 Lua 的語法, 雖然是 5.1 版的, 但 Lua 到五版後就很穩定了, 所以沒啥差異 :

# 下載 EditPlus 的 Lua 語法檔


沒有留言 :