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