From 28af8898fc360101b3de4945491b8d38fe3ac768 Mon Sep 17 00:00:00 2001 From: Andrea Enrici <andrea.enrici@nokia.com> Date: Tue, 25 Aug 2015 10:12:28 +0000 Subject: [PATCH] modified so as to parse declaration of attributes without = and messages with numbers --- src/compiler/tmlCPparser/CPparser.jjt | 49 ++++++++++++++------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/src/compiler/tmlCPparser/CPparser.jjt b/src/compiler/tmlCPparser/CPparser.jjt index 7d9840fc05..43f8312115 100644 --- a/src/compiler/tmlCPparser/CPparser.jjt +++ b/src/compiler/tmlCPparser/CPparser.jjt @@ -128,7 +128,7 @@ TOKEN: | < MATH_SMALLER: "<" > | < MATH_GREATER: ">" > | < SEQUENCING_OP: ";" > -| < STAR_OP: "*" > +| < MATH_MULT: "*" > | < MATH_PLUS: "+" > | < MATH_MINUS: "-" > | < DOT: "." > @@ -150,7 +150,7 @@ TOKEN: | < END_AD: "><" > //| < ORDEROPERATOR: <SEQUENCING_OP> | <PARALLELISM_OP> > | < EOL: ("\n" | "\r" | "\r\n") > -| < RIGHT_SLASH: "/" > +| < MATH_DIV: "/" > | < QUOTATION_MARK: "\"" > } @@ -172,7 +172,6 @@ TOKEN: | < #DECIMAL_LITERAL: ["0"-"9"] (["0"-"9"])* > } - /* List of productions defining the non-terminals. They are implemented as methods of the above parser class*/ /* Root production. */ ASTStartSymbol StartSymbol(): /* The left hand side of this production is called Input and must be followed by colon */ @@ -180,7 +179,7 @@ ASTStartSymbol StartSymbol(): /* The left hand side of this production is called int i; String space = " "; String undefinedDiagStringList = ""; - TMLCP topCP = new TMLCP(); + TMLCP topCP = new TMLCP( "noName" ); TMLCPSequenceDiagram seqDiag; TMLCPActivityDiagram actDiag; ArrayList<TMLAttribute> attributeList; @@ -256,13 +255,13 @@ Sequence Diagram Section ArrayList<TMLAttribute> SequenceDiagramAttributesDeclaration(): { - String instanceName, attributeName, attributeType; - Token t, t1; + String seqDiagName, instanceName, attributeName, attributeType; + Token t, t1 = new Token(); ArrayList<TMLAttribute> attributeList = new ArrayList<TMLAttribute>(); } { - ( instanceName = ID() "." attributeName = ID() ":" ( t = <BOOL_TYPE> | t = <INT_TYPE> ) - <ASSIGNMENT> ( t1 = <IDENTIFIER> | t1 = <INTEGER_LITERAL> | t1 = <FALSECONST> | t1 = <TRUECONST> ) + ( seqDiagName = ID() "." instanceName = ID() "." attributeName = ID() ":" ( t = <BOOL_TYPE> | t = <INT_TYPE> ) + ( <ASSIGNMENT> ( t1 = <IDENTIFIER> | t1 = <INTEGER_LITERAL> | t1 = <FALSECONST> | t1 = <TRUECONST> ) )? { if( t.image.equals("int") ) { attributeList.add( new TMLAttribute( attributeName, instanceName, new TMLType ( TMLType.NATURAL ), t1.image ) ); @@ -330,13 +329,18 @@ TMLSDInstance SequenceDiagramInstance( ArrayList<TMLAttribute> attributeList ): { return instance; } } +//message parameters can be integer values or strings ArrayList<String> MessageParameters(): { String s; ArrayList<String> params = new ArrayList<String>(); } { - ( "()" | "(" s = ID() { params.add(s); } ( "," s = ID() { params.add(s); } )* ")" ) + ( + "()" + | + "(" ( <INTEGER_LITERAL> "," )* s = ID() { params.add(s); } ( "," ( s = ID() { params.add(s); } | <INTEGER_LITERAL> ) )* ")" + ) { return params; } @@ -364,24 +368,11 @@ String MAExpression(): //MA stands for Mathematical Action s = MATerm() s1 = MAExpressionPrime() { return s + s1; } } -String MAExpressionPrime(): -{ - String s, s1; -} -{ - <MATH_PLUS> s = MATerm() s1 = MAExpressionPrime() { return " + " + s + " " + s1; } -| <MATH_MINUS> s = MATerm() s1 = MAExpressionPrime() { return " - " + s + " " + s1; } -| <RIGHT_SLASH> s = MATerm() s1 = MAExpressionPrime() { return " / " + s + " " + s1; } -| <STAR_OP> s = MATerm() s1 = MAExpressionPrime() { return " * " + s + " " + s1; } -| {} { return ""; } -} - String MATerm(): { String s, s1; } { - //MAFactor() MATermPrime() s = MAFactor() s1 = MATermPrime() { return s + s1; } } @@ -391,7 +382,7 @@ String MATermPrime(): } { s = MAFactor() s1 = MATermPrime() { return s + s1; } -| {} { return ""; } + | {} { return ""; } } String MAFactor(): @@ -407,6 +398,18 @@ String MAFactor(): t = <INTEGER_LITERAL> { return t.image; } } +String MAExpressionPrime(): +{ + String s, s1; +} +{ + <MATH_PLUS> s = MATerm() s1 = MAExpressionPrime() { return " + " + s + " " + s1; } +| <MATH_MINUS> s = MATerm() s1 = MAExpressionPrime() { return " - " + s + " " + s1; } +| <MATH_DIV> s = MATerm() s1 = MAExpressionPrime() { return " / " + s + " " + s1; } +| <MATH_MULT> s = MATerm() s1 = MAExpressionPrime() { return " * " + s + " " + s1; } +| {} { return ""; } +} + /* Right-recursive grammar for parsing boolean expressions in actions. No priority is given to boolean operators */ String BAExpression(): //BA stands for Boolean Action { -- GitLab