| /******************************************************************************* |
| * Copyright (c) 2010 Willink Transformations and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v2.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v20.html |
| * |
| * Contributors: |
| * E.D.Willink - initial API and implementation |
| * E.D.Willink (Obeo) - Bug 416287 - tuple-valued constraints |
| *******************************************************************************/ |
| grammar org.eclipse.ocl.xtext.oclstdlib.OCLstdlib with org.eclipse.ocl.xtext.essentialocl.EssentialOCL |
| |
| import "http://www.eclipse.org/emf/2002/Ecore" as ecore |
| import "platform:/resource/org.eclipse.ocl.pivot/model/Pivot.ecore" as pivot |
| import "platform:/resource/org.eclipse.ocl.xtext.base/model/BaseCS.ecore" as base |
| import "platform:/resource/org.eclipse.ocl.xtext.essentialocl/model/EssentialOCLCS.ecore" as essentialocl |
| import "platform:/resource/org.eclipse.ocl.xtext.oclstdlib/model/OCLstdlibCS.ecore" |
| //generate OCLstdlib "http://www.eclipse.org/ocl/examples/xtext/oclstdlib/OCLstdlibCST" |
| |
| Library returns LibRootPackageCS: |
| (ownedImports+=ImportCS ';')* |
| (ownedPackages+=LibPackageCS)* |
| ; |
| |
| Identifier: |
| ID |
| | RestrictedKeywords |
| ; |
| |
| RestrictedKeywords: |
| 'abstract' |
| | 'annotation' |
| | 'conformsTo' |
| | 'documentation' |
| | 'extends' |
| | 'import' |
| | 'inv' |
| | 'invalidating' |
| | 'iteration' |
| | 'left' |
| | 'library' |
| | 'operation' |
| | 'opposite' |
| | 'package' |
| | 'post' |
| | 'pre' |
| | 'precedence' |
| | 'property' |
| | 'right' |
| | 'static' |
| | 'type' |
| //| 'typeof' |
| | 'validating' |
| //| 'Lambda' |
| //| 'Tuple' |
| ; |
| |
| Name: |
| Identifier |
| | DOUBLE_QUOTED_STRING |
| | EssentialOCLReservedKeyword |
| | PrimitiveTypeIdentifier |
| | CollectionTypeIdentifier |
| ; |
| |
| AnyName: |
| Name |
| | 'Lambda' |
| | 'Map' |
| | 'Tuple' |
| ; |
| |
| LibPathNameCS returns base::PathNameCS: |
| ownedPathElements+=LibPathElementCS ('::' ownedPathElements+=LibPathElementCS)*; |
| |
| LibPathElementCS returns base::PathElementCS: |
| referredElement=[pivot::NamedElement|Name]; |
| |
| AccumulatorCS returns base::ParameterCS: |
| name=Identifier ':' ownedType=TypedMultiplicityRefCS |
| ; |
| |
| AnnotationCS returns base::AnnotationCS: |
| 'annotation' name=(Identifier|SINGLE_QUOTED_STRING) |
| ('(' ownedDetails+=DetailCS (',' ownedDetails+=DetailCS)* ')')? |
| (('{' ownedAnnotations+=AnnotationElementCS '}') |
| |';' |
| ) |
| ; |
| |
| AnnotationElementCS returns base::AnnotationElementCS: |
| AnnotationCS | DocumentationCS |
| ; |
| |
| LibClassCS returns LibClassCS: |
| (isAbstract?='abstract')? 'type' name=AnyName |
| (ownedSignature=TemplateSignatureCS)? |
| (':' metaclassName=[MetaclassNameCS|AnyName])? |
| ('conformsTo' ownedSuperTypes+=TypedRefCS (',' ownedSuperTypes+=TypedRefCS)*)? |
| '{' (ownedOperations+=OperationCS |
| | ownedProperties+=LibPropertyCS |
| | ownedConstraints+=InvCS |
| | ownedAnnotations+=AnnotationElementCS)* '}' |
| ; |
| |
| ClassCS returns base::ClassCS: |
| LibClassCS |
| ; |
| |
| DetailCS returns base::DetailCS: |
| name=(Name|SINGLE_QUOTED_STRING) '=' values+=(SINGLE_QUOTED_STRING|ML_SINGLE_QUOTED_STRING)* |
| ; |
| |
| DocumentationCS returns base::DocumentationCS: |
| {base::DocumentationCS} 'documentation' value=SINGLE_QUOTED_STRING? |
| ('(' ownedDetails+=DetailCS (',' ownedDetails+=DetailCS)* ')')? |
| ';' |
| ; |
| |
| ImportCS returns base::ImportCS: |
| 'import' (name=Identifier ':')? ownedPathName=URIPathNameCS (isAll?='::*')?; |
| |
| InvCS returns LibConstraintCS: |
| stereotype='inv' (name=UnrestrictedName ('(' ownedMessageSpecification=SpecificationCS ')')?)? ':' ownedSpecification=SpecificationCS ';' |
| ; |
| |
| LibCoercionCS returns LibCoercionCS: |
| 'coercion' name=Name '(' ')' ':' ownedType=TypedMultiplicityRefCS |
| ('=>' implementation=[JavaClassCS|SINGLE_QUOTED_STRING])? |
| (('{' (ownedAnnotations+=AnnotationElementCS |
| | ownedPreconditions+=PostCS |
| | ownedPostconditions+=PreCS)* '}') |
| |';' |
| ) |
| ; |
| |
| LibIterationCS returns LibIterationCS: |
| 'iteration' name=Name |
| (ownedSignature=TemplateSignatureCS)? |
| '(' ownedIterators+=IteratorCS (',' ownedIterators+=IteratorCS)* |
| (';' ownedAccumulators+=AccumulatorCS (',' ownedAccumulators+=AccumulatorCS)*)? |
| ('|' ownedParameters+=ParameterCS (',' ownedParameters+=ParameterCS)*)? |
| ')' |
| ':' ownedType=TypedMultiplicityRefCS |
| (isInvalidating?='invalidating')? |
| (isValidating?='validating')? |
| ('=>' implementation=[JavaClassCS|SINGLE_QUOTED_STRING])? |
| (('{' (ownedAnnotations+=AnnotationElementCS |
| | ownedPreconditions+=PostCS |
| | ownedPostconditions+=PreCS)* '}') |
| |';' |
| ) |
| ; |
| |
| IteratorCS returns base::ParameterCS: |
| name=Identifier ':' ownedType=TypedMultiplicityRefCS |
| ; |
| |
| LambdaTypeCS returns base::LambdaTypeCS: |
| name='Lambda' (ownedSignature=TemplateSignatureCS)? ownedContextType=LambdaContextTypeRefCS |
| '(' (ownedParameterTypes+=TypedMultiplicityRefCS (',' ownedParameterTypes+=TypedMultiplicityRefCS)*)? ')' |
| ':' ownedResultType=TypedRefCS |
| ; |
| |
| LambdaContextTypeRefCS returns base::TypedTypeRefCS: |
| ownedPathName=LibPathNameCS |
| ; |
| |
| OperationCS returns base::OperationCS: |
| LibCoercionCS|LibIterationCS|LibOperationCS |
| ; |
| |
| LibOperationCS returns LibOperationCS: |
| (isStatic?='static')? 'operation' name=Name |
| (ownedSignature=TemplateSignatureCS)? |
| '(' (ownedParameters+=ParameterCS (',' ownedParameters+=ParameterCS)*)? ')' |
| ':' ownedType=TypedMultiplicityRefCS |
| (isValidating?='validating')? |
| (isInvalidating?='invalidating')? |
| ('precedence' '=' precedence=[pivot::Precedence|Name])? |
| ('=>' implementation=[JavaClassCS|SINGLE_QUOTED_STRING])? |
| (('{' (ownedAnnotations+=AnnotationElementCS |
| | ('body' UnrestrictedName? ':' ownedBodyExpressions+=SpecificationCS ';') |
| | ownedPostconditions+=PostCS |
| | ownedPreconditions+=PreCS)* '}') |
| |';' |
| ) |
| ; |
| |
| LibOppositeCS returns LibOppositeCS: |
| 'opposite' name=Name ':' ownedType=TypedMultiplicityRefCS |
| ; |
| |
| LibPackageCS returns LibPackageCS: |
| 'library' name=Name |
| (':' nsPrefix=Identifier '=' nsURI=URI)? |
| '{' (ownedPackages+=PackageCS |
| | ('precedence' (ownedPrecedences+=PrecedenceCS)+ ';') |
| | ownedClasses+=ClassCS |
| | ownedAnnotations+=AnnotationElementCS)* |
| '}' |
| ; |
| |
| PackageCS returns base::PackageCS: |
| 'package' name=Name |
| (':' nsPrefix=Identifier '=' nsURI=URI)? |
| '{' |
| (ownedPackages+=PackageCS |
| | ownedClasses+=ClassCS |
| | ownedAnnotations+=AnnotationElementCS)* |
| '}' |
| ; |
| |
| ParameterCS returns base::ParameterCS: |
| name=Identifier ':' ownedType=TypedMultiplicityRefCS |
| ; |
| |
| LibPropertyCS returns LibPropertyCS: |
| (isStatic?='static')? 'property' name=Name |
| ':' ownedType=TypedMultiplicityRefCS |
| ownedOpposite=LibOppositeCS? |
| ('=>' implementation=[JavaClassCS|SINGLE_QUOTED_STRING])? |
| ( ('{' (ownedAnnotations+=AnnotationElementCS)* '}') |
| | ';' |
| ) |
| ; |
| |
| PostCS returns LibConstraintCS: |
| stereotype='post' (name=UnrestrictedName ('(' ownedMessageSpecification=SpecificationCS ')')?)? ':' ownedSpecification=SpecificationCS ';' |
| ; |
| |
| PreCS returns LibConstraintCS: |
| stereotype='pre' (name=UnrestrictedName ('(' ownedMessageSpecification=SpecificationCS ')')?)? ':' ownedSpecification=SpecificationCS ';' |
| ; |
| |
| PrecedenceCS returns PrecedenceCS: |
| ('left'|isRightAssociative?='right') ':' name=Name |
| ; |
| |
| SpecificationCS returns essentialocl::ExpSpecificationCS: |
| ownedExpression=ExpCS; |
| |
| TypedMultiplicityRefCS returns base::TypedRefCS: |
| (MapTypeCS | TupleTypeCS | TypedTypeRefCS | LambdaTypeCS) (ownedMultiplicity=MultiplicityCS)? |
| ; |
| |
| //--------------------------------------------------------------------------------- |
| // Base overrides |
| //--------------------------------------------------------------------------------- |
| TypedRefCS returns base::TypedRefCS: |
| MapTypeCS | TupleTypeCS | TypedTypeRefCS | LambdaTypeCS |
| ; |
| |
| TypedTypeRefCS returns base::TypedTypeRefCS: |
| (isTypeof?='typeof' '(' ownedPathName=LibPathNameCS ')') |
| | (ownedPathName=LibPathNameCS ('(' ownedBinding=TemplateBindingCS ')')?) |
| ; |
| |
| //--------------------------------------------------------------------------------- |
| // EssentialOCL overrides |
| //--------------------------------------------------------------------------------- |
| TuplePartCS returns base::TuplePartCS: |
| name=Identifier ':' ownedType=TypedMultiplicityRefCS |
| ; |