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


Reply via email to