Mercurial > hg > graal-compiler
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;