java - JavaCC 创建自定义 Token 类
问题描述
我正在为我的编译器和解释器课程做一个学校作业,我们当前的任务是使用 JavaCC 创建一个扫描器和一组令牌。我对 JavaCC 的工作原理有相当深入的了解,但我的问题是在线查找资源以在遇到困难时帮助我。我正在创建一个自定义 Token 类,我们称之为 NewToken.Java。我知道基础 Token 类有一个 image 变量和一个 kind 变量,但我想实现我自己的变量“value”。此外,我想弄清楚如何分配这个值。我希望 value 变量保存我扫描的文字值,例如,我的 NewToken 与以下内容匹配
< IDENTIFIER:(< LETTER >)+ ( < LETTER > | < DIGIT >)* >
< #LETTER:["a" - "z"] >
< #DIGIT: ["0" - "9"] >
所以类似于 Name123Name 的东西会被捕获,当它发生时,我想将字符串“Name123Name”存储到我的 NewToken 对象的“值”变量中。我希望这是有道理的,我还是 JavaCC 的新手,可能在这里用错误的名字称呼事物。
public NewToken(){}
public NewToken(int kind){
this(kind,null);
}
public NewToken(int kind, String image){
this.kind=kind;
this.image=image;
this.value=image;
}
public String toString(){
return image;
}
public static Token newToken(int ofKind, String image){
switch(ofKind){
default : return new Token(ofKind, image);
}
}
public static Token newToken(int ofKind){
return newToken(ofKind, null);
}
}
以上是我的 NewToken 类代码的一部分,我让它扩展了 Token 并实现了 java.io.serializable。我使用为 Token.java 生成的代码创建。我还有我的变量声明和我的 getValue() 函数,这里没有列出来节省空间。我不是在寻找任何人为我做我的工作,我只需要一些关于如何让这个工作的指导,提前谢谢你。
解决方案
首先,我认为newToken
例程应该返回类型的对象NewToken
而不是Token
.
public static Token newToken(int ofKind, String image){
return new NewToken(ofKind, image);
}
public static Token newToken(int ofKind){
return new NewToken(ofKind, null);
}
(我认为您不需要第二种方法。但是,我不完全确定,所以我会留下它。)
我有点不清楚你想value
与 有什么不同image
,但我假设你可以value
从image
和计算所需的值kind
。我将进一步假设您已将此功能实现为静态方法。
private static String computeValue(int kind, String image) {...}
删除前两个构造函数,剩下的应该是:
private NewToken(int kind, String image){
this.kind = kind;
this.image = image;
this.value = computeValue( kind, image );
}
推荐阅读
- ios - iOS:UIView 在启用 UITabGestureRecognizer 的情况下失去点击识别
- ibm-doors - 无法提取模块的版本 DXL IBM DOORS
- azure - 用于处理非结构化数据源的 Azure 资源
- ionic-framework - scss中颜色和map-get方法的区别
- swagger - 在 Swagger API 合约中记录错误代码定义
- react-native - 在 React Native Router Flux 中向子场景发送参数
- delphi - 使用 embarcadero tlib 从 windows lib 重新打包库的工具?
- c# - 什么时候 IExceptionHandlerPathFeature 可以在 Asp.Net Core 中使用 ExceptionHandlerMiddleware 为空
- dart - 如何在颤动中水平居中文本?
- python - Pandas Dataframe 到 BigQuery 引发 NotImplementedError