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