Commit 6363ff24 authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+ grammar updates for v4.7.1

parent 66407257
Loading
Loading
Loading
Loading
+39 −11
Original line number Diff line number Diff line
@@ -294,10 +294,14 @@ GuardOp:
	killed=KilledStatement;

DoneStatement:
	component=ComponentOrAny DOT DONEKEYWORD index=IndexAssignment?;
	component=ComponentOrAny DOT DONEKEYWORD (PORTREDIRECTSYMBOL  value=ValueStoreSpec? index=IndexSpec? )?;

ValueStoreSpec:
	VALUEKEYWORD ref=VariableRef
;

KilledStatement:
	component=ComponentOrAny DOT KILLEDKEYWORD index=IndexAssignment?;
	component=ComponentOrAny DOT KILLEDKEYWORD (PORTREDIRECTSYMBOL  value=ValueStoreSpec? index=IndexSpec? )?;

ComponentOrAny:
	compOrDefault=ComponentOrDefaultReference | {ComponentOrAny} (any=ANYKEYWORD (COMPONENTKEYWORD | FROMKEYWORD
@@ -307,7 +311,7 @@ IndexAssignment:
	PORTREDIRECTSYMBOL index=IndexSpec;

IndexSpec:
	INDEX_MODIFIER VALUEKEYWORD ref=VariableRef;
	INDEX_MODIFIER value=ValueStoreSpec;

GetReplyStatement:
	PortOrAny DOT reply=PortGetReplyOp;
@@ -376,7 +380,7 @@ AssignmentList:

	// TODO: should id reference something?
VariableAssignment:
	ref=VariableRef ASSIGNMENTCHAR name=IDENTIFIER;
	ref=VariableRef ASSIGNMENTCHAR (decoded=DECODED_MODIFIER  ( LPAREN expr=Expression RPAREN )? )? name=IDENTIFIER;

VariableList:
	entries+=VariableEntry (COMMA entries+=VariableEntry)*;
@@ -418,7 +422,7 @@ ValueSpec:
	VALUEKEYWORD (variable=VariableRef | (LPAREN specs+=SingleValueSpec (COMMA specs+=SingleValueSpec)* RPAREN));

SingleValueSpec:
	variable=VariableRef (ASSIGNMENTCHAR field=[FieldReference|IDENTIFIER] ext+=ExtendedFieldReference*)?;
	variable=VariableRef (ASSIGNMENTCHAR (decoded=DECODED_MODIFIER  ( LPAREN expr=Expression RPAREN )? )? fieldRef=[FieldReference|IDENTIFIER] ext+=ExtendedFieldReference*)?;

AltGuardChar:
	{AltGuardChar} SQUAREOPEN expr=BooleanExpression? SQUARECLOSE;
@@ -872,7 +876,7 @@ Bound:
	((EXCLAMATIONMARK)? expr=SingleExpression) | {Bound} (MINUS? INFINITYKEYWORD);

StringLength:
	LENGTHKEYWORD LPAREN expr=SingleExpression (RANGEOP bound=Bound)? RPAREN;
	LENGTHKEYWORD LPAREN expr=SingleExpression (RANGEOP ( upper=SingleExpression | INFINITYKEYWORD) )? RPAREN;

CharStringMatch:
	PATTERNKEYWORD NOCASE_MODIFIER? pattern+=PatternParticle (STRINGOP pattern+=PatternParticle)*;
@@ -943,9 +947,13 @@ TemplateActualParList:
MatchingSymbol:
	complement=Complement | {MatchingSymbol} any=QUESTIONMARK qwlm=WildcardLengthMatch? | {MatchingSymbol} anyornone=STAR
	swlm=WildcardLengthMatch? | range=Range | {MatchingSymbol} BIT_STRING_OR_MATCH | {MatchingSymbol} HEX_STRING_OR_MATCH
	| {MatchingSymbol} OCTET_STRING_OR_MATCH | string=CharStringMatch | subset=SubsetMatch | superset=SupersetMatch |
	| {MatchingSymbol} OCTET_STRING_OR_MATCH | string=CharStringMatch | subset=SubsetMatch | superset=SupersetMatch | decoded=DecodedContentMatch |
	templates=ListOfTemplates;

DecodedContentMatch:
	DECODED_MATCH  ( LPAREN Expression RPAREN )? template=InLineTemplate  
;

SubsetMatch:
	SUBSETKEYWORD ListOfTemplates;

@@ -1355,11 +1363,23 @@ UniversalCharString returns ecore::EString:
	UNIVERSALKEYWORD CHARSTRINGKEYWORD;

CharStringValue returns ecore::EString:
	CSTRING | Quadruple;
	CSTRING | Quadruple | USIlikeNotation;

Quadruple returns ecore::EString:
terminal Quadruple returns ecore::EString:
	CHARKEYWORD LPAREN NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER RPAREN;

//TODO: may be too restrictive as terminal, otherwise causes conflicts
//		otherwise it has a conflict with referenced named objects -> make plus mandatory?
//TODO: this conflicts with the above!!! -> make both terminals? (disallows spaces)
terminal USIlikeNotation returns ecore::EString:
	CHARKEYWORD	LPAREN UIDLIKE ( COMMA UIDLIKE )* RPAREN 
;

//TODO: plus should be optional according to spec.. -> also prevents u+2 vs u + 2 expressions 
terminal UIDLIKE returns ecore::EString:
	( 'U' | 'u' )  PLUS?  (HEX)*
;

FloatValue returns ecore::EString:
	FLOATDOTNOTATION | FLOATENOTATION | NANKEYWORD;

@@ -1534,9 +1554,15 @@ terminal LAZY_MODIFIER returns ecore::EString:
terminal FUZZY_MODIFIER returns ecore::EString:
	'@fuzzy';

terminal DECODED_MODIFIER returns ecore::EString:
	'@decoded';
	
terminal NOCASE_MODIFIER returns ecore::EString:
	'@nocase';	

terminal DECODED_MATCH returns ecore::EString:
	'decmatch';

terminal SELFOP returns ecore::EString:
	'self';

@@ -2063,11 +2089,13 @@ enum VerdictTypeValue:
 * Changed TemplateInstance to TemplateOrRange
 */
PreDefFunction:
	Fint2char | Fint2unichar | Fint2bit | Fint2enum | Fint2hex | Fint2oct | Fint2str | Fint2float | Ffloat2int |
	(Fint2char | Fint2unichar | Fint2bit | Fint2enum | Fint2hex | Fint2oct | Fint2str | Fint2float | Ffloat2int |
	Fchar2int | Fchar2oct | Funichar2int | Funichar2oct | Fbit2int | Fbit2hex | Fbit2oct | Fbit2str | Fhex2int | Fhex2bit
	| Fhex2oct | Fhex2str | Foct2int | Foct2bit | Foct2hex | Foct2str | Foct2char | Foct2unichar | Fstr2int | Fstr2hex |
	Fstr2oct | Fstr2float | Fenum2int | Flengthof | Fsizeof | Fispresent | Fischosen | Fisvalue | Fisbound | Fregexp |
	Fsubstr | Freplace | Fencvalue | Fdecvalue | FencvalueUnichar | FdecvalueUnichar | Frnd | Ftestcasename;
	Fsubstr | Freplace | Fencvalue | Fdecvalue | FencvalueUnichar | FdecvalueUnichar | Frnd | Ftestcasename)
	nocase=NOCASE_MODIFIER?
	;

Fint2char:
	f='int2char' LPAREN e1=SingleExpression RPAREN;