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/01/05 12:19:15 UTC
svn commit: r1723045 - in /uima/ruta/trunk:
ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/
ruta-core/src/main/java/org/apache/uima/ruta/
ruta-core/src/main/java/org/apache/uima/ruta/action/
ruta-core/src/main/java/org/apache/uima/ruta/expressio...
Author: pkluegl
Date: Tue Jan 5 11:19:14 2016
New Revision: 1723045
URL: http://svn.apache.org/viewvc?rev=1723045&view=rev
Log:
UIMA-4310
- implicit action for assignments to variables
Added:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitVariableAssignmentAction.java (with props)
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AbstractAnnotationListExpression.java (with props)
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/RutaEnvironment.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ActionFactory.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java
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/annotation/AnnotationListFeatureExpression.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListVariableExpression.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ActionVerbalizer.java
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java
uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g
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=1723045&r1=1723044&r2=1723045&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 Jan 5 11:19:14 2016
@@ -1028,6 +1028,7 @@ listExpression returns [ListExpression e
| (floatListExpression)=> dl = floatListExpression {expr = dl;}
| (stringListExpression)=> sl = stringListExpression {expr = sl;}
| (typeListExpression)=> tl = typeListExpression {expr = tl;}
+ | (annotationListExpression)=> ale = annotationListExpression {expr = ale;}
| (untypedListExpression)=> utl = untypedListExpression {expr = utl;}
;
@@ -1251,6 +1252,13 @@ featureAssignmentExpression returns [Fea
}
;
+variableAssignmentAction returns [AbstractRutaAction a = null]
+ :
+ var = variable op = ASSIGN_EQUAL arg = argument
+ {
+ a = ActionFactory.createImplicitVariableAssignmentAction(var, op, arg, $blockDeclaration::env);
+ }
+ ;
variable returns [Token var = null]
:
@@ -1265,6 +1273,7 @@ listVariable returns [Token var = null]
||isVariableOfType($blockDeclaration::env, input.LT(1).getText(), "FLOATLIST")
||isVariableOfType($blockDeclaration::env, input.LT(1).getText(), "STRINGLIST")
||isVariableOfType($blockDeclaration::env, input.LT(1).getText(), "TYPELIST")
+ ||isVariableOfType($blockDeclaration::env, input.LT(1).getText(), "ANNOTATIONLIST")
}? v = Identifier {var = v;}
;
@@ -1590,6 +1599,7 @@ action returns [AbstractRutaAction resu
| a = actionRemoveRetainType
| a = actionAddFilterType
| a = actionRemoveFilterType
+ | (variableAssignmentAction)=> vae = variableAssignmentAction {a = vae;}
| (externalAction)=> a = externalAction
| (featureAssignmentExpression)=> fae = featureAssignmentExpression {a = ActionFactory.createAction(fae);}
| (typeExpression)=> te = typeExpression {a = ActionFactory.createAction(te);}
@@ -2212,8 +2222,7 @@ annotationExpression returns [IRutaExpre
{isVariableOfType($blockDeclaration::env,input.LT(1).getText(), "ANNOTATION") }?
id = Identifier {expr = ExpressionFactory.createAnnotationVariableExpression(id);}
|
- {isVariableOfType($blockDeclaration::env,input.LT(1).getText(), "ANNOTATIONLIST") }?
- id = Identifier {expr = ExpressionFactory.createAnnotationListVariableExpression(id);}
+ ale = annotationListExpression {expr = ale;}
|
aae = annotationAddressExpression {expr = aae;}
|
@@ -2225,12 +2234,18 @@ annotationExpression2 returns [IRutaExpr
{isVariableOfType($blockDeclaration::env,input.LT(1).getText(), "ANNOTATION")}?
id = Identifier {expr = ExpressionFactory.createAnnotationVariableExpression(id);}
|
- {isVariableOfType($blockDeclaration::env,input.LT(1).getText(), "ANNOTATIONLIST")}?
- id = Identifier {expr = ExpressionFactory.createAnnotationListVariableExpression(id);}
+ ale = annotationListExpression {expr = ale;}
|
aae = annotationAddressExpression {expr = aae;}
;
+annotationListExpression returns [ListExpression expr = null]
+ :
+ {isVariableOfType($blockDeclaration::env,input.LT(1).getText(), "ANNOTATIONLIST")}?
+ id = Identifier {expr = ExpressionFactory.createAnnotationListVariableExpression(id);}
+ ;
+
+
annotationAddressExpression returns [IAnnotationExpression expr = null]
:
ADDRESS_PREFIX address = DecimalLiteral {expr = ExpressionFactory.createAnnotationAddressExpression(address);}
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java?rev=1723045&r1=1723044&r2=1723045&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java Tue Jan 5 11:19:14 2016
@@ -706,7 +706,13 @@ public class RutaEnvironment {
}
public boolean isVariable(String name) {
- return ownsVariable(name) || owner.getParent().getEnvironment().isVariable(name);
+ if (ownsVariable(name)) {
+ return true;
+ }
+ if (owner != null && owner.getParent() != null) {
+ return owner.getParent().getEnvironment().isVariable(name);
+ }
+ return false;
}
public boolean isVariableOfType(String name, String type) {
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java?rev=1723045&r1=1723044&r2=1723045&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java Tue Jan 5 11:19:14 2016
@@ -49,6 +49,7 @@ import org.apache.uima.ruta.engine.RutaE
import org.apache.uima.ruta.expression.AnnotationTypeExpression;
import org.apache.uima.ruta.expression.IRutaExpression;
import org.apache.uima.ruta.expression.annotation.IAnnotationExpression;
+import org.apache.uima.ruta.expression.annotation.IAnnotationListExpression;
import org.apache.uima.ruta.expression.bool.IBooleanExpression;
import org.apache.uima.ruta.expression.feature.FeatureExpression;
import org.apache.uima.ruta.expression.feature.GenericFeatureExpression;
@@ -59,6 +60,7 @@ import org.apache.uima.ruta.expression.t
import org.apache.uima.ruta.rule.AbstractRule;
import org.apache.uima.ruta.rule.AbstractRuleMatch;
import org.apache.uima.ruta.rule.MatchContext;
+import org.apache.uima.ruta.rule.RuleElement;
import org.apache.uima.ruta.type.RutaAnnotation;
import org.apache.uima.ruta.type.RutaBasic;
import org.apache.uima.ruta.utils.UIMAUtils;
@@ -977,6 +979,22 @@ public class RutaStream extends FSIterat
annotation.setFeatureValue(feature, a);
}
}
+ } else if (value instanceof IAnnotationListExpression && !feature.getRange().isPrimitive()) {
+ IAnnotationListExpression ale = (IAnnotationListExpression) value;
+ List<AnnotationFS> annotations = ale.getAnnotations(context, this);
+ if (annotations != null) {
+ if (feature.getRange().isArray()) {
+ annotation.setFeatureValue(feature, UIMAUtils.toFSArray(this.getJCas(), annotations));
+ } else {
+ if (annotations.isEmpty()) {
+ annotation.setFeatureValue(feature, null);
+ } else {
+ annotation.setFeatureValue(feature, annotations.get(0));
+ }
+ }
+ } else {
+ annotation.setFeatureValue(feature, null);
+ }
} else if (value instanceof ITypeExpression && !feature.getRange().isPrimitive()) {
ITypeExpression typeExpr = (ITypeExpression) value;
Type t = typeExpr.getType(context, this);
@@ -1027,17 +1045,52 @@ public class RutaStream extends FSIterat
}
}
+ public void assignVariable(String var, IRutaExpression expression, MatchContext context,
+ RutaStream stream) {
+ RuleElement element = context.getElement();
+ RutaBlock parent = element.getParent();
+ RutaEnvironment environment = parent.getEnvironment();
+ Class<?> clazz = environment.getVariableType(var);
+ if (clazz.equals(Double.class) && expression instanceof INumberExpression) {
+ double v = ((INumberExpression) expression).getDoubleValue(context, stream);
+ environment.setVariableValue(var, v);
+ } else if (clazz.equals(Integer.class) && expression instanceof INumberExpression) {
+ int v = ((INumberExpression) expression).getIntegerValue(context, stream);
+ environment.setVariableValue(var, v);
+ } else if (clazz.equals(Type.class) && expression instanceof ITypeExpression) {
+ Type v = ((ITypeExpression) expression).getType(context, stream);
+ environment.setVariableValue(var, v);
+ } else if (clazz.equals(Boolean.class) && expression instanceof IBooleanExpression) {
+ boolean v = ((IBooleanExpression) expression).getBooleanValue(context, stream);
+ environment.setVariableValue(var, v);
+ } else if (clazz.equals(String.class) && expression instanceof IStringExpression) {
+ String v = ((IStringExpression) expression).getStringValue(context, stream);
+ environment.setVariableValue(var, v);
+ } else if (clazz.equals(AnnotationFS.class) && expression instanceof IAnnotationExpression) {
+ AnnotationFS v = ((IAnnotationExpression) expression).getAnnotation(context, stream);
+ environment.setVariableValue(var, v);
+ } else if (clazz.equals(List.class)) {
+ Class<?> variableGenericType = environment.getVariableGenericType(var);
+ if (variableGenericType.equals(AnnotationFS.class)
+ && expression instanceof IAnnotationListExpression) {
+ List<AnnotationFS> v = ((IAnnotationListExpression) expression).getAnnotations(context,
+ stream);
+ environment.setVariableValue(var, v);
+ }
+ }
+ }
+
public AnnotationFS getSingleAnnotationByTypeInContext(Type type, MatchContext context) {
List<AnnotationFS> inWindow = this.getAnnotationsInWindow(context.getAnnotation(), type);
- if(inWindow != null&& !inWindow.isEmpty()) {
+ if (inWindow != null && !inWindow.isEmpty()) {
return inWindow.get(0);
}
return null;
}
-
+
public List<AnnotationFS> getAnnotationsByTypeInContext(Type type, MatchContext context) {
List<AnnotationFS> inWindow = this.getAnnotationsInWindow(context.getAnnotation(), type);
return inWindow;
}
-
+
}
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ActionFactory.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ActionFactory.java?rev=1723045&r1=1723044&r2=1723045&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ActionFactory.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ActionFactory.java Tue Jan 5 11:19:14 2016
@@ -265,6 +265,13 @@ public class ActionFactory {
return new ImplicitMarkAction(te);
}
+ public static AbstractRutaAction createImplicitVariableAssignmentAction(Token var, Token op,
+ IRutaExpression arg, RutaBlock env) {
+ String varString = var != null ? var.getText() : null;
+ String opString = op != null ? op.getText() : "=";
+ return new ImplicitVariableAssignmentAction(varString, opString, arg);
+ }
+
public static AbstractRutaAction createMarkFirstAction(ITypeExpression type, RutaBlock env) {
return new MarkFirstAction(type);
}
@@ -280,4 +287,6 @@ public class ActionFactory {
return new SplitAction(type, complete, appendToBegin, appendToEnd);
}
+
+
}
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java?rev=1723045&r1=1723044&r2=1723045&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java Tue Jan 5 11:19:14 2016
@@ -19,22 +19,9 @@
package org.apache.uima.ruta.action;
-import java.util.List;
-
-import org.apache.uima.cas.Type;
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.RutaBlock;
-import org.apache.uima.ruta.RutaEnvironment;
import org.apache.uima.ruta.RutaStream;
import org.apache.uima.ruta.expression.IRutaExpression;
-import org.apache.uima.ruta.expression.annotation.IAnnotationExpression;
-import org.apache.uima.ruta.expression.annotation.IAnnotationListExpression;
-import org.apache.uima.ruta.expression.bool.IBooleanExpression;
-import org.apache.uima.ruta.expression.number.INumberExpression;
-import org.apache.uima.ruta.expression.string.IStringExpression;
-import org.apache.uima.ruta.expression.type.ITypeExpression;
import org.apache.uima.ruta.rule.MatchContext;
-import org.apache.uima.ruta.rule.RuleElement;
import org.apache.uima.ruta.visitor.InferenceCrowd;
public class AssignAction extends AbstractRutaAction {
@@ -51,35 +38,7 @@ public class AssignAction extends Abstra
@Override
public void execute(MatchContext context, RutaStream stream, InferenceCrowd crowd) {
- RuleElement element = context.getElement();
- RutaBlock parent = element.getParent();
- RutaEnvironment environment = parent.getEnvironment();
- Class<?> clazz = environment.getVariableType(var);
- if (clazz.equals(Double.class) && expression instanceof INumberExpression) {
- double v = ((INumberExpression) expression).getDoubleValue(context, stream);
- environment.setVariableValue(var, v);
- } else if (clazz.equals(Integer.class) && expression instanceof INumberExpression) {
- int v = ((INumberExpression) expression).getIntegerValue(context, stream);
- environment.setVariableValue(var, v);
- } else if (clazz.equals(Type.class) && expression instanceof ITypeExpression) {
- Type v = ((ITypeExpression) expression).getType(context, stream);
- environment.setVariableValue(var, v);
- } else if (clazz.equals(Boolean.class) && expression instanceof IBooleanExpression) {
- boolean v = ((IBooleanExpression) expression).getBooleanValue(context, stream);
- environment.setVariableValue(var, v);
- } else if (clazz.equals(String.class) && expression instanceof IStringExpression) {
- String v = ((IStringExpression) expression).getStringValue(context, stream);
- environment.setVariableValue(var, v);
- } else if (clazz.equals(AnnotationFS.class) && expression instanceof IAnnotationExpression) {
- AnnotationFS v = ((IAnnotationExpression) expression).getAnnotation(context, stream);
- environment.setVariableValue(var, v);
- } else if(clazz.equals(List.class)) {
- Class<?> variableGenericType = environment.getVariableGenericType(var);
- if(variableGenericType.equals(AnnotationFS.class) && expression instanceof IAnnotationListExpression) {
- List<AnnotationFS> v = ((IAnnotationListExpression) expression).getAnnotations(context, stream);
- environment.setVariableValue(var, v);
- }
- }
+ stream.assignVariable(var, expression, context, stream);
}
public String getVar() {
Added: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitVariableAssignmentAction.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitVariableAssignmentAction.java?rev=1723045&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitVariableAssignmentAction.java (added)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitVariableAssignmentAction.java Tue Jan 5 11:19:14 2016
@@ -0,0 +1,63 @@
+/*
+ * 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.action;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.expression.IRutaExpression;
+import org.apache.uima.ruta.rule.MatchContext;
+import org.apache.uima.ruta.visitor.InferenceCrowd;
+
+public class ImplicitVariableAssignmentAction extends AbstractRutaAction {
+
+ private final String var;
+
+ private final String op;
+
+ private final IRutaExpression arg;
+
+ public ImplicitVariableAssignmentAction(String varString, String opString, IRutaExpression arg) {
+ super();
+ this.var = varString;
+ this.op = opString;
+ this.arg = arg;
+ }
+
+ @Override
+ public void execute(MatchContext context, RutaStream stream, InferenceCrowd crowd) {
+ // only normal assignment is supported right now
+ if(StringUtils.equals(op, "=")) {
+ stream.assignVariable(var, arg, context, stream);
+ }
+ }
+
+ public String getVar() {
+ return var;
+ }
+
+ public String getOp() {
+ return op;
+ }
+
+ public IRutaExpression getArg() {
+ return arg;
+ }
+
+}
Propchange: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitVariableAssignmentAction.java
------------------------------------------------------------------------------
svn:eol-style = native
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=1723045&r1=1723044&r2=1723045&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 Jan 5 11:19:14 2016
@@ -24,6 +24,7 @@ import java.util.List;
import org.antlr.runtime.Token;
import org.apache.uima.ruta.RutaBlock;
+import org.apache.uima.ruta.expression.annotation.AbstractAnnotationListExpression;
import org.apache.uima.ruta.expression.annotation.AnnotationAddressExpression;
import org.apache.uima.ruta.expression.annotation.AnnotationFeatureExpression;
import org.apache.uima.ruta.expression.annotation.AnnotationLabelExpression;
@@ -314,7 +315,7 @@ public class ExpressionFactory {
return new AnnotationVariableExpression(var.getText());
}
- public static IRutaExpression createAnnotationListVariableExpression(Token var) {
+ public static AbstractAnnotationListExpression createAnnotationListVariableExpression(Token var) {
return new AnnotationListVariableExpression(var.getText());
}
Added: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AbstractAnnotationListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AbstractAnnotationListExpression.java?rev=1723045&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AbstractAnnotationListExpression.java (added)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AbstractAnnotationListExpression.java Tue Jan 5 11:19:14 2016
@@ -0,0 +1,27 @@
+/*
+ * 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.annotation;
+
+import org.apache.uima.cas.text.AnnotationFS;
+import org.apache.uima.ruta.expression.list.ListExpression;
+
+public abstract class AbstractAnnotationListExpression extends ListExpression<AnnotationFS> implements IAnnotationListExpression{
+
+}
Propchange: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AbstractAnnotationListExpression.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListFeatureExpression.java?rev=1723045&r1=1723044&r2=1723045&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListFeatureExpression.java Tue Jan 5 11:19:14 2016
@@ -34,7 +34,7 @@ import org.apache.uima.ruta.rule.MatchCo
* An expression referring to annotations (FSArray) stored in a feature.
*
*/
-public class AnnotationListFeatureExpression extends ListExpression<AnnotationFS> implements IAnnotationListExpression {
+public class AnnotationListFeatureExpression extends AbstractAnnotationListExpression {
private FeatureExpression fe;
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListVariableExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListVariableExpression.java?rev=1723045&r1=1723044&r2=1723045&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListVariableExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListVariableExpression.java Tue Jan 5 11:19:14 2016
@@ -27,7 +27,7 @@ import org.apache.uima.ruta.RutaStream;
import org.apache.uima.ruta.expression.list.ListExpression;
import org.apache.uima.ruta.rule.MatchContext;
-public class AnnotationListVariableExpression extends ListExpression<AnnotationFS> implements IAnnotationListExpression{
+public class AnnotationListVariableExpression extends AbstractAnnotationListExpression {
private String var;
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ActionVerbalizer.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ActionVerbalizer.java?rev=1723045&r1=1723044&r2=1723045&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ActionVerbalizer.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ActionVerbalizer.java Tue Jan 5 11:19:14 2016
@@ -43,6 +43,7 @@ import org.apache.uima.ruta.action.GetLi
import org.apache.uima.ruta.action.GreedyAnchoringAction;
import org.apache.uima.ruta.action.ImplicitFeatureAction;
import org.apache.uima.ruta.action.ImplicitMarkAction;
+import org.apache.uima.ruta.action.ImplicitVariableAssignmentAction;
import org.apache.uima.ruta.action.LogAction;
import org.apache.uima.ruta.action.MarkAction;
import org.apache.uima.ruta.action.MarkFastAction;
@@ -167,6 +168,8 @@ public class ActionVerbalizer {
return "";
} else if (action instanceof ImplicitFeatureAction) {
return "";
+ } else if (action instanceof ImplicitVariableAssignmentAction) {
+ return "";
}
return action.getClass().getSimpleName();
@@ -492,6 +495,9 @@ public class ActionVerbalizer {
} else if (action instanceof ImplicitFeatureAction) {
ImplicitFeatureAction a = (ImplicitFeatureAction) action;
return verbalizer.verbalize(a.getExpr());
+ } else if (action instanceof ImplicitVariableAssignmentAction) {
+ ImplicitVariableAssignmentAction a = (ImplicitVariableAssignmentAction) action;
+ return a.getVar() + a.getOp() + verbalizer.verbalize(a.getArg());
}
return action.getClass().getSimpleName();
Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java?rev=1723045&r1=1723044&r2=1723045&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java Tue Jan 5 11:19:14 2016
@@ -86,7 +86,99 @@ public class AnnotationVariableExpressio
assertNotNull("Feature value is null!", a);
assertEquals("Some", a.getCoveredText());
}
+
+ @Test
+ public void testImplicitAssignment() {
+ String document = "Some text.";
+ String script = "ANNOTATION a;";
+ script += "CW{-> a = CW};";
+ script += "a{-> T1};";
+ script += "W W{-> CREATE(Struct, \"a\"=a)};";
+
+ Map<String, String> typeMap = new TreeMap<String, String>();
+ String typeName = "Struct";
+ typeMap.put(typeName, "uima.tcas.Annotation");
+
+ Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
+ List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
+ featureMap.put(typeName, list);
+ String fn = "a";
+ list.add(new TestFeature(fn, "", "uima.tcas.Annotation"));
+
+ CAS cas = null;
+ try {
+ cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
+ Ruta.apply(cas, script);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ Type t = null;
+ AnnotationIndex<AnnotationFS> ai = null;
+ FSIterator<AnnotationFS> iterator = null;
+ AnnotationFS next = null;
+
+ RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Some");
+
+ t = cas.getTypeSystem().getType(typeName);
+ Feature f1 = t.getFeatureByBaseName(fn);
+ ai = cas.getAnnotationIndex(t);
+
+ assertEquals(1, ai.size());
+ iterator = ai.iterator();
+ next = iterator.next();
+ assertEquals("text", next.getCoveredText());
+ AnnotationFS a = (AnnotationFS) next.getFeatureValue(f1);
+ assertNotNull("Feature value is null!", a);
+ assertEquals("Some", a.getCoveredText());
+ }
+
+ @Test
+ public void testListImplicitAssignment() {
+ String document = "Some text.";
+ String script = "ANNOTATIONLIST as;";
+ script += "Document{-> as = W};";
+ script += "as{-> T1};";
+ script += "W W{-> CREATE(Struct, \"as\"=as)};";
+
+ Map<String, String> typeMap = new TreeMap<String, String>();
+ String typeName = "Struct";
+ typeMap.put(typeName, "uima.tcas.Annotation");
+ Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
+ List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
+ featureMap.put(typeName, list);
+ String fn = "as";
+ list.add(new TestFeature(fn, "", "uima.cas.FSArray"));
+
+ CAS cas = null;
+ try {
+ cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
+ Ruta.apply(cas, script);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ Type t = null;
+ AnnotationIndex<AnnotationFS> ai = null;
+ FSIterator<AnnotationFS> iterator = null;
+ AnnotationFS next = null;
+
+ RutaTestUtils.assertAnnotationsEquals(cas, 1, 2, "Some", "text");
+
+ t = cas.getTypeSystem().getType(typeName);
+ Feature f1 = t.getFeatureByBaseName(fn);
+ ai = cas.getAnnotationIndex(t);
+
+ assertEquals(1, ai.size());
+ iterator = ai.iterator();
+ next = iterator.next();
+ assertEquals("text", next.getCoveredText());
+ FSArray array = (FSArray) next.getFeatureValue(f1);
+ assertNotNull("Feature value is null!", array);
+ assertEquals(2, array.size());
+ }
+
@Test
public void testList() {
String document = "Some text.";
@@ -132,5 +224,4 @@ public class AnnotationVariableExpressio
assertNotNull("Feature value is null!", array);
assertEquals(2, array.size());
}
-
}
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=1723045&r1=1723044&r2=1723045&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 Jan 5 11:19:14 2016
@@ -870,6 +870,7 @@ listExpression returns [Expression expr
| (floatListExpression)=> e = floatListExpression {expr = e;}
| (stringListExpression)=> e = stringListExpression {expr = e;}
| (typeListExpression)=> e = typeListExpression {expr = e;}
+ | (annotationListExpression)=> e = annotationListExpression {expr = e;}
| (untypedListExpression)=> utl = untypedListExpression {expr = utl;}
;
@@ -1074,6 +1075,14 @@ variable returns [Expression var = null]
;
+variableAssignmentAction returns [RutaAction a = null]
+ :
+ var = variable op = ASSIGN_EQUAL arg = argument
+ {
+ a = ActionFactory.createAction(var, arg);
+ }
+ ;
+
listVariable returns [Expression var = null]
:
{isVariableOfType(input.LT(1).getText(), "BOOLEANLIST")
@@ -1082,6 +1091,7 @@ listVariable returns [Expression var = n
||isVariableOfType(input.LT(1).getText(), "DOUBLELIST")
||isVariableOfType(input.LT(1).getText(), "STRINGLIST")
||isVariableOfType(input.LT(1).getText(), "TYPELIST")
+ ||isVariableOfType(input.LT(1).getText(), "ANNOTATIONLIST")
}? v = Identifier {var=ExpressionFactory.createGenericVariableReference(v);}
;
@@ -1505,6 +1515,7 @@ result = ActionFactory.createEmptyAction
| a = actionAddRetainType
| a = actionRemoveFilterType
| a = actionRemoveRetainType
+ | (variableAssignmentAction)=> vae = variableAssignmentAction {a = vae;}
| (externalAction)=> a = externalAction
| (featureAssignmentExpression)=> fae = featureAssignmentExpression {a = ActionFactory.createAction(fae);}
| (typeExpression)=> te = typeExpression {a = ActionFactory.createAction(te);}
@@ -2587,15 +2598,18 @@ annotationExpression returns [Expression
{isVariableOfType(input.LT(1).getText(), "ANNOTATION")}?
id = Identifier {expr = ExpressionFactory.createAnnotationTypeVariableReference(id);}
|
- {isVariableOfType(input.LT(1).getText(), "ANNOTATIONLIST")}?
- id = Identifier {expr = ExpressionFactory.createAnnotationTypeVariableReference(id);}
+ ale = annotationListExpression {expr = ale;}
|
aae = annotationAddressExpression {expr = aae;}
|
ale = annotationLabelExpression {expr = ale;}
;
-
+annotationListExpression returns [Expression expr = null]
+ :
+ {isVariableOfType(input.LT(1).getText(), "ANNOTATIONLIST")}?
+ id = Identifier {expr = ExpressionFactory.createAnnotationTypeVariableReference(id);}
+ ;
annotationAddressExpression returns [Expression expr = null]
: