All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jnario.spec.Spec.xtext Maven / Gradle / Ivy

The newest version!
grammar org.jnario.spec.Spec with org.eclipse.xtend.core.Xtend

import "http://www.eclipse.org/emf/2002/Ecore" as ecore
import "http://www.org/jnario/spec/Spec" 
import "http://www.eclipse.org/xtend" as xtend
import "http://www.eclipse.org/xtext/xbase/Xbase" as xbase
import "http://www.eclipse.org/xtext/common/JavaVMTypes" as types
import "http://www.org/Jnario"

SpecFile:
{SpecFile}
('package' package=QualifiedName)? 
	importSection=XImportSection?
	(xtendTypes+=(Type))*
;

Type returns xtend::XtendTypeDeclaration :
	{xtend::XtendTypeDeclaration} annotations+=XAnnotation*   
	(
		{xtend::XtendClass.annotationInfo = current}
		modifiers+=CommonModifier*
	  	'class' name=ValidID ('<' typeParameters+=JvmTypeParameter (',' typeParameters+=JvmTypeParameter)* '>')?  
	   	("extends" extends=JvmParameterizedTypeReference)? 
	   	('implements' implements+=JvmParameterizedTypeReference (',' implements+=JvmParameterizedTypeReference)*)?'{'
		   (members+=Member)*
	   	'}'
	 |
		{xtend::XtendInterface.annotationInfo = current}
		modifiers+=CommonModifier*
	  	'interface' name=ValidID ('<' typeParameters+=JvmTypeParameter (',' typeParameters+=JvmTypeParameter)* '>')?  
	   	('extends' extends+=JvmParameterizedTypeReference (',' extends+=JvmParameterizedTypeReference)*)?'{'
		   (members+=Member)*
	   	'}'
	 |
		{xtend::XtendEnum.annotationInfo = current}
		modifiers+=CommonModifier*
	  	'enum' name=ValidID '{'   
		   (members+=XtendEnumLiteral (',' members+=XtendEnumLiteral)*)? ';'?
	   	'}'
	 |
	 	{xtend::XtendAnnotationType.annotationInfo = current}
	 	modifiers+=CommonModifier*
		'annotation' name=ValidID '{'
		   (members+=AnnotationField)*
	   	'}'
	 |
	 	{ExampleGroup.annotationInfo = current}
    	preamble='describe' targetType=JvmTypeReference? name=STRING? '{'
       (members+=Member*)
	'}'
	)
;

Method:
	ID ('(' (TypeName (',' TypeName)*)? ')')?  
;

TypeName:
	ID ('<' TypeRef (',' TypeRef)* '>')? ('['']')?
;

TypeRef:
	('?')? ('extends' | 'super')?  TypeName
;


Member returns xtend::XtendMember:
	{xtend::XtendMember} annotations+=XAnnotation* 
	(
		{Example.annotationInfo = current}
			( pending?='pending'? ('fact' | 'facts') expr=XExpression expression=XBlockExpression?)
	|	{ExampleGroup.annotationInfo = current}
			(preamble='describe' targetType=JvmTypeReference? name=STRING? '{'
      		members+=Member*
      	'}')
    |	{Before.annotationInfo = current}
		('before' (modifiers+='all'|'each')? =>name=STRING? expression=XExpression)
	|	{After.annotationInfo = current}
		('after' (modifiers+='all'|'each')? =>name=STRING? expression=XExpression)
    |	{ExampleGroup.annotationInfo = current}
			(preamble=('context') targetOperation=[types::JvmOperation|Method]? name=STRING? '{'
      		members+=Member*
      	'}')
	|	{ExampleTable.annotationInfo = current} 
		('def' name=ID? '{'
			('|' (columns+=ExampleColumn)*
			(rows += ExampleRow)*)?
      	'}') 
	|{xtend::XtendField.annotationInfo = current} modifiers+=CommonModifier*
		(
			modifiers+=FieldModifier modifiers+=CommonModifier* 
			type=JvmTypeReference? name=ValidID 
		|
			modifiers+='extension' (modifiers+=FieldModifier | modifiers+=CommonModifier)* 
			type=JvmTypeReference name=ValidID?
		| 
			modifiers+=FieldModifier (modifiers+=CommonModifier)* modifiers+='extension' (modifiers+=CommonModifier)*  
			type=JvmTypeReference name=ValidID?
		|  
			type=JvmTypeReference name=ValidID
		) ('=' initialValue=XExpression)? ';'?
		| (
			{xtend::XtendFunction.annotationInfo = current} modifiers+=CommonModifier*
			modifiers+=MethodModifier (modifiers+=CommonModifier | modifiers+=MethodModifier)* 
			('<' typeParameters+=JvmTypeParameter (',' typeParameters+=JvmTypeParameter)* '>')?
			( 
				=>(returnType=JvmTypeReference createExtensionInfo=CreateExtensionInfo name=ValidID '(')
			  | =>(returnType=JvmTypeReference name=ValidID '(')
			  | =>(createExtensionInfo=CreateExtensionInfo name=ValidID '(')
			  | name=ValidID '('
			)
			(parameters+=Parameter (',' parameters+=Parameter)*)? ')'
			('throws' exceptions+=JvmTypeReference (',' exceptions+=JvmTypeReference)*)?
			(expression=XBlockExpression | expression=RichString | ';')?
			)	
		);


XPrimaryExpression returns xbase::XExpression:
  XConstructorCall |
  XBlockExpression |
  XSwitchExpression |
  XSynchronizedExpression |
  XFeatureCall |
  XLiteral |
  XIfExpression |
  XForLoopExpression |
  XBasicForLoopExpression |
  XWhileExpression |
  XDoWhileExpression |
  XThrowExpression |
  XReturnExpression |
  XTryCatchFinallyExpression |
  XParenthesizedExpression |
	Assertion;


XRelationalExpression returns xbase::XExpression:
	XOtherOperatorExpression
	( 
	 =>({Should.leftOperand=current} 
	 		( feature=[types::JvmIdentifiableElement|Should])) =>rightOperand=XOtherOperatorExpression? |
	 =>({ShouldThrow.expression=current} (('should' 'throw') | 'throws')) type=JvmTypeReference |
	 =>({xbase::XInstanceOfExpression.expression=current} 'instanceof') type=JvmTypeReference |
	 =>({xbase::XBinaryOperation.leftOperand=current} feature=[types::JvmIdentifiableElement|OpCompare]) rightOperand=XOtherOperatorExpression)*;

Should:
	'should' 'not'? ID
;

Assertion returns xbase::XExpression: 
	{Assertion}
	'assert' expression=XExpression;
	
ExampleColumn: 
	type=JvmTypeReference? name=ValidID '|';

ExampleRow: 
	'|' {ExampleRow} (cells+=ExampleCell '|')*
;

ExampleCell:
	expression=XExpression
;


terminal ML_COMMENT: '/*' -> (!('\\')'*/');

terminal RICH_TEXT : "'''" IN_RICH_STRING* ("'''"| ("'" "'"?)? EOF);
terminal RICH_TEXT_START : "'''" IN_RICH_STRING* ("'" "'"?)? '«';
terminal RICH_TEXT_END : '»' IN_RICH_STRING* ("'''"| ("'" "'"?)? EOF) ;
terminal RICH_TEXT_INBETWEEN : '»' IN_RICH_STRING* ("'" "'"?)? '«';
terminal COMMENT_RICH_TEXT_INBETWEEN: "««" !('\n'|'\r')* ('\r'? '\n' IN_RICH_STRING* ("'" "'"?)? '«')?; 
terminal COMMENT_RICH_TEXT_END: "««" !('\n'|'\r')* (('\r'? '\n' IN_RICH_STRING* ("'''"| ("'" "'"?)? EOF)) | EOF); 

terminal fragment IN_RICH_STRING : 
	  "''" !('«'|"'") 
	| "'" !('«'|"'")
	| !('«'|"'");





© 2015 - 2025 Weber Informatics LLC | Privacy Policy