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/18 20:48:58 UTC
svn commit: r605313 - in /ode/sandbox/simpel/src:
main/antlr/org/apache/ode/simpel/antlr/ test/java/org/apache/ode/simpel/
test/resources/
Author: mriou
Date: Tue Dec 18 11:48:56 2007
New Revision: 605313
URL: http://svn.apache.org/viewvc?rev=605313&view=rev
Log:
Added loan approval example from the BPEL spec, several small fixes on the grammar come with it around namespaces, try/catch and path expressions.
Added:
ode/sandbox/simpel/src/test/resources/loan-approval.simpel
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/java/org/apache/ode/simpel/SimPELCompilerTest.java
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=605313&r1=605312&r2=605313&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 Tue Dec 18 11:48:56 2007
@@ -10,7 +10,7 @@
RECEIVE; REPLY; ASSIGN; THROW; WAIT; EXIT; TIMEOUT; TRY; CATCH; CATCH_ALL; SCOPE; EVENT;
ALARM; COMPENSATION; COMPENSATE; CORRELATION; CORR_MAP; PARTNERLINK; VARIABLE; BLOCK_PARAM;
SIGNAL; JOIN;
- EXPR; EXT_EXPR; XML_LITERAL; CALL;
+ EXPR; EXT_EXPR; XML_LITERAL; CALL; NAMESPACE; NS; PATH;
}
@parser::header {
package org.apache.ode.simpel.antlr;
@@ -87,7 +87,7 @@
program : declaration+;
declaration
- : funct | process;
+ : funct | process | namespace;
// Process
process : 'process' ns_id block -> ^(PROCESS ns_id block);
@@ -97,6 +97,9 @@
| receive | ((invoke | reply | assign | throw_ex | wait_ex | exit | signal | join
| variables) SEMI!) )+;
+namespace
+ : 'namespace' ID '=' STRING SEMI -> ^(NAMESPACE ID STRING);
+
block : '{' process_stmt '}' -> ^(SEQUENCE process_stmt);
param_block
: '{' ('|' in+=ID (',' in+=ID)* '|')? process_stmt '}' -> ^($in process_stmt);
@@ -121,9 +124,8 @@
foreach : 'for' '(' ID '=' init=expr ';' cond=expr ';' assign ')' block -> ^(FOREACH ID $init $cond assign block);
forall : 'forall' '(' ID '=' from=expr 'to' 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);
+try_ex : 'try' tb=block catch_ex* -> ^(TRY $tb catch_ex*);
+catch_ex: 'catch' '(' ns_id ')' param_block -> ^(CATCH ns_id param_block);
scope_ex: 'scope' ('(' ID ')')? block scope_stmt* -> ^(SCOPE ID? block scope_stmt*);
scope_stmt
@@ -141,9 +143,9 @@
receive_base
: 'receive' '(' p=ID ',' o=ID (',' correlation)? ')' -> ^($p $o correlation?);
-reply : 'reply' '(' ID ')' -> ^(REPLY ID);
+reply : 'reply' '(' ID (',' ID ',' ID)? ')' -> ^(REPLY ID (ID ID)?);
-assign : ID '=' rvalue -> ^(ASSIGN ID rvalue);
+assign : path_expr '=' rvalue -> ^(ASSIGN ID rvalue);
rvalue
: receive_base -> ^(RECEIVE receive_base)
| invoke | expr | xml_literal;
@@ -182,9 +184,11 @@
condExpr: aexpr ( ('==' ^|'!=' ^|'<' ^|'>' ^|'<=' ^|'>=' ^) aexpr )?;
aexpr : mexpr (('+'|'-') ^ mexpr)*;
mexpr : atom (('*'|'/') ^ atom)* | STRING;
-atom : ID | INT | '(' s_expr ')' -> s_expr;
+atom : path_expr | INT | '(' s_expr ')' -> s_expr;
+path_expr
+ : pelmt+=ID ('.' pelmt+=ID)* -> ^(PATH $pelmt);
-ns_id : (ID '::')? ID;
+ns_id : (pr=ID '::')? loc=ID -> ^(NS $pr? $loc);
// In-line XML
@@ -205,7 +209,7 @@
// Basic tokens
VAR_MODS: 'unique' | 'external' | ('string' | 'int' | 'float');
SEMI : ';';
-ID : (LETTER | '_' ) (LETTER | DIGIT | '_' )*;
+ID : (LETTER | '_' ) (LETTER | DIGIT | '_' | '-' )*;
INT : (DIGIT )+ ;
STRING : '"' ( ESCAPE_SEQ | ~('\\'|'"') )* '"';
ESCAPE_SEQ
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=605313&r1=605312&r2=605313&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 Tue Dec 18 11:48:56 2007
@@ -44,10 +44,13 @@
program : declaration+;
declaration
- : process;
+ : process | namespace;
+
+namespace
+ : ^(NAMESPACE ID STRING);
// Process
-process : ^(PROCESS ID block) { System.out.println("PROCESS " + $ID.text); };
+process : ^(PROCESS ^(NS pr=ID? nm=ID) block) { System.out.println("PROCESS " + $nm.text); };
process_stmt
: (pick | sequence | flow | if_ex | while_ex | until_ex | foreach | forall | try_ex | scope_ex
@@ -79,11 +82,8 @@
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);
+try_ex : ^(TRY block catch_ex*);
+catch_ex: ^(CATCH ^(NS ID ID?) param_block);
scope_ex: ^(SCOPE ID? block scope_stmt*);
scope_stmt
@@ -99,7 +99,7 @@
receive : ^(RECEIVE ^(ID ID correlation?) param_block?);
-reply : ^(REPLY ID);
+reply : ^(REPLY ID (ID ID)?);
assign : ^(ASSIGN ID rvalue);
rvalue
@@ -137,7 +137,9 @@
funct_call
: ^(CALL ID*);
-
+path_expr
+ : ^(PATH ID*);
+
s_expr : ^('==' s_expr s_expr)
| ^('!=' s_expr s_expr)
| ^('<' s_expr s_expr)
@@ -148,4 +150,4 @@
| ^('-' s_expr s_expr)
| ^('*' s_expr s_expr)
| ^('/' s_expr s_expr)
- | ID | INT | STRING;
+ | path_expr | INT | STRING;
Modified: ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/SimPELCompilerTest.java
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/SimPELCompilerTest.java?rev=605313&r1=605312&r2=605313&view=diff
==============================================================================
--- ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/SimPELCompilerTest.java (original)
+++ ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/SimPELCompilerTest.java Tue Dec 18 11:48:56 2007
@@ -80,6 +80,27 @@
}
}
+ public void testLoanApproval() throws Exception {
+ BufferedReader reader = new BufferedReader(new FileReader(
+ getClass().getClassLoader().getResource("loan-approval.simpel").getFile()));
+
+ String line;
+ StringBuffer processText = new StringBuffer();
+ while ((line = reader.readLine()) != null) processText.append(line).append("\n");
+
+ TestErrorListener l = new TestErrorListener();
+ SimPELCompiler comp = new SimPELCompiler();
+ comp.setErrorListener(l);
+
+ comp.compileProcess(processText.toString());
+
+ if (l.messages.toString().length() > 0) {
+ System.out.println("Loan approval failed to compile:\n");
+ System.out.println(l.messages.toString());
+ fail("There were failures.");
+ }
+ }
+
private static class TestErrorListener implements ErrorListener {
public StringBuffer messages = new StringBuffer();
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=605313&r1=605312&r2=605313&view=diff
==============================================================================
--- ode/sandbox/simpel/src/test/resources/compile-tests-ok.simpel (original)
+++ ode/sandbox/simpel/src/test/resources/compile-tests-ok.simpel Tue Dec 18 11:48:56 2007
@@ -120,12 +120,28 @@
msg_in = receive(my_pl, start_op);
try {
invoke(other_pl, other_op, msg_in);
- } catch(SomeFault f1) {
+ } catch(SomeFault) { |f1|
invoke(fault_pl, inform_f1, f1);
- } catch(OtherFault f2) {
+ } catch(OtherFault) { |f2|
invoke(fault_pl, inform_f2, f2);
- } catch(unknown) {
- invoke(fault_pl, inform_unknown_fault, unknown);
+ } catch(unknown) { |f3|
+ invoke(fault_pl, inform_unknown_fault, f3);
+ }
+}
+
+#=============================================================
+# Namespaces
+#
+
+namespace pns = "ns:process";
+namespace fns = "ns:fault";
+
+process pns::NamespacesProcess {
+ msg_in = receive(my_pl, start_op);
+ try {
+ invoke(other_pl, other_op, msg_in);
+ } catch(fns::SomeFault) { |f1|
+ invoke(fault_pl, inform_f1, f1);
}
}
@@ -220,5 +236,20 @@
} and {
join(branch1, branch2, [$branch1 and $branch2]);
invoke(partner_done_pl, partner_done_op, orderMsg);
+ }
+}
+
+#=============================================================
+# Naming Conflicts
+#
+
+process NamingConflicts {
+ try {
+ parrallel {
+ receive_var = receive(receive_pl, receive_op);
+ signal(receive_done, [$foo > 1]);
+ }
+ } catch(foons::Foo) { |foo_var|
+ invoke(pl, op, foo_var);
}
}
Added: ode/sandbox/simpel/src/test/resources/loan-approval.simpel
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/src/test/resources/loan-approval.simpel?rev=605313&view=auto
==============================================================================
--- ode/sandbox/simpel/src/test/resources/loan-approval.simpel (added)
+++ ode/sandbox/simpel/src/test/resources/loan-approval.simpel Tue Dec 18 11:48:56 2007
@@ -0,0 +1,30 @@
+namespace lns = "http://example.com/loan-approval/wsdl/";
+namespace pns = "http://example.com/loan-approval";
+
+process pns::LoanApproval {
+ try {
+ parrallel {
+ request = receive(customer, request);
+ signal(receive-to-assess, [$request.amount < 10000]);
+ signal(receive-to-approval, [$request.amount >= 10000]);
+ } and {
+ join(receive-to-assess);
+ risk = invoke(assessor, check);
+ signal(assess-to-setMessage, [$risk.level = 'low']);
+ signal(assess-to-approval, [$risk.level != 'low']);
+ } and {
+ join(assess-to-setMessage);
+ approval.accept = "yes";
+ signal(setMessage-to-reply);
+ } and {
+ join(receive-to-approval, assess-to-approval);
+ invoke(approver, approve);
+ signal(approval-to-reply);
+ } and {
+ join(approval-to-reply, setMessage-to-reply);
+ reply(customer, request, approval);
+ }
+ } catch(lns::loanProcessFault) { |error|
+ reply(customer, request, error);
+ }
+}
\ No newline at end of file