Forráskód Böngészése

Refactoring utilisation LispEval et LispParser

Arthur Brandao 6 éve
szülő
commit
561a14a06a

+ 21 - 2
src/migl/lisp/LispEval.java

@@ -180,18 +180,35 @@ public class LispEval {
 	 */
 	private ConsList<Object> lispList = null;
 	
+	/**
+	 * Creation d'un evaluateur lisp
+	 */
+	public LispEval() {
+		
+	}
+	
 	/**
 	 * Creation d'un evaluateur lisp
 	 * @param lisp Un element lisp (Object) ou une liste de lisp (ConsList<Object>)
 	 */
-	@SuppressWarnings("unchecked")
 	public LispEval(Object lisp) {
+		this.setLisp(lisp);
+	}
+	
+	/**
+	 * Change l'objet lisp à evaluer
+	 * @param lisp Un element lisp (Object) ou une liste de lisp (ConsList<Object>)
+	 */
+	@SuppressWarnings("unchecked")
+	public final void setLisp(Object lisp) {
 		if(lisp == null) {
 			throw new IllegalArgumentException("Expression is null");
 		} else if(lisp instanceof ConsList) {
+			this.lispElt = null;
 			this.lispList = (ConsList<Object>) lisp;
 		} else {
 			this.lispElt = lisp;
+			this.lispList = null;
 		}
 	}
 	
@@ -203,8 +220,10 @@ public class LispEval {
 	public LispElement evaluate() throws LispError {
 		if(this.lispElt != null) {
 			return this.evalElt();
+		} else if(this.lispList != null) {
+			return this.evalList();
 		}
-		return this.evalList();
+		return null;
 	}
 	
 	/**

+ 9 - 5
src/migl/lisp/LispImpl.java

@@ -2,19 +2,23 @@ package migl.lisp;
 
 public class LispImpl implements Lisp {
 	
+	private LispParser parser = new LispParser();
+	
+	private LispEval eval = new LispEval();
+	
 	@Override
 	public Object parse(String expr) throws LispError {
-		LispParser lp = new LispParser(expr);
-		if(!lp.verify()) {
+		this.parser.setExpr(expr);
+		if(!this.parser.verify()) {
 			throw new LispError("Invalid Format");
 		}
-		return lp.parse();
+		return this.parser.parse();
 	}
 
 	@Override
 	public Object evaluate(Object lisp) throws LispError {
-		LispEval le = new LispEval(lisp);
-		return le.evaluate();
+		this.eval.setLisp(lisp);
+		return this.eval.evaluate();
 	}
 
 }

+ 16 - 0
src/migl/lisp/LispParser.java

@@ -34,15 +34,31 @@ public class LispParser {
 	 */
 	private Queue<String> explode = new LinkedList<>();
 	
+	/**
+	 * Création d'un analyseur lisp
+	 */
+	public LispParser() {
+		this.setExpr("");
+	}
+	
 	/**
 	 * Création d'un analyseur lisp
 	 * @param lispExpr
 	 */
 	public LispParser(String lispExpr) {
+		this.setExpr(lispExpr);
+	}
+	
+	/**
+	 * Change l'expression lisp à analyser
+	 * @param lispExpr
+	 */
+	public final void setExpr(String lispExpr) {
 		if(lispExpr == null) {
 			throw new IllegalArgumentException("Expression is null");
 		}
 		this.expr = lispExpr.trim();
+		this.explode.clear();
 	}
 	
 	/* --- Verification de l'expression --- */