You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mr...@apache.org on 2007/12/11 07:27:07 UTC

svn commit: r603154 - in /ode/sandbox/simpel/src: main/antlr/org/apache/ode/simpel/antlr/SimPEL.g main/antlr/org/apache/ode/simpel/antlr/SimPELWalker.g test/resources/compile-tests-ok.simpel

Author: mriou
Date: Mon Dec 10 22:27:06 2007
New Revision: 603154

URL: http://svn.apache.org/viewvc?rev=603154&view=rev
Log:
Finally nailed down that annoying receive. Was a non LL(*) rule because of the block and non block forms and backtracking was messing up with XML literals.

Modified:
    ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPEL.g
    ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPELWalker.g
    ode/sandbox/simpel/src/test/resources/compile-tests-ok.simpel

Modified: ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPEL.g
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPEL.g?rev=603154&r1=603153&r2=603154&view=diff
==============================================================================
--- ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPEL.g (original)
+++ ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPEL.g Mon Dec 10 22:27:06 2007
@@ -8,8 +8,8 @@
 tokens {
     PROCESS; PICK; SEQUENCE; FLOW; IF; ELSEIF; ELSE; WHILE; UNTIL; FOREACH; FORALL; INVOKE;
     RECEIVE; REPLY; ASSIGN; THROW; WAIT; EXIT; TIMEOUT; TRY; CATCH; CATCH_ALL; SCOPE; EVENT;
-    ALARM; COMPENSATION; COMPENSATE; CORRELATION; CORR_MAP; PARTNERLINK; VARIABLE;
-    EXPR; EXT_EXPR; XML_LITERAL;
+    ALARM; COMPENSATION; COMPENSATE; CORRELATION; CORR_MAP; PARTNERLINK; VARIABLE; BLOCK_PARAM; 
+    EXPR; EXT_EXPR; XML_LITERAL; CALL;
 }
 @parser::header {
 package org.apache.ode.simpel.antlr;
@@ -63,6 +63,23 @@
     public void displayRecognitionError(String[] tokenNames, RecognitionException e) {
     	el.reportRecognitionError(tokenNames, e.line, getErrorMessage(e, tokenNames), e);
     }
+    
+    public String getErrorMessage(RecognitionException e, String[] tokenNames) {
+	List stack = getRuleInvocationStack(e, this.getClass().getName());
+    	String msg = null;
+    	if ( e instanceof NoViableAltException ) {
+       	    NoViableAltException nvae = (NoViableAltException)e;
+       	    msg = " no viable alt; token="+e.token+" (decision="+nvae.decisionNumber+" state "+nvae.stateNumber+")"+
+                  " decision=<<"+nvae.grammarDecisionDescription+">>";
+        } else {
+           msg = super.getErrorMessage(e, tokenNames);
+        }
+        return stack+" "+msg;
+    }
+    
+    public String getTokenErrorDisplay(Token t) {
+        return t.toString();
+    }
 }
 
 // MAIN BPEL SYNTAX
@@ -74,12 +91,14 @@
 // Process
 process	:	'process' ns_id block -> ^(PROCESS ns_id block);
 
-block	:	'{' process_stmt '}' -> ^(SEQUENCE process_stmt);
-
 process_stmt
 	:	(pick | flow | if_ex | while_ex | until_ex | foreach | forall | try_ex | scope_ex
 		| receive | ((invoke | reply | assign | throw_ex | wait_ex |  exit
 		| variables) SEMI!) )+;
+
+block	:	'{' process_stmt '}' -> ^(SEQUENCE process_stmt);
+param_block
+	:	'{' ('|' in+=ID (',' in+=ID)* '|')? process_stmt '}' -> ^($in process_stmt);
 		
 // Structured activities
 pick	:	'pick' '{' receive* timeout* '}' -> ^(PICK receive* timeout*);
@@ -108,7 +127,7 @@
 scope_stmt
 	:	event | alarm | compensation;
 
-event	:	'event' '(' p=ID ',' o=ID ',' m=ID ')' block -> ^(EVENT $p $o $m block);
+event	:	'event' '(' p=ID ',' o=ID ')' param_block -> ^(EVENT $p $o param_block);
 alarm	:	'alarm' '(' expr ')' block -> ^(ALARM expr block);
 compensation
 	:	'compensation' block -> ^(COMPENSATION block);
@@ -116,17 +135,16 @@
 // Simple activities
 invoke	:	'invoke' '(' p=ID ',' o=ID (',' in=ID)? ')' -> ^(INVOKE $p $o $in?);
 
-receive	:	receive_block | (receive_stmt SEMI!);
-receive_block
-	:	'receive' '(' p=ID ',' o=ID (',' m=ID)? (',' correlation)? ')' block -> ^(RECEIVE $p $o $m? correlation? block);
-receive_stmt
-	:	'receive' '(' p=ID ',' o=ID (',' m=ID)? (',' correlation)? ')' -> ^(RECEIVE $p $o $m? correlation?);
+receive	:	receive_base (param_block | SEMI) -> ^(RECEIVE receive_base param_block?);
+receive_base
+	:	'receive' '(' p=ID ',' o=ID (',' correlation)? ')' -> ^($p $o correlation?);
 
 reply	:	'reply' '(' ID ')' -> ^(REPLY ID);
 
 assign	:	ID '=' rvalue -> ^(ASSIGN ID rvalue);
 rvalue
-	:	 receive_block | receive_stmt | invoke | expr | xml_literal;
+	:	 receive_base -> ^(RECEIVE receive_base)
+		| invoke | expr | xml_literal;
 	
 throw_ex:	'throw' '('ID')' -> ^(THROW ID);
 
@@ -145,17 +163,19 @@
 
 partner_link
 	:	'partnerLink' pl+=ID (',' pl+=ID)* -> ^(PARTNERLINK $pl);
-// TODO This will not work for any function whose code contains braces
+
 correlation
 	:	'{' corr_mapping (',' corr_mapping)* '}' -> ^(CORRELATION corr_mapping*);
 corr_mapping
-	:	f1=ID ':' f2=ID '(' v=ID ')' -> ^(CORR_MAP $f1 $f2 $v);
+	:	f1=ID ':' expr -> ^(CORR_MAP $f1 expr);
 
 funct	:	'function'^ f=ID '(' ID? (','! ID)* ')' js_block;
 
 // Expressions
-expr	:	s_expr | EXT_EXPR;
+expr	:	s_expr | EXT_EXPR | funct_call;
 
+funct_call
+	:	p+=ID '(' p+=ID* ')' -> ^(CALL ID+);
 s_expr	:	condExpr;
 condExpr:	aexpr ( ('==' ^|'!=' ^|'<' ^|'>' ^|'<=' ^|'>=' ^) aexpr )?;
 aexpr	:	mexpr (('+'|'-') ^ mexpr)*;

Modified: ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPELWalker.g
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPELWalker.g?rev=603154&r1=603153&r2=603154&view=diff
==============================================================================
--- ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPELWalker.g (original)
+++ ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPELWalker.g Mon Dec 10 22:27:06 2007
@@ -22,6 +22,24 @@
     public void displayRecognitionError(String[] tokenNames, RecognitionException e) {
     	el.reportRecognitionError(tokenNames, e.line, getErrorMessage(e, tokenNames), e);
     }
+    
+    public String getErrorMessage(RecognitionException e, String[] tokenNames) {
+	List stack = getRuleInvocationStack(e, this.getClass().getName());
+    	String msg = null;
+    	if ( e instanceof NoViableAltException ) {
+       	    NoViableAltException nvae = (NoViableAltException)e;
+       	    msg = " no viable alt; token="+e.token+" (decision="+nvae.decisionNumber+" state "+nvae.stateNumber+")"+
+                  " decision=<<"+nvae.grammarDecisionDescription+">>";
+        } else {
+           msg = super.getErrorMessage(e, tokenNames);
+        }
+        return stack+" "+msg;
+    }
+    
+    public String getTokenErrorDisplay(Token t) {
+        return t.toString();
+    }
+
 }
 
 program	:	declaration+;
@@ -37,6 +55,8 @@
 		| variable)+;
 		
 block	:	^(SEQUENCE process_stmt);
+param_block
+	:	^(ID* process_stmt);
 
 // Structured activities
 pick	:	^(PICK receive* timeout*);
@@ -66,7 +86,7 @@
 scope_stmt
 	:	event | alarm | compensation;
 
-event	:	^(EVENT ID ID ID block);
+event	:	^(EVENT ID ID ID param_block);
 alarm	:	^(ALARM expr block);
 compensation
 	:	^(COMPENSATION block);
@@ -74,8 +94,8 @@
 // Simple activities
 invoke	:	^(INVOKE p=ID o=ID in=ID?);
 
-receive	:	^(RECEIVE p=ID o=ID m=ID? correlation? block?);
-
+receive	:	^(RECEIVE ^(ID ID correlation?) param_block?);
+	
 reply	:	^(REPLY ID);
 
 assign	:	^(ASSIGN ID rvalue);
@@ -96,9 +116,7 @@
 correlation
 	:	^(CORRELATION corr_mapping*);
 corr_mapping
-	:	^(CORR_MAP ID ID ID);
-
-function:	^(FUNCTION ID);
+	:	^(CORR_MAP ID expr);
 
 // XML
 xmlElement
@@ -112,8 +130,11 @@
 	:	XML_COMMENT | XML_CDATA | XML_PI;
 
 // Expressions
-expr	:	s_expr | EXT_EXPR;
+expr	:	s_expr | EXT_EXPR | funct_call;
 
+funct_call
+	:	^(CALL ID*);
+	
 s_expr	:	^('==' s_expr s_expr) 
 	|	^('!=' s_expr s_expr) 
 	|	^('<' s_expr s_expr) 

Modified: ode/sandbox/simpel/src/test/resources/compile-tests-ok.simpel
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/src/test/resources/compile-tests-ok.simpel?rev=603154&r1=603153&r2=603154&view=diff
==============================================================================
--- ode/sandbox/simpel/src/test/resources/compile-tests-ok.simpel (original)
+++ ode/sandbox/simpel/src/test/resources/compile-tests-ok.simpel Mon Dec 10 22:27:06 2007
@@ -5,12 +5,27 @@
 #
 
 process ReceiveReply {
-  receive(my_pl, start_op, msg_in) {
+  receive(my_pl, start_op) { |msg_in|
     reply(msg_in);
   }
 }
 
 #=============================================================
+# Static XML
+#
+
+process StaticXML {
+  receive(my_pl, start_op) { |msg_in|
+    resp = <root><count start="0">0</count></root>;
+    while(resp < 10) {
+      invoke(partner_pl, partner_start_op, msg_in);
+      resp = receive(partner_pl, partner_reply_op);
+    }
+    reply(resp);
+  }
+}
+
+#=============================================================
 # Basic async receive / invoke
 #
 
@@ -26,7 +41,7 @@
 process VariableDecl {
   msg_in = receive(my_pl, start_op);
   var temp unique;
-#  temp = [$msg_in.part/count + 2]
+  temp = [$msg_in.part/count + 2];
   invoke(other_pl, other_op, temp);
 }
 
@@ -51,7 +66,7 @@
   msg_in = receive(my_pl, start_op);
   scope {
     wait([PT60S]);
-  } event(stop_pl, stop, msg) {
+  } event(stop_pl, stop) { |msg|
     exit;
   }
 }
@@ -79,7 +94,7 @@
     wait([PT60S]);
   } alarm([PT60S]) {
     exit;
-  } event(stop_pl, stop, msg) {
+  } event(stop_pl, stop) { |msg|
     exit;
   } compensation {
     invoke(pl, op, msg);
@@ -91,7 +106,7 @@
 #
 
 process HelloWorld {
-  receive(my_pl, hello_op, msg_in) {
+  receive(my_pl, hello_op) { |msg_in|
     msg_out = msg_in + " World";
     reply(msg_out);
   }
@@ -122,7 +137,7 @@
    return (p1 + p2 < 10);
 }
 process ExternalCounter {
-  receive(my_pl, start_op, msg_in) {
+  receive(my_pl, start_op) { |msg_in|
     resp = <root><count start="0">0</count></root>;
     while(resp < 10) {
       invoke(partner_pl, partner_start_op, msg_in);
@@ -144,7 +159,9 @@
   orderMsg = receive(my_pl, start_op);
 
   # The correlation implies orderId(incoming_msg) == orderId(init_msg)
-  receive(my_pl, corr_op, {orderId: orderId(orderMsg)});
+  var oid unique;
+  oid = orderId(orderMsg);
+  receive(my_pl, corr_op, {orderId: oid});
 }
 
 #=============================================================
@@ -169,9 +186,9 @@
 
   # The correlation implies orderIdFromShippment(incoming_msg) == orderIdFromOrder(order_msg)
   # and shipIdFromShippment(incoming_msg) == shipIdFromOrder(order_msg),
-  receive(my_pl, corr_op, {
-    orderIdFromShippment: orderIdFromOrder(order_msg),
-    shipIdFromShippment: shipIdFromOrder(order_msg)
-  });
+  var oid unique, shipId unique;
+  oid = orderIdFromOrder(order_msg);
+  shipId = shipIdFromOrder(order_msg);
+  receive(my_pl, corr_op, { orderIdFromShippment: oid, shipIdFromShippment: shipId });
 }