blob: 1f203ae67c568f7ad27c23885e2e74e091232d52 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 itemis AG (http://www.itemis.eu) 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
*******************************************************************************/
grammar org.eclipse.xtext.example.arithmetics.Arithmetics with org.eclipse.xtext.common.Terminals
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
generate arithmetics "http://www.eclipse.org/Xtext/example/Arithmetics"
Module:
'module' name=ID
(imports+=Import)*
(statements+=Statement)*;
Import:
'import' importedNamespace=ImportName;
ImportName:
ID ('.' '*')?;
Statement:
Definition | Evaluation;
Definition:
'def' name=ID ('(' args+=DeclaredParameter (',' args+=DeclaredParameter)* ')')?
':' expr=Expression ';';
DeclaredParameter:
name=ID;
AbstractDefinition:
Definition | DeclaredParameter;
Evaluation:
expression=Expression ';';
Expression:
Addition;
Addition returns Expression:
Multiplication (({Plus.left=current} '+' | {Minus.left=current} '-') right=Multiplication)*;
Multiplication returns Expression:
PrimaryExpression (({Multi.left=current} '*' | {Div.left=current} '/') right=PrimaryExpression)*;
PrimaryExpression returns Expression:
'(' Expression ')' |
{NumberLiteral} value=NUMBER |
{FunctionCall} func=[AbstractDefinition] ('(' args+=Expression (',' args+=Expression)* ')')?;
terminal NUMBER returns ecore::EBigDecimal:
('0'..'9')* ('.' ('0'..'9')+)?;
terminal INT returns ecore::EInt:
'this one has been deactivated';