分析程式中變數,函數的有效性,
有一些方法論。
學院派的教授又融合大量的實作經驗,
可以把理論實踐出來。
首先是2S,Symbol, Scope.
以這個小語言cymbol 為例,Symbol 可分類成:tINVALID, tVOID, tINT, tFLOAT,
4類,依次表示為 無效,無回傳值,整數,浮點數。
解析一段程式,可以產生 Symbol Tables。
分類各種類型的符號。
如以下的例子:
int x; //(1)
int y;
void a() //(2)
{ //(3)
int x;
x = 1; // 這個x 的範圍存在於函數內, 不是 全域的x
y = 2; // y 不存在於目前的作用域, 而全域的y有定義
{ int y = x; } //(4) 又是一個更小的作用域
}
void b(int z) //(5) 函數宣告
{ } //(6) 函數實作
通常在解決作用域的問題時,
會引進兩階段,
以術語來說,一階段是Defining Symbols。
定義符號。
另一階段是and Resolving Symbols。
定位符號。
而對Antlr來說,它就是兩次的啟動監聽Listner模式。