我也做过这个作业package source;import java.util.LinkedList;public class LexicalAnalysis {//私有变量声明 private LinkedList optr = new LinkedList(); private String exp; //词法分析 public LinkedList lexical_analysis(String exp) {char ch = '\0'; //当前文件指针内容int index = 0; //文件指针 StringBuffer strToken = new StringBuffer("");//扫描处理字符串while(true) { ch = exp.charAt(index); index++; //标识符(字母开头,数字或字符组成) if(Character.isLetter(ch)) { while(Character.isLetter(ch) || Character.isDigit(ch)) { strToken.append(ch); ch = exp.charAt(index); index++; } index--; String str = strToken.toString(); if(str.equals("if")) optr.add(new Word(str, 13)); else if(str.equals("else")) optr.add(new Word(str, 14)); else if(str.equals("then")) optr.add(new Word(str, 15)); else optr.add(new Word(str, 26)); } //数字 else if(Character.isDigit(ch)) { while(Character.isDigit(ch)) { strToken.append(ch); ch = exp.charAt(index); index++; } index--; optr.add(new Word(strToken.toString(), 26)); } //加号或自加 else if(ch == '+') { ch = exp.charAt(index); index++; if(ch == '+') optr.add(new Word("++", 21)); else if(ch == '=') optr.add(new Word("+=", 16)); else { index--; optr.add(new Word("+", 19)); } } //加号或自加 else if(ch == '-') { ch = exp.charAt(index); index++; if(ch == '-') optr.add(new Word("--", 21)); else if(ch == '=') optr.add(new Word("-=", 16)); else { index--; optr.add(new Word("-", 19)); } } //乘法或乘幂 else if(ch == '*') { ch = exp.charAt(index); index++; if(ch == '*') optr.add(new Word("**", 20)); else if(ch == '=') optr.add(new Word("*=", 16)); else { index--; optr.add(new Word("*", 20)); } } //除法或注释 else if(ch == '/') { ch = exp.charAt(index); index++; //多行注释 if(ch == '*') { while(true) { ch = exp.charAt(index); index++; if(ch == '*') { ch = exp.charAt(index); index++; if(ch == '/') break; else if(ch == '\n') { exp = Input.newLine(); index = 0; ch = exp.charAt(index); index++; } else index--; } else if(ch == '#') { int tIndex = index - 1; if(exp.length() > tIndex+9) { String end = exp.substring(tIndex, tIndex+9); if(end.equals("#?e_N_d?#")) break; } else { System.out.println("非法符号\'#\'后的语句忽略!"); exp = Input.newLine(); index = 0; break; } } else if(ch == '\n') { exp = Input.newLine(); index = 0; } } } //单行注释 else if(ch == '/') break; else if(ch == '=') optr.add(new Word("/=", 16)); else { index--; optr.add(new Word("/", 20)); } } //大于或大于等于或右移 else if(ch == '>') { ch = exp.charAt(index); index++; if(ch == '=') optr.add(new Word(">=", 18)); else if(ch == '>') optr.add(new Word(">>", 20)); else { index--; optr.add(new Word(">", 18)); } } //小于或小于等于或左移 else if(ch == ' tIndex+9) { String end = exp.substring(tIndex, tIndex+9); if(end.equals("#?e_N_d?#")) { optr.add(new Word("#", 27)); break; } } else { System.out.println("非法符号\'#\'后的语句忽略!"); optr.add(new Word("#", 27)); break; } } //清空扫描串 strToken.setLength(0);}return optr; }}
取消
评论