From 6c3aa7c19630aca0c6ec4a3aa5bffae83bfb7475 Mon Sep 17 00:00:00 2001
From: Andrea Enrici <andrea.enrici@nokia.com>
Date: Thu, 22 Jan 2015 16:25:59 +0000
Subject: [PATCH]

---
 src/compiler/tmlCPparser/CPparserDEF.jjt | 721 -----------------------
 1 file changed, 721 deletions(-)
 delete mode 100644 src/compiler/tmlCPparser/CPparserDEF.jjt

diff --git a/src/compiler/tmlCPparser/CPparserDEF.jjt b/src/compiler/tmlCPparser/CPparserDEF.jjt
deleted file mode 100644
index c1ebecdaeb..0000000000
--- a/src/compiler/tmlCPparser/CPparserDEF.jjt
+++ /dev/null
@@ -1,721 +0,0 @@
-/**********************************************************************************************************************
-Author: 			Andrea ENRICI
-Description: 	Parser for the communication Patterns
-***********************************************************************************************************************/
-
-options {
-	/* These are all the options offered by Javacc set with their default values */
-//  LOOKAHEAD = 2;
-//  CHOICE_AMBIGUITY_CHECK = 2;
-//  OTHER_AMBIGUITY_CHECK = 1;
-//  STATIC = true;
-//  DEBUG_PARSER = false;
-//  DEBUG_LOOKAHEAD = true;
-//  DEBUG_TOKEN_MANAGER = true;
-//  ERROR_REPORTING = true;
-//  JAVA_UNICODE_ESCAPE = false;
-//  UNICODE_INPUT = false;
-//  IGNORE_CASE = false;
-//  USER_TOKEN_MANAGER = false;
-//  USER_CHAR_STREAM = false;
-//  BUILD_PARSER = true;
-//  BUILD_TOKEN_MANAGER = true;
-//  SANITY_CHECK = true;
-	/*When LOOKAHEAD is more than 1, lookahead adequacy checking is not performed. Option FORCE_LA_CHECK must be set to true to
-	 * force checking */
-//  FORCE_LA_CHECK = true;
-//	TRACK_TOKENS = true;
-//	TOKEN_EXTENDS ="BaseToken";
-	MULTI=true;	/* Generate a multimode parse tree */
-	KEEP_LINE_COLUMN = false; 
-//	NODE_PREFIX="AST";
-}
-
-PARSER_BEGIN(CPparserDEF) /* The parser class */
-
-//package compiler.tmlCPparserDEF;
-import tmltranslator.*;
-import tmltranslator.tmlcp.*;
-import java.util.*;
-import myutil.*;
-import java.util.ArrayList;
-
-public class CPparserDEF {
-
-	public static TMLCP topCP = new TMLCP( "noName", new Object() );
-	public static TMLCPFork fork1;
-	public static TMLCPJoin join1;
-	public static TMLCPJunction junction;
-	public static int joinCounter = 0;
-	public static int forkCounter = 0;
-	public static int choiceCounter = 0;
-	public static int stopCounter = 0;
-	public static TMLCPChoice choice = new TMLCPChoice( "choice" + choiceCounter, null, null );	// empty guardList (second argument)
-	public static TMLCPActivityDiagram globalAD;
-	public static TMLCPElement previousElement;
-	public static TMLCPElement currentElement;
-	public static String SP = " ";
-	public static Boolean thereIsAChoice = false;
-
-  /* Main entry point. */
-  public static void main(String args[]) throws ParseException	{
-    CPparserDEF parser = new CPparserDEF(System.in);
-		try	{
-    	ASTStartSymbol n = parser.StartSymbol();
-			//print AST
-			//n.dump("");
-			//System.out.println("Thank you.");
-			topCP.printDataStructure();
-		}
-		catch ( Exception e )	{
-//			System.out.println("Ooops");
-			System.out.println(e.getMessage());
-//			e.printStackTrace();
-		}
-  }
-}
-
-PARSER_END(CPparserDEF)
-
-SKIP:
-{
-	" "
-| "\t"
-| "\n"
-| "\r"
-| < "#" (~["\n","\r"])* ("\n" | "\r" | "\r\n") >	/* One-line comment */
-| < "//" (~["\n","\r"])* ("\n" | "\r" | "\r\n") >	/* One-line comment */
-}
-
-/* The order in which TOKENs are declared matters! Moving the token declaration for the reserved keywords after the one for the
- * identifiers makes parsing to go bananas as any reserved keyword is instead matched as an identifier! */
-/* Reserved keywords */
-TOKEN:
-{
-	< BOOL_TYPE: "bool" >
-|	< INT_TYPE: "int" >
-| < START_KW: "START" >
-|	< ENDBLOCK: "END" >
-|	< GOTO_KW: "GOTO" >
-|	< MAINBLOCK: "MAIN" >
-|	< CP: "COMMUNICATION_PATTERN" >
-| < ACTIVITY_DIAGRAM: "ACTIVITY" >
-| < SEQUENCE_DIAGRAM: "SEQUENCE" >
-| < INCLUDE: "INCLUDE" >
-| < TRUECONST: "TRUE" | "true" >
-| < FALSECONST: "FALSE" | "false" >
-| < STORAGE_KW: "STORAGE" >
-| < CONTROLLER_KW: "CONTROLLER" >
-| < TRANSFER_KW: "TRANSFER" >
-| < ACTION_KW: "ACT:" >
-| < RCV_MSG_KW: "RCV:" >
-| < SND_MSG_KW: "SND:" >
-| < LABEL_KW: "LABEL" >
-| < #TRANSFER_ACT: "Transfer" >
-| < #TRANSFER_REQ: "TransferRequest" >
-| < #TRANSFER_DONE: "TransferDone" >
-| < #READ_ACT: "Read" >
-| < #WRITE_ACT: "Write" >
-| < EXTENSION: <CP_LIB> >
-| < #CP_LIB: ".cplib" >
-}
-
-/* Operators */
-TOKEN:
-{
-	< BLOCKSTART: "{" >
-|	< BLOCKEND: "}" >
-|	< MATH_SMALLER: "<" >
-|	< MATH_GREATER: ">" >
-|	< SEQUENCING_OP: ";" >
-|	< STAR_OP: "*" >
-|	< MATH_PLUS: "+" >
-|	< MATH_MINUS: "-" >
-|	< DOT: "." >
-|	< GUARDSTART: "[" >
-|	< GUARDEND: "]" >
-|	< LEFT_PARENTHESIS: "(" >
-|	< RIGHT_PARENTHESIS: ")" >
-|	< SEPARATOR: "," >
-| < ASSIGNMENT: "=" >
-| < EQUALITY: "==" >
-| < BITWISEOR: "|" >
-| < LOGICALOR: "||" >
-| < BITWISEAND: "&" >
-| < LOGICALAND: "&&" >
-| < BITWISEEXOR: "^" >
-| < INCREMENT: "++" >
-| < DECREMENT: "--" >
-| < START_AD: "<>;" >
-| < END_AD: "><" >
-//| < ORDEROPERATOR: <SEQUENCING_OP> | <PARALLELISM_OP> >
-| < EOL: ("\n" | "\r" | "\r\n") >
-| < RIGHT_SLASH: "/" >
-| < QUOTATION_MARK: "\"" >
-}
-
-/* Identifiers */
-TOKEN:
-{
-	< IDENTIFIER: <LETTER> (<UNDERSCORE> | <LETTER> | <DIGIT> | "#" )* (<LETTER> | <DIGIT>) /*| ( <UNDERSCORE> "#" <DIGIT> <UNDERSCORE>
-	<DIGIT> ) */ >
-| < #LETTER: ["a"-"z","A"-"Z"] >
-|	< #DIGIT: ["0"-"9"] >
-|	< UNDERSCORE: "_" >
-//| < INCLUDE_SYMBOL: "$" >
-}
-
-/* Literals */
-TOKEN:
-{
-	< INTEGER_LITERAL: <DECIMAL_LITERAL> (["l","L"])? >
-| < #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 */
-{
-	int i;
-	String space = " ";
-	String undefinedDiagStringList = "";
-	TMLCP topCP = new TMLCP();
-	TMLCPSequenceDiagram seqDiag;
-	TMLCPActivityDiagram actDiag;
-	ArrayList<TMLAttribute> attributeList;
-}
-{
-	attributeList = SequenceDiagramAttributesDeclaration()	
-
-	{	TraceManager.addDev( "#################" );
-		for( TMLAttribute attr: attributeList )	{
-			TraceManager.addDev( attr.toString() );
-			TraceManager.addDev( "#################" );
-		}
-	}
-
-	( seqDiag = SequenceDiagram( attributeList ) { topCP.addCPSequenceDiagram( seqDiag ); } )+
-
-	ActivityDiagram( topCP )	// dedicated to set the first CP as the topCP
-	{
-		topCP.setMainCP( globalAD );
-		choice = new TMLCPChoice( "choice" + choiceCounter, null, null );	// empty guardList (second argument)
-	}
-
-	( ActivityDiagram( topCP )
-	{
-		topCP.addCPActivityDiagram( globalAD );
-		choice = new TMLCPChoice( "choice" + choiceCounter, null, null );	// empty guardList (second argument)
-	}
-	)*
-
-	<EOF>		/* Force the parser to reach EOF */
-
-	{
-		//topCP.correctReferences();
-		/*ArrayList<TMLCPSequenceDiagram> sdList = topCP.getCPSequenceDiagrams();
-		ArrayList<TMLCPActivityDiagram> adList = topCP.getCPActivityDiagrams();
-		TraceManager.addDev( "***************" );
-		for( TMLCPSequenceDiagram diag: sdList )	{
-			TraceManager.addDev( diag.toString() );
-			TraceManager.addDev( "***************" );
-		}
-
-		TraceManager.addDev( "++++++++++++++++" );
-		for( TMLCPActivityDiagram diag: adList )	{
-			TraceManager.addDev( diag.toString() );
-			TraceManager.addDev( "++++++++++++++" );
-		}*/
-
-		TMLCPTextSpecification toto = new TMLCPTextSpecification( "From parser" );
-		String s = toto.toTextFormat( topCP );
-		TraceManager.addDev( s );
-		return jjtThis;
-	}
-}
-
-/********************************************************************************************************************************
-Include Files Section: the grammar for parsing the inclusion of library files
-********************************************************************************************************************************/
-/*void IncludeFiles():
-{}
-{
-	<INCLUDE> <QUOTATION_MARK> (<DOT>)? (<PATH_SEPARATOR>)? ID() (<PATH_SEPARATOR> ID() )* <EXTENSION> <QUOTATION_MARK>
-}
-
-void MappingList():
-{}
-{
-	ID() <ITERATIONSTART> ID() ( <SEPARATOR> ID() )+ <ITERATIONEND>
-}*/
-
-/********************************************************************************************************************************
-Sequence Diagram Section
-********************************************************************************************************************************/
-
-ArrayList<TMLAttribute> SequenceDiagramAttributesDeclaration():
-{
-	String instanceName, attributeName, attributeType;
-	Token t, t1;
-	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> )
-	{
-		if( t.image.equals("int") )	{
-			attributeList.add( new TMLAttribute( attributeName, instanceName, new TMLType ( TMLType.NATURAL ), t1.image ) );
-		}
-		else if( t.image.equals("bool") )	{
-			attributeList.add ( new TMLAttribute( attributeName, instanceName, new TMLType( TMLType.BOOLEAN ), t1.image ) );
-		}
-	}
-	)*
-	{ return attributeList; }
-}
-
-// A SD is a list of instances. Each Instance is composed of messages or actions.
-TMLCPSequenceDiagram SequenceDiagram( ArrayList<TMLAttribute> attributeList ):
-{
-	String diagramName;
-	TMLSDInstance instance;
-}
-{
-	<SEQUENCE_DIAGRAM> diagramName = ID()
-	{
-		TMLCPSequenceDiagram seqDiag = new TMLCPSequenceDiagram( diagramName );
-	}
-	(
-		instance = SequenceDiagramInstance( attributeList )
-		{ seqDiag.addInstance( instance ); }
-	)+
-	<ENDBLOCK>
-
-	{ return seqDiag; }
-}
-
-TMLSDInstance SequenceDiagramInstance( ArrayList<TMLAttribute> attributeList ):
-{
-	String instanceName, type, senderName, receiverName, messageName;
-	Token t;
-	TMLSDAction action;
-	TMLSDMessage message;
-	ArrayList<String> params = new ArrayList<String>();
-}
-{
-	( t = <TRANSFER_KW> | t = <STORAGE_KW> | t = <CONTROLLER_KW> ) instanceName = ID()
-	{ 
-		TMLSDInstance instance = new TMLSDInstance( instanceName, t.image );
-		for( TMLAttribute attr: attributeList )	{
-			if( instanceName.equals( attr.getInstanceName() ) )	{
-				//TraceManager.addDev( "Adding attribute " + attr.toString() + " to instance " + instanceName );
-				instance.addAttribute( attr );
-			}
-		}
-	}
-
-	(	<RCV_MSG_KW> senderName = ID() ":" messageName = ID() params =  MessageParameters() 
-		{ message = new TMLSDMessage( messageName, senderName, instanceName, params );
-			instance.addMessageFromParser( message, TMLSDEvent.RECEIVE_MESSAGE_EVENT ); }
-	|
-		<SND_MSG_KW> receiverName = ID() ":" messageName = ID() params = MessageParameters()
-		{ message = new TMLSDMessage( messageName, instanceName, receiverName, params );
-			instance.addMessageFromParser( message, TMLSDEvent.SEND_MESSAGE_EVENT ); }
-	|
-		action = Action( instanceName )
-		{ instance.addActionFromParser( action ); }
-	)+
-
-	{ return instance; }
-}
-
-ArrayList<String> MessageParameters():
-{
-	String s;
-	ArrayList<String> params = new ArrayList<String>();
-}
-{
-	( "()" | "(" s = ID() { params.add(s); } ( "," s = ID() { params.add(s); } )* ")" )
-	{
-		return params;
-	}
-}
-
-TMLSDAction Action( String instanceName ):
-{
-	String s, s1 = "";
-	Token t;
-}
-{
-	<ACTION_KW> s = ID() <ASSIGNMENT> ( s1 = BAExpression() | s1 = MAExpression() )
-	{
-		TMLSDAction action = new TMLSDAction( s + " = " + s1, instanceName );
-		return action;
-	}
-}
-
-/* Right-recursive grammar for parsing mathematical expressions in actions. No priority is given to operators */
-String MAExpression():	//MA stands for Mathematical Action
-{
-	String s, s1;
-}
-{
-	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; }
-}
-
-String MATermPrime():
-{
-	String s, s1;
-}
-{
-	s = MAFactor() s1 = MATermPrime()	{ return s + s1; }
-| {} { return ""; }
-}
-
-String MAFactor():
-{
-	String s;
-	Token t;
-}
-{
-	<LEFT_PARENTHESIS> s = MAExpression() <RIGHT_PARENTHESIS> { return "( " + s + " )"; }
-	|
-	s = ID() {return s; }
-	|
-	t = <INTEGER_LITERAL>	{ return t.image; }
-}
-
-/* Right-recursive grammar for parsing boolean expressions in actions. No priority is given to boolean operators */
-String BAExpression():	//BA stands for Boolean Action
-{
-	String s, s1;
-}
-{
-	s = BATerm() s1 = BAExpressionPrime()	{ return s + s1; }
-}
-
-String BAExpressionPrime():
-{
-	String s, s1;
-}
-{
-	<LOGICALOR> s = BATerm() s1 = BAExpressionPrime()	{ return " || " + s + s1; }
-| <LOGICALAND> s = BATerm() s1 = BAExpressionPrime()	{ return " && " + s + s1; }
-| <EQUALITY> s = BATerm() s1 = BAExpressionPrime()	{ return " == " + s + s1; }
-| {}	{ return ""; }
-}
-
-String BATerm():
-{
-	String s, s1;
-}
-{
-	s = BAFactor() s1 = BATermPrime()	{ return s + s1; }
-}
-
-String BATermPrime():
-{
-	String s, s1;
-}
-{
-	s = BAFactor() s1 = BATermPrime()	{ return s + s1; }
-| {}	{ return ""; }
-}
-
-String BAFactor():
-{
-	String s;
-	Token t;
-}
-{
-	<LEFT_PARENTHESIS> s = BAExpression() <RIGHT_PARENTHESIS>	{ return "( " + s + " )"; }
-	|
-	s = ID()	{ return s; }
-	|
-	t = <FALSECONST>	{ return t.image; }
-	|
-	t = <TRUECONST> { return t.image; }
-}
-
-String ID():
-{
-	Token t;
-}
-{
-	t = <IDENTIFIER> 	{ jjtThis.setName(t.image); return t.image; }
-}
-
-/*###################################################################################"*/
-
-void ActivityDiagram( TMLCP topCP ):
-{
-	String name;
-}
-{
-	<ACTIVITY_DIAGRAM> name = ID()
-	{
-		globalAD = new TMLCPActivityDiagram( name, null );
-	}
-	
-	"MAIN" "<>;"
-	{
-		currentElement = new TMLCPStart( "start", null );
-		globalAD.addTMLCPElement( currentElement );
-		previousElement = currentElement;
-	}
-
-	(
-	parseReferenceToDiagram( topCP )	<SEQUENCING_OP> 
-	{
-		if( currentElement != null )	{
-			previousElement.addNextElement( currentElement );
-			globalAD.addTMLCPElement( currentElement );
-			previousElement = currentElement;
-		}
-	}
-	|
-		parseForkJoin( topCP )
-	|
-		parseChoiceLine( topCP ) 
-	)+
- 	"END" "END" ID()
-	{
-		if( thereIsAChoice )	{	//Correcting the additional stop node added when parsing a choice
-			ArrayList<TMLCPElement> elements = globalAD.getElements();
-			elements.remove( elements.size()-1 );
-			globalAD.addElements( elements );
-			globalAD.addTMLCPElement( choice );
-			thereIsAChoice = false;
-		}
-	}
-}
-
-void parseReferenceToDiagram( TMLCP topCP ):
-{
-	String name;
-	boolean isSD = false;
-}
-{
-	name = ID()
-	{ 
-		for( TMLCPSequenceDiagram sd: topCP.getCPSequenceDiagrams() )	{
-			if( sd.getName().equals( name ) )	{
-				isSD = true;
-			}
-		}
-		if( isSD )	{
-			currentElement = new TMLCPRefSD( name, null );
-		}
-		else	{
-			currentElement = new TMLCPRefAD( name, null );
-		}
-	}
-}
-
-void parseForkJoin( TMLCP topCP ):
-{
-	String name;
-	boolean isSD = false;
-	fork1 = new TMLCPFork( "fork1" + forkCounter , null );
-	join1 = new TMLCPJoin( "join1" + joinCounter , null );
-	forkCounter++;
-	joinCounter++;
-}
-{
-	"{" "{" parseReferenceToDiagram( topCP )
-	{
-		previousElement.addNextElement( fork1 );
-		fork1.addNextElement( currentElement );	//the next element of Fork is only the first element of the sequence
-		globalAD.addTMLCPElement( currentElement );
-		previousElement = currentElement;
-	}
-	// from now on is like parsing a normal sequence, in the sense that I ignore the fact of being inside a fork-join
-	(
-	<SEQUENCING_OP> parseReferenceToDiagram( topCP )
-	{
-		if( currentElement != null )	{
-			previousElement.addNextElement( currentElement );
-			globalAD.addTMLCPElement( currentElement );
-			previousElement = currentElement;
-		}
-	}
-	)*
-	"}"	// end of the first branch
-	{ previousElement.addNextElement( join1 ); }
-	// then one or more branches
-	( "*" "{" parseReferenceToDiagram( topCP )
-	{
-		fork1.addNextElement( currentElement );
-		globalAD.addTMLCPElement( currentElement );
-		previousElement = currentElement;
-	}
-	// from now on is like parsing a normal sequence, in the sense that I ignore the fact of being inside a fork-join
-	(
-	<SEQUENCING_OP> parseReferenceToDiagram( topCP )
-	{
-		if( currentElement != null )	{
-			previousElement.addNextElement( currentElement );
-			globalAD.addTMLCPElement( currentElement );
-			previousElement = currentElement;
-		}
-	}
-	)*
-	"}"	// end of a branch
-	{ previousElement.addNextElement( join1 ); }
-	)+	"};"	// end of a whole fork-join
-	{
-		globalAD.addTMLCPElement( fork1 );
-		globalAD.addTMLCPElement( join1 );
-		previousElement = join1;
-	}
-}
-
-void parseChoiceLine( TMLCP topCP ):	// parse the choice guard line
-{
-	String s;
-	ArrayList<String> guardList = new ArrayList<String>();
-}
-{
-	s = parseGuard()
-	{
-		thereIsAChoice = true;
-		choice.addGuard(s);
-		if( !(currentElement instanceof TMLCPChoice) )	{
-			currentElement.addNextElement( choice );
-		}
-	}
-	parseReferenceToDiagram( topCP ) <SEQUENCING_OP> 	//the nextElement of a TMLCPChoice is the first element of the sequence
-	{
-		if( currentElement != null )	{
-			/*if( !(previousElement instanceof TMLCPStop) )	{	// avoid the spurious case when returning from the end of a branch
-				previousElement.addNextElement( currentElement );
-			}*/
-			globalAD.addTMLCPElement( currentElement );
-			previousElement = currentElement;
-			choice.addNextElement( currentElement );
-		}
-	}
-
-	|	// the branch may end here directly, because there is just a reference to one diagram
-
-	"><" // end of the branch
-	{
-		currentElement = new TMLCPStop( "stop" + stopCounter, null );
-		if( !(currentElement instanceof TMLCPStop && previousElement instanceof TMLCPStop) )	{
-			previousElement.addNextElement( currentElement );
-		}
-
-		globalAD.addTMLCPElement( currentElement );
-		stopCounter++;
-		previousElement = currentElement;
-		currentElement = choice;	// end of a branch, the previous element is reset to the choice node
-	}
-
-	/*|	// or it is followed by a longer sequence of diagrams
-
-	( parseReferenceToDiagram( topCP )	<SEQUENCING_OP> 
-	{
-		TraceManager.addDev( "Passing by here" );
-		if( currentElement != null )	{
-			previousElement.addNextElement( currentElement );
-			globalAD.addTMLCPElement( currentElement );
-			previousElement = currentElement;
-		}
-	}
-	)+
-	"><" // end of the branch
-	{
-		currentElement = new TMLCPStop( "stop" + stopCounter, null );
-		previousElement.addNextElement( currentElement );
-		globalAD.addTMLCPElement( currentElement );
-		stopCounter++;
-		previousElement = currentElement;
-		currentElement = choice;	// end of a branch, the previous element is reset to the choice node
-	}*/
-}
-
-String parseGuard():
-{
-	String s;
-}
-{
-	"[" s = GExpression() "]"
-	{ return "[" + SP + s + SP + "]"; }
-}
-
-String GExpression():
-{
-	String s, s1;
-}
-{
-	s = GTerm() s1 = GExpressionPrime()
-	{ return s + s1; }
-}
-
-String GExpressionPrime():
-{
-	String s, s1;
-}
-{
-	<LOGICALOR> s = GTerm() s1 = GExpressionPrime()	{ return "||"  + s + s1; }
-| <LOGICALAND> s = GTerm() s1 = GExpressionPrime()	{ return "&&"  + s + s1; }
-| <EQUALITY> s = GTerm() s1 = GExpressionPrime()	{ return "=="  + s + s1; }
-| <MATH_GREATER> s = GTerm() s1 = GExpressionPrime() { return ">"  + s + s1; }
-| <MATH_SMALLER> s = GTerm() s1 = GExpressionPrime()	{ return "<"  + s + s1; }
-| {}	{ return ""; }
-}
-
-String GTerm():
-{
-	String s, s1;
-}
-{
-	s = GFactor() s1 = GTermPrime()
-	{ return s + s1; }
-}
-
-String GTermPrime():
-{
-	String s, s1;
-}
-{
-	s = GFactor() s1 = GTermPrime()	{ return s + s1; }
-| {}	{ return ""; }
-}
-
-String GFactor():
-{
-	String name, s;
-	Token t;
-}
-{
-	<GUARDSTART> s = GExpression() <GUARDEND> { return "[" + SP + s + SP + "]"; }
-	|
-	name = ID()	{ return name; }
-	|
-	t = <INTEGER_LITERAL>	{ return t.image; }
-}
-
-
-- 
GitLab