📄 tokenmain.java
字号:
package com.Compiler.token;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TokenMain {
private char tempChar;
private StringBuffer tempToken = new StringBuffer();
private StringToken st; // = new StringToken("three quit");
List KeyTable = new ArrayList();
List SignTable = new ArrayList();
List BoundTable = new ArrayList();
List resultTable = new ArrayList();
public void KeyTable() {
KeyTable.add(new Token(0, "while"));
KeyTable.add(new Token(0, "if"));
KeyTable.add(new Token(0, "else"));
KeyTable.add(new Token(0, "switch"));
KeyTable.add(new Token(0, "case"));
KeyTable.add(new Token(0, "int"));
KeyTable.add(new Token(0, "char"));
KeyTable.add(new Token(0, "float"));
KeyTable.add(new Token(0, "double"));
KeyTable.add(new Token(0, "byte"));
KeyTable.add(new Token(0, "main"));
}
public void signTable() {
SignTable.add(new Token(3, "+"));
SignTable.add(new Token(3, "-"));
SignTable.add(new Token(3, "*"));
SignTable.add(new Token(3, "/"));
SignTable.add(new Token(3, "<"));
SignTable.add(new Token(3, ">"));
SignTable.add(new Token(3, "="));
SignTable.add(new Token(3, "<="));
SignTable.add(new Token(3, ">="));
SignTable.add(new Token(3, "%"));
SignTable.add(new Token(3, "=="));
}
public void BoundTable() {
BoundTable.add(new Token(4, "{"));
BoundTable.add(new Token(4, "}"));
BoundTable.add(new Token(4, "("));
BoundTable.add(new Token(4, ")"));
BoundTable.add(new Token(4, ";"));
}
public TokenMain() {
KeyTable();
signTable();
BoundTable();
}
public boolean isLetter(char c) {
int ascii = (int) c;
if ((ascii >= 97 && ascii <= 122) || (ascii >= 65 && ascii <= 90)) {
return true;
}
return false;
}
public boolean isDigit(char c) {
int ascii = (int) c;
if (ascii >= 48 && ascii <= 57) {
return true;
}
return false;
}
public void exeCute() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(new File("test.txt"))));
String str;
while ((str = br.readLine()) != null) {
st = new StringToken(str);
while (st.hasChar()) {
tempChar = st.getChar();
while (tempChar == ' ' && st.hasChar()) {
st.addChar();
tempChar = st.getChar();
}
if (isLetter(tempChar)) {
while ((isLetter(tempChar) || isDigit(tempChar))
&& st.hasChar()) {
tempToken.append(tempChar);
st.addChar();
tempChar = st.getChar();
}
if (isKey(tempToken.toString())) {
resultTable.add(new Token(0, tempToken.toString()));
} else {
resultTable.add(new Token(1, tempToken.toString()));
}
tempToken = new StringBuffer();
} else if (isDigit(tempChar)) {
while (isDigit(tempChar) && st.hasChar()) {
tempToken.append(tempChar);
st.addChar();
tempChar = st.getChar();
}
resultTable.add(new Token(2, tempToken.toString()));
tempToken = new StringBuffer();
} else if (isSign(tempChar)) {
resultTable.add(new Token(3, String.valueOf(tempChar)));
st.addChar();
tempToken = new StringBuffer();
} else if (isBound(tempChar)) {
resultTable.add(new Token(4, String.valueOf(tempChar)));
st.addChar();
tempToken = new StringBuffer();
} else {
System.out.println("error:" + st.getChar());
st.addChar();
}
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public boolean isKey(String temp) {
Iterator it = KeyTable.iterator();
while (it.hasNext()) {
if (temp.equals(((Token) it.next()).getTokenValue())) {
return true;
}
}
return false;
}
public boolean isSign(char tempChar) {
Iterator it = SignTable.iterator();
while (it.hasNext()) {
if (tempChar == ((Token) it.next()).getTokenValue().charAt(0)) {
return true;
}
}
return false;
}
public boolean isBound(char tempChar) {
Iterator it = BoundTable.iterator();
while (it.hasNext()) {
if (tempChar == ((Token) it.next()).getTokenValue().charAt(0)) {
return true;
}
}
return false;
}
public void printToken() {
Iterator it = resultTable.iterator();
while (it.hasNext()) {
Token temp = (Token) it.next();
System.out.print(reClass(temp.getTokenClass()) + " ");
System.out.println(temp.getTokenValue());
}
}
public String reClass(int i) {
if (i == 0) {
return "保留字";
} else if (i == 1) {
return "标识符";
} else if (i == 2) {
return "常数";
} else if (i == 3) {
return "运算符";
} else if (i == 4) {
return "界符";
}
return "";
}
public static void main(String[] args) {
TokenMain tm = new TokenMain();
tm.exeCute();
tm.printToken();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -