Java 我如何在ANTLR中实现流控制(*if-else的执行*,for…,while…)?

Java 我如何在ANTLR中实现流控制(*if-else的执行*,for…,while…)?,java,antlr,Java,Antlr,我是ANTLR的初学者,我有它的创作者写的两本书,我读了很多博客/论坛的帖子,但似乎我现在还不明白 我所能找到的只是这方面的语法代码,还有这方面的树语法代码,但我就是不明白控制流是如何由这方面构成的 因为我想我的问题对你们来说不够清楚,让我这样说: 你能给我看一下传递给解析器的所有必要代码吗 for (i=0; i!=3; i=i+1) { if (i==2) print i; else print "not 2"; } 将输出: not 2 not 2 2 最好用Jav

我是ANTLR的初学者,我有它的创作者写的两本书,我读了很多博客/论坛的帖子,但似乎我现在还不明白

我所能找到的只是这方面的语法代码,还有这方面的树语法代码,但我就是不明白控制流是如何由这方面构成的

因为我想我的问题对你们来说不够清楚,让我这样说:

你能给我看一下传递给解析器的所有必要代码吗

for (i=0; i!=3; i=i+1) {
   if (i==2) print i;
   else print "not 2";
}
将输出:

not 2  
not 2  
2
最好用Java


编辑:我在code.google.com上发现了一个使用ANTLR的小项目,在此基础上我明白了我的问题有多傻!:)

作为一个扫描器/解析器,Antlr只实现我们所称的编译器前端。Antlr的任务是获取自由格式的文本,并将其转换为易于程序(尤其是编译器后端)使用的数据结构


恐怕编写编译器后端(或解释器,或其他什么)仍然是你的工作

您要求的不仅仅是解析。您还要求编译和执行。解析器将源代码作为输入并生成AST(抽象语法树)。它不运行代码。格雷格,我的意思是问,如果还有其他的话,魔法到底在哪里。。。如果发生这种情况,我不知道我是否必须在解析器中放置一些东西,或者它应该放在我的访问者中。您可能不需要编译和执行,但您至少需要“解释”您的程序以模拟程序语义的效果。ANTLR让你有一个分析,并以额外的努力,AST,这是一个伟大的基础,编写这样一个口译。在AST上编写的解释器通常不是很难,但ANTLR只是将AST交给您,让您实现您想要的(解释器或编译器,如您所愿)。我明白了:)我很困惑,因为Terence Parr在书中的一个示例有一个for循环,其中包括声明部分中的变量“first”和“inc”在for的末尾,我想它代表递增,我在代码中没有找到这些“first”和“inc”的任何声明,它们在AntlWorks中是斜体文本,所以我认为它们是内置的,并且以某种方式用于实际的for循环。