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 2017/07/06 15:52:16 UTC
svn commit: r1801075 - in /uima/ruta/trunk/ruta-core/src:
main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
test/java/org/apache/uima/ruta/block/ForEachBlockTest.java
Author: pkluegl
Date: Thu Jul 6 15:52:16 2017
New Revision: 1801075
URL: http://svn.apache.org/viewvc?rev=1801075&view=rev
Log:
UIMA-5457 - fix block stack in parser
Modified:
uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.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=1801075&r1=1801074&r2=1801075&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 Thu Jul 6 15:52:16 2017
@@ -68,6 +68,7 @@ import org.apache.uima.ruta.RutaEnvironm
import org.apache.uima.ruta.RutaModule;
import org.apache.uima.ruta.RutaScriptFactory;
import org.apache.uima.ruta.RutaStatement;
+import org.apache.uima.ruta.block.ForEachBlock;
import org.apache.uima.ruta.block.RutaBlock;
import org.apache.uima.ruta.block.RutaScriptBlock;
import org.apache.uima.ruta.expression.AnnotationTypeExpression;
@@ -519,7 +520,7 @@ statement returns [RutaStatement stmt =
| stmtAM = macroActionDeclaration {stmt = stmtAM;}
| stmtRule = simpleStatement {stmt = stmtRule;}
| stmtBlock = blockDeclaration {stmt = stmtBlock;}
- | stmtBlock = forEachDeclaration {stmt = stmtBlock;}
+ //| stmtBlock = forEachDeclaration {stmt = stmtBlock;}
| stmtExternal = externalBlock {stmt = stmtExternal;}
)
;
@@ -727,6 +728,7 @@ scope {
RutaBlock env;
}
@init{
+Map<String,String> def = new LinkedHashMap<>();
RutaRuleElement re = null;
RuleElementIsolator container = null;
level++;
@@ -736,11 +738,23 @@ level--;
}
:
- type = BlockString
+ ((
+ type = (BlockString)
LPAREN
id = Identifier
RPAREN
{block = factory.createScriptBlock(id, re, body, $blockDeclaration[level - 1]::env);}
+ )
+ |
+ (
+ type = ForEachString
+ LPAREN
+ id = Identifier (COMMA direction = booleanExpression)?
+ RPAREN
+ {block = factory.createForEachBlock(id, direction, re, body, $blockDeclaration[level - 1]::env);}
+ ))
+
+
{$blockDeclaration::env = block;
container = new RuleElementIsolator();}
re1 = ruleElementWithCA[container]
@@ -748,13 +762,17 @@ level--;
{RutaRule rule = factory.createRule(re, block);
block.setRule(rule);
container.setContainer(rule);
- }
+ }
+ {if(block instanceof ForEachBlock) def.put(id.getText(),RutaConstants.RUTA_VARIABLE_ANNOTATION);}
+ {if(block instanceof ForEachBlock) addTemporaryVariables(def);}
LCURLY body = statements RCURLY
+ {if(block instanceof ForEachBlock) removeTemporaryVariables(def);}
+
{block.setElements(body);
$blockDeclaration::env.getScript().addBlock(id.getText(),block);
}
;
-
+/*
forEachDeclaration returns [RutaBlock block = null]
options {
backtrack = true;
@@ -780,6 +798,8 @@ level--;
RPAREN
{block = factory.createForEachBlock(id, direction, re, body, $blockDeclaration[level - 1]::env);}
{$blockDeclaration::env = block;
+ //$blockDeclaration::env = block;
+
container = new RuleElementIsolator();}
re1 = ruleElementWithCA[container]
{re = re1; }
@@ -795,6 +815,7 @@ level--;
{$blockDeclaration::env = block.getParent();}
}
;
+ */
externalBlock returns [RutaBlock block = null]
options {
Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java?rev=1801075&r1=1801074&r2=1801075&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java Thu Jul 6 15:52:16 2017
@@ -208,6 +208,24 @@ public class ForEachBlockTest {
cas.release();
}
+ @Test
+ public void testWithContainingBlock() throws Exception {
+ String script = "";
+ script += "FOREACH(num) NUM{} {\n";
+ script += "BLOCK(onlyNum) num{}{\n";
+ script += "(num NUM){-> T1};\n";
+ script += "num{-> T2};\n";
+ script += "}\n";
+ script += "}\n";
+
+ CAS cas = RutaTestUtils.getCAS("1 22 333");
+ Ruta.apply(cas, script);
+
+ RutaTestUtils.assertAnnotationsEquals(cas, 1, 0);
+ RutaTestUtils.assertAnnotationsEquals(cas, 2, 3, "1", "22", "333");
+ cas.release();
+ }
+
}