⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 expressionreader.java

📁 symbman(大学作业)
💻 JAVA
字号:
import java.io.*;import java.util.Vector;import java.util.Iterator;public class ExpressionReader {	private BufferedReader br;	private FileReader fr;		public ExpressionReader(String fileName) throws IOException {			fr = new FileReader(fileName);			br = new BufferedReader(fr);	}		private Expression parse(String s) throws InvalidExpressionException {		if(s.matches("\\(\\(\\w+\\)=\\(.+\\)\\)")) {			// Assign			String sym = s.replaceAll("\\(\\((\\w+)\\)=\\(.+\\)\\)", "$1");			String e = s.replaceAll("\\((\\(\\w+\\))=(\\(.+\\))\\)", "$2");						return new Assign(new Symbol(sym), parse(e));		}				if(s.matches("\\(D\\(\\(.+\\),\\(.+\\)\\)")) {			// Derive			String e = s.replaceAll("\\(D\\((\\(.+\\)),(\\(.+\\))\\)", "$1");			String sym = s.replaceAll("\\(D\\((\\(.+\\)),(\\(.+\\))\\)", "$2");						return new Derive(parse(e), new Symbol(sym));		}				if(s.matches("\\((\\d*\\.\\d*|\\d+)\\)")) {			// NumericValue			String n = s.replaceAll("\\((\\d*\\.\\d*|\\d+)\\)","$1");			return new NumericValue(new Double(n).doubleValue());		}				if(s.matches("\\((\\(.+\\))(\\+(\\(.+\\)))+\\)")) {			// Plus			Vector v = new Vector();			while(s.matches("\\((\\(.+\\))(\\+(\\(.+\\)))+\\)")) {				String last = s.replaceAll("\\((\\(.+\\))(\\+(\\(.+\\)))+\\)","$3");				v.add(parse(last));				s = "("+s.replaceAll("\\((\\(.+\\))(\\+(\\(.+\\)))+\\)","$1")+")";			}						v.add(parse(s.substring(1,s.length()-1)));						Expression[] addends = new Expression[v.size()];			for(int i=v.size()-1;i>=0;i--)				addends[i]=(Expression)v.get(i);						return new Plus(addends);		}				if(s.matches("\\((\\(.+\\))(\\*(\\(.+\\)))+\\)")) {			// Times			Vector v = new Vector();			while(s.matches("\\((\\(.+\\))(\\*(\\(.+\\)))+\\)")) {				String last = s.replaceAll("\\((\\(.+\\))(\\*(\\(.+\\)))+\\)","$3");				v.add(parse(last));				s = "("+s.replaceAll("\\((\\(.+\\))(\\*(\\(.+\\)))+\\)","$1")+")";			}						v.add(parse(s.substring(1,s.length()-1)));						Expression[] factors = new Expression[v.size()];			for(int i=v.size()-1;i>=0;i--)				factors[i]=(Expression)v.get(i);						return new Times(factors);		}				if(s.matches("\\(\\w+\\)")) {			// Symbol			return new Symbol(s.replaceAll("\\((\\w+)\\)", "$1"));		}				if(s.matches("\\(S\\((.+)\\)\\)")) {			// Simplify  "\\(D\\(\\(.+\\),\\(.+\\)\\)"			return new Simplify(parse(s.replaceAll("\\(S\\((.+)\\)\\)","$1")));		}				throw new InvalidExpressionException(s);	}		public Expression nextExpression() throws IOException, InvalidExpressionException {				String l = br.readLine();				if(l==null) return null;		else return parse(l);			}		public void close() throws IOException {		br.close();		fr.close();	}		public Iterator iterator() throws IOException, InvalidExpressionException {		Vector v = new Vector();		Expression e;		while((e=this.nextExpression())!=null)			v.add(e);				this.close();		return v.iterator();	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -