📄 wa.java
字号:
package test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class WA {
private String temp = "";// 定义临时变量
private String r = "";
private String s = "";// 定义返回变量
public String getTemp() {
return temp;
}
public void setTemp(String temp) {
this.temp = temp;
}
/**
* 取一字符
*/
public void inputProcess() {
System.out.println("input end to stopInput...:");
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while (true) {
try {
String input = in.readLine() + "";
if (input.equals("end"))
break;
this.temp += input;
} catch (IOException ex) {
ex.getMessage();
}
}
this.temp = temp.trim();
}
/**
* 取一字符
*/
public String getWord(int n, String temp) {
return (temp.substring(n, n + 1));
}
/**
* 扫描
*/
public String scan() {
int n = temp.length();
String text = "", textTemp = "";
boolean flag = true;
// int t=0;
// while (flag) {
// if(++t==1)break;
for (int i = 0; i <= n - 1; i++) { // 循环处理
textTemp = getWord(i, temp);// 取一字符给textTemp
/** texpTemp为空格,分隔符,运算符,取单词 * */
try {
if (i <= n - 5) {
// if(temp.substring(i,i+2).equals("/*"));flag=false;
// if(temp.substring(i,i+2).equals("*/"));flag=true;
if ((temp.charAt(i) == '/') && (temp.charAt(i + 1) == '*'))
flag = false;
if ((temp.charAt(i) == '/') && (temp.charAt(i + 1) == '/'))
flag = false;
if ((temp.charAt(i) == '*') && (temp.charAt(i + 1) == '/')) {
flag = true;
i++;
continue;
}
}
} catch (Exception e) {
System.out.print("" + e.getMessage());
}
if (flag) {
if (isSpace(textTemp) || isOperation(textTemp)
|| isCompartmentation(textTemp)) {
if ((text.trim()).length() != 0) {
if (isLetter(text)) { // 如果单词的开始第一个字符为字母,则判断是否为保留字,标识符,
if (isReserveWords(text))// 是关键字,否标识符
r += "\"" + text.trim() + "\"\t";
else
r += "\"" + text.trim() + "\"\t";
} else if (isNumber(text))// 判断无符号整形数
r += "\"" + text.trim() + "\"\t";
text = "";
}
if (isOperation(textTemp)) { // 判断是否为运算符
int j = i;
while (isOperation(textTemp)) {
text += textTemp;
j++;
textTemp = getWord(j, temp);
}
// i--;
r += "\"" + text.trim() + "\"\t";
text = "";
}
if (isCompartmentation(textTemp))
r += "\"" + textTemp + "\"\t";// 判断是否为分隔符
} else {
text += textTemp;
}
}
}
if (text.trim().length() != 0) {
r += "\"" + text.trim() + "\"\t";
}
// }
return r;
}
/**
* 词法分析
*/
public String analyse() {
int n = temp.length();
String text = "", textTemp = "";
boolean flag = true;
while (flag) {
for (int i = 0; i <= n - 1; i++) { // 循环处理
textTemp = getWord(i, temp);// 取一字符给textTemp
/** texpTemp为空格,分隔符,运算符,取单词 * */
try {
if (i <= n - 5) {
// if(text.substring(i,i+2).equals("/*"));flag=false;
// if(text.substring(i,i+2).equals("*/"));flag=true;
if ((temp.charAt(i) == '/')
&& (temp.charAt(i + 1) == '*'))
flag = false;
if ((temp.charAt(i) == '/')
&& (temp.charAt(i + 1) == '/'))
flag = false;
if ((temp.charAt(i) == '*')
&& (temp.charAt(i + 1) == '/'))
flag = true;
}
} catch (Exception e) {
System.out.print("" + e.getMessage());
}
if (isSpace(textTemp) || isOperation(textTemp)
|| isCompartmentation(textTemp)) {
if ((text.trim()).length() != 0) {
if (isLetter(text)) { // 如果单词的开始第一个字符为字母,则判断是否为保留字,标识符,
if (isReserveWords(text))// 是关键字,否标识符
s += "(1关键字,\"" + text.trim() + "\")\n";
else
s += "(2标识符,\"" + text.trim() + "\")\n";
} else if (isNumber(text))// 判断无符号整形数
s += "(3数字,\"" + text.trim() + "\")\n";
text = "";
}
if (isOperation(textTemp)) { // 判断是否为运算符
while (isOperation(textTemp)) {
text += textTemp;
i++;
textTemp = getWord(i, temp);
}
i--;
s += "(4运算符,\"" + text.trim() + "\")\n";
text = "";
}
if (isCompartmentation(textTemp))
s += "(5分隔符,\"" + textTemp + "\")\n";// 判断是否为分隔符
} else {
text += textTemp;
}
}
}
return s;
}
/**
* 判断是否为分隔符方法
*/
public boolean isCompartmentation(String text) {
String Compartmentation[] = { ",", ";", "{", "}", "(", ")", "#" };
for (int i = 0; i < Compartmentation.length; i++)
if (text.equals(Compartmentation[i]))
return true;
return false;
}
/**
* 判断是否为保留字方法
*/
public boolean isReserveWords(String text) {
String reserverwords[] = { "if", "main", "int", "for", "while", "do",
"return", "break", "continue", "printf" };
for (int i = 0; i < reserverwords.length; i++)
if (reserverwords[i].equals(text))
return true;
return false;
}
/** 判断是否为运算符方法* */
public boolean isOperation(String text) {
String operation[] = { "+", "-", "=", "++", "--", "*", "/" };
for (int i = 0; i < operation.length; i++)
if (text.equals(operation[i]))
return true;
return false;
}
/** 判断是否为空格方法* */
public boolean isSpace(String text) {
return (text.equals(new String(" ")));
}
/** 判断是否为字母方法* */
public boolean isLetter(String text) {
if (text.trim().charAt(0) >= 'a'
&& (text.toLowerCase()).charAt(0) <= 'z')
return true;
return false;
}
/** 判断是否为数字方法* */
public boolean isNumber(String text) {
for (int i = 0; i < text.length(); i++) {
if (!(text.charAt(i) >= '0' && text.charAt(i) <= '9'))
return false;
}
return true;
}
public static void main(String[] args) throws IOException {
WA ioword = new WA();
ioword.inputProcess();
System.out.print("扫描结果:\n" + ioword.scan());
System.out.println();
//System.out.print("词法分析结果:\n"+ioword.analyse());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -