blob: 19f15c6282b9d5b8bc5f69115a1eb0067175cde8 (
plain) (
tree)
|
|
/*******************************************************************************
* Copyright (c) 2013 protos software gmbh (http://www.protos.de).
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* CONTRIBUTORS:
* Juergen Haug and Thomas Schuetz (initial contribution)
* Eyrak Paen
*
*******************************************************************************/
grammar org.eclipse.etrice.core.common.Base with org.eclipse.xtext.common.Terminals
generate base "http://www.eclipse.org/etrice/core/common/Base"
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
// **************************************************************
// AnnotationType and Annotation Rules
Annotation:'@' type=[AnnotationType|FQN] ('(' attributes+=KeyValue (',' attributes+=KeyValue)* ')')?
;
KeyValue: key=ID '=' value=Literal;
AnnotationType:
'AnnotationType' name=ID (docu=Documentation)? '{'
'target' '=' (targets+=(AnnotationTargetType) | ( '{' targets+=AnnotationTargetType (',' targets+=AnnotationTargetType)* '}'))
attributes+=AnnotationAttribute*
'}'
;
//
// Sub-grammars should use AnnotationTargetType to refer to
// specific sub-grammar targets. For example, valid values for
// AnnotationTargetType in the Room.xtext sub-grammar include "ActorClass",
// "ActorBehavior", "ProtocolClass", etc. The sub-grammar is responsible for
// implementing validation, quick-fixes, and code completion proposals via the
// usual Xtext mechanisms.
//
AnnotationTargetType:
ID
;
AnnotationAttribute: SimpleAnnotationAttribute | EnumAnnotationAttribute;
SimpleAnnotationAttribute:
(optional?='optional' | 'mandatory') 'attribute' name=ID ':' type=LiteralType
;
EnumAnnotationAttribute:
(optional?='optional' | 'mandatory') 'attribute' name=ID ':' '{' values+=STRING (',' values+=STRING)* '}'
;
// **************************************************************
// Import rules
// HOWTO: use a combination of URI global scopes and namespace aware local scope provider
// this is configured in the work flow by
// fragment = scoping.ImportURIScopingFragment {}
// and by overriding configureIScopeProviderDelegate in the runtime module with
// ImportedNamespaceAwareLocalScopeProvider
// also configure in the RuntimeModule
// public Class<? extends ImportUriResolver> bindImportUriResolver() {
// return PlatformRelativeUriResolver.class;
// }
// and in the UiRuntimeModule
// public Class<? extends org.eclipse.xtext.ui.editor.IURIEditorOpener> bindIURIEditorOpener() {
// return GlobalNonPlatformURIEditorOpener.class;
// }
// public Class<? extends IHyperlinkHelper> bindIHyperlinkHelper() {
// return ImportAwareHyperlinkHelper.class;
// }
// the attribute 'importedNamespace' is picked up by the ImportedNamespaceAwareLocalScopeProvider
// the attribute 'importURI' is picked up by the ImportUriGlobalScopeProvider
Import :
'import' (importedNamespace=ImportedFQN 'from' | 'model') importURI=STRING;
ImportedFQN:
FQN ('.*')?;
// **************************************************************
// Documentation Rule
Documentation:
{Documentation}
'['
lines+=STRING*
']';
// **************************************************************
// Time Rule
TIME returns ecore::ELong: (INT 's') | (INT 'ms') | (INT 'us') | (INT 'ns');
// **************************************************************
// Literal Rules
enum LiteralType:
BOOL='ptBoolean' |
INT='ptInteger' |
REAL='ptReal' |
CHAR='ptCharacter'
;
LiteralArray:
literals+=Literal (',' literals+=Literal)*;
// Value Types for Attributes
Literal:
BooleanLiteral |
NumberLiteral |
StringLiteral;
BooleanLiteral:
{BooleanLiteral} ('false' | isTrue?='true');
NumberLiteral:
IntLiteral | RealLiteral;
RealLiteral:
{RealLiteral} value=Real;
IntLiteral:
{IntLiteral} value=Integer;
StringLiteral:
{StringLiteral} value=STRING;
Integer returns ecore::ELong:
(('+' | '-')? INT) | HEX;
Real returns ecore::EDouble:
Decimal | /*DotDecimal | DecimalDot |*/ DecimalExp;
Decimal hidden():
('+' | '-')? INT '.' INT;
//DotDecimal hidden():
// ('+' | '-')? '.' INT;
//
//DecimalDot hidden():
// ('+' | '-')? INT '.';
DecimalExp hidden():
('+' | '-')? INT '.' INT ('e' | 'E') ('+' | '-')? INT;
FQN:
ID ('.' ID)*;
terminal HEX:
('0x' | '0X') ('0'..'9' | 'a'..'f' | 'A'..'F')+;
terminal CC_STRING:
"'''" -> "'''";
|