|
@@ -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;
|
|
|
}
|