iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 10
0
Software Development

做一個JVM語言系列 第 10

Antlr練習,程式符號的有效性檢查

實做一個程語言時,我們必須做符號(symbols或identifiers)被恰當的使用。
用Antlr做一個檢驗器(validator), 檢查一下事項:

  1. 變數有定義,且有正確的可視性(作用範圍)
  2. 函數有正確的定義。
  3. 變數不會被當成函數使用。
  4. 函數不會被當成變數使用。

有很多錯誤的語言(cymbol)舉例:

int f(int x, float y) {
    g();   // 呼叫下面有定義的函數,可以
    i = 3; // 沒有定義i的型別(錯誤)
    g = 4; // g 是函數,卻被當變數給值 (錯誤)
    return x + y; // x, y 是有定義的參數, 正確
}

void g() {
    int x = 0;
    float y;
    y = 9; // y 有定義,正確
    f();   // 函數f上面有定義
    z();   // 沒定義z函數 (錯誤)
    y();   // y 不是函數,上面定義成浮點數 (錯誤)
    x = f; // f 不是變數 (錯誤)
}

這個例子真讓人百感交集,這裏認為是錯誤的語句,
在其他類型語言裏,不見得是錯誤的。
在這裏,請把cymbol是靜態型別的簡單語言,
不是動態型別,或無型別的語言。
也不是函數式語言。

從切關鍵字(LEXER),建抽象語法樹(PARSER),到現在語法的有效性檢驗。

Antlr真是一個強力的語言工具。

到底怎麼識別這種級別的錯誤呢?

待下回(明晚)分解。


上一篇
Antlr練習,生成函數呼叫圖(Call Graph)
下一篇
Antlr練習,程式符號的有效性檢查(二)
系列文
做一個JVM語言12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言