Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/TTCN3.xtext +15 −18 Original line number Diff line number Diff line Loading @@ -190,14 +190,14 @@ SystemSpec: SYSTEMKEYWORD component=[ComponentDef|IDENTIFIER]; SignatureDef: SIGNATUREKEYWORD name=IDENTIFIER LPAREN params=SignatureFormalParList? RPAREN (return=ReturnType | NOBLOCKKEYWORD)? SIGNATUREKEYWORD name=IDENTIFIER LPAREN paramList=SignatureFormalParList? RPAREN (return=ReturnType | NOBLOCKKEYWORD)? sprec=ExceptionSpec?; ExceptionSpec: EXCEPTIONKEYWORD LPAREN TypeList RPAREN; SignatureFormalParList: value+=FormalValuePar (COMMA value+=FormalValuePar)*; params+=FormalValuePar (COMMA params+=FormalValuePar)*; ModuleControlPart: CONTROLKEYWORD LBRACKET body=ModuleControlBody RBRACKET ws=WithStatement? sc=SEMICOLON?; Loading Loading @@ -384,7 +384,7 @@ ValueSpec: VALUEKEYWORD (VariableRef | (LPAREN specs+=SingleValueSpec (COMMA specs+=SingleValueSpec)* RPAREN)); SingleValueSpec: variable=VariableRef (ASSIGNMENTCHAR field=FieldReference ext+=ExtendedFieldReference*)?; variable=VariableRef (ASSIGNMENTCHAR field=[FieldReference|IDENTIFIER] ext+=ExtendedFieldReference*)?; AltGuardChar: {AltGuardChar} SQUAREOPEN expr=BooleanExpression? SQUARECLOSE; Loading Loading @@ -815,7 +815,7 @@ AllowedValuesSpec: LPAREN ((template+=TemplateOrRange (COMMA template+=TemplateOrRange)*) | CharStringMatch) RPAREN; TemplateOrRange: RangeDef | TemplateBody | Type; range=RangeDef | template=TemplateBody | type=Type; RangeDef: b1=Bound RANGEOP b2=Bound; Loading Loading @@ -869,7 +869,7 @@ FieldSpecList: LBRACKET spec+=FieldSpec (COMMA spec+=FieldSpec)* RBRACKET; FieldSpec: ref=[StructFieldDef|IDENTIFIER] ASSIGNMENTCHAR (body=TemplateBody | MINUS); ref=[FieldReference|IDENTIFIER] ASSIGNMENTCHAR (body=TemplateBody | MINUS); SimpleSpec: expr=SingleExpression (STRINGOP spec=SimpleTemplateSpec)? | spec=SimpleTemplateSpec; Loading Loading @@ -1014,7 +1014,7 @@ ArrayElementExpressionList: expr+=NotUsedOrExpression (COMMA expr+=NotUsedOrExpression)*; FieldExpressionSpec: fieldRef=FieldReference ASSIGNMENTCHAR expr=NotUsedOrExpression; (fieldRef=[FieldReference|IDENTIFIER] | type=PredefinedType) ASSIGNMENTCHAR expr=NotUsedOrExpression; NotUsedOrExpression: Expression | {NotUsedOrExpression} MINUS; Loading @@ -1029,7 +1029,7 @@ FieldConstExpressionList: LBRACKET specs+=FieldConstExpressionSpec (COMMA specs+=FieldConstExpressionSpec)* RBRACKET; FieldConstExpressionSpec: fieldRef=FieldReference ASSIGNMENTCHAR constExpr=ConstantExpression; (fieldRef=[FieldReference|IDENTIFIER] | type=PredefinedType) ASSIGNMENTCHAR constExpr=ConstantExpression; ArrayConstExpression: {ArrayConstExpression} LBRACKET list=ArrayElementConstExpressionList? RBRACKET; Loading @@ -1047,7 +1047,7 @@ ReferencedValue: ref=[RefValue|IDENTIFIER] ext+=ExtendedFieldReference*; RefValue: SingleConstDef | ModuleParameter | SingleVarInstance | FormalValuePar | FormalTemplatePar; SingleConstDef | ModuleParameter | SingleVarInstance | FieldReference | FormalTemplatePar; // IDENTIFIER omitted PredefinedValue: Loading Loading @@ -1117,8 +1117,9 @@ AllRef returns ecore::EString: // TODO: improve references // StructFieldRef | ArrayOrBitRef | ParRef; // ParRef -> RefValue FieldReference: ArrayOrBitRef | StructFieldRef; StructFieldDef | FormalValuePar; ArrayOrBitRef: SQUAREOPEN FieldOrBitNumber SQUARECLOSE; Loading @@ -1133,23 +1134,19 @@ ArrayElementSpecList: spec+=ArrayElementSpec (COMMA spec+=ArrayElementSpec)*; ArrayElementSpec: {ArrayElementSpec} MINUS | PermutationMatch | TemplateBody; {ArrayElementSpec} MINUS | match=PermutationMatch | body=TemplateBody; TimerOps: ReadTimerOp | RunningTimerOp; read=ReadTimerOp | run=RunningTimerOp; RunningTimerOp: TimerRefOrAny DOT RUNNINGKEYWORD; timerRef=TimerRefOrAny DOT RUNNINGKEYWORD; ReadTimerOp: ArrayIdentifierRef DOT READKEYWORD; arrayRed=ArrayIdentifierRef DOT READKEYWORD; PermutationMatch: PERMUTATIONKEYWORD ListOfTemplates; // TODO: complete this rule parRef! TypeReference StructFieldRef: ref=[StructFieldDef|IDENTIFIER] | {StructFieldRef} PredefinedType; PERMUTATIONKEYWORD list=ListOfTemplates; ExtendedFieldReference: DOT (field+=ReferencedValue | type+=PredefinedType) | array+=ArrayOrBitRef | {ExtendedFieldReference} SQUAREOPEN Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/scoping/TTCN3ScopeProvider.xtend +6 −1 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ import de.ugoe.cs.swe.tTCN3.UnionDefNamed import de.ugoe.cs.swe.tTCN3.RecordOfDefNamed import de.ugoe.cs.swe.tTCN3.SetOfDefNamed import de.ugoe.cs.swe.tTCN3.EnumDefNamed import de.ugoe.cs.swe.tTCN3.FormalValuePar import de.ugoe.cs.swe.tTCN3.SignatureDef class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { Loading Loading @@ -132,6 +134,9 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { if (type != null && type.ref != null && typeof(RecordDefNamed).isAssignableFrom(type.ref.class)) { inner.addAll((type.ref as RecordDefNamed).body.defs) } if (type != null && type.ref != null && typeof(SignatureDef).isAssignableFrom(type.ref.class)) { inner.addAll((type.ref as SignatureDef).paramList.params) } scopeFor(inner) } Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/TTCN3Validator.xtend +2 −12 Original line number Diff line number Diff line Loading @@ -53,16 +53,6 @@ import org.eclipse.xtext.validation.Check import static extension de.ugoe.cs.swe.common.TTCN3ScopeHelper.* class TypeAttribs { String name EStructuralFeature feature new(String name, EStructuralFeature feature) { this.name = name this.feature = feature } } class TTCN3Validator extends AbstractTTCN3Validator { @Check Loading @@ -77,7 +67,7 @@ class TTCN3Validator extends AbstractTTCN3Validator { val container = field.findDesiredParent(typeof(ModuleDefinitionsList)) as ModuleDefinitionsList if (container.checkNameClashModuleDefinitionsList(field, field.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.structFieldDef_Name); TTCN3Package.eINSTANCE.refValue_Name); return; } Loading @@ -86,7 +76,7 @@ class TTCN3Validator extends AbstractTTCN3Validator { for (StructFieldDef f : body.defs) { if (f != field && f.name.equals(field.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.structFieldDef_Name); TTCN3Package.eINSTANCE.refValue_Name); return; } } Loading Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/TTCN3.xtext +15 −18 Original line number Diff line number Diff line Loading @@ -190,14 +190,14 @@ SystemSpec: SYSTEMKEYWORD component=[ComponentDef|IDENTIFIER]; SignatureDef: SIGNATUREKEYWORD name=IDENTIFIER LPAREN params=SignatureFormalParList? RPAREN (return=ReturnType | NOBLOCKKEYWORD)? SIGNATUREKEYWORD name=IDENTIFIER LPAREN paramList=SignatureFormalParList? RPAREN (return=ReturnType | NOBLOCKKEYWORD)? sprec=ExceptionSpec?; ExceptionSpec: EXCEPTIONKEYWORD LPAREN TypeList RPAREN; SignatureFormalParList: value+=FormalValuePar (COMMA value+=FormalValuePar)*; params+=FormalValuePar (COMMA params+=FormalValuePar)*; ModuleControlPart: CONTROLKEYWORD LBRACKET body=ModuleControlBody RBRACKET ws=WithStatement? sc=SEMICOLON?; Loading Loading @@ -384,7 +384,7 @@ ValueSpec: VALUEKEYWORD (VariableRef | (LPAREN specs+=SingleValueSpec (COMMA specs+=SingleValueSpec)* RPAREN)); SingleValueSpec: variable=VariableRef (ASSIGNMENTCHAR field=FieldReference ext+=ExtendedFieldReference*)?; variable=VariableRef (ASSIGNMENTCHAR field=[FieldReference|IDENTIFIER] ext+=ExtendedFieldReference*)?; AltGuardChar: {AltGuardChar} SQUAREOPEN expr=BooleanExpression? SQUARECLOSE; Loading Loading @@ -815,7 +815,7 @@ AllowedValuesSpec: LPAREN ((template+=TemplateOrRange (COMMA template+=TemplateOrRange)*) | CharStringMatch) RPAREN; TemplateOrRange: RangeDef | TemplateBody | Type; range=RangeDef | template=TemplateBody | type=Type; RangeDef: b1=Bound RANGEOP b2=Bound; Loading Loading @@ -869,7 +869,7 @@ FieldSpecList: LBRACKET spec+=FieldSpec (COMMA spec+=FieldSpec)* RBRACKET; FieldSpec: ref=[StructFieldDef|IDENTIFIER] ASSIGNMENTCHAR (body=TemplateBody | MINUS); ref=[FieldReference|IDENTIFIER] ASSIGNMENTCHAR (body=TemplateBody | MINUS); SimpleSpec: expr=SingleExpression (STRINGOP spec=SimpleTemplateSpec)? | spec=SimpleTemplateSpec; Loading Loading @@ -1014,7 +1014,7 @@ ArrayElementExpressionList: expr+=NotUsedOrExpression (COMMA expr+=NotUsedOrExpression)*; FieldExpressionSpec: fieldRef=FieldReference ASSIGNMENTCHAR expr=NotUsedOrExpression; (fieldRef=[FieldReference|IDENTIFIER] | type=PredefinedType) ASSIGNMENTCHAR expr=NotUsedOrExpression; NotUsedOrExpression: Expression | {NotUsedOrExpression} MINUS; Loading @@ -1029,7 +1029,7 @@ FieldConstExpressionList: LBRACKET specs+=FieldConstExpressionSpec (COMMA specs+=FieldConstExpressionSpec)* RBRACKET; FieldConstExpressionSpec: fieldRef=FieldReference ASSIGNMENTCHAR constExpr=ConstantExpression; (fieldRef=[FieldReference|IDENTIFIER] | type=PredefinedType) ASSIGNMENTCHAR constExpr=ConstantExpression; ArrayConstExpression: {ArrayConstExpression} LBRACKET list=ArrayElementConstExpressionList? RBRACKET; Loading @@ -1047,7 +1047,7 @@ ReferencedValue: ref=[RefValue|IDENTIFIER] ext+=ExtendedFieldReference*; RefValue: SingleConstDef | ModuleParameter | SingleVarInstance | FormalValuePar | FormalTemplatePar; SingleConstDef | ModuleParameter | SingleVarInstance | FieldReference | FormalTemplatePar; // IDENTIFIER omitted PredefinedValue: Loading Loading @@ -1117,8 +1117,9 @@ AllRef returns ecore::EString: // TODO: improve references // StructFieldRef | ArrayOrBitRef | ParRef; // ParRef -> RefValue FieldReference: ArrayOrBitRef | StructFieldRef; StructFieldDef | FormalValuePar; ArrayOrBitRef: SQUAREOPEN FieldOrBitNumber SQUARECLOSE; Loading @@ -1133,23 +1134,19 @@ ArrayElementSpecList: spec+=ArrayElementSpec (COMMA spec+=ArrayElementSpec)*; ArrayElementSpec: {ArrayElementSpec} MINUS | PermutationMatch | TemplateBody; {ArrayElementSpec} MINUS | match=PermutationMatch | body=TemplateBody; TimerOps: ReadTimerOp | RunningTimerOp; read=ReadTimerOp | run=RunningTimerOp; RunningTimerOp: TimerRefOrAny DOT RUNNINGKEYWORD; timerRef=TimerRefOrAny DOT RUNNINGKEYWORD; ReadTimerOp: ArrayIdentifierRef DOT READKEYWORD; arrayRed=ArrayIdentifierRef DOT READKEYWORD; PermutationMatch: PERMUTATIONKEYWORD ListOfTemplates; // TODO: complete this rule parRef! TypeReference StructFieldRef: ref=[StructFieldDef|IDENTIFIER] | {StructFieldRef} PredefinedType; PERMUTATIONKEYWORD list=ListOfTemplates; ExtendedFieldReference: DOT (field+=ReferencedValue | type+=PredefinedType) | array+=ArrayOrBitRef | {ExtendedFieldReference} SQUAREOPEN Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/scoping/TTCN3ScopeProvider.xtend +6 −1 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ import de.ugoe.cs.swe.tTCN3.UnionDefNamed import de.ugoe.cs.swe.tTCN3.RecordOfDefNamed import de.ugoe.cs.swe.tTCN3.SetOfDefNamed import de.ugoe.cs.swe.tTCN3.EnumDefNamed import de.ugoe.cs.swe.tTCN3.FormalValuePar import de.ugoe.cs.swe.tTCN3.SignatureDef class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { Loading Loading @@ -132,6 +134,9 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { if (type != null && type.ref != null && typeof(RecordDefNamed).isAssignableFrom(type.ref.class)) { inner.addAll((type.ref as RecordDefNamed).body.defs) } if (type != null && type.ref != null && typeof(SignatureDef).isAssignableFrom(type.ref.class)) { inner.addAll((type.ref as SignatureDef).paramList.params) } scopeFor(inner) } Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/TTCN3Validator.xtend +2 −12 Original line number Diff line number Diff line Loading @@ -53,16 +53,6 @@ import org.eclipse.xtext.validation.Check import static extension de.ugoe.cs.swe.common.TTCN3ScopeHelper.* class TypeAttribs { String name EStructuralFeature feature new(String name, EStructuralFeature feature) { this.name = name this.feature = feature } } class TTCN3Validator extends AbstractTTCN3Validator { @Check Loading @@ -77,7 +67,7 @@ class TTCN3Validator extends AbstractTTCN3Validator { val container = field.findDesiredParent(typeof(ModuleDefinitionsList)) as ModuleDefinitionsList if (container.checkNameClashModuleDefinitionsList(field, field.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.structFieldDef_Name); TTCN3Package.eINSTANCE.refValue_Name); return; } Loading @@ -86,7 +76,7 @@ class TTCN3Validator extends AbstractTTCN3Validator { for (StructFieldDef f : body.defs) { if (f != field && f.name.equals(field.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.structFieldDef_Name); TTCN3Package.eINSTANCE.refValue_Name); return; } } Loading