我正在構建一個自定義的小型解釋腳本語言,除了範圍界定之外,一切正常。 對於實際執行我使用的是訪問者模式: 我修改通過變量表的模式: public void visit(ProgrammTree proTree){
VariableTable vt = new VariableTable();
foreach (var t in proTree.getChildren())
當編譯器使用SSA形式表示代碼時,對局部變量的更新成爲新變量。但是,當變量處於封閉範圍內時,這並不總是有效的,例如, (使用JavaScript語法說明,可以在許多語言中出現的情況): function f() {
var x = 1;
function g() {
x++;
}
...
}
什麼是代表這個通常的方法是什麼?
編輯:對於那些有興趣/誰想看到我在做什麼,我的應用程序的源代碼可以找到here。 我正在用C#構建一個代碼編輯器應用程序,它提供語法高亮顯示。我目前使用ANTLR for C#來解析代碼以突出顯示它。到目前爲止,當用戶最初打開文件時,我的應用程序可以非常快速地突出顯示代碼。不過,當用戶開始編輯文本時,我沒有編寫任何代碼來重新突出顯示文本。 我希望編輯器能夠很好地處理大文件,所以我不希望每次用戶輸入
Scala的定義方法的時候,我發現這個 def method1: Int => Int = (j: Int) => j // works
def method2: Int => Int = j => j // works
def method3: Int => Int = j: Int => j // error
def method4: Int => Int = {j: Int => j}