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/05 23:33:51 UTC

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

Author: mriou
Date: Wed Dec  5 14:33:49 2007
New Revision: 601553

URL: http://svn.apache.org/viewvc?rev=601553&view=rev
Log:
Support for try/catch, updated invoke to reflect latest discussions.

Removed:
    ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/SimPELTest.java
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=601553&r1=601552&r2=601553&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 Wed Dec  5 14:33:49 2007
@@ -7,7 +7,7 @@
 }
 tokens {
     PROCESS; PICK; SEQUENCE; FLOW; IF; ELSEIF; ELSE; WHILE; UNTIL; FOREACH; FORALL; INVOKE;
-    RECEIVE; REPLY; ASSIGN; THROW; WAIT; EXIT; TIMEOUT; 
+    RECEIVE; REPLY; ASSIGN; THROW; WAIT; EXIT; TIMEOUT; TRY; CATCH; CATCH_ALL;
     EXPR; EXT_EXPR; XML_LITERAL;
 }
 @parser::header {
@@ -66,20 +66,21 @@
 	:	funct | process;
 
 // Process
-process	:	'process' ID block -> ^(PROCESS ID block);
+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
+	:	(pick | flow | if_ex | while_ex | until_ex | foreach | forall | try_ex
 		| invoke | receive | reply | assign | throw_ex | wait_ex |  exit)+;
 		
-block	:	'{' process_stmt '}' -> ^(SEQUENCE process_stmt);
-
 // Structured activities
 pick	:	'pick' '{' receive* timeout* '}' -> ^(PICK receive* timeout*);
 timeout	:	'timeout' '(' expr ')' block -> ^(TIMEOUT expr block); 
 
 // TODO links
-flow	:	'parrallel' '{' exprs+=process_stmt '}' ('and' '{' exprs+=process_stmt '}')* -> ^(FLOW $exprs);
+flow	:	'parrallel' '{' exprs+=process_stmt '}' ('and' '{' exprs+=process_stmt '}')* 
+		-> ^(FLOW $exprs);
 
 if_ex	:	'if' '(' expr ')' block
 		('else if' '(' expr ')' block)?
@@ -90,12 +91,16 @@
 until_ex:	'do' block 'until' '(' expr ')' -> ^(UNTIL expr block);
 
 foreach	:	'for' '(' ID '=' init=expr ';' cond=expr ';' assign ')' block -> ^(FOREACH ID $init $cond assign block);
-forall	:	'forall' '(' ID '=' from=expr '..' to=expr ')' block -> ^(FORALL ID $from $to);
+forall	:	'forall' '(' ID '=' from=expr '..' to=expr ')' block -> ^(FORALL ID $from $to block);
+
+try_ex	:	'try' tb=block catch_ex* ('catch' '(' ID ')' cb=block)? -> ^(TRY $tb catch_ex* ^(CATCH_ALL ID $cb)?);
+		
+catch_ex:	'catch''(' ns_id ID ')' block -> ^(CATCH ns_id ID block);
 
 // Simple activities
-invoke	:	p=ID '.' o=ID '(' in=ID? ')' -> ^(INVOKE $p $o $in?);
+invoke	:	'invoke' '(' p=ID ',' o=ID (',' in=ID)? ')' -> ^(INVOKE $p $o $in?);
 
-receive	:	'receive' '(' p=ID ',' o=ID ')' ('(' m=ID ')')? block? -> ^(RECEIVE $p $o $m? block?);
+receive	:	'receive' '(' p=ID ',' o=ID (',' m=ID)? ')' block? -> ^(RECEIVE $p $o $m? block?);
 
 reply	:	'reply' '(' ID ')' -> ^(REPLY ID);
 
@@ -120,6 +125,8 @@
 aexpr	:	mexpr (('+'|'-') ^ mexpr)*;
 mexpr	:	atom (('*'|'/') ^ atom)* | STRING;
 atom	:	ID | INT | '(' s_expr ')' -> s_expr;
+
+ns_id	:	(ID '::')? ID;
 
 // In-line XML
 

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=601553&r1=601552&r2=601553&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 Wed Dec  5 14:33:49 2007
@@ -32,7 +32,7 @@
 process	:	^(PROCESS ID block) { System.out.println("PROCESS " + $ID.text); };
 
 process_stmt
-	:	(pick | sequence | flow | if_ex | while_ex | until_ex | foreach | forall
+	:	(pick | sequence | flow | if_ex | while_ex | until_ex | foreach | forall | try_ex
 		| invoke | receive | reply | assign | throw_ex | wait_ex |  exit)+;
 		
 block	:	^(SEQUENCE process_stmt);
@@ -54,6 +54,12 @@
 
 foreach	:	^(FOREACH ID init=expr cond=expr assign block);
 forall	:	^(FORALL ID from=expr to=expr);
+
+try_ex	:	^(TRY block catch_ex* catch_all?);
+catch_all
+	:	^(CATCH_ALL ID block);
+		
+catch_ex:	^(CATCH ID ID block);
 
 // Simple activities
 invoke	:	^(INVOKE p=ID o=ID in=ID?);

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=601553&r1=601552&r2=601553&view=diff
==============================================================================
--- ode/sandbox/simpel/src/test/resources/compile-tests-ok.simpel (original)
+++ ode/sandbox/simpel/src/test/resources/compile-tests-ok.simpel Wed Dec  5 14:33:49 2007
@@ -5,23 +5,47 @@
 #
 
 process ReceiveReply {
-  receive(my_pl, start_op) (msg_in) {
+  receive(my_pl, start_op, msg_in) {
     reply(msg_in)
   }
 }
 
 #=============================================================
+# Basic async receive / invoke
+#
+
+process ReceiveInvoke {
+  msg_in = receive(my_pl, start_op)
+  invoke(other_pl, other_op, msg_in)
+}
+
+#=============================================================
 # Hello World (basic assignment)
 #
 
 process HelloWorld {
-  receive(my_pl, hello_op) (msg_in) {
+  receive(my_pl, hello_op, msg_in) {
     msg_out = msg_in + " World"
     reply(msg_out)
   }
 }
 
 #=============================================================
+# Try / catch / catch all
+#
+
+process TryCatch {
+  msg_in = receive(my_pl, start_op)
+  try {
+    invoke(other_pl, other_op, msg_in)
+  } catch(SomeFault f1) {
+    invoke(fault_pl, inform_f1, f1)
+  } catch(f2) {
+    invoke(fault_pl, inform_fault, f2)
+  }
+}
+
+#=============================================================
 # External Counter
 #
 
@@ -29,10 +53,10 @@
    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) {
-      partner_pl.partner_start_op(msg_in)
+      invoke(partner_pl, partner_start_op, msg_in)
       resp = receive(partner_pl, partner_reply_op)
     }
     reply(resp)