You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by pk...@apache.org on 2016/03/22 15:01:55 UTC
svn commit: r1736191 - in /uima/ruta/trunk:
ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/
ruta-core/src/main/java/org/apache/uima/ruta/expression/
ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/
ruta-core/src/test/java/org/apache...
Author: pkluegl
Date: Tue Mar 22 14:01:55 2016
New Revision: 1736191
URL: http://svn.apache.org/viewvc?rev=1736191&view=rev
Log:
UIMA-4748
- boolean comparison of strings
- added test in implicit condition
Added:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanStringExpression.java (with props)
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanCompareExpression.java
- copied, changed from r1733239, uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanNumberExpression.java
Removed:
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanNumberExpression.java
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanTypeExpression.java
Modified:
uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/ExpressionFactory.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java
uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java
uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g
uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/ExpressionFactory.java
Modified: uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g?rev=1736191&r1=1736190&r2=1736191&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g (original)
+++ uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g Tue Mar 22 14:01:55 2016
@@ -2621,6 +2621,7 @@ composedBooleanExpression returns [IBool
:
(e2 = booleanCompare)=> e2 = booleanCompare {expr = e2;}
| (bne = booleanNumberExpression)=> bne = booleanNumberExpression{expr = bne;}
+ | (bse = booleanStringExpression)=> bse = booleanStringExpression{expr = bse;}
| (bte = booleanTypeExpression)=> bte = booleanTypeExpression{expr = bte;}
| e1 = booleanFunction {expr = e1;}
| LPAREN ep = booleanExpression RPAREN {expr = ep;}
@@ -2669,7 +2670,14 @@ booleanTypeExpression returns [IBoolea
e2 = typeExpression
{expr = ExpressionFactory.createBooleanTypeExpression(e1,op,e2);}
;
-
+booleanStringExpression returns [IBooleanExpression expr = null]
+ :
+ e1 = stringExpression
+ op = (EQUAL | NOTEQUAL)
+ e2 = stringExpression
+ {expr = ExpressionFactory.createBooleanStringExpression(e1,op,e2);}
+ ;
+
booleanNumberExpression returns [IBooleanExpression expr = null]
:
//LPAREN
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/ExpressionFactory.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/ExpressionFactory.java?rev=1736191&r1=1736190&r2=1736191&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/ExpressionFactory.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/ExpressionFactory.java Tue Mar 22 14:01:55 2016
@@ -38,6 +38,7 @@ import org.apache.uima.ruta.expression.b
import org.apache.uima.ruta.expression.bool.BooleanListFeatureExpression;
import org.apache.uima.ruta.expression.bool.BooleanListVariableExpression;
import org.apache.uima.ruta.expression.bool.BooleanNumberExpression;
+import org.apache.uima.ruta.expression.bool.BooleanStringExpression;
import org.apache.uima.ruta.expression.bool.BooleanTypeExpression;
import org.apache.uima.ruta.expression.bool.BooleanVariableExpression;
import org.apache.uima.ruta.expression.bool.IBooleanExpression;
@@ -168,6 +169,11 @@ public class ExpressionFactory {
INumberExpression e2) {
return new BooleanNumberExpression(e1, op.getText(), e2);
}
+
+ public static IBooleanExpression createBooleanStringExpression(IStringExpression e1, Token op,
+ IStringExpression e2) {
+ return new BooleanStringExpression(e1, op.getText(), e2);
+ }
public static IBooleanExpression createSimpleBooleanExpression(Token v) {
return new SimpleBooleanExpression(Boolean.valueOf(v.getText()));
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java?rev=1736191&r1=1736190&r2=1736191&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java Tue Mar 22 14:01:55 2016
@@ -29,13 +29,32 @@ import org.apache.uima.cas.Type;
import org.apache.uima.cas.text.AnnotationFS;
import org.apache.uima.ruta.RutaElement;
import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.expression.annotation.IAnnotationExpression;
+import org.apache.uima.ruta.expression.annotation.IAnnotationListExpression;
import org.apache.uima.ruta.expression.feature.FeatureExpression;
+import org.apache.uima.ruta.expression.feature.SimpleFeatureExpression;
import org.apache.uima.ruta.rule.MatchContext;
public class RutaExpression extends RutaElement implements IRutaExpression {
protected List<AnnotationFS> getTargetAnnotation(AnnotationFS matchedAnnotation,
FeatureExpression fe, MatchContext context, RutaStream stream) {
+
+ if (fe instanceof SimpleFeatureExpression) {
+ SimpleFeatureExpression sfe = (SimpleFeatureExpression) fe;
+ IAnnotationExpression annotationExpression = sfe.getMatchReference()
+ .getAnnotationExpression(context, stream);
+ IAnnotationListExpression annotationListExpression = sfe.getMatchReference()
+ .getAnnotationListExpression(context, stream);
+ if (annotationExpression != null) {
+ List<AnnotationFS> as = new ArrayList<>(1);
+ as.add(annotationExpression.getAnnotation(context, stream));
+ return as;
+ } else if (annotationListExpression != null) {
+ return annotationListExpression.getAnnotationList(context, stream);
+ }
+ }
+
if (matchedAnnotation == null) {
return Collections.emptyList();
}
Added: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanStringExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanStringExpression.java?rev=1736191&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanStringExpression.java (added)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanStringExpression.java Tue Mar 22 14:01:55 2016
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.ruta.expression.bool;
+
+import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.expression.string.IStringExpression;
+import org.apache.uima.ruta.rule.MatchContext;
+
+public class BooleanStringExpression extends AbstractBooleanExpression {
+
+ private final IStringExpression e1;
+
+ private final String op;
+
+ private final IStringExpression e2;
+
+ public BooleanStringExpression(IStringExpression e1, String op, IStringExpression e2) {
+ super();
+ this.e1 = e1;
+ this.op = op;
+ this.e2 = e2;
+ }
+
+ @Override
+ public boolean getBooleanValue(MatchContext context, RutaStream stream) {
+ String first = getFristExpression().getStringValue(context, stream);
+ String second = getSecondExpression().getStringValue(context, stream);
+ return eval(first, getOperator(), second);
+ }
+
+ private boolean eval(String t1, String op, String t2) {
+ if ("==".equals(op)) {
+ return t1.equals(t2);
+ } else if ("!=".equals(op)) {
+ return !t1.equals(t2);
+ }
+ return false;
+ }
+
+ public IStringExpression getFristExpression() {
+ return e1;
+ }
+
+ public String getOperator() {
+ return op;
+ }
+
+ public IStringExpression getSecondExpression() {
+ return e2;
+ }
+
+ @Override
+ public String getStringValue(MatchContext context, RutaStream stream) {
+ return e1.getStringValue(context, stream) + " " + op + " " + e2.getStringValue(context, stream);
+ }
+
+}
Propchange: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanStringExpression.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java?rev=1736191&r1=1736190&r2=1736191&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java Tue Mar 22 14:01:55 2016
@@ -19,9 +19,16 @@
package org.apache.uima.ruta.condition;
+import java.io.IOException;
+
+import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.cas.CAS;
+import org.apache.uima.cas.CASException;
+import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.ruta.engine.Ruta;
import org.apache.uima.ruta.engine.RutaTestUtils;
+import org.apache.uima.util.InvalidXMLException;
+import org.junit.Assert;
import org.junit.Test;
public class ImplicitCondition2Test {
@@ -53,4 +60,15 @@ public class ImplicitCondition2Test {
cas.release();
}
+
+ @Test
+ public void testStringCompare() throws ResourceInitializationException, InvalidXMLException, IOException, AnalysisEngineProcessException, CASException {
+ CAS cas = RutaTestUtils.getCAS("a b. a b.");
+ Assert.assertTrue(Ruta.matches(cas.getJCas(), "(w:W # W{W.ct==w.ct}){->T1};"));
+ Assert.assertTrue(Ruta.matches(cas.getJCas(), "STRING s1 = \"a\"; (w:W W{s1==w.ct}){->T2};"));
+ RutaTestUtils.assertAnnotationsEquals(cas, 1, 2, "a b. a", "b. a b");
+ RutaTestUtils.assertAnnotationsEquals(cas, 2, 2, "a b", "a b");
+ }
+
+
}
Modified: uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java?rev=1736191&r1=1736190&r2=1736191&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java (original)
+++ uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java Tue Mar 22 14:01:55 2016
@@ -878,12 +878,17 @@ public class LanguageCheckerVisitor exte
String bref = featText.substring(0, firstIndexOf);
String aref = featText.substring(0, lastIndexOf);
String fref = featText.substring(lastIndexOf + 1, featText.length());
+ if(currentLabels.contains(aref)) {
+ return;
+ }
String match = isFeatureMatch(aref);
if (match == null
&& (getVariableType(aref) == RutaTypeConstants.RUTA_TYPE_AT || getVariableType(bref) == RutaTypeConstants.RUTA_TYPE_AT)) {
// do not check on variables!
return;
}
+
+
match = expand(match);
if (match != null) {
int kind = -1;
Modified: uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g?rev=1736191&r1=1736190&r2=1736191&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g Tue Mar 22 14:01:55 2016
@@ -2616,8 +2616,9 @@ simpleBooleanExpression returns [Express
composedBooleanExpression returns [Expression expr = null]
:
(e2 = booleanCompare)=> e2 = booleanCompare {expr = e2;}
- | (bte = booleanTypeExpression)=> bte = booleanTypeExpression{expr = bte;}
| (bne = booleanNumberExpression)=> bne = booleanNumberExpression{expr = bne;}
+ | (bse = booleanStringExpression)=> bse = booleanStringExpression{expr = bse;}
+ | (bte = booleanTypeExpression)=> bte = booleanTypeExpression{expr = bte;}
| e1 = booleanFunction {expr = e1;}
| LPAREN ep = booleanExpression RPAREN {expr = ep;}
;
@@ -2679,6 +2680,16 @@ booleanNumberExpression returns [Expre
{expr = ExpressionFactory.createBooleanNumberExpression(e1,op,e2);}
;
+booleanStringExpression returns [Expression expr = null]
+ :
+ //LPAREN
+ e1 = stringExpression
+ op = (EQUAL | NOTEQUAL)
+ e2 = stringExpression
+ //RPAREN
+ {expr = ExpressionFactory.createBooleanStringExpression(e1,op,e2);}
+ ;
+
genericVariableReference returns[Expression varRef]
:
id=Identifier
Modified: uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/ExpressionFactory.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/ExpressionFactory.java?rev=1736191&r1=1736190&r2=1736191&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/ExpressionFactory.java (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/ExpressionFactory.java Tue Mar 22 14:01:55 2016
@@ -66,7 +66,7 @@ public class ExpressionFactory extends A
return new RutaExpression(e.sourceStart(), e.sourceEnd(), e, RutaTypeConstants.RUTA_TYPE_B);
}
- public static RutaBooleanNumberExpression createBooleanNumberExpression(Expression e1, Token op,
+ public static RutaBooleanCompareExpression createBooleanNumberExpression(Expression e1, Token op,
Expression e2) {
int lexerOpID = op.getType(); // Integer.valueOf(op.getText());
int operatorID = 0;
@@ -93,7 +93,7 @@ public class ExpressionFactory extends A
default:
break;
}
- return new RutaBooleanNumberExpression(e1.sourceStart(), e2.sourceEnd(), operatorID, e1, e2);
+ return new RutaBooleanCompareExpression(e1.sourceStart(), e2.sourceEnd(), operatorID, e1, e2);
}
public static VariableReference createBooleanVariableReference(Token variableId) {
@@ -315,11 +315,31 @@ public class ExpressionFactory extends A
break;
}
if (e1 != null && e2 != null) {
- return new RutaBooleanTypeExpression(e1.sourceStart(), e2.sourceEnd(), operatorID, e1, e2);
+ return new RutaBooleanCompareExpression(e1.sourceStart(), e2.sourceEnd(), operatorID, e1, e2);
}
return null;
}
+ public static Expression createBooleanStringExpression(Expression e1, Token op, Expression e2) {
+ int lexerOpID = op.getType(); // Integer.valueOf(op.getText());
+ int operatorID = 0;
+ // convert lexer-opId to dltk-opId:
+ switch (lexerOpID) {
+ case RutaLexer.EQUAL:
+ operatorID = E_EQUAL;
+ break;
+ case RutaLexer.NOTEQUAL:
+ operatorID = E_NOT_EQUAL;
+ break;
+ default:
+ break;
+ }
+ if (e1 != null && e2 != null) {
+ return new RutaBooleanCompareExpression(e1.sourceStart(), e2.sourceEnd(), operatorID, e1, e2);
+ }
+ return null;
+ }
+
public static Expression createListExpression(List<Expression> exprList, int type) {
List<ASTNode> l = new ArrayList<>();
int start = 0;
@@ -407,4 +427,6 @@ public class ExpressionFactory extends A
int bounds[] = getBounds(t);
return new NullExpression(bounds[0], bounds[1]);
}
+
+
}
Copied: uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanCompareExpression.java (from r1733239, uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanNumberExpression.java)
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanCompareExpression.java?p2=uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanCompareExpression.java&p1=uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanNumberExpression.java&r1=1733239&r2=1736191&rev=1736191&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanNumberExpression.java (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanCompareExpression.java Tue Mar 22 14:01:55 2016
@@ -23,7 +23,7 @@ import org.eclipse.dltk.ast.ASTVisitor;
import org.eclipse.dltk.ast.expressions.Expression;
import org.eclipse.dltk.utils.CorePrinter;
-public class RutaBooleanNumberExpression extends Expression {
+public class RutaBooleanCompareExpression extends Expression {
/**
* <,<=,>,>=,==,...
*/
@@ -33,7 +33,7 @@ public class RutaBooleanNumberExpression
private Expression e2;
- public RutaBooleanNumberExpression(int start, int end, int operatorID, Expression e1,
+ public RutaBooleanCompareExpression(int start, int end, int operatorID, Expression e1,
Expression e2) {
super(start, end);
this.kind = operatorID;