📄 cmm.java
字号:
}else if(a=='\r'){
state=done;
}else if(a==' '){
state=done;
}else if(a==';'){
tokens.offer(String.valueOf(a));
ID.offer("FG");
output.append("\n"+"特殊符号: ;");
state=done;
}else if (a=='/'){
if(finish){
tokens.offer(String.valueOf(a));
ID.offer("Com");
output.append("\n"+"特殊符号: /");
state =done;
}else{
char b = getNext();
if(b=='*'){
state=note;
goon=true;
state =note;
}else{
output.append("\n"+"特殊符号: /");
tokens.offer(String.valueOf(a));
ID.offer("Com");
state =done;
backup();
}
}
}else if (a=='='){
if(!finish){
char b = getNext();
if(b=='='){
tokens.offer("==");
ID.offer("LO");
output.append("\n"+"特殊符号: ==");
state=done;
}else{
tokens.offer(String.valueOf(a));
ID.offer("Com");
output.append("\n"+"特殊符号: =");
state=done;
backup();
}
}else{
tokens.offer(String.valueOf(a));
ID.offer("Com");
output.append("\n"+"特殊符号: =");
state=done;
}
}else if (Character.isDigit(a)){
if(finish){
tokens.offer(a);
ID.offer("INT");
output.append("\n"+"int: "+a);
state=done;
} else
state = num;
}else if(a=='<'){
if(!finish){
char b = getNext();
if(b=='>'){
tokens.offer("<>");
ID.offer("LO");
output.append("\n"+"特殊符号: <>");
state=done;
}else{
tokens.offer(String.valueOf(a));
ID.offer("LO");
output.append("\n"+"特殊符号: <");
state=done;
backup();
}
}else{
tokens.offer(String.valueOf(a));
ID.offer("LO");
output.append("\n"+"特殊符号: <");
state=done;
}
}else if(Character.isLetter(a)){
if(!finish){
state=id;
}else{
tokens.offer(String.valueOf(a));
ID.offer("ID");
output.append("\n"+"标示符: "+a);
state=done;
}
}else{
errorA= true;
output.append("\n"+"错误 未知符号:"+a);
state=done;
}
break;
case 1:
break;
case 2:
if(a=='*'&&finish==false){
char b = getNext();
if(b=='/'){
state=done;
output.append("\n"+"注释");
}
break;
}else if (a=='*'&&finish==true){
errorA=true;
state =done;
output.append("\n"+"错误:注释缺少*/");
}else if(finish){
errorA=true;
state =done;
output.append("\n"+"错误:注释缺少*/");
}else if(a=='\n') {
tokens.offer(String.valueOf(a));
ID.offer("FG");
col++;
output.append("\n"+"第"+col+"行:"+line[col-1]);
}
break;
case 3:
break;
case 4:
if (a==' '||a=='\n'||a=='+'||a=='-'||a=='*'||a=='/'||a=='('||a==')'||a==';'||a=='='||a=='<'||a=='{'||a=='}'||a=='['||a==']'||a=='\r'){
backup();
end=pos;
currentToken=inPut.substring(begin,end);
errorA=true;
output.append("\n"+"错误: 非法符号"+currentToken);
state=done;
if(a=='\r'||a=='\n')
pos++ ;
}else if(finish){
end=pos;
currentToken=inPut.substring(begin,end);
errorA=true;
output.append("\n"+"错误: 非法符号"+currentToken);
state=done;
}
break;
case 5:
if(Character.isDigit(a)&&finish==false){
//decimal = false;
}else{
if (a==' '||a=='\n'||a=='+'||a=='-'||a=='*'||a=='/'||a=='('||a==')'||a==';'||a=='='||a=='<'||a=='{'||a=='}'||a=='['||a==']'||a=='\r'){
backup();
end=pos;
currentToken=inPut.substring(begin,end);
if(currentToken.endsWith(".")){
currentToken=inPut.substring(begin,end-1);
backup();
}
if(isInt(currentToken)){
tokens.offer(currentToken);
ID.offer("INT");
output.append("\n"+"int: "+currentToken);
state=done;
}else{
tokens.offer(currentToken);
ID.offer("REAL");
output.append("\n"+"real: "+currentToken);
state=done;
}
}else if (Character.isDigit(a)&&finish==true){
end=pos;
currentToken=inPut.substring(begin,end);
if(isInt(currentToken)){
tokens.offer(currentToken);
ID.offer("INT");
output.append("\n"+"int: "+currentToken);
state=done;
}else{
tokens.offer(currentToken);
ID.offer("REAL");
output.append("\n"+"real: "+currentToken);
state=done;
}
} else if(a=='.'){
if(!decimal&&!finish){
decimal=true;
} else if(decimal){
end=pos-1;
currentToken=inPut.substring(begin,end);
tokens.offer(currentToken);
if(isInt(currentToken)){
ID.offer("INT");
output.append("\n"+"int: "+currentToken);
backup();
state = done;
}else{
ID.offer("REAL");
output.append("\n"+"real: "+currentToken);
backup();
state = done;
}
} if(!decimal&&finish){
end=pos;
currentToken=inPut.substring(begin,end-1);
backup();
tokens.offer(currentToken);
if(isInt(currentToken)){
ID.offer("INT");
output.append("\n"+"int: "+currentToken);
state = done;
finish=false;
}else{
ID.offer("REAL");
output.append("\n"+"real: "+currentToken);
state = done;
finish=false;
}
}
}else{
if(finish){
end=pos;
currentToken=inPut.substring(begin,end);
errorA =true;
output.append("\n"+"错误: 非法符号"+currentToken);
state=done;
}else{
state=error;
}
}
}
break;
case 6:
if(Character.isLetter(a)||a=='_'||Character.isDigit(a)){
if(finish){
end=pos;
currentToken=inPut.substring(begin,end);
if(currentToken.endsWith("_")){
errorA = true;
output.append("\n"+"非法标示符(不能以_结尾): "+currentToken);
state = done;
}else{
isKW(currentToken);
state = done;
}
}
} else if (a==' '||a=='\n'||a=='+'||a=='-'||a=='*'||a=='/'||a=='('||a==')'||a==';'||a=='='||a=='<'||a=='{'||a=='}'||a=='['||a==']'||a=='\r'){
backup();
end=pos;
currentToken=inPut.substring(begin,end);
if(currentToken.endsWith("_")){
errorA = true;
output.append("\n"+"非法标示符(不能以_结尾): "+currentToken);
state = done;
}else{
isKW(currentToken);
state = done;
}
}else if(finish==true){
errorA = true;
output.append("\n"+"非法标示符 ");
state = done;
}else{
state=error;
}
break;
case 7:
break;
}
}
}
public static void main(String[] args) {
new Cmm();
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand()=="open"){
output1.setVisible(false);
int returnVal = fileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try {
BufferedReader bufferedreader = new BufferedReader(
new FileReader(file));
String s1= bufferedreader.readLine();
for (String s2 = bufferedreader.readLine(); s2 != null; s2 = bufferedreader
.readLine()) {
s1=s1+"\n"+s2;
}
input.setText(s1);
output.setText("");
} catch (FileNotFoundException abc) {
output.setText("文件不存在");
} catch (IOException io) {
output.setText("文件格式错误");
}
} else {
}
}else if (e.getActionCommand()=="clean"){
input.setText("");
// input1.setText("");
output.setText("");
output1.setText("");
output2.setText("");
}else if (e.getActionCommand()=="analyse"){
show.setVisible(false);
showIns.setVisible(false);
output.setVisible(false);
output1.setVisible(false);
output2.setVisible(false);
showWord.setVisible(true);
//input1.setVisible(false);
errorA = false;
read();
if(errorA == true){
output.setVisible(true);
}
}else if (e.getActionCommand()=="show"){
output.setVisible(false);
output2.setVisible(false);
//input1.setVisible(false);
output1.setVisible(true);
}else if(e.getActionCommand()=="showIns"){
FileIO file = new FileIO();
try{
file.writeIns(ana.getCode());
Runtime.getRuntime().exec("notepad.exe D:\\Instruc.txt");
}catch(IOException io){
io.getMessage();
}
//output.setVisible(false);
//output1.setVisible(false);
//output2.setVisible(true);
//input1.setVisible(true);
//execution = new Execution(ana,this);
//execution.Run();
}else if(e.getActionCommand()=="showWord"){
output1.setVisible(false);
output2.setVisible(false);
output.setVisible(true);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -