📄 analyseframe.java
字号:
private void newFile() {
sourFile = null;
inTextArea.setText("");
this.setTitle("小编译器 - Noname");
inTextArea.setEditable(true);
outTextArea.setText("");
indocument = inTextArea.getDocument();
indocument.addDocumentListener(this);
edited = false;
}
/**
* This method initializes analyseFile
*
* @return void
*/
private void analyseFile() {
saveFile();
outTextArea.setText("");
outTextArea.append("##Lexical analysis is on##\n");
char c;
int end;
char A = 'A';
char Z = 'Z';
char a = 'a';
char z = 'z';
char xia = '_';
char zero = '0';
char nine = '9';
char newline = '\n';
char dot = '.';
StringBuffer sb = new StringBuffer();
int len = inTextArea.getText().length();
if (sourFile != null) {
char[] buffer = new char[len + 1];
buffer = inTextArea.getText().toCharArray();
String RQ[] = new String[len + 1];
String CT[] = new String[len + 1];
int i = 0;
int j = 0;
int m = 0;
try {
while (i < len) {
c = buffer[i];
/**
* key and identifier will start with character
*/
if (((c >= A) && (c <= Z)) || ((c >= a) && (c <= z))
|| (c == xia)) {
sb.delete(0, sb.length());
while (((c >= A) && (c <= Z)) || ((c >= a) && (c <= z))
|| (c == xia) || (c >= zero && c <= nine)) {
sb.append(c);
c = buffer[++i];
}
if (checkWord(sb.toString()).equals("ID")) {
RQ[j++] = checkWord(sb.toString());
} else {
RQ[j++] = sb.toString();
}
CT[m++] = sb.toString();
outTextArea.append("( " + sb.toString() + "\t,"
+ checkWord(sb.toString()) + "\t)\n");
} else {
/**
* if current char is a number, it will be numbers
*/
if ((c >= zero) && (c <= nine)) {
sb.delete(0, sb.length());
while ((c >= zero) && (c <= nine)) {
sb.append(c);
c = buffer[++i];
}
/**
* if the next char is dot, it will be float,else it's integer
*/
if (c == dot) {
sb.append(c);
c = buffer[++i];
while ((c >= zero) && (c <= nine)) {
sb.append(c);
c = buffer[++i];
}
outTextArea.append("( " + sb.toString() + "\t,"
+ "FLOAT" + "\t)\n");
} else {
RQ[j++] = sb.toString();
CT[m++] = sb.toString();
outTextArea.append("( " + sb.toString() + "\t,"
+ "INTEGER" + "\t)\n");
}
} else {
/**
* character '/' is a special character
*/
if (c == '/') {
sb.delete(0, sb.length());
sb.append(c);
c = buffer[++i];
/*
* here is note mark,
* reading the next line to skip it
*/
if (c == '/') {
c = buffer[++i];
while (c != newline) {
c = buffer[++i];
}
c = buffer[++i];
} else
/*
* here is note mark,
* reading the end mark to skip it
*/
if (c == '*') {
// next *
c = buffer[++i];
int count = 0;
while (count != 2) {
count = 0;
while (c != '*') {
c = buffer[++i];
}
count++;
c = buffer[++i];
if (c == '/') {
count++;
}
}
c = buffer[++i];
} else {
/**
* operator '/='
*/
if (c == '=') {
sb.append(c);
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
}
}
} else {
sb.delete(0, sb.length());
/*
* identify other operator
*
*/
switch (c) {
case '+':
sb.append(c);
RQ[j++] = "OP";
CT[m++] = sb.toString();
c = buffer[++i];
if (c == '=') {
sb.append(c);
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
if (c == '+') {
sb.append(c);
outTextArea.append("( "
+ sb.toString() + "\t,"
+ "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
outTextArea.append("( "
+ sb.toString() + "\t,"
+ "OPERATOR" + "\t)\n");
}
}
break;
case '-':
sb.append(c);
c = buffer[++i];
if (c == '=') {
sb.append(c);
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
if (c == '-') {
sb.append(c);
outTextArea.append("( "
+ sb.toString() + "\t,"
+ "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
outTextArea.append("( "
+ sb.toString() + "\t,"
+ "OPERATOR" + "\t)\n");
}
}
break;
case '*':
sb.append(c);
RQ[j++] = "OP";
CT[m++] = sb.toString();
c = buffer[++i];
if (c == '=') {
sb.append(c);
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
}
break;
case '%':
sb.append(c);
c = buffer[++i];
if (c == '=') {
sb.append(c);
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
}
break;
case '>':
sb.append(c);
RQ[j++] = sb.toString();
CT[m++] = sb.toString();
c = buffer[++i];
if (c == '=') {
sb.append(c);
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
if (c == '>') {
sb.append(c);
outTextArea.append("( "
+ sb.toString() + "\t,"
+ "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
outTextArea.append("( "
+ sb.toString() + "\t,"
+ "OPERATOR" + "\t)\n");
}
}
break;
case '<':
sb.append(c);
c = buffer[++i];
if (c == '=') {
sb.append(c);
RQ[j++] = sb.toString();
CT[m++] = sb.toString();
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
if (c == '<') {
sb.append(c);
outTextArea.append("( "
+ sb.toString() + "\t,"
+ "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
outTextArea.append("( "
+ sb.toString() + "\t,"
+ "OPERATOR" + "\t)\n");
}
}
break;
case '!':
sb.append(c);
c = buffer[++i];
if (c == '=') {
sb.append(c);
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
}
break;
case '&':
sb.append(c);
c = buffer[++i];
if (c == '&') {
sb.append(c);
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
if (c == '=') {
sb.append(c);
outTextArea.append("( "
+ sb.toString() + "\t,"
+ "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
outTextArea.append("( "
+ sb.toString() + "\t,"
+ "OPERATOR" + "\t)\n");
}
}
break;
case '|':
sb.append(c);
c = buffer[++i];
if (c == '|') {
sb.append(c);
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
if (c == '=') {
sb.append(c);
outTextArea.append("( "
+ sb.toString() + "\t,"
+ "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
outTextArea.append("( "
+ sb.toString() + "\t,"
+ "OPERATOR" + "\t)\n");
}
}
break;
case '=':
sb.append(c);
c = buffer[++i];
if (c == '=') {
sb.append(c);
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
outTextArea.append("( " + sb.toString()
+ "\t," + "ERROR" + "\t)\n");
}
break;
case '^':
sb.append(c);
c = buffer[++i];
if (c == '=') {
sb.append(c);
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
c = buffer[++i];
} else {
outTextArea.append("( " + sb.toString()
+ "\t," + "OPERATOR" + "\t)\n");
}
break;
case ',':
sb.append(c);
outTextArea.append("( " + sb.toString()
+ "\t," + "SEPARATOR" + "\t)\n");
c = buffer[++i];
break;
case ';':
sb.append(c);
RQ[j++] = sb.toString();
CT[m++] = sb.toString();
outTextArea.append("( " + sb.toString()
+ "\t," + "SEPARATOR" + "\t)\n");
c = buffer[++i];
break;
case '(':
sb.append(c);
RQ[j++] = sb.toString();
CT[m++] = sb.toString();
outTextArea.append("( " + sb.toString()
+ "\t," + "SEPARATOR" + "\t)\n");
c = buffer[++i];
break;
case ')':
sb.append(c);
RQ[j++] = sb.toString();
CT[m++] = sb.toString();
outTextArea.append("( " + sb.toString()
+ "\t," + "SEPARATOR" + "\t)\n");
c = buffer[++i];
break;
case '{':
sb.append(c);
outTextArea.append("( " + sb.toString()
+ "\t," + "SEPARATOR" + "\t)\n");
c = buffer[++i];
break;
case '}':
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -