Commit 7bdb5454 authored by Daniel Honsel's avatar Daniel Honsel
Browse files

improved cross references

parent 7c209516
Loading
Loading
Loading
Loading
+25 −40
Original line number Diff line number Diff line
@@ -12,18 +12,15 @@ ConstDef:
	CONSTKEYWORD type=Type defs=ConstList;

Type:
	{Type} PredefinedType | ref=ReferencedType | sub=SubTypeRef;
	{Type} PredefinedType | ref=[ReferencedType|IDENTIFIER];

ArrayDef:
	(SQUAREOPEN expr+=SingleExpression (RANGEOP range+=SingleExpression)? SQUARECLOSE)+;

TTCN3Module:
	MODULE name=ModuleId LBRACKET defs=ModuleDefinitionsList? controls=ModuleControlPart? RBRACKET
	MODULE name=IDENTIFIER spec=LanguageSpec? LBRACKET defs=ModuleDefinitionsList? controls=ModuleControlPart? RBRACKET
	withstm=WithStatement? sc=SEMICOLON?;

ModuleId:
	name=IDENTIFIER spec=LanguageSpec?;

LanguageSpec:
	LANGUAGEKEYWORD txt+=FREE_TEXT (COMMA txt+=FREE_TEXT)*;

@@ -39,8 +36,6 @@ ModuleParList:
ModuleParameter:
	name=IDENTIFIER (ASSIGNMENTCHAR constExpr=ConstantExpression)?;

ModuleParameterRef:
	name=[ModuleParameter|IDENTIFIER];

MultitypedModuleParList:
	{MultitypedModuleParList} (par+=ModulePar SEMICOLON?)*;
@@ -70,8 +65,9 @@ ExtConstDef:
ImportDef:
	IMPORTKEYWORD ImportFromSpec (all=AllWithExcepts | LBRACKET importSpec=ImportSpec RBRACKET);

// TODO: fix import
ImportFromSpec:
	FROMKEYWORD ModuleId RECURSIVEKEYWORD?;
	FROMKEYWORD id=IDENTIFIER spec=LanguageSpec? RECURSIVEKEYWORD?;

AllWithExcepts:
	{AllWithExcepts} ALLKEYWORD def=ExceptsDef?;
@@ -637,6 +633,9 @@ VarInstance:
VarList:
	var+=SingleVarInstance (COMMA var+=SingleVarInstance)*;

ReferencedType:
	SubTypeDefNamed | RecordDefNamed | SetDefNamed | PortDef | ComponentDef | UnionDefNamed | EnumDefNamed;

TypeDef:
	TYPEDEFKEYWORD TypeDefBody;

@@ -646,26 +645,23 @@ TypeDefBody:
SubTypeDef:
	type=Type ADDRESSKEYWORD array=ArrayDef? spec=SubTypeSpec? | SubTypeDefNamed;

SubTypeDefNamed returns SubType:
SubTypeDefNamed returns SubTypeDef:
	type=Type name=IDENTIFIER array=ArrayDef? spec=SubTypeSpec?;

SubTypeRef:
	name=[SubType|IDENTIFIER];

StructuredTypeDef:
	RecordDef | UnionDef | SetDef | RecordOfDef | SetOfDef | EnumDef | PortDef | ComponentDef;

RecordDef:
	RECORDKEYWORD ADDRESSKEYWORD StructDefBody | RecordDefNamed;

RecordDefNamed returns Type:
RecordDefNamed returns RecordDef:
	RECORDKEYWORD name=IDENTIFIER body=StructDefBody;

RecordOfDef:
	RECORDKEYWORD lenght=StringLength? OFKEYWORD (type=Type | nested=NestedTypeDef) ADDRESSKEYWORD spec=SubTypeSpec? |
	RecordOfDefNamed;

RecordOfDefNamed returns Type:
RecordOfDefNamed:
	RECORDKEYWORD lenght=StringLength? OFKEYWORD (type=Type | nested=NestedTypeDef) name=IDENTIFIER spec=SubTypeSpec?;

StructDefBody:
@@ -682,11 +678,11 @@ SetOfDef:
	SETKEYWORD setLength=StringLength? OFKEYWORD (setType=Type | nested2=NestedTypeDef) ADDRESSKEYWORD
	setSpec=SubTypeSpec? | SetOfDefNamed;

SetOfDefNamed returns Type:
SetOfDefNamed:
	SETKEYWORD setLength=StringLength? OFKEYWORD (setType=Type | nested2=NestedTypeDef) name=IDENTIFIER
	setSpec=SubTypeSpec?;

PortDef returns Type:
PortDef:
	PORTKEYWORD name=IDENTIFIER body=PortDefBody;

PortDefBody:
@@ -728,7 +724,7 @@ ProcedureAttribs:
	PROCEDUREKEYWORD LBRACKET ((addresses+=AddressDecl | procs+=ProcedureList | configs+=ConfigParamDef) SEMICOLON?)+
	RBRACKET;

ComponentDef returns Type:
ComponentDef:
	COMPONENTKEYWORD name=IDENTIFIER (EXTENDSKEYWORD ct+=ComponentType (COMMA ct+=ComponentType)*)? LBRACKET
	(defs=ComponentDefList) RBRACKET;

@@ -756,7 +752,7 @@ SignatureList:
EnumDef:
	ENUMKEYWORD ADDRESSKEYWORD LBRACKET list=EnumerationList RBRACKET | EnumDefNamed;

EnumDefNamed returns Type:
EnumDefNamed returns EnumDef:
	ENUMKEYWORD name=IDENTIFIER LBRACKET list=EnumerationList RBRACKET;

NestedTypeDef:
@@ -793,9 +789,9 @@ Direction:
	INPARKEYWORD | OUTPARKEYWORD | INOUTPARKEYWORD;

UnionDef:
	UNIONKEYWORD ADDRESSKEYWORD UnionDefBody | UnionDefNamed;
	UNIONKEYWORD ADDRESSKEYWORD body=UnionDefBody | UnionDefNamed;

UnionDefNamed returns Type:
UnionDefNamed returns UnionDef:
	UNIONKEYWORD name=IDENTIFIER body=UnionDefBody;

UnionDefBody:
@@ -811,9 +807,9 @@ UnionFieldDef:
	(type=Type | NestedTypeDef) name=IDENTIFIER array=ArrayDef? subType=SubTypeSpec?;

SetDef:
	SETKEYWORD ADDRESSKEYWORD StructDefBody | SetDefNamed;
	SETKEYWORD ADDRESSKEYWORD body=StructDefBody | SetDefNamed;

SetDefNamed returns Type:
SetDefNamed returns SetDef:
	SETKEYWORD name=IDENTIFIER body=StructDefBody;

SubTypeSpec:
@@ -856,16 +852,9 @@ TempVarList:
SingleVarInstance:
	name=IDENTIFIER array=ArrayDef? (ac=ASSIGNMENTCHAR expr=Expression)?;

SingleVarInstanceRef:
	name=[SingleVarInstance|IDENTIFIER];

SingleTempVarInstance:
	name=IDENTIFIER array=ArrayDef? (ac=ASSIGNMENTCHAR template=TemplateBody)?;

	//TODO: use this reference where applicable
SingleTempVarInstanceRef:
	name=[SingleTempVarInstance|IDENTIFIER];

InLineTemplate:
	((type=Type | Signature) COLON)? (derived=DerivedRefWithParList ASSIGNMENTCHAR)? template=TemplateBody;

@@ -1010,9 +999,6 @@ QualifiedIdentifier returns ecore::EString hidden():
QualifiedIdentifierList returns ecore::EString:
	QualifiedIdentifier (COMMA QualifiedIdentifier)*;

ReferencedType:
	name=[Type|IDENTIFIER];

SingleConstDef:
	name=IDENTIFIER array=ArrayDef? assign=ASSIGNMENTCHAR expr=ConstantExpression;

@@ -1055,18 +1041,17 @@ ArrayElementConstExpressionList:
ConstList:
	list+=SingleConstDef (COMMA list+=SingleConstDef)*;

	// TODO: add other missing referenced values
Value:
	PredefinedValue | ReferencedValue;

ReferencedValue returns Value:
	(ReferencedConstValue | ModuleParameterRef | SingleVarInstanceRef) ext+=ExtendedFieldReference*;
ReferencedValue:
	ref=[RefValue|IDENTIFIER] ext+=ExtendedFieldReference*;

ReferencedConstValue returns Value:
	name=[SingleConstDef|ExtendedIdentifier];
RefValue:
	SingleConstDef | ModuleParameter | SingleVarInstance | RecordOfDefNamed | SetOfDefNamed;

	// IDENTIFIER omitted
PredefinedValue returns Value:
PredefinedValue:
	value=BSTRING | bValue=BooleanValue | value=NUMBER | value=HSTRING | value=OSTRING | vValue=VerdictTypeValue |
	value=FloatValue | value=ADDRESSVALUE | value=OMITKEYWORD | value=CharStringValue;

@@ -1166,7 +1151,7 @@ PermutationMatch:
	// TODO: check references!
// Identifier | TypeReference | ParRef
StructFieldRef:
	StructFieldReference | Type | ModuleParameterRef;
	StructFieldReference | Type ;

	// TODO: check if this rule is necessary
TypeReference returns ecore::EString:
@@ -1244,7 +1229,7 @@ RunsOnSpec:
	RUNSKEYWORD ONKEYWORD component=ComponentType;

ComponentType:
	ReferencedType; // TODO: restrict selectable types?
	ref=[ReferencedType|IDENTIFIER]; // TODO: restrict selectable types?

ReturnType:
	RETURNKEYWORD (TEMPLATEKEYWORD | RestrictedTemplate)? type=Type;