如何检查我的作业是否使用了正确的变量?

时间:2015-04-06 16:43:02

标签: c# antlr4 visitor

我正在使用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语句中使用的记录必须与循环中使用的记录相同。我怎么检查这个?

1 个答案:

答案 0 :(得分:1)

您的访问者可以维护一堆变量定义(范围):

  • for_stmt的访问方法将变量声明推送到堆栈(并在访问子节点后弹出它)
  • set_stmt的访问方法检查堆栈,如果无法在堆栈中找到访问的ID,则抛出运行时异常