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