Author: pkluegl Date: Thu Jun 13 09:26:12 2013 New Revision: 1492595 URL: http://svn.apache.org/r1492595 Log: UIMA-2920 - allow complex arguments in expressions
Modified: uima/sandbox/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/ComposedNumberExpression.java uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g Modified: uima/sandbox/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g?rev=1492595&r1=1492594&r2=1492595&view=diff ============================================================================== --- uima/sandbox/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g (original) +++ uima/sandbox/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g Thu Jun 13 09:26:12 2013 @@ -104,9 +104,48 @@ public void setExternalFactory(RutaExter external = factory; } -public void emitErrorMessage(String msg) { + public void emitErrorMessage(String msg) { System.out.println(msg); } + public void emitErrorMessage(RecognitionException e) { + int foundInt = e.c; + String stringFound = getTokenNames()[foundInt]; + int line = e.line; + String text = e.token.getText(); + + if (e instanceof NoViableAltException) { + NoViableAltException nvae = (NoViableAltException) e; + String msg = "Error in line " + nvae.line + ", \"" + text + "\": found no viable alternative"; + emitErrorMessage(msg); + } else if (e instanceof MismatchedTokenException) { + MismatchedTokenException mte = (MismatchedTokenException) e; + int expectedInt = mte.expecting; + String stringExpected = getTokenNames()[expectedInt]; + String msg = "Error in line " + line + ", \"" + text + "\": expected " + stringExpected + + ", but found " + stringFound; + emitErrorMessage(msg); + } else if (e instanceof MissingTokenException) { + MissingTokenException mte = (MissingTokenException) e; + int missingType = mte.getMissingType(); + String stringMissing = getTokenNames()[missingType]; + String msg = "Error in line " + line + ", \"" + text + "\": missing " + stringMissing + + ", but found " + stringFound; + emitErrorMessage(msg); + } else { + emitErrorMessage(e.getMessage()); + } + } + + public void emitErrorMessage(Throwable e) { + if(e instanceof MismatchedTokenException) { + MismatchedTokenException mte = (MismatchedTokenException) e; + String localizedMessage = mte.getLocalizedMessage(); + } else { + + } + emitErrorMessage(e.getMessage()); + } + public void reportError(RecognitionException e) { System.out.println(e); } @@ -222,10 +261,10 @@ public void emitErrorMessage(String msg) @rulecatch { catch (RecognitionException exception1) { - emitErrorMessage(exception1.toString()); + emitErrorMessage(exception1); } catch (Throwable exception2) { - emitErrorMessage(exception2.toString()); + emitErrorMessage(exception2); } } @@ -597,7 +636,8 @@ regexpRule returns [RegExpRule stmt = nu ruleElements[RuleElementContainer container] returns [List<RuleElement> elements = new ArrayList<RuleElement>()] : - re = ruleElement[container] {elements.add(re);} (re = ruleElement[container] {elements.add(re);})* + re = ruleElement[container] {if(re == null) {return elements;} elements.add(re);} + (re = ruleElement[container] {if(re == null) {return elements;} elements.add(re);})* ; @@ -883,7 +923,7 @@ options { matchReference returns [MatchReference mr = null] : - ref = dottedId (op = EQUAL arg = primitiveArgument)? + ref = dottedId (op = EQUAL arg = argument)? {mr = ExpressionFactory.createMatchReference(ref, op, arg);} ; @@ -936,20 +976,20 @@ TypeExpression te = null; featureMatchExpression returns [FeatureMatchExpression fme = null] : - f = featureExpression (op = EQUAL arg = primitiveArgument)? + f = featureExpression (op = EQUAL arg = argument)? {fme = ExpressionFactory.createFeatureMatchExpression(f, op, arg, $blockDeclaration::env);} ; featureMatchExpression2 returns [FeatureMatchExpression fme = null] : - f = featureExpression op = EQUAL arg = primitiveArgument + f = featureExpression op = EQUAL arg = argument {fme = ExpressionFactory.createFeatureMatchExpression(f, op, arg, $blockDeclaration::env);} ; featureAssignmentExpression returns [FeatureMatchExpression fme = null] : - f = featureExpression op = ASSIGN_EQUAL arg = primitiveArgument + f = featureExpression op = ASSIGN_EQUAL arg = argument {fme = ExpressionFactory.createFeatureMatchExpression(f, op, arg, $blockDeclaration::env);} ; @@ -1032,9 +1072,11 @@ condition returns [AbstractRutaConditio | c = conditionEndsWith | c = conditionPartOfNeq | c = conditionSize - | (c = externalCondition)=> c = externalCondition - | (booleanExpression)=> b = booleanExpression {c = ConditionFactory.createImplicitCondition(b);} + | (featureMatchExpression2)=> f = featureMatchExpression2 {c = ConditionFactory.createImplicitCondition(f);} + | (booleanExpression)=> b = booleanExpression {c = ConditionFactory.createImplicitCondition(b);} + | (c = externalCondition)=> c = externalCondition + // | c = variableCondition ) {result = c;} ; @@ -1907,7 +1949,7 @@ additiveExpression returns [NumberExpres @init{List<NumberExpression> exprs = new ArrayList<NumberExpression>(); List<Token> ops = new ArrayList<Token>();} : - e = multiplicativeExpression{exprs.add(e);} ( op = (PLUS | MINUS){ops.add(op);} e = multiplicativeExpression{exprs.add(e);} )* + e = multiplicativeExpression{exprs.add(e);} ((PLUS | MINUS)=> op = (PLUS | MINUS){ops.add(op);} e = multiplicativeExpression{exprs.add(e);} )* {expr = ExpressionFactory.createComposedNumberExpression(exprs,ops);} ; @@ -1915,7 +1957,7 @@ multiplicativeExpression returns [Number @init{List<NumberExpression> exprs = new ArrayList<NumberExpression>(); List<Token> ops = new ArrayList<Token>();} : - (e = simpleNumberExpression{exprs.add(e);} ( op = ( STAR | SLASH | PERCENT ){ops.add(op);} e = simpleNumberExpression{exprs.add(e);} )* + (e = simpleNumberExpression{exprs.add(e);} (( STAR | SLASH | PERCENT )=> op = ( STAR | SLASH | PERCENT ){ops.add(op);} e = simpleNumberExpression{exprs.add(e);} )* {expr = ExpressionFactory.createComposedNumberExpression(exprs,ops);} | e1 = numberFunction {expr = e1;}) ; @@ -1950,7 +1992,7 @@ List<StringExpression> exprs = new Array : (featureExpression)=> fe = featureExpression {expr = ExpressionFactory.createStringFeatureExpression(fe);} | e = simpleStringExpression {exprs.add(e);} - (PLUS (e1 = simpleStringExpression {exprs.add(e1);} + ((PLUS)=>PLUS (e1 = simpleStringExpression {exprs.add(e1);} | e2 = numberExpressionInPar {exprs.add(e2);} | be = simpleBooleanExpression {exprs.add(be);} | te = typeExpression {exprs.add(te);} @@ -2066,3 +2108,4 @@ booleanNumberExpression returns [Boole RPAREN {expr = ExpressionFactory.createBooleanNumberExpression(e1,op,e2);} ; + \ No newline at end of file Modified: uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/ComposedNumberExpression.java URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/ComposedNumberExpression.java?rev=1492595&r1=1492594&r2=1492595&view=diff ============================================================================== --- uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/ComposedNumberExpression.java (original) +++ uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/number/ComposedNumberExpression.java Thu Jun 13 09:26:12 2013 @@ -73,11 +73,11 @@ public class ComposedNumberExpression ex @Override public int getIntegerValue(RutaBlock parent, AnnotationFS annotation, RutaStream stream) { - int result = getExpressions().get(0).getIntegerValue(parent, null, stream); + int result = getExpressions().get(0).getIntegerValue(parent, annotation, stream); for (int i = 0; i < getOperators().size(); i++) { int second = 0; if (getExpressions().size() > i + 1) { - second = getExpressions().get(i + 1).getIntegerValue(parent, null, stream); + second = getExpressions().get(i + 1).getIntegerValue(parent, annotation, stream); } result = calculate(result, second, getOperators().get(i)); } Modified: uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g?rev=1492595&r1=1492594&r2=1492595&view=diff ============================================================================== --- uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g (original) +++ uima/sandbox/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g Thu Jun 13 09:26:12 2013 @@ -922,12 +922,12 @@ externalTypeFunction returns [Expression featureAssignmentExpression returns [Expression expr = null] : - feature = dottedId comp = ASSIGN_EQUAL value = primitiveArgument {expr = ExpressionFactory.createFeatureMatch(feature, comp, value);} + feature = dottedId comp = ASSIGN_EQUAL value = argument {expr = ExpressionFactory.createFeatureMatch(feature, comp, value);} ; featureTypeExpression returns [Expression expr = null] : - feature = dottedId (comp = EQUAL | comp = NOTEQUAL) value = primitiveArgument {expr = ExpressionFactory.createFeatureMatch(feature, comp, value);} + feature = dottedId (comp = EQUAL | comp = NOTEQUAL) value = argument {expr = ExpressionFactory.createFeatureMatch(feature, comp, value);} ; featureExpression returns [Expression expr = null] @@ -2090,14 +2090,14 @@ expr = ExpressionFactory.createEmptyNumb //seems OK additiveExpression returns [Expression root = null] : expr1=multiplicativeExpression {root=expr1;} - ( op=(PLUS | MINUS) expr2=multiplicativeExpression {root=ExpressionFactory.createBinaryArithmeticExpr(root,expr2,op);})* + ((PLUS | MINUS)=> op=(PLUS | MINUS) expr2=multiplicativeExpression {root=ExpressionFactory.createBinaryArithmeticExpr(root,expr2,op);})* ; //NOT OK TODO multiplicativeExpression returns [Expression root = null] : - (expr1 = simpleNumberExpression {root=expr1;} - ( op=( STAR | SLASH | PERCENT ) sNE = simpleNumberExpression {root=ExpressionFactory.createBinaryArithmeticExpr(root,sNE,op);} )* + ((simpleNumberExpression)=> expr1 = simpleNumberExpression {root=expr1;} + ( ( STAR | SLASH | PERCENT )=> op=( STAR | SLASH | PERCENT ) sNE = simpleNumberExpression {root=ExpressionFactory.createBinaryArithmeticExpr(root,sNE,op);} )* | e1 = numberFunction {root = e1;}) ; @@ -2170,7 +2170,7 @@ List<Expression> exprList = new ArrayLis e = stringFunction {expr = e;} | strExpr1 = simpleStringExpression {if (strExpr1!=null) exprList.add(strExpr1);} - (PLUS (nextstrExpr = simpleStringExpression {if (nextstrExpr!=null) exprList.add(nextstrExpr);} + ((PLUS)=> PLUS (nextstrExpr = simpleStringExpression {if (nextstrExpr!=null) exprList.add(nextstrExpr);} | ne = numberExpressionInPar {if (ne!=null) exprList.add(ne);} | be = simpleBooleanExpression {if (be!=null) exprList.add(be);} | (listExpression)=> le = listExpression {if (le!=null) exprList.add(le);}