Kaynağa Gözat

Amélioration code

Arthur Brandao 6 yıl önce
ebeveyn
işleme
ed3b369917
1 değiştirilmiş dosya ile 15 ekleme ve 16 silme
  1. 15 16
      src/migl/lisp/LispImpl.java

+ 15 - 16
src/migl/lisp/LispImpl.java

@@ -1,6 +1,9 @@
 package migl.lisp;
 
 import java.math.BigInteger;
+import java.util.LinkedList;
+import java.util.PriorityQueue;
+import java.util.Queue;
 import java.util.Stack;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -17,9 +20,9 @@ public class LispImpl implements Lisp {
 			throw new LispError("Invalid Format");
 		}
 		//Explose l'expression
-		Stack<String> explode = this.explode(expr);
+		Queue<String> explode = this.explode(expr);
 		//Analyse le type d'expression
-		String val = explode.remove(0);
+		String val = explode.poll();
 		if("(".equals(val)){
 			return this.parseList(explode);
 		} else {
@@ -81,11 +84,11 @@ public class LispImpl implements Lisp {
 	/**
 	 * Découpe un string pour l'analyse Lisp
 	 * @param expr L'expression à analyser
-	 * @return L'expression découper
+	 * @return L'expression découpée
 	 */
-	private Stack<String> explode(String expr) {
+	private Queue<String> explode(String expr) {
 		String[] tmp = expr.trim().split("[ |\t]");
-		Stack<String> result = new Stack<>();
+		Queue<String> result = new LinkedList<>();
 		for(String str : tmp) {
 			char[] charArray = str.toCharArray();
 			StringBuilder builder = new StringBuilder();
@@ -117,25 +120,21 @@ public class LispImpl implements Lisp {
 	}
 	
 	/**
-	 * Parse une liste en Lisp
-	 * @param pile La pile avec les valeurs parser par explode
+	 * Parse une file d'element en Lisp
+	 * @param queue La file avec les valeurs parser par explode
 	 * @return Liste d'element
 	 * @throws LispError Format invalide
 	 */
-	private Object parseList(Stack<String> pile) throws LispError {
+	private Object parseList(Queue<String> queue) throws LispError {
 		ConsList<Object> list = ConsListFactory.nil();
-		String val = pile.remove(0);
-		while(pile.size() != 0 && !")".equals(val)) {
+		String val = queue.poll();
+		while(!")".equals(val)) {
 			if("(".equals(val)) {
-				list = list.append(this.parseList(pile));
+				list = list.append(this.parseList(queue));
 			} else {
 				list = list.append(LispElement.valueOf(val).value);
 			}
-			val = pile.remove(0);
-		}
-		//Si arret cause pile vide erreur
-		if(!")".equals(val)) {
-			throw new LispError("Invalid Format");
+			val = queue.poll();
 		}
 		return list;
 	}