本人博客内编译原理文章的配套资源jar包,包括词法分析,语法分析,中间代码生成,静态语义检查,代码解释执行以及抽象语法树的手动生成:https://download.csdn.net/download/as1072966956/10448935
转载请注明出处。
Token.java
package sch.cauc.edu.token;
/**
*
*
* Token
* 创建人:xrzhang
* 时间:2018年5月10日-上午9:11:26
* @version 1.0.0
*
*/
public class Token {
private TokenType type;
private String token;
private int line;
private int column;
/**
*
* 词法记号的构造器
* @param type 词法记号的类型
* @param token 词法记号的串值
* @param line 词法记号所在的行号,用于调试和检查输出
* @param column 词法记号所在的列号,用于调试和检查输出
*/
public Token(TokenType type,String token,int line,int column) {
this.line = line;
this.type = type;
this.token = token;
this.column = column;
}
public TokenType getType(){
return type;
}
public int getLine(){
return line;
}
public int getColumn(){
return column;
}
public String getLexeme(){
return token;
}
/**
*
* 输出当前词法记号的信息,包括类型、串值、行号和列号
* 方法名:toStrong
* 创建人:xrzhang
* 时间:2018年5月10日-上午9:16:13
* 邮件:jmzhang_15_cauc@163.com
* @return String 字符串标识的词法记号信息
* @exception
* @since 1.0.0
*/
public String toString() {
return type+" "+token+" ("+line+","+column+")";
}
}
enum TokenType{
/**忽略的词法单位**/
IGNORE,
/**变量**/
IDENTIFIER, //标识符
/**常量**/
INTEGER_LITERAL, //整型常量
BOOL_TRUE, //true
BOOL_FALSE, //false
/**保留字**/
KEY_INT, //int
KEY_BOOLEAN,//boolean
KEY_WHILE, //while
KEY_IF, //if
KEY_ELSE, //else
/**算术运算符**/
PLUS, //+
MINUS, //-
TIMES, //*
DIVIDE, ///除
REMAINDER,//%取模
/**关系运算符**/
LESS, //<
GREATER, //>
LESS_EQUAL, //<=
GREATER_EQUAL, //>=
NOT_EQUAL, //!=
EQUAL, ///==
/**逻辑运算符**/
LOGICAL_NOT, //!
LOGICAL_AND, //&&
LOGICAL_OR, //||
/**赋值符号**/
ASSIGN, //=
/**括号**/
LPAREN, //(
RPAREN, //)
LBRACKET, //{
RBRACKET, //}
/**界符**/
COMMA, //逗号,
SEMICOLON, //分号;
/**文件结尾符**/
EOF,
/**注释*/
NOTE
}