📄 expressionreader.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 + -