|  | @@ -8,16 +8,36 @@ import java.util.regex.Pattern;
 | 
	
		
			
				|  |  |  import migl.util.ConsList;
 | 
	
		
			
				|  |  |  import migl.util.ConsListFactory;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Analyseur Lisp
 | 
	
		
			
				|  |  | + * @author Arthur Brandao
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  |  public class LispParser {
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * Regex d'un element lisp
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  |  	private static final String REGEX_LISP_ELEMENT = "[ |\t]*[A-Za-z0-9\\.\\+\\-\\/\\*<>=#]+[ |\t]*";
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * Regex d'une liste d'elements lisp
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  |  	private static final String REGEX_LISP_LIST = "\\(([ |\t]*[A-Za-z0-9\\.\\+\\-\\/\\*<>=#!]+[ |\t]*)*\\)";
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * L'expression à analyser
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  |  	private String expr;
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * L'expression exploser pour l'analyse les données
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  |  	private Queue<String> explode = new LinkedList<>();
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * Création d'un analyseur lisp
 | 
	
		
			
				|  |  | +	 * @param lispExpr
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  |  	public LispParser(String lispExpr) {
 | 
	
		
			
				|  |  |  		if(lispExpr == null) {
 | 
	
		
			
				|  |  |  			throw new IllegalArgumentException("Expression is null");
 | 
	
	
		
			
				|  | @@ -98,6 +118,11 @@ public class LispParser {
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  |  	/* --- Parse les elements --- */
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * Analyse les elements d'une expression lisp
 | 
	
		
			
				|  |  | +	 * @return
 | 
	
		
			
				|  |  | +	 * @throws LispError
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  |  	public Object parse() throws LispError {
 | 
	
		
			
				|  |  |  		//Remplace les nil par ()
 | 
	
		
			
				|  |  |  		String lispExpr = this.expr.replaceAll(" nil ", " () ")
 | 
	
	
		
			
				|  | @@ -118,6 +143,10 @@ public class LispParser {
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * Separe les différents elements d'une expression lisp pour l'analyse
 | 
	
		
			
				|  |  | +	 * @param lispExpr
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  |  	private void explode(String lispExpr) {
 | 
	
		
			
				|  |  |  		String[] tmp = lispExpr.trim().split("[ |\t]");
 | 
	
		
			
				|  |  |  		for(String str : tmp) {
 | 
	
	
		
			
				|  | @@ -149,6 +178,10 @@ public class LispParser {
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * Analyse la liste d'elements
 | 
	
		
			
				|  |  | +	 * @return
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  |  	private Object parseList() {
 | 
	
		
			
				|  |  |  		ConsList<Object> list = ConsListFactory.nil();
 | 
	
		
			
				|  |  |  		String val = this.explode.poll();
 | 
	
	
		
			
				|  | @@ -165,6 +198,10 @@ public class LispParser {
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  |  	/* --- Getter --- */
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * Retourne l'expression analyser
 | 
	
		
			
				|  |  | +	 * @return
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  |  	public String getExpression() {
 | 
	
		
			
				|  |  |  		return this.expr;
 | 
	
		
			
				|  |  |  	}
 |