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)