1

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

第一个很简单,我应该在哪里定义我的令牌?我的意思是,在 Lexer.java 文件中,我使用以下表达式将标记发送到解析器: return symbol(sym.STATIC); STATIC 对我来说是一个令牌,但我不知道在哪里定义它。

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

先谢谢了。

4

2 回答 2

1

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

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

于 2011-07-18T15:30:38.983 回答
1

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

当您在 .jflex 文件中使用某些东西时,您还需要同时在 Parser.cup 文件中声明它。在说:parser code {::}的块下方,您需要按以下方式声明 STATIC 符号: terminal STATIC;

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

于 2017-10-27T13:32:18.047 回答