Skip to main content
aboutsummaryrefslogblamecommitdiffstats
blob: 19f15c6282b9d5b8bc5f69115a1eb0067175cde8 (plain) (tree)
1
2
3
4
5
6
7
8


                                                                                
                                                                       
                                                           


                                         










                                                                                   


                                                                 

                                                                                                    































                                                                                                                                      


























                                                                                                     








                                                                 




                                                                            








                           
























                                                    
                                 

                            
                                                           



                                 




                             

                    
                                                              
 

                     


                                                        


                       
/*******************************************************************************
 * 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:
	"'''" -> "'''";

Back to the top