2017-04-16 205 views
0

我目前正在尝试实现一个ruby编译器。要创建解析器和词法分析器,我使用Antlr4。现在我无法弄清楚如何在语法分析器中实现语义分析。有人可以解释如何使用生成的语法分析器来进行语义分析吗?如果你可以用一个简单的例子来解释,说明如何检查变量是在使用前初始化。如何使用Antlr进行语义分析?

+1

这似乎是这个问题过于宽泛。 –

回答

0

嗯,我无法描述的一切,你可以和必须做的,但我会向你们展示其背后的原理...

ANTLR生成你ParseTree,你可以接着用ParseTreeWalker过程。该步行者将从最顶层开始逐节点遍历解析树节点,然后处理所有子节点(尽管可以根据我所知指定该行为)。如果您已经向walker注册了ParseTreeListener,它会收到关于它的每一步的通知。语法中每个解析器规则有两种方法:一种是在解析器进入这个规则(在该节点的子节点被访问之前)和一个解析器退出规则(在所有子节点之后各个节点已被访问)。

ParseTreeListener是你可以做你的语义分析。您提到了对未定义变量的检查:为此,您必须连接您的声明规则,读出变量名称并将其存储在List中。现在,您可以连接每个可以包含变量的规则,读取它的名称并检查它是否位于已声明变量的列表中。如果不是,那么变量是未定义的。

作为一个例子,你可以看看我的的here。相应的语法可以找到here