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 });
}