使用JFlex / CUP构建编译器并提出一些问题

时间:2010-12-30 23:17:51

标签: java compiler-construction jflex

我目前正在为BASIC语言开发一个简单的编译器,我发现了一些我想问你的问题。

第一个很容易,我应该在哪里定义我的令牌?我的意思是,在Lexer.java文件中,我使用表达式将令牌发送到解析器: 返回符号(sym.STATIC); STATIC对我来说是一个象征,但我不知道在哪里定义它。

其次,我应该在哪里定义创建Lexer和Parser实例的主类?在Parser类中还是在另一个类中?

先谢谢。

2 个答案:

答案 0 :(得分:1)

首先:将自动为您生成一个定义这些符号的类的文件

第二次:您创建了一个自己的类,其中一个main用于从生成的Lexer创建一个对象,您传递InputStream,另一个来自Parser,您将Lexer传递给它。 创建这两个对象后,调用属于Parser的方法parse()。

答案 1 :(得分:0)

首先:您不应该直接编辑.java文件。您应该编辑Scanner.jflex文件。那应该包含 返回符号(sym.STATIC);

当您在.jflex文件中使用某些内容时,还需要在Parser.cup文件中同时声明它。 在块下面写着:解析器代码{::} , 您需要以下列方式声明STATIC符号: 终端STATIC;

第二:您不需要自己创建主文件。在一起使用JFLEX和CUP时,您只需使用Apache Ant构建工具或NetBeans编译文件。将自动为您创建主文件。