實做一個程語言時,我們必須做符號(symbols或identifiers)被恰當的使用。
用Antlr做一個檢驗器(validator), 檢查一下事項:
有很多錯誤的語言(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真是一個強力的語言工具。
到底怎麼識別這種級別的錯誤呢?
待下回(明晚)分解。