如何处理 antlr4 访问者中的乱序分配?

How to handle out-of-order assignments in an antlr4 visitor?

我有一个简单的 antlr4 语法,它处理变量到文本和 OR 运算符的赋值(用于递归规则)。我的访问者在分配顺序正确时工作正常(示例 A),但在分配顺序不正确时失败(示例 B)。如何使示例 B 也能正常工作?也许我需要某种双遍方法,在第一次遍历中创建变量并在第二次遍历中解析变量?谢谢

示例 A(有效)

$bar='happiness';
$foo='baz' $foo OR $bar;
$start=$foo;

$start // outcome is 'happiness' repeated one or more times

示例 B(失败,$foo 在第 1 行未定义)

$start=$foo;
$foo='baz' $foo OR $bar;
$bar='happiness'; 

$start

假设您的输入完全由一系列赋值组成,后跟 return 值(特别是我假设赋值之间不会有任何副作用操作),您可以通过从结果表达式开始执行深度优先搜索来解析此类代码块的值。为此,您确实会使用这样的两个阶段:

  1. 查看作业并创建从变量名到表达式的映射。
  2. 使用映射递归地计算结果表达式以递归地计算表达式中出现的变量。如果您在执行此操作时遇到循环,则意味着您的输入中存在无限递归。