如何检查我的赋值是否使用了正确的变量?
How do I check if my assignment is using the right variable?
我正在使用 ANTLR4 的访问者在 C# 中开发一个解释器。
在我的语法中,我有一个循环规则和一个赋值规则,如下所示:
for_stmt
: FOR EACH ID IN collection DO NEWLINE+
(block NEWLINE*)?
END FOR
;
set_stmt
:SET ID '.' ID TO arithExpr
;
block
: for_stmt
| set_stmt
;
在 for 循环中,我们可以设置这样的语句:
for each record in recordCollection do
set record.name to 10
end for
set 语句中使用的 record 必须与循环中使用的 record 相同。我该如何检查?
您的访问者可以维护一堆变量定义(范围):
for_stmt
的访问方法将变量声明压入堆栈(并在访问子节点后将其弹出)
set_stmt
的访问方法检查堆栈,如果在堆栈上找不到访问的 ID,则抛出运行时异常
我正在使用 ANTLR4 的访问者在 C# 中开发一个解释器。 在我的语法中,我有一个循环规则和一个赋值规则,如下所示:
for_stmt
: FOR EACH ID IN collection DO NEWLINE+
(block NEWLINE*)?
END FOR
;
set_stmt
:SET ID '.' ID TO arithExpr
;
block
: for_stmt
| set_stmt
;
在 for 循环中,我们可以设置这样的语句:
for each record in recordCollection do
set record.name to 10
end for
set 语句中使用的 record 必须与循环中使用的 record 相同。我该如何检查?
您的访问者可以维护一堆变量定义(范围):
for_stmt
的访问方法将变量声明压入堆栈(并在访问子节点后将其弹出)set_stmt
的访问方法检查堆栈,如果在堆栈上找不到访问的 ID,则抛出运行时异常