diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/Parser.java @ 19289:62c43fcf5be2

Truffle-DSL: implement @Cached and fixes for the new guard expression syntax.
author Christian Humer <christian.humer@gmail.com>
date Tue, 03 Feb 2015 15:07:07 +0100
parents 08aa0372dad4
children b1530a6cce8c
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/Parser.java	Mon Dec 29 18:32:03 2014 +0100
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/expression/Parser.java	Tue Feb 03 15:07:07 2015 +0100
@@ -34,10 +34,10 @@
 // Checkstyle: stop
 // @formatter:off
 class Parser {
-	public static final int _EOF = 0;
-	public static final int _identifier = 1;
-	public static final int _numericLiteral = 2;
-	public static final int maxT = 14;
+	public static final int _EOF = 0;
+	public static final int _identifier = 1;
+	public static final int _numericLiteral = 2;
+	public static final int maxT = 15;
 
     static final boolean _T = true;
     static final boolean _x = false;
@@ -120,122 +120,134 @@
         }
     }
 
-	DSLExpression  Expression() {
-		DSLExpression  result;
-		result = NegateFactor();
-		return result;
-	}
-
-	DSLExpression   NegateFactor() {
-		DSLExpression   result;
-		boolean negated = false; 
-		if (la.kind == 3) {
-			Get();
-			negated = true; 
-		}
-		result = LogicFactor();
-		result = negated ? new Negate(result) : result;
-		return result;
-	}
-
-	DSLExpression   LogicFactor() {
-		DSLExpression   result;
-		result = Factor();
-		if (StartOf(1)) {
-			switch (la.kind) {
-			case 4: {
-				Get();
-				break;
-			}
-			case 5: {
-				Get();
-				break;
-			}
-			case 6: {
-				Get();
-				break;
-			}
-			case 7: {
-				Get();
-				break;
-			}
-			case 8: {
-				Get();
-				break;
-			}
-			case 9: {
-				Get();
-				break;
-			}
-			}
-			Token op = t; 
-			DSLExpression  right = Factor();
-			result = new Binary(op.val, result, right); 
-		}
-		return result;
-	}
-
-	DSLExpression  Factor() {
-		DSLExpression  result;
-		result = null; 
-		if (la.kind == 1) {
-			result = MemberExpression(result);
-		} else if (la.kind == 2) {
-			Get();
-			result = new IntLiteral(t.val); 
-		} else if (la.kind == 10) {
-			Get();
-			result = Expression();
-			Expect(11);
-		} else SynErr(15);
-		return result;
-	}
-
-	DSLExpression  MemberExpression(DSLExpression receiver) {
-		DSLExpression  result;
-		result = null; 
-		Expect(1);
-		Variable variable = new Variable(receiver, t.val); 
-		result = variable; 
-		if (la.kind == 10) {
-			Get();
-			List<DSLExpression> parameters = new ArrayList<>();
-			DSLExpression parameter; 
-			if (StartOf(2)) {
-				parameter = Expression();
-				parameters.add(parameter); 
-				while (la.kind == 12) {
-					Get();
-					parameter = Expression();
-					parameters.add(parameter); 
-				}
-			}
-			Expect(11);
-			result = new Call(variable.getReceiver(), variable.getName(), parameters); 
-		}
-		if (la.kind == 13) {
-			Get();
-			result = MemberExpression(result);
-		}
-		return result;
-	}
-
+	DSLExpression  Expression() {
+		DSLExpression  result;
+		result = LogicFactor();
+		return result;
+	}
+
+	DSLExpression   LogicFactor() {
+		DSLExpression   result;
+		result = ComparisonFactor();
+		if (la.kind == 3) {
+			Get();
+			Token op = t; 
+			DSLExpression  right = ComparisonFactor();
+			result = new Binary(op.val, result, right); 
+		}
+		return result;
+	}
+
+	DSLExpression   ComparisonFactor() {
+		DSLExpression   result;
+		result = NegateFactor();
+		if (StartOf(1)) {
+			switch (la.kind) {
+			case 4: {
+				Get();
+				break;
+			}
+			case 5: {
+				Get();
+				break;
+			}
+			case 6: {
+				Get();
+				break;
+			}
+			case 7: {
+				Get();
+				break;
+			}
+			case 8: {
+				Get();
+				break;
+			}
+			case 9: {
+				Get();
+				break;
+			}
+			}
+			Token op = t; 
+			DSLExpression  right = NegateFactor();
+			result = new Binary(op.val, result, right); 
+		}
+		return result;
+	}
+
+	DSLExpression   NegateFactor() {
+		DSLExpression   result;
+		boolean negated = false; 
+		if (la.kind == 10) {
+			Get();
+			negated = true; 
+		}
+		result = Factor();
+		result = negated ? new Negate(result) : result;
+		return result;
+	}
+
+	DSLExpression  Factor() {
+		DSLExpression  result;
+		result = null; 
+		if (la.kind == 1) {
+			result = MemberExpression(result);
+		} else if (la.kind == 2) {
+			Get();
+			result = new IntLiteral(t.val); 
+		} else if (la.kind == 11) {
+			Get();
+			result = Expression();
+			Expect(12);
+		} else SynErr(16);
+		return result;
+	}
+
+	DSLExpression  MemberExpression(DSLExpression receiver) {
+		DSLExpression  result;
+		result = null; 
+		Expect(1);
+		Variable variable = new Variable(receiver, t.val); 
+		result = variable; 
+		if (la.kind == 11) {
+			Get();
+			List<DSLExpression> parameters = new ArrayList<>();
+			DSLExpression parameter; 
+			if (StartOf(2)) {
+				parameter = Expression();
+				parameters.add(parameter); 
+				while (la.kind == 13) {
+					Get();
+					parameter = Expression();
+					parameters.add(parameter); 
+				}
+			}
+			Expect(12);
+			result = new Call(variable.getReceiver(), variable.getName(), parameters); 
+		}
+		if (la.kind == 14) {
+			Get();
+			result = MemberExpression(result);
+		}
+		return result;
+	}
+
 
 
     private DSLExpression parseImpl() {
         la = new Token();
         la.val = "";
         Get();
-        DSLExpression result = 		Expression();
-		Expect(0);
+        DSLExpression result = 		Expression();
+		Expect(0);
 
         return result;
     }
 
     private static final boolean[][] set = {
-		{_T,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x},
-		{_x,_x,_x,_x, _T,_T,_T,_T, _T,_T,_x,_x, _x,_x,_x,_x},
-		{_x,_T,_T,_T, _x,_x,_x,_x, _x,_x,_T,_x, _x,_x,_x,_x}
+		{_T,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x},
+		{_x,_x,_x,_x, _T,_T,_T,_T, _T,_T,_x,_x, _x,_x,_x,_x, _x},
+		{_x,_T,_T,_x, _x,_x,_x,_x, _x,_x,_T,_T, _x,_x,_x,_x, _x}
 
     };
 
@@ -282,23 +294,24 @@
 
     public void SynErr(int line, int col, int n) {
         String s;
-        switch (n) {
-			case 0: s = "EOF expected"; break;
-			case 1: s = "identifier expected"; break;
-			case 2: s = "numericLiteral expected"; break;
-			case 3: s = "\"!\" expected"; break;
-			case 4: s = "\"<\" expected"; break;
-			case 5: s = "\"<=\" expected"; break;
-			case 6: s = "\">\" expected"; break;
-			case 7: s = "\">=\" expected"; break;
-			case 8: s = "\"==\" expected"; break;
-			case 9: s = "\"!=\" expected"; break;
-			case 10: s = "\"(\" expected"; break;
-			case 11: s = "\")\" expected"; break;
-			case 12: s = "\",\" expected"; break;
-			case 13: s = "\".\" expected"; break;
-			case 14: s = "??? expected"; break;
-			case 15: s = "invalid Factor"; break;
+        switch (n) {
+			case 0: s = "EOF expected"; break;
+			case 1: s = "identifier expected"; break;
+			case 2: s = "numericLiteral expected"; break;
+			case 3: s = "\"||\" expected"; break;
+			case 4: s = "\"<\" expected"; break;
+			case 5: s = "\"<=\" expected"; break;
+			case 6: s = "\">\" expected"; break;
+			case 7: s = "\">=\" expected"; break;
+			case 8: s = "\"==\" expected"; break;
+			case 9: s = "\"!=\" expected"; break;
+			case 10: s = "\"!\" expected"; break;
+			case 11: s = "\"(\" expected"; break;
+			case 12: s = "\")\" expected"; break;
+			case 13: s = "\",\" expected"; break;
+			case 14: s = "\".\" expected"; break;
+			case 15: s = "??? expected"; break;
+			case 16: s = "invalid Factor"; break;
             default:
                 s = "error " + n;
                 break;