Переглянути джерело

Mscript StepExpression rule added.

au@andreasunger.net 14 роки тому
батько
коміт
936f8fac4e
42 змінених файлів з 21253 додано та 12021 видалено
  1. 46 4
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/AbstractMscriptProposalProvider.java
  2. 16 1
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/MscriptParser.java
  3. 930 70
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g
  4. 80 77
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.tokens
  5. 672 609
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscriptLexer.java
  6. 10870 8248
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscriptParser.java
  7. 8 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language.ui/src/org/eclipselabs/mscript/language/ui/MscriptUiModule.java
  8. 34 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language.ui/src/org/eclipselabs/mscript/language/ui/syntaxcoloring/MscriptAntlrTokenToAttributeIdMapper.java
  9. 25 1
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/model/Mscript.ecore
  10. 18 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/model/Mscript.genmodel
  11. 183 70
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/Mscript.xmi
  12. 1102 158
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parseTreeConstruction/MscriptParsetreeConstructor.java
  13. 444 69
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g
  14. 79 76
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.tokens
  15. 698 636
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscriptLexer.java
  16. 3047 1764
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscriptParser.java
  17. 404 98
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/services/MscriptGrammarAccess.java
  18. 39 12
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/Mscript.xtext
  19. 110 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/AdditiveStepExpression.java
  20. 45 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/AstFactory.java
  21. 482 13
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/AstPackage.java
  22. 53 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/NegateStepExpression.java
  23. 21 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/PrimitiveStepExpression.java
  24. 80 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/RangeStepExpression.java
  25. 22 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/StepExpression.java
  26. 53 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/StepLiteral.java
  27. 21 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/StepN.java
  28. 3 4
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/VariableAccess.java
  29. 311 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/AdditiveStepExpressionImpl.java
  30. 60 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/AstFactoryImpl.java
  31. 231 1
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/AstPackageImpl.java
  32. 176 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/NegateStepExpressionImpl.java
  33. 42 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/PrimitiveStepExpressionImpl.java
  34. 242 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/RangeStepExpressionImpl.java
  35. 43 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/StepExpressionImpl.java
  36. 163 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/StepLiteralImpl.java
  37. 42 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/StepNImpl.java
  38. 8 8
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/VariableAccessImpl.java
  39. 133 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/util/AstAdapterFactory.java
  40. 162 0
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/util/AstSwitch.java
  41. 24 25
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/conversion/MscriptTerminalConverters.java
  42. 31 77
      org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/internal/functionmodel/util/StepExpressionHelper.java

+ 46 - 4
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/AbstractMscriptProposalProvider.java

@@ -324,6 +324,21 @@ public class AbstractMscriptProposalProvider extends AbstractJavaBasedContentPro
 	public void completeFeatureCall_Arguments(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
+	public void completeRangeStepExpression_End(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeAdditiveStepExpression_Operator(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeAdditiveStepExpression_RightOperand(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeNegateStepExpression_Operand(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeStepLiteral_Value(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
 	public void completeArrayConstructionOperator_Expressions(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
@@ -571,6 +586,27 @@ public class AbstractMscriptProposalProvider extends AbstractJavaBasedContentPro
 	public void complete_FeatureCall(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
+	public void complete_StepExpression(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_RangeStepExpression(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_AdditiveStepExpression(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_NegateStepExpression(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_PrimitiveStepExpression(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_StepLiteral(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_StepN(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
 	public void complete_ArrayConstructionOperator(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
@@ -610,16 +646,22 @@ public class AbstractMscriptProposalProvider extends AbstractJavaBasedContentPro
 	public void complete_UnitExponent(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
-	public void complete_ValidReal(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void complete_QualifiedName(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_ValidDouble(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
-	public void complete_ValidInteger(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void complete_ValidInt(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_ValidLong(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
 	public void complete_ValidID(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
-	public void complete_QualifiedName(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void complete_N(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
 	public void complete_ID(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
@@ -634,7 +676,7 @@ public class AbstractMscriptProposalProvider extends AbstractJavaBasedContentPro
 	public void complete_REAL(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
-	public void complete_INTEGER(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void complete_INT(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
 	public void complete_ML_COMMENT(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {

+ 16 - 1
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/MscriptParser.java

@@ -56,10 +56,14 @@ public class MscriptParser extends AbstractContentAssistParser {
 					put(grammarAccess.getLiteralAccess().getAlternatives(), "rule__Literal__Alternatives");
 					put(grammarAccess.getNumericLiteralAccess().getAlternatives(), "rule__NumericLiteral__Alternatives");
 					put(grammarAccess.getFeatureCallAccess().getAlternatives(), "rule__FeatureCall__Alternatives");
+					put(grammarAccess.getNegateStepExpressionAccess().getAlternatives(), "rule__NegateStepExpression__Alternatives");
+					put(grammarAccess.getPrimitiveStepExpressionAccess().getAlternatives(), "rule__PrimitiveStepExpression__Alternatives");
 					put(grammarAccess.getArrayConstructionOperatorAccess().getAlternatives_2(), "rule__ArrayConstructionOperator__Alternatives_2");
 					put(grammarAccess.getUnitNumeratorAccess().getAlternatives(), "rule__UnitNumerator__Alternatives");
 					put(grammarAccess.getUnitDenominatorAccess().getAlternatives(), "rule__UnitDenominator__Alternatives");
-					put(grammarAccess.getValidIntegerAccess().getAlternatives(), "rule__ValidInteger__Alternatives");
+					put(grammarAccess.getValidIntAccess().getAlternatives(), "rule__ValidInt__Alternatives");
+					put(grammarAccess.getValidLongAccess().getAlternatives(), "rule__ValidLong__Alternatives");
+					put(grammarAccess.getValidIDAccess().getAlternatives(), "rule__ValidID__Alternatives");
 					put(grammarAccess.getAssertionStatusKindAccess().getAlternatives(), "rule__AssertionStatusKind__Alternatives");
 					put(grammarAccess.getEqualityOperatorAccess().getAlternatives(), "rule__EqualityOperator__Alternatives");
 					put(grammarAccess.getRelationalOperatorAccess().getAlternatives(), "rule__RelationalOperator__Alternatives");
@@ -160,6 +164,12 @@ public class MscriptParser extends AbstractContentAssistParser {
 					put(grammarAccess.getFeatureCallAccess().getGroup_1_0(), "rule__FeatureCall__Group_1_0__0");
 					put(grammarAccess.getFeatureCallAccess().getGroup_1_0_3(), "rule__FeatureCall__Group_1_0_3__0");
 					put(grammarAccess.getFeatureCallAccess().getGroup_1_0_3_1(), "rule__FeatureCall__Group_1_0_3_1__0");
+					put(grammarAccess.getRangeStepExpressionAccess().getGroup(), "rule__RangeStepExpression__Group__0");
+					put(grammarAccess.getRangeStepExpressionAccess().getGroup_1(), "rule__RangeStepExpression__Group_1__0");
+					put(grammarAccess.getAdditiveStepExpressionAccess().getGroup(), "rule__AdditiveStepExpression__Group__0");
+					put(grammarAccess.getAdditiveStepExpressionAccess().getGroup_1(), "rule__AdditiveStepExpression__Group_1__0");
+					put(grammarAccess.getNegateStepExpressionAccess().getGroup_1(), "rule__NegateStepExpression__Group_1__0");
+					put(grammarAccess.getStepNAccess().getGroup(), "rule__StepN__Group__0");
 					put(grammarAccess.getArrayConstructionOperatorAccess().getGroup(), "rule__ArrayConstructionOperator__Group__0");
 					put(grammarAccess.getArrayConstructionOperatorAccess().getGroup_2_0(), "rule__ArrayConstructionOperator__Group_2_0__0");
 					put(grammarAccess.getArrayConstructionOperatorAccess().getGroup_2_1(), "rule__ArrayConstructionOperator__Group_2_1__0");
@@ -305,6 +315,11 @@ public class MscriptParser extends AbstractContentAssistParser {
 					put(grammarAccess.getFeatureCallAccess().getFeatureAssignment_1_0_1(), "rule__FeatureCall__FeatureAssignment_1_0_1");
 					put(grammarAccess.getFeatureCallAccess().getArgumentsAssignment_1_0_3_0(), "rule__FeatureCall__ArgumentsAssignment_1_0_3_0");
 					put(grammarAccess.getFeatureCallAccess().getArgumentsAssignment_1_0_3_1_1(), "rule__FeatureCall__ArgumentsAssignment_1_0_3_1_1");
+					put(grammarAccess.getRangeStepExpressionAccess().getEndAssignment_1_2(), "rule__RangeStepExpression__EndAssignment_1_2");
+					put(grammarAccess.getAdditiveStepExpressionAccess().getOperatorAssignment_1_1(), "rule__AdditiveStepExpression__OperatorAssignment_1_1");
+					put(grammarAccess.getAdditiveStepExpressionAccess().getRightOperandAssignment_1_2(), "rule__AdditiveStepExpression__RightOperandAssignment_1_2");
+					put(grammarAccess.getNegateStepExpressionAccess().getOperandAssignment_1_2(), "rule__NegateStepExpression__OperandAssignment_1_2");
+					put(grammarAccess.getStepLiteralAccess().getValueAssignment(), "rule__StepLiteral__ValueAssignment");
 					put(grammarAccess.getArrayConstructionOperatorAccess().getExpressionsAssignment_1(), "rule__ArrayConstructionOperator__ExpressionsAssignment_1");
 					put(grammarAccess.getArrayConstructionOperatorAccess().getExpressionsAssignment_2_0_1(), "rule__ArrayConstructionOperator__ExpressionsAssignment_2_0_1");
 					put(grammarAccess.getArrayConstructionOperatorAccess().getIterationClausesAssignment_2_1_1(), "rule__ArrayConstructionOperator__IterationClausesAssignment_2_1_1");

Різницю між файлами не показано, бо вона завелика
+ 930 - 70
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.g


+ 80 - 77
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscript.tokens

@@ -1,6 +1,6 @@
 T__68=68
 T__69=69
-RULE_ID=5
+RULE_ID=8
 T__66=66
 T__67=67
 T__64=64
@@ -15,10 +15,10 @@ T__25=25
 T__24=24
 T__23=23
 T__22=22
-RULE_ANY_OTHER=12
+RULE_ANY_OTHER=13
 T__21=21
 T__20=20
-RULE_ONE=6
+RULE_ONE=5
 T__61=61
 T__60=60
 T__55=55
@@ -30,30 +30,33 @@ T__16=16
 T__51=51
 T__15=15
 T__52=52
-T__53=53
 T__18=18
+T__53=53
 T__54=54
 T__17=17
 T__14=14
-T__13=13
+RULE_N=7
 T__59=59
+RULE_INT=6
 RULE_REAL=4
 T__50=50
 T__42=42
 T__43=43
 T__40=40
 T__41=41
+T__80=80
 T__46=46
+T__81=81
 T__47=47
 T__44=44
 T__45=45
 T__48=48
 T__49=49
-RULE_SL_COMMENT=10
-RULE_ML_COMMENT=9
+RULE_SL_COMMENT=11
+RULE_ML_COMMENT=10
 T__30=30
 T__31=31
-RULE_STRING=8
+RULE_STRING=9
 T__32=32
 T__71=71
 T__33=33
@@ -65,79 +68,79 @@ T__36=36
 T__37=37
 T__38=38
 T__39=39
-RULE_WS=11
+RULE_WS=12
 T__76=76
 T__75=75
 T__74=74
 T__73=73
-RULE_INTEGER=7
 T__79=79
 T__78=78
 T__77=77
-'end'=76
-'>='=23
-'/'=27
-'=='=18
-'switch'=64
-'then'=62
-'string'=56
-'type'=39
-'>'=22
-'||'=68
-'&&'=69
-'complex'=53
-';'=41
-'warning'=15
-'for'=73
-'+'=24
-'fob'=50
-'.'=71
-'=>'=67
-'is'=70
-'^'=30
-'error'=16
-'$'=74
-'static'=79
-'true'=34
-'else'=63
-'func'=44
-'let'=59
-'fatal'=17
-'{'=36
-'stateful'=78
-'\''=13
-'var'=49
-'int'=52
-'if'=61
-':'=43
-'('=45
-'-'=25
-','=38
-'default'=65
-'in'=60
-']'=58
-'enum'=35
-'real'=51
-'!'=32
-'|'=72
-'assert'=48
-'begin'=75
-'.^'=31
-'.*'=28
-'info'=14
-'='=40
-'::'=77
-')'=46
-'bool'=55
-'./'=29
-'->'=47
-'case'=66
-'}'=37
-'<='=21
-'!='=19
-'false'=33
-'<'=20
-'*'=26
-'['=57
-'gauss'=54
-'record'=42
+'end'=78
+'>='=24
+'/'=28
+'=='=19
+'switch'=65
+'then'=63
+'string'=57
+'type'=40
+'>'=23
+'||'=69
+'&&'=70
+'complex'=54
+';'=42
+'warning'=16
+'for'=75
+'+'=25
+'fob'=51
+'.'=72
+'=>'=68
+'is'=71
+'^'=31
+'error'=17
+'$'=76
+'static'=81
+'true'=35
+'else'=64
+'func'=45
+'let'=60
+'fatal'=18
+'{'=37
+'stateful'=80
+'\''=14
+'var'=50
+'int'=53
+'if'=62
+':'=44
+'('=46
+'-'=26
+','=39
+'default'=66
+'in'=61
+']'=59
+'..'=74
+'enum'=36
+'real'=52
+'!'=33
+'|'=73
+'assert'=49
+'begin'=77
+'.^'=32
+'.*'=29
+'info'=15
+'='=41
+'::'=79
+')'=47
+'bool'=56
+'./'=30
+'->'=48
+'case'=67
+'}'=38
+'<='=22
+'!='=20
+'false'=34
+'<'=21
+'*'=27
+'['=58
+'gauss'=55
+'record'=43

Різницю між файлами не показано, бо вона завелика
+ 672 - 609
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscriptLexer.java


Різницю між файлами не показано, бо вона завелика
+ 10870 - 8248
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language.ui/src-gen/org/eclipselabs/mscript/language/ui/contentassist/antlr/internal/InternalMscriptParser.java


+ 8 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language.ui/src/org/eclipselabs/mscript/language/ui/MscriptUiModule.java

@@ -4,12 +4,20 @@
 package org.eclipselabs.mscript.language.ui;
 
 import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.xtext.ui.editor.syntaxcoloring.DefaultAntlrTokenToAttributeIdMapper;
+import org.eclipselabs.mscript.language.ui.syntaxcoloring.MscriptAntlrTokenToAttributeIdMapper;
 
 /**
  * Use this class to register components to be used within the IDE.
  */
 public class MscriptUiModule extends org.eclipselabs.mscript.language.ui.AbstractMscriptUiModule {
+
 	public MscriptUiModule(AbstractUIPlugin plugin) {
 		super(plugin);
 	}
+	
+	public Class<? extends DefaultAntlrTokenToAttributeIdMapper> bindDefaultAntlrTokenToAttributeIdMapper() {
+		return MscriptAntlrTokenToAttributeIdMapper.class;
+	}
+	
 }

+ 34 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language.ui/src/org/eclipselabs/mscript/language/ui/syntaxcoloring/MscriptAntlrTokenToAttributeIdMapper.java

@@ -0,0 +1,34 @@
+/****************************************************************************
+ * Copyright (c) 2008, 2011 Andreas Unger and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Andreas Unger - initial API and implementation 
+ ****************************************************************************/
+
+package org.eclipselabs.mscript.language.ui.syntaxcoloring;
+
+import org.eclipse.xtext.ui.editor.syntaxcoloring.DefaultAntlrTokenToAttributeIdMapper;
+import org.eclipse.xtext.ui.editor.syntaxcoloring.DefaultHighlightingConfiguration;
+
+/**
+ * @author Andreas Unger
+ *
+ */
+public class MscriptAntlrTokenToAttributeIdMapper extends DefaultAntlrTokenToAttributeIdMapper {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.xtext.ui.editor.syntaxcoloring.DefaultAntlrTokenToAttributeIdMapper#calculateId(java.lang.String, int)
+	 */
+	@Override
+	protected String calculateId(String tokenName, int tokenType) {
+		if("RULE_INT".equals(tokenName) || "RULE_ONE".equals(tokenName) || "RULE_REAL".equals(tokenName)) {
+			return DefaultHighlightingConfiguration.NUMBER_ID;
+		}
+		return super.calculateId(tokenName, tokenType);
+	}
+	
+}

+ 25 - 1
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/model/Mscript.ecore

@@ -310,9 +310,33 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="feature" eType="#//CallableElement"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="VariableAccess" eSuperTypes="#//FeatureCall">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="stepExpression" eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="stepExpression" eType="#//StepExpression"
         containment="true"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="StepExpression" abstract="true"/>
+  <eClassifiers xsi:type="ecore:EClass" name="RangeStepExpression" eSuperTypes="#//StepExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="start" eType="#//StepExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="end" eType="#//StepExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="AdditiveStepExpression" eSuperTypes="#//StepExpression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="operator" eType="#//AdditiveOperator"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="leftOperand" eType="#//StepExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="rightOperand" eType="#//StepExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NegateStepExpression" eSuperTypes="#//StepExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="operand" eType="#//StepExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PrimitiveStepExpression" abstract="true"
+      eSuperTypes="#//StepExpression"/>
+  <eClassifiers xsi:type="ecore:EClass" name="StepLiteral" eSuperTypes="#//PrimitiveStepExpression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="StepN" eSuperTypes="#//PrimitiveStepExpression"/>
   <eClassifiers xsi:type="ecore:EClass" name="FunctionCall" eSuperTypes="#//FeatureCall">
     <eStructuralFeatures xsi:type="ecore:EReference" name="arguments" upperBound="-1"
         eType="ecore:EClass ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.ecore#//Expression"

+ 18 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/model/Mscript.genmodel

@@ -244,6 +244,24 @@
     <genClasses ecoreClass="Mscript.ecore#//VariableAccess">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Mscript.ecore#//VariableAccess/stepExpression"/>
     </genClasses>
+    <genClasses image="false" ecoreClass="Mscript.ecore#//StepExpression"/>
+    <genClasses ecoreClass="Mscript.ecore#//RangeStepExpression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Mscript.ecore#//RangeStepExpression/start"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Mscript.ecore#//RangeStepExpression/end"/>
+    </genClasses>
+    <genClasses ecoreClass="Mscript.ecore#//AdditiveStepExpression">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Mscript.ecore#//AdditiveStepExpression/operator"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Mscript.ecore#//AdditiveStepExpression/leftOperand"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Mscript.ecore#//AdditiveStepExpression/rightOperand"/>
+    </genClasses>
+    <genClasses ecoreClass="Mscript.ecore#//NegateStepExpression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Mscript.ecore#//NegateStepExpression/operand"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="Mscript.ecore#//PrimitiveStepExpression"/>
+    <genClasses ecoreClass="Mscript.ecore#//StepLiteral">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Mscript.ecore#//StepLiteral/value"/>
+    </genClasses>
+    <genClasses ecoreClass="Mscript.ecore#//StepN"/>
     <genClasses ecoreClass="Mscript.ecore#//FunctionCall">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Mscript.ecore#//FunctionCall/arguments"/>
     </genClasses>

+ 183 - 70
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/Mscript.xmi

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="ASCII"?>
-<xtext:Grammar xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:xtext="http://www.eclipse.org/2008/Xtext" name="org.eclipselabs.mscript.language.Mscript" definesHiddenTokens="true" hiddenTokens="//@rules.92 //@rules.90 //@rules.91">
+<xtext:Grammar xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:xtext="http://www.eclipse.org/2008/Xtext" name="org.eclipselabs.mscript.language.Mscript" definesHiddenTokens="true" hiddenTokens="//@rules.101 //@rules.99 //@rules.100">
   <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel">
     <ePackage href="http://www.eclipselabs.org/mscript/TypeSystem/1.0.0#/"/>
   </metamodelDeclarations>
@@ -43,7 +43,7 @@
     <alternatives xsi:type="xtext:Group">
       <elements xsi:type="xtext:Keyword" value="enum"/>
       <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
       </elements>
       <elements xsi:type="xtext:Keyword" value="{"/>
       <elements xsi:type="xtext:Group" cardinality="?">
@@ -65,7 +65,7 @@
       <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//EnumerationLiteralDeclaration"/>
     </type>
     <alternatives xsi:type="xtext:Assignment" feature="name" operator="=">
-      <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+      <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
     </alternatives>
   </rules>
   <rules xsi:type="xtext:ParserRule" name="TypeAliasDefinition">
@@ -75,7 +75,7 @@
     <alternatives xsi:type="xtext:Group">
       <elements xsi:type="xtext:Keyword" value="type"/>
       <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
       </elements>
       <elements xsi:type="xtext:Keyword" value="="/>
       <elements xsi:type="xtext:Assignment" feature="type" operator="=">
@@ -91,7 +91,7 @@
     <alternatives xsi:type="xtext:Group">
       <elements xsi:type="xtext:Keyword" value="record"/>
       <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
       </elements>
       <elements xsi:type="xtext:Keyword" value="{"/>
       <elements xsi:type="xtext:Assignment" cardinality="*" feature="fieldDeclarations" operator="+=">
@@ -106,7 +106,7 @@
     </type>
     <alternatives xsi:type="xtext:Group">
       <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
       </elements>
       <elements xsi:type="xtext:Keyword" value=":"/>
       <elements xsi:type="xtext:Assignment" feature="type" operator="=">
@@ -125,7 +125,7 @@
       </elements>
       <elements xsi:type="xtext:Keyword" value="func"/>
       <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
       </elements>
       <elements xsi:type="xtext:Group" cardinality="?">
         <elements xsi:type="xtext:Keyword" value="&lt;"/>
@@ -186,7 +186,7 @@
       <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//ParameterDeclaration"/>
     </type>
     <alternatives xsi:type="xtext:Assignment" feature="name" operator="=">
-      <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+      <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
     </alternatives>
   </rules>
   <rules xsi:type="xtext:EnumRule" name="AssertionStatusKind">
@@ -241,7 +241,7 @@
     <alternatives xsi:type="xtext:Group">
       <elements xsi:type="xtext:Keyword" value="var"/>
       <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
       </elements>
       <elements xsi:type="xtext:Keyword" value=";"/>
     </alternatives>
@@ -253,7 +253,7 @@
     <alternatives xsi:type="xtext:Group">
       <elements xsi:type="xtext:Keyword" value="fob"/>
       <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
       </elements>
       <elements xsi:type="xtext:Keyword" value=":"/>
       <elements xsi:type="xtext:Assignment" feature="functionName" operator="=">
@@ -261,7 +261,7 @@
           <type metamodel="//@metamodelDeclarations.1">
             <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//FunctionDefinition"/>
           </type>
-          <terminal xsi:type="xtext:RuleCall" rule="//@rules.84"/>
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.88"/>
         </terminal>
       </elements>
       <elements xsi:type="xtext:Group" cardinality="?">
@@ -311,7 +311,7 @@
           <type metamodel="//@metamodelDeclarations.0">
             <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/TypeSystem/1.0.0#//DataType"/>
           </type>
-          <terminal xsi:type="xtext:RuleCall" rule="//@rules.85"/>
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.94"/>
         </terminal>
       </elements>
     </alternatives>
@@ -351,7 +351,7 @@
       <elements xsi:type="xtext:Group" cardinality="?">
         <elements xsi:type="xtext:Keyword" value="("/>
         <elements xsi:type="xtext:Assignment" feature="unit" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="//@rules.76"/>
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
         </elements>
         <elements xsi:type="xtext:Keyword" value=")"/>
       </elements>
@@ -371,7 +371,7 @@
       <elements xsi:type="xtext:Group" cardinality="?">
         <elements xsi:type="xtext:Keyword" value="("/>
         <elements xsi:type="xtext:Assignment" feature="unit" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="//@rules.76"/>
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
         </elements>
         <elements xsi:type="xtext:Keyword" value=")"/>
       </elements>
@@ -391,7 +391,7 @@
       <elements xsi:type="xtext:Group" cardinality="?">
         <elements xsi:type="xtext:Keyword" value="("/>
         <elements xsi:type="xtext:Assignment" feature="unit" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="//@rules.76"/>
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
         </elements>
         <elements xsi:type="xtext:Keyword" value=")"/>
       </elements>
@@ -411,7 +411,7 @@
       <elements xsi:type="xtext:Group" cardinality="?">
         <elements xsi:type="xtext:Keyword" value="("/>
         <elements xsi:type="xtext:Assignment" feature="unit" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="//@rules.76"/>
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
         </elements>
         <elements xsi:type="xtext:Keyword" value=")"/>
       </elements>
@@ -460,7 +460,7 @@
                 <type metamodel="//@metamodelDeclarations.0">
                   <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/TypeSystem/1.0.0#//DataType"/>
                 </type>
-                <terminal xsi:type="xtext:RuleCall" rule="//@rules.85"/>
+                <terminal xsi:type="xtext:RuleCall" rule="//@rules.94"/>
               </terminal>
             </elements>
           </elements>
@@ -581,7 +581,7 @@
       <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//LetExpressionVariableDeclarationPart"/>
     </type>
     <alternatives xsi:type="xtext:Assignment" feature="name" operator="=">
-      <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+      <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
     </alternatives>
   </rules>
   <rules xsi:type="xtext:ParserRule" name="IfExpression">
@@ -1066,7 +1066,7 @@
               <type metamodel="//@metamodelDeclarations.1">
                 <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//CallableElement"/>
               </type>
-              <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+              <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
             </terminal>
           </elements>
         </elements>
@@ -1082,7 +1082,7 @@
               <type metamodel="//@metamodelDeclarations.1">
                 <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//CallableElement"/>
               </type>
-              <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+              <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
             </terminal>
           </elements>
           <elements xsi:type="xtext:Keyword" value="("/>
@@ -1107,7 +1107,7 @@
           </elements>
           <elements xsi:type="xtext:Keyword" value="."/>
           <elements xsi:type="xtext:Assignment" feature="identifier" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+            <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
           </elements>
           <elements xsi:type="xtext:Keyword" value="("/>
           <elements xsi:type="xtext:Assignment" feature="variables" operator="+=">
@@ -1145,7 +1145,7 @@
       <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//IterationVariable"/>
     </type>
     <alternatives xsi:type="xtext:Assignment" feature="name" operator="=">
-      <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+      <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
     </alternatives>
   </rules>
   <rules xsi:type="xtext:ParserRule" name="IterationAccumulator">
@@ -1154,7 +1154,7 @@
     </type>
     <alternatives xsi:type="xtext:Group">
       <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
       </elements>
       <elements xsi:type="xtext:Keyword" value="="/>
       <elements xsi:type="xtext:Assignment" feature="initializer" operator="=">
@@ -1182,12 +1182,12 @@
     <alternatives xsi:type="xtext:Alternatives">
       <elements xsi:type="xtext:RuleCall" rule="//@rules.60"/>
       <elements xsi:type="xtext:RuleCall" rule="//@rules.67"/>
-      <elements xsi:type="xtext:RuleCall" rule="//@rules.72"/>
-      <elements xsi:type="xtext:RuleCall" rule="//@rules.68"/>
-      <elements xsi:type="xtext:RuleCall" rule="//@rules.70"/>
-      <elements xsi:type="xtext:RuleCall" rule="//@rules.73"/>
-      <elements xsi:type="xtext:RuleCall" rule="//@rules.74"/>
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.79"/>
       <elements xsi:type="xtext:RuleCall" rule="//@rules.75"/>
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.77"/>
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.80"/>
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.81"/>
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.82"/>
     </alternatives>
   </rules>
   <rules xsi:type="xtext:ParserRule" name="Literal">
@@ -1215,15 +1215,15 @@
     </type>
     <alternatives xsi:type="xtext:Group">
       <elements xsi:type="xtext:Assignment" feature="value" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.81"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.89"/>
       </elements>
       <elements xsi:type="xtext:Assignment" cardinality="?" feature="modifier" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
       </elements>
       <elements xsi:type="xtext:Group" cardinality="?">
         <elements xsi:type="xtext:Keyword" value="("/>
         <elements xsi:type="xtext:Assignment" feature="unit" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="//@rules.76"/>
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
         </elements>
         <elements xsi:type="xtext:Keyword" value=")"/>
       </elements>
@@ -1235,15 +1235,15 @@
     </type>
     <alternatives xsi:type="xtext:Group">
       <elements xsi:type="xtext:Assignment" feature="value" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.82"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.91"/>
       </elements>
       <elements xsi:type="xtext:Assignment" cardinality="?" feature="modifier" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
       </elements>
       <elements xsi:type="xtext:Group" cardinality="?">
         <elements xsi:type="xtext:Keyword" value="("/>
         <elements xsi:type="xtext:Assignment" feature="unit" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="//@rules.76"/>
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
         </elements>
         <elements xsi:type="xtext:Keyword" value=")"/>
       </elements>
@@ -1277,7 +1277,7 @@
       <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/TypeSystem/1.0.0#//StringLiteral"/>
     </type>
     <alternatives xsi:type="xtext:Assignment" feature="value" operator="=">
-      <terminal xsi:type="xtext:RuleCall" rule="//@rules.86"/>
+      <terminal xsi:type="xtext:RuleCall" rule="//@rules.95"/>
     </alternatives>
   </rules>
   <rules xsi:type="xtext:ParserRule" name="FeatureCall">
@@ -1296,13 +1296,13 @@
             <type metamodel="//@metamodelDeclarations.1">
               <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//CallableElement"/>
             </type>
-            <terminal xsi:type="xtext:RuleCall" rule="//@rules.84"/>
+            <terminal xsi:type="xtext:RuleCall" rule="//@rules.88"/>
           </terminal>
         </elements>
         <elements xsi:type="xtext:Group" cardinality="?">
           <elements xsi:type="xtext:Keyword" value="{"/>
           <elements xsi:type="xtext:Assignment" feature="stepExpression" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="//@rules.27"/>
+            <terminal xsi:type="xtext:RuleCall" rule="//@rules.68"/>
           </elements>
           <elements xsi:type="xtext:Keyword" value="}"/>
         </elements>
@@ -1319,7 +1319,7 @@
               <type metamodel="//@metamodelDeclarations.1">
                 <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//CallableElement"/>
               </type>
-              <terminal xsi:type="xtext:RuleCall" rule="//@rules.84"/>
+              <terminal xsi:type="xtext:RuleCall" rule="//@rules.88"/>
             </terminal>
           </elements>
           <elements xsi:type="xtext:Keyword" value="("/>
@@ -1339,6 +1339,101 @@
       </elements>
     </alternatives>
   </rules>
+  <rules xsi:type="xtext:ParserRule" name="StepExpression">
+    <type metamodel="//@metamodelDeclarations.1">
+      <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//StepExpression"/>
+    </type>
+    <alternatives xsi:type="xtext:RuleCall" rule="//@rules.69"/>
+  </rules>
+  <rules xsi:type="xtext:ParserRule" name="RangeStepExpression">
+    <type metamodel="//@metamodelDeclarations.1">
+      <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//StepExpression"/>
+    </type>
+    <alternatives xsi:type="xtext:Group">
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.70"/>
+      <elements xsi:type="xtext:Group" cardinality="?">
+        <elements xsi:type="xtext:Action" feature="start" operator="=">
+          <type metamodel="//@metamodelDeclarations.1">
+            <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//RangeStepExpression"/>
+          </type>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value=".."/>
+        <elements xsi:type="xtext:Assignment" feature="end" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.70"/>
+        </elements>
+      </elements>
+    </alternatives>
+  </rules>
+  <rules xsi:type="xtext:ParserRule" name="AdditiveStepExpression">
+    <type metamodel="//@metamodelDeclarations.1">
+      <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//StepExpression"/>
+    </type>
+    <alternatives xsi:type="xtext:Group">
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.71"/>
+      <elements xsi:type="xtext:Group" cardinality="*">
+        <elements xsi:type="xtext:Action" feature="leftOperand" operator="=">
+          <type metamodel="//@metamodelDeclarations.1">
+            <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//AdditiveStepExpression"/>
+          </type>
+        </elements>
+        <elements xsi:type="xtext:Assignment" feature="operator" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.44"/>
+        </elements>
+        <elements xsi:type="xtext:Assignment" feature="rightOperand" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.71"/>
+        </elements>
+      </elements>
+    </alternatives>
+  </rules>
+  <rules xsi:type="xtext:ParserRule" name="NegateStepExpression">
+    <type metamodel="//@metamodelDeclarations.1">
+      <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//StepExpression"/>
+    </type>
+    <alternatives xsi:type="xtext:Alternatives">
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.72"/>
+      <elements xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Action">
+          <type metamodel="//@metamodelDeclarations.1">
+            <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//NegateStepExpression"/>
+          </type>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="-"/>
+        <elements xsi:type="xtext:Assignment" feature="operand" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.72"/>
+        </elements>
+      </elements>
+    </alternatives>
+  </rules>
+  <rules xsi:type="xtext:ParserRule" name="PrimitiveStepExpression">
+    <type metamodel="//@metamodelDeclarations.1">
+      <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//StepExpression"/>
+    </type>
+    <alternatives xsi:type="xtext:Alternatives">
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.73"/>
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.74"/>
+    </alternatives>
+  </rules>
+  <rules xsi:type="xtext:ParserRule" name="StepLiteral">
+    <type metamodel="//@metamodelDeclarations.1">
+      <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//StepLiteral"/>
+    </type>
+    <alternatives xsi:type="xtext:Assignment" feature="value" operator="=">
+      <terminal xsi:type="xtext:RuleCall" rule="//@rules.90"/>
+    </alternatives>
+  </rules>
+  <rules xsi:type="xtext:ParserRule" name="StepN">
+    <type metamodel="//@metamodelDeclarations.1">
+      <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//StepN"/>
+    </type>
+    <alternatives xsi:type="xtext:Group">
+      <elements xsi:type="xtext:Action">
+        <type metamodel="//@metamodelDeclarations.1">
+          <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//StepN"/>
+        </type>
+      </elements>
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.93"/>
+    </alternatives>
+  </rules>
   <rules xsi:type="xtext:ParserRule" name="ArrayConstructionOperator">
     <type metamodel="//@metamodelDeclarations.1">
       <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/AST/1.0.0#//ArrayConstructionOperator"/>
@@ -1358,12 +1453,12 @@
         <elements xsi:type="xtext:Group">
           <elements xsi:type="xtext:Keyword" value="for"/>
           <elements xsi:type="xtext:Assignment" feature="iterationClauses" operator="+=">
-            <terminal xsi:type="xtext:RuleCall" rule="//@rules.69"/>
+            <terminal xsi:type="xtext:RuleCall" rule="//@rules.76"/>
           </elements>
           <elements xsi:type="xtext:Group" cardinality="*">
             <elements xsi:type="xtext:Keyword" value=","/>
             <elements xsi:type="xtext:Assignment" feature="iterationClauses" operator="+=">
-              <terminal xsi:type="xtext:RuleCall" rule="//@rules.69"/>
+              <terminal xsi:type="xtext:RuleCall" rule="//@rules.76"/>
             </elements>
           </elements>
         </elements>
@@ -1377,7 +1472,7 @@
     </type>
     <alternatives xsi:type="xtext:Group">
       <elements xsi:type="xtext:Assignment" feature="variableName" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
       </elements>
       <elements xsi:type="xtext:Keyword" value="in"/>
       <elements xsi:type="xtext:Assignment" feature="collectionExpression" operator="=">
@@ -1392,12 +1487,12 @@
     <alternatives xsi:type="xtext:Group">
       <elements xsi:type="xtext:Keyword" value="["/>
       <elements xsi:type="xtext:Assignment" feature="rows" operator="+=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.71"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.78"/>
       </elements>
       <elements xsi:type="xtext:Group" cardinality="*">
         <elements xsi:type="xtext:Keyword" value=";"/>
         <elements xsi:type="xtext:Assignment" feature="rows" operator="+=">
-          <terminal xsi:type="xtext:RuleCall" rule="//@rules.71"/>
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.78"/>
         </elements>
       </elements>
       <elements xsi:type="xtext:Keyword" value="]"/>
@@ -1427,7 +1522,7 @@
       <elements xsi:type="xtext:Keyword" value="$"/>
       <elements xsi:type="xtext:Keyword" value="("/>
       <elements xsi:type="xtext:Assignment" feature="unit" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.76"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
       </elements>
       <elements xsi:type="xtext:Keyword" value=")"/>
     </alternatives>
@@ -1488,12 +1583,12 @@
       </elements>
       <elements xsi:type="xtext:Group" cardinality="?">
         <elements xsi:type="xtext:Assignment" feature="numerator" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="//@rules.77"/>
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.84"/>
         </elements>
         <elements xsi:type="xtext:Group" cardinality="?">
           <elements xsi:type="xtext:Keyword" value="/"/>
           <elements xsi:type="xtext:Assignment" feature="denominator" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="//@rules.78"/>
+            <terminal xsi:type="xtext:RuleCall" rule="//@rules.85"/>
           </elements>
         </elements>
       </elements>
@@ -1510,16 +1605,16 @@
             <classifier xsi:type="ecore:EClass" href="http://www.eclipselabs.org/mscript/TypeSystem/1.0.0#//UnitNumerator"/>
           </type>
         </elements>
-        <elements xsi:type="xtext:RuleCall" rule="//@rules.87"/>
+        <elements xsi:type="xtext:RuleCall" rule="//@rules.96"/>
       </elements>
       <elements xsi:type="xtext:Group">
         <elements xsi:type="xtext:Assignment" feature="factors" operator="+=">
-          <terminal xsi:type="xtext:RuleCall" rule="//@rules.79"/>
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.86"/>
         </elements>
         <elements xsi:type="xtext:Group" cardinality="*">
           <elements xsi:type="xtext:Keyword" value="*"/>
           <elements xsi:type="xtext:Assignment" feature="factors" operator="+=">
-            <terminal xsi:type="xtext:RuleCall" rule="//@rules.79"/>
+            <terminal xsi:type="xtext:RuleCall" rule="//@rules.86"/>
           </elements>
         </elements>
       </elements>
@@ -1531,17 +1626,17 @@
     </type>
     <alternatives xsi:type="xtext:Alternatives">
       <elements xsi:type="xtext:Assignment" feature="factors" operator="+=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.79"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.86"/>
       </elements>
       <elements xsi:type="xtext:Group">
         <elements xsi:type="xtext:Keyword" value="("/>
         <elements xsi:type="xtext:Assignment" feature="factors" operator="+=">
-          <terminal xsi:type="xtext:RuleCall" rule="//@rules.79"/>
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.86"/>
         </elements>
         <elements xsi:type="xtext:Group" cardinality="*">
           <elements xsi:type="xtext:Keyword" value="*"/>
           <elements xsi:type="xtext:Assignment" feature="factors" operator="+=">
-            <terminal xsi:type="xtext:RuleCall" rule="//@rules.79"/>
+            <terminal xsi:type="xtext:RuleCall" rule="//@rules.86"/>
           </elements>
         </elements>
         <elements xsi:type="xtext:Keyword" value=")"/>
@@ -1554,12 +1649,12 @@
     </type>
     <alternatives xsi:type="xtext:Group">
       <elements xsi:type="xtext:Assignment" feature="symbol" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="//@rules.83"/>
+        <terminal xsi:type="xtext:RuleCall" rule="//@rules.92"/>
       </elements>
       <elements xsi:type="xtext:Group" cardinality="?">
         <elements xsi:type="xtext:Keyword" value="^"/>
         <elements xsi:type="xtext:Assignment" feature="exponent" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="//@rules.80"/>
+          <terminal xsi:type="xtext:RuleCall" rule="//@rules.87"/>
         </elements>
       </elements>
     </alternatives>
@@ -1570,41 +1665,59 @@
     </type>
     <alternatives xsi:type="xtext:Group">
       <elements xsi:type="xtext:Keyword" cardinality="?" value="-"/>
-      <elements xsi:type="xtext:RuleCall" rule="//@rules.82"/>
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.90"/>
+    </alternatives>
+  </rules>
+  <rules xsi:type="xtext:ParserRule" name="QualifiedName">
+    <type metamodel="//@metamodelDeclarations.2">
+      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </type>
+    <alternatives xsi:type="xtext:Group">
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.92"/>
+      <elements xsi:type="xtext:Group" cardinality="*">
+        <elements xsi:type="xtext:Keyword" value="::"/>
+        <elements xsi:type="xtext:RuleCall" rule="//@rules.92"/>
+      </elements>
     </alternatives>
   </rules>
-  <rules xsi:type="xtext:ParserRule" name="ValidReal">
+  <rules xsi:type="xtext:ParserRule" name="ValidDouble">
     <type metamodel="//@metamodelDeclarations.2">
       <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EDouble"/>
     </type>
-    <alternatives xsi:type="xtext:RuleCall" rule="//@rules.88"/>
+    <alternatives xsi:type="xtext:RuleCall" rule="//@rules.97"/>
   </rules>
-  <rules xsi:type="xtext:ParserRule" name="ValidInteger">
+  <rules xsi:type="xtext:ParserRule" name="ValidInt">
+    <type metamodel="//@metamodelDeclarations.2">
+      <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    </type>
+    <alternatives xsi:type="xtext:Alternatives">
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.96"/>
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.98"/>
+    </alternatives>
+  </rules>
+  <rules xsi:type="xtext:ParserRule" name="ValidLong">
     <type metamodel="//@metamodelDeclarations.2">
       <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
     </type>
     <alternatives xsi:type="xtext:Alternatives">
-      <elements xsi:type="xtext:RuleCall" rule="//@rules.87"/>
-      <elements xsi:type="xtext:RuleCall" rule="//@rules.89"/>
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.96"/>
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.98"/>
     </alternatives>
   </rules>
   <rules xsi:type="xtext:ParserRule" name="ValidID">
     <type metamodel="//@metamodelDeclarations.2">
       <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     </type>
-    <alternatives xsi:type="xtext:RuleCall" rule="//@rules.85"/>
+    <alternatives xsi:type="xtext:Alternatives">
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.93"/>
+      <elements xsi:type="xtext:RuleCall" rule="//@rules.94"/>
+    </alternatives>
   </rules>
-  <rules xsi:type="xtext:ParserRule" name="QualifiedName">
+  <rules xsi:type="xtext:TerminalRule" name="N">
     <type metamodel="//@metamodelDeclarations.2">
       <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     </type>
-    <alternatives xsi:type="xtext:Group">
-      <elements xsi:type="xtext:RuleCall" rule="//@rules.83"/>
-      <elements xsi:type="xtext:Group" cardinality="*">
-        <elements xsi:type="xtext:Keyword" value="::"/>
-        <elements xsi:type="xtext:RuleCall" rule="//@rules.83"/>
-      </elements>
-    </alternatives>
+    <alternatives xsi:type="xtext:Keyword" value="n"/>
   </rules>
   <rules xsi:type="xtext:TerminalRule" name="ID">
     <type metamodel="//@metamodelDeclarations.2">
@@ -1708,7 +1821,7 @@
       </elements>
     </alternatives>
   </rules>
-  <rules xsi:type="xtext:TerminalRule" name="INTEGER">
+  <rules xsi:type="xtext:TerminalRule" name="INT">
     <type metamodel="//@metamodelDeclarations.2">
       <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     </type>

Різницю між файлами не показано, бо вона завелика
+ 1102 - 158
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parseTreeConstruction/MscriptParsetreeConstructor.java


+ 444 - 69
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.g

@@ -4029,9 +4029,9 @@ ruleRealLiteral returns [EObject current=null]
 ((
 (
 		{ 
-	        newCompositeNode(grammarAccess.getRealLiteralAccess().getValueValidRealParserRuleCall_0_0()); 
+	        newCompositeNode(grammarAccess.getRealLiteralAccess().getValueValidDoubleParserRuleCall_0_0()); 
 	    }
-		lv_value_0_0=ruleValidReal		{
+		lv_value_0_0=ruleValidDouble		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getRealLiteralRule());
 	        }
@@ -4039,7 +4039,7 @@ ruleRealLiteral returns [EObject current=null]
        			$current, 
        			"value",
         		lv_value_0_0, 
-        		"ValidReal");
+        		"ValidDouble");
 	        afterParserOrEnumRuleCall();
 	    }
 
@@ -4112,9 +4112,9 @@ ruleIntegerLiteral returns [EObject current=null]
 ((
 (
 		{ 
-	        newCompositeNode(grammarAccess.getIntegerLiteralAccess().getValueValidIntegerParserRuleCall_0_0()); 
+	        newCompositeNode(grammarAccess.getIntegerLiteralAccess().getValueValidLongParserRuleCall_0_0()); 
 	    }
-		lv_value_0_0=ruleValidInteger		{
+		lv_value_0_0=ruleValidLong		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getIntegerLiteralRule());
 	        }
@@ -4122,7 +4122,7 @@ ruleIntegerLiteral returns [EObject current=null]
        			$current, 
        			"value",
         		lv_value_0_0, 
-        		"ValidInteger");
+        		"ValidLong");
 	        afterParserOrEnumRuleCall();
 	    }
 
@@ -4298,9 +4298,9 @@ ruleFeatureCall returns [EObject current=null]
 (
 (
 		{ 
-	        newCompositeNode(grammarAccess.getFeatureCallAccess().getStepExpressionExpressionParserRuleCall_0_2_1_0()); 
+	        newCompositeNode(grammarAccess.getFeatureCallAccess().getStepExpressionStepExpressionParserRuleCall_0_2_1_0()); 
 	    }
-		lv_stepExpression_3_0=ruleExpression		{
+		lv_stepExpression_3_0=ruleStepExpression		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getFeatureCallRule());
 	        }
@@ -4308,7 +4308,7 @@ ruleFeatureCall returns [EObject current=null]
        			$current, 
        			"stepExpression",
         		lv_stepExpression_3_0, 
-        		"Expression");
+        		"StepExpression");
 	        afterParserOrEnumRuleCall();
 	    }
 
@@ -4410,6 +4410,335 @@ ruleExpression
 
 
 
+// Entry rule entryRuleStepExpression
+entryRuleStepExpression returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getStepExpressionRule()); }
+	 iv_ruleStepExpression=ruleStepExpression 
+	 { $current=$iv_ruleStepExpression.current; } 
+	 EOF 
+;
+
+// Rule StepExpression
+ruleStepExpression returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+
+    { 
+        newCompositeNode(grammarAccess.getStepExpressionAccess().getRangeStepExpressionParserRuleCall()); 
+    }
+    this_RangeStepExpression_0=ruleRangeStepExpression
+    { 
+        $current = $this_RangeStepExpression_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+
+;
+
+
+
+
+
+// Entry rule entryRuleRangeStepExpression
+entryRuleRangeStepExpression returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getRangeStepExpressionRule()); }
+	 iv_ruleRangeStepExpression=ruleRangeStepExpression 
+	 { $current=$iv_ruleRangeStepExpression.current; } 
+	 EOF 
+;
+
+// Rule RangeStepExpression
+ruleRangeStepExpression returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+    { 
+        newCompositeNode(grammarAccess.getRangeStepExpressionAccess().getAdditiveStepExpressionParserRuleCall_0()); 
+    }
+    this_AdditiveStepExpression_0=ruleAdditiveStepExpression
+    { 
+        $current = $this_AdditiveStepExpression_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+((
+    {
+        $current = forceCreateModelElementAndSet(
+            grammarAccess.getRangeStepExpressionAccess().getRangeStepExpressionStartAction_1_0(),
+            $current);
+    }
+)	otherlv_2='..' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getRangeStepExpressionAccess().getFullStopFullStopKeyword_1_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRangeStepExpressionAccess().getEndAdditiveStepExpressionParserRuleCall_1_2_0()); 
+	    }
+		lv_end_3_0=ruleAdditiveStepExpression		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRangeStepExpressionRule());
+	        }
+       		set(
+       			$current, 
+       			"end",
+        		lv_end_3_0, 
+        		"AdditiveStepExpression");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))?)
+;
+
+
+
+
+
+// Entry rule entryRuleAdditiveStepExpression
+entryRuleAdditiveStepExpression returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getAdditiveStepExpressionRule()); }
+	 iv_ruleAdditiveStepExpression=ruleAdditiveStepExpression 
+	 { $current=$iv_ruleAdditiveStepExpression.current; } 
+	 EOF 
+;
+
+// Rule AdditiveStepExpression
+ruleAdditiveStepExpression returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+    { 
+        newCompositeNode(grammarAccess.getAdditiveStepExpressionAccess().getNegateStepExpressionParserRuleCall_0()); 
+    }
+    this_NegateStepExpression_0=ruleNegateStepExpression
+    { 
+        $current = $this_NegateStepExpression_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+((
+    {
+        $current = forceCreateModelElementAndSet(
+            grammarAccess.getAdditiveStepExpressionAccess().getAdditiveStepExpressionLeftOperandAction_1_0(),
+            $current);
+    }
+)(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getAdditiveStepExpressionAccess().getOperatorAdditiveOperatorEnumRuleCall_1_1_0()); 
+	    }
+		lv_operator_2_0=ruleAdditiveOperator		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getAdditiveStepExpressionRule());
+	        }
+       		set(
+       			$current, 
+       			"operator",
+        		lv_operator_2_0, 
+        		"AdditiveOperator");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getAdditiveStepExpressionAccess().getRightOperandNegateStepExpressionParserRuleCall_1_2_0()); 
+	    }
+		lv_rightOperand_3_0=ruleNegateStepExpression		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getAdditiveStepExpressionRule());
+	        }
+       		set(
+       			$current, 
+       			"rightOperand",
+        		lv_rightOperand_3_0, 
+        		"NegateStepExpression");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*)
+;
+
+
+
+
+
+// Entry rule entryRuleNegateStepExpression
+entryRuleNegateStepExpression returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getNegateStepExpressionRule()); }
+	 iv_ruleNegateStepExpression=ruleNegateStepExpression 
+	 { $current=$iv_ruleNegateStepExpression.current; } 
+	 EOF 
+;
+
+// Rule NegateStepExpression
+ruleNegateStepExpression returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+    { 
+        newCompositeNode(grammarAccess.getNegateStepExpressionAccess().getPrimitiveStepExpressionParserRuleCall_0()); 
+    }
+    this_PrimitiveStepExpression_0=rulePrimitiveStepExpression
+    { 
+        $current = $this_PrimitiveStepExpression_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+
+    |((
+    {
+        $current = forceCreateModelElement(
+            grammarAccess.getNegateStepExpressionAccess().getNegateStepExpressionAction_1_0(),
+            $current);
+    }
+)	otherlv_2='-' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getNegateStepExpressionAccess().getHyphenMinusKeyword_1_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getNegateStepExpressionAccess().getOperandPrimitiveStepExpressionParserRuleCall_1_2_0()); 
+	    }
+		lv_operand_3_0=rulePrimitiveStepExpression		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getNegateStepExpressionRule());
+	        }
+       		set(
+       			$current, 
+       			"operand",
+        		lv_operand_3_0, 
+        		"PrimitiveStepExpression");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)))
+;
+
+
+
+
+
+// Entry rule entryRulePrimitiveStepExpression
+entryRulePrimitiveStepExpression returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getPrimitiveStepExpressionRule()); }
+	 iv_rulePrimitiveStepExpression=rulePrimitiveStepExpression 
+	 { $current=$iv_rulePrimitiveStepExpression.current; } 
+	 EOF 
+;
+
+// Rule PrimitiveStepExpression
+rulePrimitiveStepExpression returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+    { 
+        newCompositeNode(grammarAccess.getPrimitiveStepExpressionAccess().getStepLiteralParserRuleCall_0()); 
+    }
+    this_StepLiteral_0=ruleStepLiteral
+    { 
+        $current = $this_StepLiteral_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+
+    |
+    { 
+        newCompositeNode(grammarAccess.getPrimitiveStepExpressionAccess().getStepNParserRuleCall_1()); 
+    }
+    this_StepN_1=ruleStepN
+    { 
+        $current = $this_StepN_1.current; 
+        afterParserOrEnumRuleCall();
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleStepLiteral
+entryRuleStepLiteral returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getStepLiteralRule()); }
+	 iv_ruleStepLiteral=ruleStepLiteral 
+	 { $current=$iv_ruleStepLiteral.current; } 
+	 EOF 
+;
+
+// Rule StepLiteral
+ruleStepLiteral returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getStepLiteralAccess().getValueValidIntParserRuleCall_0()); 
+	    }
+		lv_value_0_0=ruleValidInt		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getStepLiteralRule());
+	        }
+       		set(
+       			$current, 
+       			"value",
+        		lv_value_0_0, 
+        		"ValidInt");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+;
+
+
+
+
+
+// Entry rule entryRuleStepN
+entryRuleStepN returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getStepNRule()); }
+	 iv_ruleStepN=ruleStepN 
+	 { $current=$iv_ruleStepN.current; } 
+	 EOF 
+;
+
+// Rule StepN
+ruleStepN returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+    {
+        $current = forceCreateModelElement(
+            grammarAccess.getStepNAccess().getStepNAction_0(),
+            $current);
+    }
+)this_N_1=RULE_N
+    { 
+    newLeafNode(this_N_1, grammarAccess.getStepNAccess().getNTerminalRuleCall_1()); 
+    }
+)
+;
+
+
+
+
+
 // Entry rule entryRuleArrayConstructionOperator
 entryRuleArrayConstructionOperator returns [EObject current=null] 
 	:
@@ -5207,10 +5536,10 @@ ruleUnitExponent returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleTo
     }
 )?
     { 
-        newCompositeNode(grammarAccess.getUnitExponentAccess().getValidIntegerParserRuleCall_1()); 
+        newCompositeNode(grammarAccess.getUnitExponentAccess().getValidIntParserRuleCall_1()); 
     }
-    this_ValidInteger_1=ruleValidInteger    {
-		$current.merge(this_ValidInteger_1);
+    this_ValidInt_1=ruleValidInt    {
+		$current.merge(this_ValidInt_1);
     }
 
     { 
@@ -5223,17 +5552,66 @@ ruleUnitExponent returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleTo
 
 
 
-// Entry rule entryRuleValidReal
-entryRuleValidReal returns [String current=null] 
+// Entry rule entryRuleQualifiedName
+entryRuleQualifiedName returns [String current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getValidRealRule()); } 
-	 iv_ruleValidReal=ruleValidReal 
-	 { $current=$iv_ruleValidReal.current.getText(); }  
+	{ newCompositeNode(grammarAccess.getQualifiedNameRule()); } 
+	 iv_ruleQualifiedName=ruleQualifiedName 
+	 { $current=$iv_ruleQualifiedName.current.getText(); }  
 	 EOF 
 ;
 
-// Rule ValidReal
-ruleValidReal returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+// Rule QualifiedName
+ruleQualifiedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+    { 
+        newCompositeNode(grammarAccess.getQualifiedNameAccess().getValidIDParserRuleCall_0()); 
+    }
+    this_ValidID_0=ruleValidID    {
+		$current.merge(this_ValidID_0);
+    }
+
+    { 
+        afterParserOrEnumRuleCall();
+    }
+(
+	kw='::' 
+    {
+        $current.merge(kw);
+        newLeafNode(kw, grammarAccess.getQualifiedNameAccess().getColonColonKeyword_1_0()); 
+    }
+
+    { 
+        newCompositeNode(grammarAccess.getQualifiedNameAccess().getValidIDParserRuleCall_1_1()); 
+    }
+    this_ValidID_2=ruleValidID    {
+		$current.merge(this_ValidID_2);
+    }
+
+    { 
+        afterParserOrEnumRuleCall();
+    }
+)*)
+    ;
+
+
+
+
+
+// Entry rule entryRuleValidDouble
+entryRuleValidDouble returns [String current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getValidDoubleRule()); } 
+	 iv_ruleValidDouble=ruleValidDouble 
+	 { $current=$iv_ruleValidDouble.current.getText(); }  
+	 EOF 
+;
+
+// Rule ValidDouble
+ruleValidDouble returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
@@ -5242,7 +5620,7 @@ ruleValidReal returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken
     }
 
     { 
-    newLeafNode(this_REAL_0, grammarAccess.getValidRealAccess().getREALTerminalRuleCall()); 
+    newLeafNode(this_REAL_0, grammarAccess.getValidDoubleAccess().getREALTerminalRuleCall()); 
     }
 
     ;
@@ -5251,17 +5629,17 @@ ruleValidReal returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken
 
 
 
-// Entry rule entryRuleValidInteger
-entryRuleValidInteger returns [String current=null] 
+// Entry rule entryRuleValidInt
+entryRuleValidInt returns [String current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getValidIntegerRule()); } 
-	 iv_ruleValidInteger=ruleValidInteger 
-	 { $current=$iv_ruleValidInteger.current.getText(); }  
+	{ newCompositeNode(grammarAccess.getValidIntRule()); } 
+	 iv_ruleValidInt=ruleValidInt 
+	 { $current=$iv_ruleValidInt.current.getText(); }  
 	 EOF 
 ;
 
-// Rule ValidInteger
-ruleValidInteger returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+// Rule ValidInt
+ruleValidInt returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
@@ -5270,15 +5648,15 @@ ruleValidInteger returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleTo
     }
 
     { 
-    newLeafNode(this_ONE_0, grammarAccess.getValidIntegerAccess().getONETerminalRuleCall_0()); 
+    newLeafNode(this_ONE_0, grammarAccess.getValidIntAccess().getONETerminalRuleCall_0()); 
     }
 
-    |    this_INTEGER_1=RULE_INTEGER    {
-		$current.merge(this_INTEGER_1);
+    |    this_INT_1=RULE_INT    {
+		$current.merge(this_INT_1);
     }
 
     { 
-    newLeafNode(this_INTEGER_1, grammarAccess.getValidIntegerAccess().getINTEGERTerminalRuleCall_1()); 
+    newLeafNode(this_INT_1, grammarAccess.getValidIntAccess().getINTTerminalRuleCall_1()); 
     }
 )
     ;
@@ -5287,77 +5665,72 @@ ruleValidInteger returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleTo
 
 
 
-// Entry rule entryRuleValidID
-entryRuleValidID returns [String current=null] 
+// Entry rule entryRuleValidLong
+entryRuleValidLong returns [String current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getValidIDRule()); } 
-	 iv_ruleValidID=ruleValidID 
-	 { $current=$iv_ruleValidID.current.getText(); }  
+	{ newCompositeNode(grammarAccess.getValidLongRule()); } 
+	 iv_ruleValidLong=ruleValidLong 
+	 { $current=$iv_ruleValidLong.current.getText(); }  
 	 EOF 
 ;
 
-// Rule ValidID
-ruleValidID returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+// Rule ValidLong
+ruleValidLong returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
-    this_ID_0=RULE_ID    {
-		$current.merge(this_ID_0);
+(    this_ONE_0=RULE_ONE    {
+		$current.merge(this_ONE_0);
     }
 
     { 
-    newLeafNode(this_ID_0, grammarAccess.getValidIDAccess().getIDTerminalRuleCall()); 
+    newLeafNode(this_ONE_0, grammarAccess.getValidLongAccess().getONETerminalRuleCall_0()); 
     }
 
+    |    this_INT_1=RULE_INT    {
+		$current.merge(this_INT_1);
+    }
+
+    { 
+    newLeafNode(this_INT_1, grammarAccess.getValidLongAccess().getINTTerminalRuleCall_1()); 
+    }
+)
     ;
 
 
 
 
 
-// Entry rule entryRuleQualifiedName
-entryRuleQualifiedName returns [String current=null] 
+// Entry rule entryRuleValidID
+entryRuleValidID returns [String current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getQualifiedNameRule()); } 
-	 iv_ruleQualifiedName=ruleQualifiedName 
-	 { $current=$iv_ruleQualifiedName.current.getText(); }  
+	{ newCompositeNode(grammarAccess.getValidIDRule()); } 
+	 iv_ruleValidID=ruleValidID 
+	 { $current=$iv_ruleValidID.current.getText(); }  
 	 EOF 
 ;
 
-// Rule QualifiedName
-ruleQualifiedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+// Rule ValidID
+ruleValidID returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
-(
-    { 
-        newCompositeNode(grammarAccess.getQualifiedNameAccess().getValidIDParserRuleCall_0()); 
-    }
-    this_ValidID_0=ruleValidID    {
-		$current.merge(this_ValidID_0);
+(    this_N_0=RULE_N    {
+		$current.merge(this_N_0);
     }
 
     { 
-        afterParserOrEnumRuleCall();
-    }
-(
-	kw='::' 
-    {
-        $current.merge(kw);
-        newLeafNode(kw, grammarAccess.getQualifiedNameAccess().getColonColonKeyword_1_0()); 
+    newLeafNode(this_N_0, grammarAccess.getValidIDAccess().getNTerminalRuleCall_0()); 
     }
 
-    { 
-        newCompositeNode(grammarAccess.getQualifiedNameAccess().getValidIDParserRuleCall_1_1()); 
-    }
-    this_ValidID_2=ruleValidID    {
-		$current.merge(this_ValidID_2);
+    |    this_ID_1=RULE_ID    {
+		$current.merge(this_ID_1);
     }
 
     { 
-        afterParserOrEnumRuleCall();
+    newLeafNode(this_ID_1, grammarAccess.getValidIDAccess().getIDTerminalRuleCall_1()); 
     }
-)*)
+)
     ;
 
 
@@ -5565,6 +5938,8 @@ ruleBooleanKind returns [Enumerator current=null]
 
 
 
+RULE_N : 'n';
+
 RULE_ID : ('_'|'a'..'z'|'A'..'Z') ('0'..'9'|'_'|'a'..'z'|'A'..'Z')*;
 
 RULE_STRING : '"' (~(('\\'|'"'))|'\\' ('\''|'"'|'?'|'\\'|'a'|'b'|'f'|'n'|'r'|'t'|'v'))* '"';
@@ -5573,7 +5948,7 @@ RULE_ONE : '1';
 
 RULE_REAL : ('0'..'9')+ '.' ('0'..'9')* (('e'|'E') ('+'|'-')? ('0'..'9')+)?;
 
-RULE_INTEGER : ('0'..'9')+;
+RULE_INT : ('0'..'9')+;
 
 RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
 

+ 79 - 76
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscript.tokens

@@ -15,10 +15,10 @@ T__25=25
 T__24=24
 T__23=23
 T__22=22
-RULE_ANY_OTHER=12
+RULE_ANY_OTHER=13
 T__21=21
 T__20=20
-RULE_ONE=6
+RULE_ONE=7
 T__61=61
 T__60=60
 T__55=55
@@ -30,27 +30,30 @@ T__16=16
 T__51=51
 T__15=15
 T__52=52
-T__53=53
 T__18=18
+T__53=53
 T__54=54
 T__17=17
 T__14=14
-T__13=13
+RULE_N=6
 T__59=59
-RULE_REAL=7
+RULE_INT=9
+RULE_REAL=8
 T__50=50
 T__42=42
 T__43=43
 T__40=40
 T__41=41
+T__80=80
 T__46=46
+T__81=81
 T__47=47
 T__44=44
 T__45=45
 T__48=48
 T__49=49
-RULE_SL_COMMENT=10
-RULE_ML_COMMENT=9
+RULE_SL_COMMENT=11
+RULE_ML_COMMENT=10
 T__30=30
 T__31=31
 RULE_STRING=5
@@ -65,79 +68,79 @@ T__36=36
 T__37=37
 T__38=38
 T__39=39
-RULE_WS=11
+RULE_WS=12
 T__76=76
 T__75=75
 T__74=74
 T__73=73
-RULE_INTEGER=8
 T__79=79
 T__78=78
 T__77=77
-'end'=58
-'>='=71
-'=='=68
-'/'=59
-'string'=38
-'then'=44
-'switch'=46
-'type'=17
-'>'=25
-'||'=50
-'complex'=35
-'&&'=51
-';'=19
-'warning'=65
-'for'=55
-'+'=72
-'fob'=32
-'=>'=49
-'.'=53
-'is'=52
-'^'=61
-'error'=66
-'$'=56
-'static'=29
-'true'=79
-'else'=45
-'func'=23
-'let'=41
-'fatal'=67
-'{'=14
-'stateful'=22
-'\''=77
-'var'=31
-'int'=34
-'if'=43
-'('=26
-':'=21
-'-'=62
-','=15
-'in'=42
-'default'=47
-']'=40
-'real'=33
-'enum'=13
-'!'=76
-'assert'=30
-'|'=54
-'begin'=57
-'.^'=75
-'.*'=73
-'info'=64
-'='=18
-'::'=63
-'bool'=37
-')'=27
-'./'=74
-'->'=28
-'case'=48
-'}'=16
-'<='=70
-'!='=69
-'false'=78
-'<'=24
-'['=39
-'*'=60
-'gauss'=36
-'record'=20
+'end'=61
+'>='=73
+'=='=70
+'/'=62
+'string'=39
+'then'=45
+'switch'=47
+'type'=18
+'>'=26
+'||'=51
+'complex'=36
+'&&'=52
+';'=20
+'warning'=67
+'for'=58
+'+'=74
+'fob'=33
+'=>'=50
+'.'=54
+'^'=64
+'is'=53
+'error'=68
+'$'=59
+'static'=30
+'true'=81
+'else'=46
+'func'=24
+'let'=42
+'fatal'=69
+'{'=15
+'stateful'=23
+'\''=79
+'var'=32
+'int'=35
+'if'=44
+'('=27
+':'=22
+'-'=57
+','=16
+'in'=43
+'default'=48
+']'=41
+'real'=34
+'enum'=14
+'..'=56
+'!'=78
+'assert'=31
+'|'=55
+'begin'=60
+'.^'=77
+'.*'=75
+'info'=66
+'='=19
+'::'=65
+'bool'=38
+')'=28
+'./'=76
+'->'=29
+'case'=49
+'}'=17
+'<='=72
+'!='=71
+'false'=80
+'<'=25
+'*'=63
+'['=40
+'gauss'=37
+'record'=21

Різницю між файлами не показано, бо вона завелика
+ 698 - 636
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscriptLexer.java


Різницю між файлами не показано, бо вона завелика
+ 3047 - 1764
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/parser/antlr/internal/InternalMscriptParser.java


+ 404 - 98
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src-gen/org/eclipselabs/mscript/language/services/MscriptGrammarAccess.java

@@ -2416,7 +2416,7 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RealLiteral");
 		private final Group cGroup = (Group)rule.eContents().get(1);
 		private final Assignment cValueAssignment_0 = (Assignment)cGroup.eContents().get(0);
-		private final RuleCall cValueValidRealParserRuleCall_0_0 = (RuleCall)cValueAssignment_0.eContents().get(0);
+		private final RuleCall cValueValidDoubleParserRuleCall_0_0 = (RuleCall)cValueAssignment_0.eContents().get(0);
 		private final Assignment cModifierAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final RuleCall cModifierValidIDParserRuleCall_1_0 = (RuleCall)cModifierAssignment_1.eContents().get(0);
 		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
@@ -2426,17 +2426,17 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 		private final Keyword cRightParenthesisKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
 		
 		//RealLiteral:
-		//	value=ValidReal modifier=ValidID? ("(" unit=Unit ")")?;
+		//	value=ValidDouble modifier=ValidID? ("(" unit=Unit ")")?;
 		public ParserRule getRule() { return rule; }
 
-		//value=ValidReal modifier=ValidID? ("(" unit=Unit ")")?
+		//value=ValidDouble modifier=ValidID? ("(" unit=Unit ")")?
 		public Group getGroup() { return cGroup; }
 
-		//value=ValidReal
+		//value=ValidDouble
 		public Assignment getValueAssignment_0() { return cValueAssignment_0; }
 
-		//ValidReal
-		public RuleCall getValueValidRealParserRuleCall_0_0() { return cValueValidRealParserRuleCall_0_0; }
+		//ValidDouble
+		public RuleCall getValueValidDoubleParserRuleCall_0_0() { return cValueValidDoubleParserRuleCall_0_0; }
 
 		//modifier=ValidID?
 		public Assignment getModifierAssignment_1() { return cModifierAssignment_1; }
@@ -2464,7 +2464,7 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "IntegerLiteral");
 		private final Group cGroup = (Group)rule.eContents().get(1);
 		private final Assignment cValueAssignment_0 = (Assignment)cGroup.eContents().get(0);
-		private final RuleCall cValueValidIntegerParserRuleCall_0_0 = (RuleCall)cValueAssignment_0.eContents().get(0);
+		private final RuleCall cValueValidLongParserRuleCall_0_0 = (RuleCall)cValueAssignment_0.eContents().get(0);
 		private final Assignment cModifierAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final RuleCall cModifierValidIDParserRuleCall_1_0 = (RuleCall)cModifierAssignment_1.eContents().get(0);
 		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
@@ -2474,17 +2474,17 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 		private final Keyword cRightParenthesisKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
 		
 		//IntegerLiteral:
-		//	value=ValidInteger modifier=ValidID? ("(" unit=Unit ")")?;
+		//	value=ValidLong modifier=ValidID? ("(" unit=Unit ")")?;
 		public ParserRule getRule() { return rule; }
 
-		//value=ValidInteger modifier=ValidID? ("(" unit=Unit ")")?
+		//value=ValidLong modifier=ValidID? ("(" unit=Unit ")")?
 		public Group getGroup() { return cGroup; }
 
-		//value=ValidInteger
+		//value=ValidLong
 		public Assignment getValueAssignment_0() { return cValueAssignment_0; }
 
-		//ValidInteger
-		public RuleCall getValueValidIntegerParserRuleCall_0_0() { return cValueValidIntegerParserRuleCall_0_0; }
+		//ValidLong
+		public RuleCall getValueValidLongParserRuleCall_0_0() { return cValueValidLongParserRuleCall_0_0; }
 
 		//modifier=ValidID?
 		public Assignment getModifierAssignment_1() { return cModifierAssignment_1; }
@@ -2551,7 +2551,7 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 		private final Group cGroup_0_2 = (Group)cGroup_0.eContents().get(2);
 		private final Keyword cLeftCurlyBracketKeyword_0_2_0 = (Keyword)cGroup_0_2.eContents().get(0);
 		private final Assignment cStepExpressionAssignment_0_2_1 = (Assignment)cGroup_0_2.eContents().get(1);
-		private final RuleCall cStepExpressionExpressionParserRuleCall_0_2_1_0 = (RuleCall)cStepExpressionAssignment_0_2_1.eContents().get(0);
+		private final RuleCall cStepExpressionStepExpressionParserRuleCall_0_2_1_0 = (RuleCall)cStepExpressionAssignment_0_2_1.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_0_2_2 = (Keyword)cGroup_0_2.eContents().get(2);
 		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
 		private final Group cGroup_1_0 = (Group)cGroup_1.eContents().get(0);
@@ -2570,15 +2570,15 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 		private final Keyword cRightParenthesisKeyword_1_0_4 = (Keyword)cGroup_1_0.eContents().get(4);
 		
 		//FeatureCall returns Expression:
-		//	{VariableAccess} feature=[CallableElement|QualifiedName] ("{" stepExpression=Expression "}")? | => ({FunctionCall}
+		//	{VariableAccess} feature=[CallableElement|QualifiedName] ("{" stepExpression=StepExpression "}")? | => ({FunctionCall}
 		//	feature=[CallableElement|QualifiedName] "(" (arguments+=Expression ("," arguments+=Expression)*)? ")");
 		public ParserRule getRule() { return rule; }
 
-		//{VariableAccess} feature=[CallableElement|QualifiedName] ("{" stepExpression=Expression "}")? | => ({FunctionCall}
+		//{VariableAccess} feature=[CallableElement|QualifiedName] ("{" stepExpression=StepExpression "}")? | => ({FunctionCall}
 		//feature=[CallableElement|QualifiedName] "(" (arguments+=Expression ("," arguments+=Expression)*)? ")")
 		public Alternatives getAlternatives() { return cAlternatives; }
 
-		//{VariableAccess} feature=[CallableElement|QualifiedName] ("{" stepExpression=Expression "}")?
+		//{VariableAccess} feature=[CallableElement|QualifiedName] ("{" stepExpression=StepExpression "}")?
 		public Group getGroup_0() { return cGroup_0; }
 
 		//{VariableAccess}
@@ -2593,17 +2593,17 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 		//QualifiedName
 		public RuleCall getFeatureCallableElementQualifiedNameParserRuleCall_0_1_0_1() { return cFeatureCallableElementQualifiedNameParserRuleCall_0_1_0_1; }
 
-		//("{" stepExpression=Expression "}")?
+		//("{" stepExpression=StepExpression "}")?
 		public Group getGroup_0_2() { return cGroup_0_2; }
 
 		//"{"
 		public Keyword getLeftCurlyBracketKeyword_0_2_0() { return cLeftCurlyBracketKeyword_0_2_0; }
 
-		//stepExpression=Expression
+		//stepExpression=StepExpression
 		public Assignment getStepExpressionAssignment_0_2_1() { return cStepExpressionAssignment_0_2_1; }
 
-		//Expression
-		public RuleCall getStepExpressionExpressionParserRuleCall_0_2_1_0() { return cStepExpressionExpressionParserRuleCall_0_2_1_0; }
+		//StepExpression
+		public RuleCall getStepExpressionStepExpressionParserRuleCall_0_2_1_0() { return cStepExpressionStepExpressionParserRuleCall_0_2_1_0; }
 
 		//"}"
 		public Keyword getRightCurlyBracketKeyword_0_2_2() { return cRightCurlyBracketKeyword_0_2_2; }
@@ -2655,6 +2655,188 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 		public Keyword getRightParenthesisKeyword_1_0_4() { return cRightParenthesisKeyword_1_0_4; }
 	}
 
+	public class StepExpressionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "StepExpression");
+		private final RuleCall cRangeStepExpressionParserRuleCall = (RuleCall)rule.eContents().get(1);
+		
+		//StepExpression:
+		//	RangeStepExpression;
+		public ParserRule getRule() { return rule; }
+
+		//RangeStepExpression
+		public RuleCall getRangeStepExpressionParserRuleCall() { return cRangeStepExpressionParserRuleCall; }
+	}
+
+	public class RangeStepExpressionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RangeStepExpression");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cAdditiveStepExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Action cRangeStepExpressionStartAction_1_0 = (Action)cGroup_1.eContents().get(0);
+		private final Keyword cFullStopFullStopKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
+		private final Assignment cEndAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
+		private final RuleCall cEndAdditiveStepExpressionParserRuleCall_1_2_0 = (RuleCall)cEndAssignment_1_2.eContents().get(0);
+		
+		//RangeStepExpression returns StepExpression:
+		//	AdditiveStepExpression ({RangeStepExpression.start=current} ".." end=AdditiveStepExpression)?;
+		public ParserRule getRule() { return rule; }
+
+		//AdditiveStepExpression ({RangeStepExpression.start=current} ".." end=AdditiveStepExpression)?
+		public Group getGroup() { return cGroup; }
+
+		//AdditiveStepExpression
+		public RuleCall getAdditiveStepExpressionParserRuleCall_0() { return cAdditiveStepExpressionParserRuleCall_0; }
+
+		//({RangeStepExpression.start=current} ".." end=AdditiveStepExpression)?
+		public Group getGroup_1() { return cGroup_1; }
+
+		//{RangeStepExpression.start=current}
+		public Action getRangeStepExpressionStartAction_1_0() { return cRangeStepExpressionStartAction_1_0; }
+
+		//".."
+		public Keyword getFullStopFullStopKeyword_1_1() { return cFullStopFullStopKeyword_1_1; }
+
+		//end=AdditiveStepExpression
+		public Assignment getEndAssignment_1_2() { return cEndAssignment_1_2; }
+
+		//AdditiveStepExpression
+		public RuleCall getEndAdditiveStepExpressionParserRuleCall_1_2_0() { return cEndAdditiveStepExpressionParserRuleCall_1_2_0; }
+	}
+
+	public class AdditiveStepExpressionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "AdditiveStepExpression");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cNegateStepExpressionParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Action cAdditiveStepExpressionLeftOperandAction_1_0 = (Action)cGroup_1.eContents().get(0);
+		private final Assignment cOperatorAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
+		private final RuleCall cOperatorAdditiveOperatorEnumRuleCall_1_1_0 = (RuleCall)cOperatorAssignment_1_1.eContents().get(0);
+		private final Assignment cRightOperandAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
+		private final RuleCall cRightOperandNegateStepExpressionParserRuleCall_1_2_0 = (RuleCall)cRightOperandAssignment_1_2.eContents().get(0);
+		
+		//AdditiveStepExpression returns StepExpression:
+		//	NegateStepExpression ({AdditiveStepExpression.leftOperand=current} operator=AdditiveOperator
+		//	rightOperand=NegateStepExpression)*;
+		public ParserRule getRule() { return rule; }
+
+		//NegateStepExpression ({AdditiveStepExpression.leftOperand=current} operator=AdditiveOperator
+		//rightOperand=NegateStepExpression)*
+		public Group getGroup() { return cGroup; }
+
+		//NegateStepExpression
+		public RuleCall getNegateStepExpressionParserRuleCall_0() { return cNegateStepExpressionParserRuleCall_0; }
+
+		//({AdditiveStepExpression.leftOperand=current} operator=AdditiveOperator rightOperand=NegateStepExpression)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//{AdditiveStepExpression.leftOperand=current}
+		public Action getAdditiveStepExpressionLeftOperandAction_1_0() { return cAdditiveStepExpressionLeftOperandAction_1_0; }
+
+		//operator=AdditiveOperator
+		public Assignment getOperatorAssignment_1_1() { return cOperatorAssignment_1_1; }
+
+		//AdditiveOperator
+		public RuleCall getOperatorAdditiveOperatorEnumRuleCall_1_1_0() { return cOperatorAdditiveOperatorEnumRuleCall_1_1_0; }
+
+		//rightOperand=NegateStepExpression
+		public Assignment getRightOperandAssignment_1_2() { return cRightOperandAssignment_1_2; }
+
+		//NegateStepExpression
+		public RuleCall getRightOperandNegateStepExpressionParserRuleCall_1_2_0() { return cRightOperandNegateStepExpressionParserRuleCall_1_2_0; }
+	}
+
+	public class NegateStepExpressionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "NegateStepExpression");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cPrimitiveStepExpressionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
+		private final Action cNegateStepExpressionAction_1_0 = (Action)cGroup_1.eContents().get(0);
+		private final Keyword cHyphenMinusKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
+		private final Assignment cOperandAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
+		private final RuleCall cOperandPrimitiveStepExpressionParserRuleCall_1_2_0 = (RuleCall)cOperandAssignment_1_2.eContents().get(0);
+		
+		//NegateStepExpression returns StepExpression:
+		//	PrimitiveStepExpression | {NegateStepExpression} "-" operand=PrimitiveStepExpression;
+		public ParserRule getRule() { return rule; }
+
+		//PrimitiveStepExpression | {NegateStepExpression} "-" operand=PrimitiveStepExpression
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//PrimitiveStepExpression
+		public RuleCall getPrimitiveStepExpressionParserRuleCall_0() { return cPrimitiveStepExpressionParserRuleCall_0; }
+
+		//{NegateStepExpression} "-" operand=PrimitiveStepExpression
+		public Group getGroup_1() { return cGroup_1; }
+
+		//{NegateStepExpression}
+		public Action getNegateStepExpressionAction_1_0() { return cNegateStepExpressionAction_1_0; }
+
+		//"-"
+		public Keyword getHyphenMinusKeyword_1_1() { return cHyphenMinusKeyword_1_1; }
+
+		//operand=PrimitiveStepExpression
+		public Assignment getOperandAssignment_1_2() { return cOperandAssignment_1_2; }
+
+		//PrimitiveStepExpression
+		public RuleCall getOperandPrimitiveStepExpressionParserRuleCall_1_2_0() { return cOperandPrimitiveStepExpressionParserRuleCall_1_2_0; }
+	}
+
+	public class PrimitiveStepExpressionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "PrimitiveStepExpression");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cStepLiteralParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cStepNParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		
+		//PrimitiveStepExpression returns StepExpression:
+		//	StepLiteral | StepN;
+		public ParserRule getRule() { return rule; }
+
+		//StepLiteral | StepN
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//StepLiteral
+		public RuleCall getStepLiteralParserRuleCall_0() { return cStepLiteralParserRuleCall_0; }
+
+		//StepN
+		public RuleCall getStepNParserRuleCall_1() { return cStepNParserRuleCall_1; }
+	}
+
+	public class StepLiteralElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "StepLiteral");
+		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
+		private final RuleCall cValueValidIntParserRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
+		
+		//StepLiteral:
+		//	value=ValidInt;
+		public ParserRule getRule() { return rule; }
+
+		//value=ValidInt
+		public Assignment getValueAssignment() { return cValueAssignment; }
+
+		//ValidInt
+		public RuleCall getValueValidIntParserRuleCall_0() { return cValueValidIntParserRuleCall_0; }
+	}
+
+	public class StepNElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "StepN");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cStepNAction_0 = (Action)cGroup.eContents().get(0);
+		private final RuleCall cNTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		
+		//StepN:
+		//	{StepN} N;
+		public ParserRule getRule() { return rule; }
+
+		//{StepN} N
+		public Group getGroup() { return cGroup; }
+
+		//{StepN}
+		public Action getStepNAction_0() { return cStepNAction_0; }
+
+		//N
+		public RuleCall getNTerminalRuleCall_1() { return cNTerminalRuleCall_1; }
+	}
+
 	public class ArrayConstructionOperatorElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ArrayConstructionOperator");
 		private final Group cGroup = (Group)rule.eContents().get(1);
@@ -3160,27 +3342,55 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "UnitExponent");
 		private final Group cGroup = (Group)rule.eContents().get(1);
 		private final Keyword cHyphenMinusKeyword_0 = (Keyword)cGroup.eContents().get(0);
-		private final RuleCall cValidIntegerParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
+		private final RuleCall cValidIntParserRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
 		
 		//UnitExponent returns ecore::EInt:
-		//	"-"? ValidInteger;
+		//	"-"? ValidInt;
 		public ParserRule getRule() { return rule; }
 
-		//"-"? ValidInteger
+		//"-"? ValidInt
 		public Group getGroup() { return cGroup; }
 
 		//"-"?
 		public Keyword getHyphenMinusKeyword_0() { return cHyphenMinusKeyword_0; }
 
-		//ValidInteger
-		public RuleCall getValidIntegerParserRuleCall_1() { return cValidIntegerParserRuleCall_1; }
+		//ValidInt
+		public RuleCall getValidIntParserRuleCall_1() { return cValidIntParserRuleCall_1; }
 	}
 
-	public class ValidRealElements extends AbstractParserRuleElementFinder {
-		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ValidReal");
+	public class QualifiedNameElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "QualifiedName");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cValidIDParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Keyword cColonColonKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final RuleCall cValidIDParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+		
+		//QualifiedName:
+		//	ValidID ("::" ValidID)*;
+		public ParserRule getRule() { return rule; }
+
+		//ValidID ("::" ValidID)*
+		public Group getGroup() { return cGroup; }
+
+		//ValidID
+		public RuleCall getValidIDParserRuleCall_0() { return cValidIDParserRuleCall_0; }
+
+		//("::" ValidID)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//"::"
+		public Keyword getColonColonKeyword_1_0() { return cColonColonKeyword_1_0; }
+
+		//ValidID
+		public RuleCall getValidIDParserRuleCall_1_1() { return cValidIDParserRuleCall_1_1; }
+	}
+
+	public class ValidDoubleElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ValidDouble");
 		private final RuleCall cREALTerminalRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//ValidReal returns ecore::EDouble:
+		//ValidDouble returns ecore::EDouble:
 		//	REAL;
 		public ParserRule getRule() { return rule; }
 
@@ -3188,64 +3398,64 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 		public RuleCall getREALTerminalRuleCall() { return cREALTerminalRuleCall; }
 	}
 
-	public class ValidIntegerElements extends AbstractParserRuleElementFinder {
-		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ValidInteger");
+	public class ValidIntElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ValidInt");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final RuleCall cONETerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
-		private final RuleCall cINTEGERTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cINTTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		
-		//ValidInteger returns ecore::ELong:
-		//	ONE | INTEGER;
+		//ValidInt returns ecore::EInt:
+		//	ONE | INT;
 		public ParserRule getRule() { return rule; }
 
-		//ONE | INTEGER
+		//ONE | INT
 		public Alternatives getAlternatives() { return cAlternatives; }
 
 		//ONE
 		public RuleCall getONETerminalRuleCall_0() { return cONETerminalRuleCall_0; }
 
-		//INTEGER
-		public RuleCall getINTEGERTerminalRuleCall_1() { return cINTEGERTerminalRuleCall_1; }
+		//INT
+		public RuleCall getINTTerminalRuleCall_1() { return cINTTerminalRuleCall_1; }
 	}
 
-	public class ValidIDElements extends AbstractParserRuleElementFinder {
-		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ValidID");
-		private final RuleCall cIDTerminalRuleCall = (RuleCall)rule.eContents().get(1);
+	public class ValidLongElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ValidLong");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cONETerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cINTTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		
-		//ValidID:
-		//	ID;
+		//ValidLong returns ecore::ELong:
+		//	ONE | INT;
 		public ParserRule getRule() { return rule; }
 
-		//ID
-		public RuleCall getIDTerminalRuleCall() { return cIDTerminalRuleCall; }
+		//ONE | INT
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//ONE
+		public RuleCall getONETerminalRuleCall_0() { return cONETerminalRuleCall_0; }
+
+		//INT
+		public RuleCall getINTTerminalRuleCall_1() { return cINTTerminalRuleCall_1; }
 	}
 
-	public class QualifiedNameElements extends AbstractParserRuleElementFinder {
-		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "QualifiedName");
-		private final Group cGroup = (Group)rule.eContents().get(1);
-		private final RuleCall cValidIDParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
-		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
-		private final Keyword cColonColonKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
-		private final RuleCall cValidIDParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
+	public class ValidIDElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ValidID");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cNTerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cIDTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		
-		//QualifiedName:
-		//	ValidID ("::" ValidID)*;
+		//ValidID:
+		//	N | ID;
 		public ParserRule getRule() { return rule; }
 
-		//ValidID ("::" ValidID)*
-		public Group getGroup() { return cGroup; }
-
-		//ValidID
-		public RuleCall getValidIDParserRuleCall_0() { return cValidIDParserRuleCall_0; }
-
-		//("::" ValidID)*
-		public Group getGroup_1() { return cGroup_1; }
+		//N | ID
+		public Alternatives getAlternatives() { return cAlternatives; }
 
-		//"::"
-		public Keyword getColonColonKeyword_1_0() { return cColonColonKeyword_1_0; }
+		//N
+		public RuleCall getNTerminalRuleCall_0() { return cNTerminalRuleCall_0; }
 
-		//ValidID
-		public RuleCall getValidIDParserRuleCall_1_1() { return cValidIDParserRuleCall_1_1; }
+		//ID
+		public RuleCall getIDTerminalRuleCall_1() { return cIDTerminalRuleCall_1; }
 	}
 	
 	
@@ -3605,6 +3815,13 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 	private BooleanKindElements unknownRuleBooleanKind;
 	private StringLiteralElements pStringLiteral;
 	private FeatureCallElements pFeatureCall;
+	private StepExpressionElements pStepExpression;
+	private RangeStepExpressionElements pRangeStepExpression;
+	private AdditiveStepExpressionElements pAdditiveStepExpression;
+	private NegateStepExpressionElements pNegateStepExpression;
+	private PrimitiveStepExpressionElements pPrimitiveStepExpression;
+	private StepLiteralElements pStepLiteral;
+	private StepNElements pStepN;
 	private ArrayConstructionOperatorElements pArrayConstructionOperator;
 	private ArrayConstructionIterationClauseElements pArrayConstructionIterationClause;
 	private ArrayConcatenationOperatorElements pArrayConcatenationOperator;
@@ -3618,15 +3835,17 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 	private UnitDenominatorElements pUnitDenominator;
 	private UnitFactorElements pUnitFactor;
 	private UnitExponentElements pUnitExponent;
-	private ValidRealElements pValidReal;
-	private ValidIntegerElements pValidInteger;
-	private ValidIDElements pValidID;
 	private QualifiedNameElements pQualifiedName;
+	private ValidDoubleElements pValidDouble;
+	private ValidIntElements pValidInt;
+	private ValidLongElements pValidLong;
+	private ValidIDElements pValidID;
+	private TerminalRule tN;
 	private TerminalRule tID;
 	private TerminalRule tSTRING;
 	private TerminalRule tONE;
 	private TerminalRule tREAL;
-	private TerminalRule tINTEGER;
+	private TerminalRule tINT;
 	private TerminalRule tML_COMMENT;
 	private TerminalRule tSL_COMMENT;
 	private TerminalRule tWS;
@@ -4299,7 +4518,7 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 	}
 
 	//RealLiteral:
-	//	value=ValidReal modifier=ValidID? ("(" unit=Unit ")")?;
+	//	value=ValidDouble modifier=ValidID? ("(" unit=Unit ")")?;
 	public RealLiteralElements getRealLiteralAccess() {
 		return (pRealLiteral != null) ? pRealLiteral : (pRealLiteral = new RealLiteralElements());
 	}
@@ -4309,7 +4528,7 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 	}
 
 	//IntegerLiteral:
-	//	value=ValidInteger modifier=ValidID? ("(" unit=Unit ")")?;
+	//	value=ValidLong modifier=ValidID? ("(" unit=Unit ")")?;
 	public IntegerLiteralElements getIntegerLiteralAccess() {
 		return (pIntegerLiteral != null) ? pIntegerLiteral : (pIntegerLiteral = new IntegerLiteralElements());
 	}
@@ -4349,7 +4568,7 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 	}
 
 	//FeatureCall returns Expression:
-	//	{VariableAccess} feature=[CallableElement|QualifiedName] ("{" stepExpression=Expression "}")? | => ({FunctionCall}
+	//	{VariableAccess} feature=[CallableElement|QualifiedName] ("{" stepExpression=StepExpression "}")? | => ({FunctionCall}
 	//	feature=[CallableElement|QualifiedName] "(" (arguments+=Expression ("," arguments+=Expression)*)? ")");
 	public FeatureCallElements getFeatureCallAccess() {
 		return (pFeatureCall != null) ? pFeatureCall : (pFeatureCall = new FeatureCallElements());
@@ -4359,6 +4578,77 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 		return getFeatureCallAccess().getRule();
 	}
 
+	//StepExpression:
+	//	RangeStepExpression;
+	public StepExpressionElements getStepExpressionAccess() {
+		return (pStepExpression != null) ? pStepExpression : (pStepExpression = new StepExpressionElements());
+	}
+	
+	public ParserRule getStepExpressionRule() {
+		return getStepExpressionAccess().getRule();
+	}
+
+	//RangeStepExpression returns StepExpression:
+	//	AdditiveStepExpression ({RangeStepExpression.start=current} ".." end=AdditiveStepExpression)?;
+	public RangeStepExpressionElements getRangeStepExpressionAccess() {
+		return (pRangeStepExpression != null) ? pRangeStepExpression : (pRangeStepExpression = new RangeStepExpressionElements());
+	}
+	
+	public ParserRule getRangeStepExpressionRule() {
+		return getRangeStepExpressionAccess().getRule();
+	}
+
+	//AdditiveStepExpression returns StepExpression:
+	//	NegateStepExpression ({AdditiveStepExpression.leftOperand=current} operator=AdditiveOperator
+	//	rightOperand=NegateStepExpression)*;
+	public AdditiveStepExpressionElements getAdditiveStepExpressionAccess() {
+		return (pAdditiveStepExpression != null) ? pAdditiveStepExpression : (pAdditiveStepExpression = new AdditiveStepExpressionElements());
+	}
+	
+	public ParserRule getAdditiveStepExpressionRule() {
+		return getAdditiveStepExpressionAccess().getRule();
+	}
+
+	//NegateStepExpression returns StepExpression:
+	//	PrimitiveStepExpression | {NegateStepExpression} "-" operand=PrimitiveStepExpression;
+	public NegateStepExpressionElements getNegateStepExpressionAccess() {
+		return (pNegateStepExpression != null) ? pNegateStepExpression : (pNegateStepExpression = new NegateStepExpressionElements());
+	}
+	
+	public ParserRule getNegateStepExpressionRule() {
+		return getNegateStepExpressionAccess().getRule();
+	}
+
+	//PrimitiveStepExpression returns StepExpression:
+	//	StepLiteral | StepN;
+	public PrimitiveStepExpressionElements getPrimitiveStepExpressionAccess() {
+		return (pPrimitiveStepExpression != null) ? pPrimitiveStepExpression : (pPrimitiveStepExpression = new PrimitiveStepExpressionElements());
+	}
+	
+	public ParserRule getPrimitiveStepExpressionRule() {
+		return getPrimitiveStepExpressionAccess().getRule();
+	}
+
+	//StepLiteral:
+	//	value=ValidInt;
+	public StepLiteralElements getStepLiteralAccess() {
+		return (pStepLiteral != null) ? pStepLiteral : (pStepLiteral = new StepLiteralElements());
+	}
+	
+	public ParserRule getStepLiteralRule() {
+		return getStepLiteralAccess().getRule();
+	}
+
+	//StepN:
+	//	{StepN} N;
+	public StepNElements getStepNAccess() {
+		return (pStepN != null) ? pStepN : (pStepN = new StepNElements());
+	}
+	
+	public ParserRule getStepNRule() {
+		return getStepNAccess().getRule();
+	}
+
 	//ArrayConstructionOperator:
 	//	"{" expressions+=Expression (("," expressions+=Expression)* | "for" iterationClauses+=ArrayConstructionIterationClause
 	//	("," iterationClauses+=ArrayConstructionIterationClause)*) "}";
@@ -4483,7 +4773,7 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 	}
 
 	//UnitExponent returns ecore::EInt:
-	//	"-"? ValidInteger;
+	//	"-"? ValidInt;
 	public UnitExponentElements getUnitExponentAccess() {
 		return (pUnitExponent != null) ? pUnitExponent : (pUnitExponent = new UnitExponentElements());
 	}
@@ -4492,28 +4782,48 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 		return getUnitExponentAccess().getRule();
 	}
 
-	//ValidReal returns ecore::EDouble:
+	//QualifiedName:
+	//	ValidID ("::" ValidID)*;
+	public QualifiedNameElements getQualifiedNameAccess() {
+		return (pQualifiedName != null) ? pQualifiedName : (pQualifiedName = new QualifiedNameElements());
+	}
+	
+	public ParserRule getQualifiedNameRule() {
+		return getQualifiedNameAccess().getRule();
+	}
+
+	//ValidDouble returns ecore::EDouble:
 	//	REAL;
-	public ValidRealElements getValidRealAccess() {
-		return (pValidReal != null) ? pValidReal : (pValidReal = new ValidRealElements());
+	public ValidDoubleElements getValidDoubleAccess() {
+		return (pValidDouble != null) ? pValidDouble : (pValidDouble = new ValidDoubleElements());
+	}
+	
+	public ParserRule getValidDoubleRule() {
+		return getValidDoubleAccess().getRule();
+	}
+
+	//ValidInt returns ecore::EInt:
+	//	ONE | INT;
+	public ValidIntElements getValidIntAccess() {
+		return (pValidInt != null) ? pValidInt : (pValidInt = new ValidIntElements());
 	}
 	
-	public ParserRule getValidRealRule() {
-		return getValidRealAccess().getRule();
+	public ParserRule getValidIntRule() {
+		return getValidIntAccess().getRule();
 	}
 
-	//ValidInteger returns ecore::ELong:
-	//	ONE | INTEGER;
-	public ValidIntegerElements getValidIntegerAccess() {
-		return (pValidInteger != null) ? pValidInteger : (pValidInteger = new ValidIntegerElements());
+	//ValidLong returns ecore::ELong:
+	//	ONE | INT;
+	public ValidLongElements getValidLongAccess() {
+		return (pValidLong != null) ? pValidLong : (pValidLong = new ValidLongElements());
 	}
 	
-	public ParserRule getValidIntegerRule() {
-		return getValidIntegerAccess().getRule();
+	public ParserRule getValidLongRule() {
+		return getValidLongAccess().getRule();
 	}
 
 	//ValidID:
-	//	ID;
+	//	N | ID;
 	public ValidIDElements getValidIDAccess() {
 		return (pValidID != null) ? pValidID : (pValidID = new ValidIDElements());
 	}
@@ -4522,19 +4832,15 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 		return getValidIDAccess().getRule();
 	}
 
-	//QualifiedName:
-	//	ValidID ("::" ValidID)*;
-	public QualifiedNameElements getQualifiedNameAccess() {
-		return (pQualifiedName != null) ? pQualifiedName : (pQualifiedName = new QualifiedNameElements());
-	}
-	
-	public ParserRule getQualifiedNameRule() {
-		return getQualifiedNameAccess().getRule();
-	}
-
 	/// *
 	// * Terminals
-	// * / terminal ID:
+	// * / terminal N:
+	//	"n";
+	public TerminalRule getNRule() {
+		return (tN != null) ? tN : (tN = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "N"));
+	} 
+
+	//terminal ID:
 	//	("_" | "a".."z" | "A".."Z") ("0".."9" | "_" | "a".."z" | "A".."Z")*;
 	public TerminalRule getIDRule() {
 		return (tID != null) ? tID : (tID = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "ID"));
@@ -4558,10 +4864,10 @@ public class MscriptGrammarAccess extends AbstractGrammarElementFinder {
 		return (tREAL != null) ? tREAL : (tREAL = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "REAL"));
 	} 
 
-	//terminal INTEGER:
+	//terminal INT:
 	//	"0".."9"+;
-	public TerminalRule getINTEGERRule() {
-		return (tINTEGER != null) ? tINTEGER : (tINTEGER = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "INTEGER"));
+	public TerminalRule getINTRule() {
+		return (tINT != null) ? tINT : (tINT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "INT"));
 	} 
 
 	//terminal ML_COMMENT:

+ 39 - 12
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/Mscript.xtext

@@ -270,10 +270,10 @@ NumericLiteral:
 	RealLiteral | IntegerLiteral;
 	
 RealLiteral:
-	value=ValidReal (modifier=ValidID)? ('(' unit=Unit ')')?;
+	value=ValidDouble (modifier=ValidID)? ('(' unit=Unit ')')?;
 	
 IntegerLiteral:
-	value=ValidInteger (modifier=ValidID)? ('(' unit=Unit ')')?;
+	value=ValidLong (modifier=ValidID)? ('(' unit=Unit ')')?;
 
 BooleanLiteral:
 	value=BooleanKind;
@@ -285,9 +285,30 @@ StringLiteral:
 	value=STRING;
 		
 FeatureCall returns Expression:
-	{VariableAccess} feature=[CallableElement|QualifiedName] ('{' stepExpression=Expression '}')?
+	{VariableAccess} feature=[CallableElement|QualifiedName] ('{' stepExpression=StepExpression '}')?
 		| =>({FunctionCall} feature=[CallableElement|QualifiedName] '(' (arguments+=Expression (',' arguments+=Expression)*)? ')');
 
+StepExpression:
+	RangeStepExpression;
+	
+RangeStepExpression returns StepExpression:
+	AdditiveStepExpression ({RangeStepExpression.start=current} '..' end=AdditiveStepExpression)?;
+
+AdditiveStepExpression returns StepExpression:
+	NegateStepExpression ({AdditiveStepExpression.leftOperand=current} operator=AdditiveOperator rightOperand=NegateStepExpression)*;
+
+NegateStepExpression returns StepExpression:
+	PrimitiveStepExpression | {NegateStepExpression} '-' operand=PrimitiveStepExpression;
+
+PrimitiveStepExpression returns StepExpression:
+	StepLiteral | StepN;
+
+StepLiteral:
+	value=ValidInt;
+	
+StepN:
+	{StepN} N;
+
 ArrayConstructionOperator:
 	'{' expressions+=Expression ((',' expressions+=Expression)* | 'for' iterationClauses+=ArrayConstructionIterationClause (',' iterationClauses+=ArrayConstructionIterationClause)*) '}';
 
@@ -329,24 +350,30 @@ UnitFactor:
 	symbol=ValidID ('^' exponent=UnitExponent)?;
 
 UnitExponent returns ecore::EInt:
-	('-')? ValidInteger;
+	('-')? ValidInt;
 
-ValidReal returns ecore::EDouble:
+QualifiedName:
+  ValidID ('::' ValidID)*;
+
+ValidDouble returns ecore::EDouble:
 	REAL;
 
-ValidInteger returns ecore::ELong:
-	ONE | INTEGER;
+ValidInt returns ecore::EInt:
+	ONE | INT;
 
-ValidID:
-	ID;
+ValidLong returns ecore::ELong:
+	ONE | INT;
 
-QualifiedName:
-  ValidID ('::' ValidID)*;
+ValidID:
+	N | ID;
 
 /*
  * Terminals
  */
  
+terminal N:
+	'n';
+
 terminal ID:
 	('_' | 'a'..'z' | 'A'..'Z') ('0'..'9' | '_' | 'a'..'z' | 'A'..'Z')*;
 
@@ -359,7 +386,7 @@ terminal ONE:
 terminal REAL:
 	('0'..'9')+ '.' ('0'..'9')* (('e' | 'E') ('+'|'-')? ('0'..'9')+)?;
 
-terminal INTEGER:
+terminal INT:
 	('0'..'9')+;
 
 terminal ML_COMMENT:

+ 110 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/AdditiveStepExpression.java

@@ -0,0 +1,110 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipselabs.mscript.language.ast;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Additive Step Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipselabs.mscript.language.ast.AdditiveStepExpression#getOperator <em>Operator</em>}</li>
+ *   <li>{@link org.eclipselabs.mscript.language.ast.AdditiveStepExpression#getLeftOperand <em>Left Operand</em>}</li>
+ *   <li>{@link org.eclipselabs.mscript.language.ast.AdditiveStepExpression#getRightOperand <em>Right Operand</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipselabs.mscript.language.ast.AstPackage#getAdditiveStepExpression()
+ * @model
+ * @generated
+ */
+public interface AdditiveStepExpression extends StepExpression {
+	/**
+	 * Returns the value of the '<em><b>Operator</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipselabs.mscript.language.ast.AdditiveOperator}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Operator</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Operator</em>' attribute.
+	 * @see org.eclipselabs.mscript.language.ast.AdditiveOperator
+	 * @see #setOperator(AdditiveOperator)
+	 * @see org.eclipselabs.mscript.language.ast.AstPackage#getAdditiveStepExpression_Operator()
+	 * @model
+	 * @generated
+	 */
+	AdditiveOperator getOperator();
+
+	/**
+	 * Sets the value of the '{@link org.eclipselabs.mscript.language.ast.AdditiveStepExpression#getOperator <em>Operator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Operator</em>' attribute.
+	 * @see org.eclipselabs.mscript.language.ast.AdditiveOperator
+	 * @see #getOperator()
+	 * @generated
+	 */
+	void setOperator(AdditiveOperator value);
+
+	/**
+	 * Returns the value of the '<em><b>Left Operand</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Left Operand</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Left Operand</em>' containment reference.
+	 * @see #setLeftOperand(StepExpression)
+	 * @see org.eclipselabs.mscript.language.ast.AstPackage#getAdditiveStepExpression_LeftOperand()
+	 * @model containment="true"
+	 * @generated
+	 */
+	StepExpression getLeftOperand();
+
+	/**
+	 * Sets the value of the '{@link org.eclipselabs.mscript.language.ast.AdditiveStepExpression#getLeftOperand <em>Left Operand</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Left Operand</em>' containment reference.
+	 * @see #getLeftOperand()
+	 * @generated
+	 */
+	void setLeftOperand(StepExpression value);
+
+	/**
+	 * Returns the value of the '<em><b>Right Operand</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Right Operand</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Right Operand</em>' containment reference.
+	 * @see #setRightOperand(StepExpression)
+	 * @see org.eclipselabs.mscript.language.ast.AstPackage#getAdditiveStepExpression_RightOperand()
+	 * @model containment="true"
+	 * @generated
+	 */
+	StepExpression getRightOperand();
+
+	/**
+	 * Sets the value of the '{@link org.eclipselabs.mscript.language.ast.AdditiveStepExpression#getRightOperand <em>Right Operand</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Right Operand</em>' containment reference.
+	 * @see #getRightOperand()
+	 * @generated
+	 */
+	void setRightOperand(StepExpression value);
+
+} // AdditiveStepExpression

+ 45 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/AstFactory.java

@@ -448,6 +448,51 @@ public interface AstFactory extends EFactory {
 	 */
 	VariableAccess createVariableAccess();
 
+	/**
+	 * Returns a new object of class '<em>Range Step Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Range Step Expression</em>'.
+	 * @generated
+	 */
+	RangeStepExpression createRangeStepExpression();
+
+	/**
+	 * Returns a new object of class '<em>Additive Step Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Additive Step Expression</em>'.
+	 * @generated
+	 */
+	AdditiveStepExpression createAdditiveStepExpression();
+
+	/**
+	 * Returns a new object of class '<em>Negate Step Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Negate Step Expression</em>'.
+	 * @generated
+	 */
+	NegateStepExpression createNegateStepExpression();
+
+	/**
+	 * Returns a new object of class '<em>Step Literal</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Step Literal</em>'.
+	 * @generated
+	 */
+	StepLiteral createStepLiteral();
+
+	/**
+	 * Returns a new object of class '<em>Step N</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Step N</em>'.
+	 * @generated
+	 */
+	StepN createStepN();
+
 	/**
 	 * Returns a new object of class '<em>Function Call</em>'.
 	 * <!-- begin-user-doc -->

+ 482 - 13
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/AstPackage.java

@@ -1939,6 +1939,202 @@ public interface AstPackage extends EPackage {
 	 */
 	int VARIABLE_ACCESS_FEATURE_COUNT = FEATURE_CALL_FEATURE_COUNT + 1;
 
+	/**
+	 * The meta object id for the '{@link org.eclipselabs.mscript.language.ast.impl.StepExpressionImpl <em>Step Expression</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipselabs.mscript.language.ast.impl.StepExpressionImpl
+	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getStepExpression()
+	 * @generated
+	 */
+	int STEP_EXPRESSION = 51;
+
+	/**
+	 * The number of structural features of the '<em>Step Expression</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEP_EXPRESSION_FEATURE_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipselabs.mscript.language.ast.impl.RangeStepExpressionImpl <em>Range Step Expression</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipselabs.mscript.language.ast.impl.RangeStepExpressionImpl
+	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getRangeStepExpression()
+	 * @generated
+	 */
+	int RANGE_STEP_EXPRESSION = 52;
+
+	/**
+	 * The feature id for the '<em><b>Start</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RANGE_STEP_EXPRESSION__START = STEP_EXPRESSION_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>End</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RANGE_STEP_EXPRESSION__END = STEP_EXPRESSION_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of structural features of the '<em>Range Step Expression</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RANGE_STEP_EXPRESSION_FEATURE_COUNT = STEP_EXPRESSION_FEATURE_COUNT + 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipselabs.mscript.language.ast.impl.AdditiveStepExpressionImpl <em>Additive Step Expression</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipselabs.mscript.language.ast.impl.AdditiveStepExpressionImpl
+	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getAdditiveStepExpression()
+	 * @generated
+	 */
+	int ADDITIVE_STEP_EXPRESSION = 53;
+
+	/**
+	 * The feature id for the '<em><b>Operator</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ADDITIVE_STEP_EXPRESSION__OPERATOR = STEP_EXPRESSION_FEATURE_COUNT + 0;
+
+	/**
+	 * The feature id for the '<em><b>Left Operand</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ADDITIVE_STEP_EXPRESSION__LEFT_OPERAND = STEP_EXPRESSION_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Right Operand</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ADDITIVE_STEP_EXPRESSION__RIGHT_OPERAND = STEP_EXPRESSION_FEATURE_COUNT + 2;
+
+	/**
+	 * The number of structural features of the '<em>Additive Step Expression</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ADDITIVE_STEP_EXPRESSION_FEATURE_COUNT = STEP_EXPRESSION_FEATURE_COUNT + 3;
+
+	/**
+	 * The meta object id for the '{@link org.eclipselabs.mscript.language.ast.impl.NegateStepExpressionImpl <em>Negate Step Expression</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipselabs.mscript.language.ast.impl.NegateStepExpressionImpl
+	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getNegateStepExpression()
+	 * @generated
+	 */
+	int NEGATE_STEP_EXPRESSION = 54;
+
+	/**
+	 * The feature id for the '<em><b>Operand</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NEGATE_STEP_EXPRESSION__OPERAND = STEP_EXPRESSION_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Negate Step Expression</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NEGATE_STEP_EXPRESSION_FEATURE_COUNT = STEP_EXPRESSION_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipselabs.mscript.language.ast.impl.PrimitiveStepExpressionImpl <em>Primitive Step Expression</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipselabs.mscript.language.ast.impl.PrimitiveStepExpressionImpl
+	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getPrimitiveStepExpression()
+	 * @generated
+	 */
+	int PRIMITIVE_STEP_EXPRESSION = 55;
+
+	/**
+	 * The number of structural features of the '<em>Primitive Step Expression</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PRIMITIVE_STEP_EXPRESSION_FEATURE_COUNT = STEP_EXPRESSION_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipselabs.mscript.language.ast.impl.StepLiteralImpl <em>Step Literal</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipselabs.mscript.language.ast.impl.StepLiteralImpl
+	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getStepLiteral()
+	 * @generated
+	 */
+	int STEP_LITERAL = 56;
+
+	/**
+	 * The feature id for the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEP_LITERAL__VALUE = PRIMITIVE_STEP_EXPRESSION_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Step Literal</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEP_LITERAL_FEATURE_COUNT = PRIMITIVE_STEP_EXPRESSION_FEATURE_COUNT + 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipselabs.mscript.language.ast.impl.StepNImpl <em>Step N</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipselabs.mscript.language.ast.impl.StepNImpl
+	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getStepN()
+	 * @generated
+	 */
+	int STEP_N = 57;
+
+	/**
+	 * The number of structural features of the '<em>Step N</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int STEP_N_FEATURE_COUNT = PRIMITIVE_STEP_EXPRESSION_FEATURE_COUNT + 0;
+
 	/**
 	 * The meta object id for the '{@link org.eclipselabs.mscript.language.ast.impl.FunctionCallImpl <em>Function Call</em>}' class.
 	 * <!-- begin-user-doc -->
@@ -1947,7 +2143,7 @@ public interface AstPackage extends EPackage {
 	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getFunctionCall()
 	 * @generated
 	 */
-	int FUNCTION_CALL = 51;
+	int FUNCTION_CALL = 58;
 
 	/**
 	 * The feature id for the '<em><b>Feature</b></em>' reference.
@@ -1984,7 +2180,7 @@ public interface AstPackage extends EPackage {
 	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getMemberVariableAccess()
 	 * @generated
 	 */
-	int MEMBER_VARIABLE_ACCESS = 52;
+	int MEMBER_VARIABLE_ACCESS = 59;
 
 	/**
 	 * The feature id for the '<em><b>Target</b></em>' containment reference.
@@ -2021,7 +2217,7 @@ public interface AstPackage extends EPackage {
 	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getBuiltinDefinition()
 	 * @generated
 	 */
-	int BUILTIN_DEFINITION = 53;
+	int BUILTIN_DEFINITION = 60;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -2049,7 +2245,7 @@ public interface AstPackage extends EPackage {
 	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getBuiltinFunction()
 	 * @generated
 	 */
-	int BUILTIN_FUNCTION = 54;
+	int BUILTIN_FUNCTION = 61;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -2077,7 +2273,7 @@ public interface AstPackage extends EPackage {
 	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getBuiltinVariable()
 	 * @generated
 	 */
-	int BUILTIN_VARIABLE = 55;
+	int BUILTIN_VARIABLE = 62;
 
 	/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -2105,7 +2301,7 @@ public interface AstPackage extends EPackage {
 	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getAssertionStatusKind()
 	 * @generated
 	 */
-	int ASSERTION_STATUS_KIND = 56;
+	int ASSERTION_STATUS_KIND = 63;
 
 	/**
 	 * The meta object id for the '{@link org.eclipselabs.mscript.language.ast.EqualityOperator <em>Equality Operator</em>}' enum.
@@ -2115,7 +2311,7 @@ public interface AstPackage extends EPackage {
 	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getEqualityOperator()
 	 * @generated
 	 */
-	int EQUALITY_OPERATOR = 57;
+	int EQUALITY_OPERATOR = 64;
 
 	/**
 	 * The meta object id for the '{@link org.eclipselabs.mscript.language.ast.RelationalOperator <em>Relational Operator</em>}' enum.
@@ -2125,7 +2321,7 @@ public interface AstPackage extends EPackage {
 	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getRelationalOperator()
 	 * @generated
 	 */
-	int RELATIONAL_OPERATOR = 58;
+	int RELATIONAL_OPERATOR = 65;
 
 	/**
 	 * The meta object id for the '{@link org.eclipselabs.mscript.language.ast.AdditiveOperator <em>Additive Operator</em>}' enum.
@@ -2135,7 +2331,7 @@ public interface AstPackage extends EPackage {
 	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getAdditiveOperator()
 	 * @generated
 	 */
-	int ADDITIVE_OPERATOR = 59;
+	int ADDITIVE_OPERATOR = 66;
 
 	/**
 	 * The meta object id for the '{@link org.eclipselabs.mscript.language.ast.MultiplicativeOperator <em>Multiplicative Operator</em>}' enum.
@@ -2145,7 +2341,7 @@ public interface AstPackage extends EPackage {
 	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getMultiplicativeOperator()
 	 * @generated
 	 */
-	int MULTIPLICATIVE_OPERATOR = 60;
+	int MULTIPLICATIVE_OPERATOR = 67;
 
 	/**
 	 * The meta object id for the '{@link org.eclipselabs.mscript.language.ast.PowerOperator <em>Power Operator</em>}' enum.
@@ -2155,7 +2351,7 @@ public interface AstPackage extends EPackage {
 	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getPowerOperator()
 	 * @generated
 	 */
-	int POWER_OPERATOR = 61;
+	int POWER_OPERATOR = 68;
 
 	/**
 	 * The meta object id for the '{@link org.eclipselabs.mscript.language.ast.UnaryOperator <em>Unary Operator</em>}' enum.
@@ -2165,7 +2361,7 @@ public interface AstPackage extends EPackage {
 	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getUnaryOperator()
 	 * @generated
 	 */
-	int UNARY_OPERATOR = 62;
+	int UNARY_OPERATOR = 69;
 
 	/**
 	 * The meta object id for the '{@link org.eclipselabs.mscript.language.ast.PostfixOperator <em>Postfix Operator</em>}' enum.
@@ -2175,7 +2371,7 @@ public interface AstPackage extends EPackage {
 	 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getPostfixOperator()
 	 * @generated
 	 */
-	int POSTFIX_OPERATOR = 63;
+	int POSTFIX_OPERATOR = 70;
 
 	/**
 	 * Returns the meta object for class '{@link org.eclipselabs.mscript.language.ast.Module <em>Module</em>}'.
@@ -3732,6 +3928,153 @@ public interface AstPackage extends EPackage {
 	 */
 	EReference getVariableAccess_StepExpression();
 
+	/**
+	 * Returns the meta object for class '{@link org.eclipselabs.mscript.language.ast.StepExpression <em>Step Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Step Expression</em>'.
+	 * @see org.eclipselabs.mscript.language.ast.StepExpression
+	 * @generated
+	 */
+	EClass getStepExpression();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipselabs.mscript.language.ast.RangeStepExpression <em>Range Step Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Range Step Expression</em>'.
+	 * @see org.eclipselabs.mscript.language.ast.RangeStepExpression
+	 * @generated
+	 */
+	EClass getRangeStepExpression();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipselabs.mscript.language.ast.RangeStepExpression#getStart <em>Start</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Start</em>'.
+	 * @see org.eclipselabs.mscript.language.ast.RangeStepExpression#getStart()
+	 * @see #getRangeStepExpression()
+	 * @generated
+	 */
+	EReference getRangeStepExpression_Start();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipselabs.mscript.language.ast.RangeStepExpression#getEnd <em>End</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>End</em>'.
+	 * @see org.eclipselabs.mscript.language.ast.RangeStepExpression#getEnd()
+	 * @see #getRangeStepExpression()
+	 * @generated
+	 */
+	EReference getRangeStepExpression_End();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipselabs.mscript.language.ast.AdditiveStepExpression <em>Additive Step Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Additive Step Expression</em>'.
+	 * @see org.eclipselabs.mscript.language.ast.AdditiveStepExpression
+	 * @generated
+	 */
+	EClass getAdditiveStepExpression();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipselabs.mscript.language.ast.AdditiveStepExpression#getOperator <em>Operator</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Operator</em>'.
+	 * @see org.eclipselabs.mscript.language.ast.AdditiveStepExpression#getOperator()
+	 * @see #getAdditiveStepExpression()
+	 * @generated
+	 */
+	EAttribute getAdditiveStepExpression_Operator();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipselabs.mscript.language.ast.AdditiveStepExpression#getLeftOperand <em>Left Operand</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Left Operand</em>'.
+	 * @see org.eclipselabs.mscript.language.ast.AdditiveStepExpression#getLeftOperand()
+	 * @see #getAdditiveStepExpression()
+	 * @generated
+	 */
+	EReference getAdditiveStepExpression_LeftOperand();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipselabs.mscript.language.ast.AdditiveStepExpression#getRightOperand <em>Right Operand</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Right Operand</em>'.
+	 * @see org.eclipselabs.mscript.language.ast.AdditiveStepExpression#getRightOperand()
+	 * @see #getAdditiveStepExpression()
+	 * @generated
+	 */
+	EReference getAdditiveStepExpression_RightOperand();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipselabs.mscript.language.ast.NegateStepExpression <em>Negate Step Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Negate Step Expression</em>'.
+	 * @see org.eclipselabs.mscript.language.ast.NegateStepExpression
+	 * @generated
+	 */
+	EClass getNegateStepExpression();
+
+	/**
+	 * Returns the meta object for the containment reference '{@link org.eclipselabs.mscript.language.ast.NegateStepExpression#getOperand <em>Operand</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Operand</em>'.
+	 * @see org.eclipselabs.mscript.language.ast.NegateStepExpression#getOperand()
+	 * @see #getNegateStepExpression()
+	 * @generated
+	 */
+	EReference getNegateStepExpression_Operand();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipselabs.mscript.language.ast.PrimitiveStepExpression <em>Primitive Step Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Primitive Step Expression</em>'.
+	 * @see org.eclipselabs.mscript.language.ast.PrimitiveStepExpression
+	 * @generated
+	 */
+	EClass getPrimitiveStepExpression();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipselabs.mscript.language.ast.StepLiteral <em>Step Literal</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Step Literal</em>'.
+	 * @see org.eclipselabs.mscript.language.ast.StepLiteral
+	 * @generated
+	 */
+	EClass getStepLiteral();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipselabs.mscript.language.ast.StepLiteral#getValue <em>Value</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Value</em>'.
+	 * @see org.eclipselabs.mscript.language.ast.StepLiteral#getValue()
+	 * @see #getStepLiteral()
+	 * @generated
+	 */
+	EAttribute getStepLiteral_Value();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipselabs.mscript.language.ast.StepN <em>Step N</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Step N</em>'.
+	 * @see org.eclipselabs.mscript.language.ast.StepN
+	 * @generated
+	 */
+	EClass getStepN();
+
 	/**
 	 * Returns the meta object for class '{@link org.eclipselabs.mscript.language.ast.FunctionCall <em>Function Call</em>}'.
 	 * <!-- begin-user-doc -->
@@ -5187,6 +5530,132 @@ public interface AstPackage extends EPackage {
 		 */
 		EReference VARIABLE_ACCESS__STEP_EXPRESSION = eINSTANCE.getVariableAccess_StepExpression();
 
+		/**
+		 * The meta object literal for the '{@link org.eclipselabs.mscript.language.ast.impl.StepExpressionImpl <em>Step Expression</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipselabs.mscript.language.ast.impl.StepExpressionImpl
+		 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getStepExpression()
+		 * @generated
+		 */
+		EClass STEP_EXPRESSION = eINSTANCE.getStepExpression();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipselabs.mscript.language.ast.impl.RangeStepExpressionImpl <em>Range Step Expression</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipselabs.mscript.language.ast.impl.RangeStepExpressionImpl
+		 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getRangeStepExpression()
+		 * @generated
+		 */
+		EClass RANGE_STEP_EXPRESSION = eINSTANCE.getRangeStepExpression();
+
+		/**
+		 * The meta object literal for the '<em><b>Start</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference RANGE_STEP_EXPRESSION__START = eINSTANCE.getRangeStepExpression_Start();
+
+		/**
+		 * The meta object literal for the '<em><b>End</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference RANGE_STEP_EXPRESSION__END = eINSTANCE.getRangeStepExpression_End();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipselabs.mscript.language.ast.impl.AdditiveStepExpressionImpl <em>Additive Step Expression</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipselabs.mscript.language.ast.impl.AdditiveStepExpressionImpl
+		 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getAdditiveStepExpression()
+		 * @generated
+		 */
+		EClass ADDITIVE_STEP_EXPRESSION = eINSTANCE.getAdditiveStepExpression();
+
+		/**
+		 * The meta object literal for the '<em><b>Operator</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ADDITIVE_STEP_EXPRESSION__OPERATOR = eINSTANCE.getAdditiveStepExpression_Operator();
+
+		/**
+		 * The meta object literal for the '<em><b>Left Operand</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ADDITIVE_STEP_EXPRESSION__LEFT_OPERAND = eINSTANCE.getAdditiveStepExpression_LeftOperand();
+
+		/**
+		 * The meta object literal for the '<em><b>Right Operand</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ADDITIVE_STEP_EXPRESSION__RIGHT_OPERAND = eINSTANCE.getAdditiveStepExpression_RightOperand();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipselabs.mscript.language.ast.impl.NegateStepExpressionImpl <em>Negate Step Expression</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipselabs.mscript.language.ast.impl.NegateStepExpressionImpl
+		 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getNegateStepExpression()
+		 * @generated
+		 */
+		EClass NEGATE_STEP_EXPRESSION = eINSTANCE.getNegateStepExpression();
+
+		/**
+		 * The meta object literal for the '<em><b>Operand</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference NEGATE_STEP_EXPRESSION__OPERAND = eINSTANCE.getNegateStepExpression_Operand();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipselabs.mscript.language.ast.impl.PrimitiveStepExpressionImpl <em>Primitive Step Expression</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipselabs.mscript.language.ast.impl.PrimitiveStepExpressionImpl
+		 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getPrimitiveStepExpression()
+		 * @generated
+		 */
+		EClass PRIMITIVE_STEP_EXPRESSION = eINSTANCE.getPrimitiveStepExpression();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipselabs.mscript.language.ast.impl.StepLiteralImpl <em>Step Literal</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipselabs.mscript.language.ast.impl.StepLiteralImpl
+		 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getStepLiteral()
+		 * @generated
+		 */
+		EClass STEP_LITERAL = eINSTANCE.getStepLiteral();
+
+		/**
+		 * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute STEP_LITERAL__VALUE = eINSTANCE.getStepLiteral_Value();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipselabs.mscript.language.ast.impl.StepNImpl <em>Step N</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipselabs.mscript.language.ast.impl.StepNImpl
+		 * @see org.eclipselabs.mscript.language.ast.impl.AstPackageImpl#getStepN()
+		 * @generated
+		 */
+		EClass STEP_N = eINSTANCE.getStepN();
+
 		/**
 		 * The meta object literal for the '{@link org.eclipselabs.mscript.language.ast.impl.FunctionCallImpl <em>Function Call</em>}' class.
 		 * <!-- begin-user-doc -->

+ 53 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/NegateStepExpression.java

@@ -0,0 +1,53 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipselabs.mscript.language.ast;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Negate Step Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipselabs.mscript.language.ast.NegateStepExpression#getOperand <em>Operand</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipselabs.mscript.language.ast.AstPackage#getNegateStepExpression()
+ * @model
+ * @generated
+ */
+public interface NegateStepExpression extends StepExpression {
+	/**
+	 * Returns the value of the '<em><b>Operand</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Operand</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Operand</em>' containment reference.
+	 * @see #setOperand(StepExpression)
+	 * @see org.eclipselabs.mscript.language.ast.AstPackage#getNegateStepExpression_Operand()
+	 * @model containment="true"
+	 * @generated
+	 */
+	StepExpression getOperand();
+
+	/**
+	 * Sets the value of the '{@link org.eclipselabs.mscript.language.ast.NegateStepExpression#getOperand <em>Operand</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Operand</em>' containment reference.
+	 * @see #getOperand()
+	 * @generated
+	 */
+	void setOperand(StepExpression value);
+
+} // NegateStepExpression

+ 21 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/PrimitiveStepExpression.java

@@ -0,0 +1,21 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipselabs.mscript.language.ast;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Primitive Step Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipselabs.mscript.language.ast.AstPackage#getPrimitiveStepExpression()
+ * @model abstract="true"
+ * @generated
+ */
+public interface PrimitiveStepExpression extends StepExpression {
+} // PrimitiveStepExpression

+ 80 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/RangeStepExpression.java

@@ -0,0 +1,80 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipselabs.mscript.language.ast;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Range Step Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipselabs.mscript.language.ast.RangeStepExpression#getStart <em>Start</em>}</li>
+ *   <li>{@link org.eclipselabs.mscript.language.ast.RangeStepExpression#getEnd <em>End</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipselabs.mscript.language.ast.AstPackage#getRangeStepExpression()
+ * @model
+ * @generated
+ */
+public interface RangeStepExpression extends StepExpression {
+	/**
+	 * Returns the value of the '<em><b>Start</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Start</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Start</em>' containment reference.
+	 * @see #setStart(StepExpression)
+	 * @see org.eclipselabs.mscript.language.ast.AstPackage#getRangeStepExpression_Start()
+	 * @model containment="true"
+	 * @generated
+	 */
+	StepExpression getStart();
+
+	/**
+	 * Sets the value of the '{@link org.eclipselabs.mscript.language.ast.RangeStepExpression#getStart <em>Start</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Start</em>' containment reference.
+	 * @see #getStart()
+	 * @generated
+	 */
+	void setStart(StepExpression value);
+
+	/**
+	 * Returns the value of the '<em><b>End</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>End</em>' containment reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>End</em>' containment reference.
+	 * @see #setEnd(StepExpression)
+	 * @see org.eclipselabs.mscript.language.ast.AstPackage#getRangeStepExpression_End()
+	 * @model containment="true"
+	 * @generated
+	 */
+	StepExpression getEnd();
+
+	/**
+	 * Sets the value of the '{@link org.eclipselabs.mscript.language.ast.RangeStepExpression#getEnd <em>End</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>End</em>' containment reference.
+	 * @see #getEnd()
+	 * @generated
+	 */
+	void setEnd(StepExpression value);
+
+} // RangeStepExpression

+ 22 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/StepExpression.java

@@ -0,0 +1,22 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipselabs.mscript.language.ast;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Step Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipselabs.mscript.language.ast.AstPackage#getStepExpression()
+ * @model abstract="true"
+ * @generated
+ */
+public interface StepExpression extends EObject {
+} // StepExpression

+ 53 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/StepLiteral.java

@@ -0,0 +1,53 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipselabs.mscript.language.ast;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Step Literal</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipselabs.mscript.language.ast.StepLiteral#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipselabs.mscript.language.ast.AstPackage#getStepLiteral()
+ * @model
+ * @generated
+ */
+public interface StepLiteral extends PrimitiveStepExpression {
+	/**
+	 * Returns the value of the '<em><b>Value</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Value</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Value</em>' attribute.
+	 * @see #setValue(int)
+	 * @see org.eclipselabs.mscript.language.ast.AstPackage#getStepLiteral_Value()
+	 * @model
+	 * @generated
+	 */
+	int getValue();
+
+	/**
+	 * Sets the value of the '{@link org.eclipselabs.mscript.language.ast.StepLiteral#getValue <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Value</em>' attribute.
+	 * @see #getValue()
+	 * @generated
+	 */
+	void setValue(int value);
+
+} // StepLiteral

+ 21 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/StepN.java

@@ -0,0 +1,21 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipselabs.mscript.language.ast;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Step N</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipselabs.mscript.language.ast.AstPackage#getStepN()
+ * @model
+ * @generated
+ */
+public interface StepN extends PrimitiveStepExpression {
+} // StepN

+ 3 - 4
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/VariableAccess.java

@@ -6,7 +6,6 @@
  */
 package org.eclipselabs.mscript.language.ast;
 
-import org.eclipselabs.mscript.typesystem.Expression;
 
 /**
  * <!-- begin-user-doc -->
@@ -34,12 +33,12 @@ public interface VariableAccess extends FeatureCall {
 	 * </p>
 	 * <!-- end-user-doc -->
 	 * @return the value of the '<em>Step Expression</em>' containment reference.
-	 * @see #setStepExpression(Expression)
+	 * @see #setStepExpression(StepExpression)
 	 * @see org.eclipselabs.mscript.language.ast.AstPackage#getVariableAccess_StepExpression()
 	 * @model containment="true"
 	 * @generated
 	 */
-	Expression getStepExpression();
+	StepExpression getStepExpression();
 
 	/**
 	 * Sets the value of the '{@link org.eclipselabs.mscript.language.ast.VariableAccess#getStepExpression <em>Step Expression</em>}' containment reference.
@@ -49,6 +48,6 @@ public interface VariableAccess extends FeatureCall {
 	 * @see #getStepExpression()
 	 * @generated
 	 */
-	void setStepExpression(Expression value);
+	void setStepExpression(StepExpression value);
 
 } // VariableAccess

+ 311 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/AdditiveStepExpressionImpl.java

@@ -0,0 +1,311 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipselabs.mscript.language.ast.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipselabs.mscript.language.ast.AdditiveOperator;
+import org.eclipselabs.mscript.language.ast.AdditiveStepExpression;
+import org.eclipselabs.mscript.language.ast.AstPackage;
+import org.eclipselabs.mscript.language.ast.StepExpression;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Additive Step Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipselabs.mscript.language.ast.impl.AdditiveStepExpressionImpl#getOperator <em>Operator</em>}</li>
+ *   <li>{@link org.eclipselabs.mscript.language.ast.impl.AdditiveStepExpressionImpl#getLeftOperand <em>Left Operand</em>}</li>
+ *   <li>{@link org.eclipselabs.mscript.language.ast.impl.AdditiveStepExpressionImpl#getRightOperand <em>Right Operand</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class AdditiveStepExpressionImpl extends StepExpressionImpl implements AdditiveStepExpression {
+	/**
+	 * The default value of the '{@link #getOperator() <em>Operator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOperator()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final AdditiveOperator OPERATOR_EDEFAULT = AdditiveOperator.ADD;
+
+	/**
+	 * The cached value of the '{@link #getOperator() <em>Operator</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOperator()
+	 * @generated
+	 * @ordered
+	 */
+	protected AdditiveOperator operator = OPERATOR_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getLeftOperand() <em>Left Operand</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getLeftOperand()
+	 * @generated
+	 * @ordered
+	 */
+	protected StepExpression leftOperand;
+
+	/**
+	 * The cached value of the '{@link #getRightOperand() <em>Right Operand</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getRightOperand()
+	 * @generated
+	 * @ordered
+	 */
+	protected StepExpression rightOperand;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected AdditiveStepExpressionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return AstPackage.Literals.ADDITIVE_STEP_EXPRESSION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdditiveOperator getOperator() {
+		return operator;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOperator(AdditiveOperator newOperator) {
+		AdditiveOperator oldOperator = operator;
+		operator = newOperator == null ? OPERATOR_EDEFAULT : newOperator;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, AstPackage.ADDITIVE_STEP_EXPRESSION__OPERATOR, oldOperator, operator));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StepExpression getLeftOperand() {
+		return leftOperand;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetLeftOperand(StepExpression newLeftOperand, NotificationChain msgs) {
+		StepExpression oldLeftOperand = leftOperand;
+		leftOperand = newLeftOperand;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, AstPackage.ADDITIVE_STEP_EXPRESSION__LEFT_OPERAND, oldLeftOperand, newLeftOperand);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setLeftOperand(StepExpression newLeftOperand) {
+		if (newLeftOperand != leftOperand) {
+			NotificationChain msgs = null;
+			if (leftOperand != null)
+				msgs = ((InternalEObject)leftOperand).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - AstPackage.ADDITIVE_STEP_EXPRESSION__LEFT_OPERAND, null, msgs);
+			if (newLeftOperand != null)
+				msgs = ((InternalEObject)newLeftOperand).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - AstPackage.ADDITIVE_STEP_EXPRESSION__LEFT_OPERAND, null, msgs);
+			msgs = basicSetLeftOperand(newLeftOperand, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, AstPackage.ADDITIVE_STEP_EXPRESSION__LEFT_OPERAND, newLeftOperand, newLeftOperand));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StepExpression getRightOperand() {
+		return rightOperand;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetRightOperand(StepExpression newRightOperand, NotificationChain msgs) {
+		StepExpression oldRightOperand = rightOperand;
+		rightOperand = newRightOperand;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, AstPackage.ADDITIVE_STEP_EXPRESSION__RIGHT_OPERAND, oldRightOperand, newRightOperand);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setRightOperand(StepExpression newRightOperand) {
+		if (newRightOperand != rightOperand) {
+			NotificationChain msgs = null;
+			if (rightOperand != null)
+				msgs = ((InternalEObject)rightOperand).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - AstPackage.ADDITIVE_STEP_EXPRESSION__RIGHT_OPERAND, null, msgs);
+			if (newRightOperand != null)
+				msgs = ((InternalEObject)newRightOperand).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - AstPackage.ADDITIVE_STEP_EXPRESSION__RIGHT_OPERAND, null, msgs);
+			msgs = basicSetRightOperand(newRightOperand, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, AstPackage.ADDITIVE_STEP_EXPRESSION__RIGHT_OPERAND, newRightOperand, newRightOperand));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case AstPackage.ADDITIVE_STEP_EXPRESSION__LEFT_OPERAND:
+				return basicSetLeftOperand(null, msgs);
+			case AstPackage.ADDITIVE_STEP_EXPRESSION__RIGHT_OPERAND:
+				return basicSetRightOperand(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case AstPackage.ADDITIVE_STEP_EXPRESSION__OPERATOR:
+				return getOperator();
+			case AstPackage.ADDITIVE_STEP_EXPRESSION__LEFT_OPERAND:
+				return getLeftOperand();
+			case AstPackage.ADDITIVE_STEP_EXPRESSION__RIGHT_OPERAND:
+				return getRightOperand();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case AstPackage.ADDITIVE_STEP_EXPRESSION__OPERATOR:
+				setOperator((AdditiveOperator)newValue);
+				return;
+			case AstPackage.ADDITIVE_STEP_EXPRESSION__LEFT_OPERAND:
+				setLeftOperand((StepExpression)newValue);
+				return;
+			case AstPackage.ADDITIVE_STEP_EXPRESSION__RIGHT_OPERAND:
+				setRightOperand((StepExpression)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case AstPackage.ADDITIVE_STEP_EXPRESSION__OPERATOR:
+				setOperator(OPERATOR_EDEFAULT);
+				return;
+			case AstPackage.ADDITIVE_STEP_EXPRESSION__LEFT_OPERAND:
+				setLeftOperand((StepExpression)null);
+				return;
+			case AstPackage.ADDITIVE_STEP_EXPRESSION__RIGHT_OPERAND:
+				setRightOperand((StepExpression)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case AstPackage.ADDITIVE_STEP_EXPRESSION__OPERATOR:
+				return operator != OPERATOR_EDEFAULT;
+			case AstPackage.ADDITIVE_STEP_EXPRESSION__LEFT_OPERAND:
+				return leftOperand != null;
+			case AstPackage.ADDITIVE_STEP_EXPRESSION__RIGHT_OPERAND:
+				return rightOperand != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (operator: ");
+		result.append(operator);
+		result.append(')');
+		return result.toString();
+	}
+
+} //AdditiveStepExpressionImpl

+ 60 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/AstFactoryImpl.java

@@ -15,6 +15,7 @@ import org.eclipse.emf.ecore.plugin.EcorePlugin;
 import org.eclipselabs.mscript.language.ast.AdditiveExpression;
 import org.eclipselabs.mscript.language.ast.AdditiveExpressionPart;
 import org.eclipselabs.mscript.language.ast.AdditiveOperator;
+import org.eclipselabs.mscript.language.ast.AdditiveStepExpression;
 import org.eclipselabs.mscript.language.ast.ArrayConcatenationOperator;
 import org.eclipselabs.mscript.language.ast.ArrayConstructionIterationClause;
 import org.eclipselabs.mscript.language.ast.ArrayConstructionOperator;
@@ -54,6 +55,7 @@ import org.eclipselabs.mscript.language.ast.Module;
 import org.eclipselabs.mscript.language.ast.MultiplicativeExpression;
 import org.eclipselabs.mscript.language.ast.MultiplicativeExpressionPart;
 import org.eclipselabs.mscript.language.ast.MultiplicativeOperator;
+import org.eclipselabs.mscript.language.ast.NegateStepExpression;
 import org.eclipselabs.mscript.language.ast.ParameterDeclaration;
 import org.eclipselabs.mscript.language.ast.ParenthesizedExpression;
 import org.eclipselabs.mscript.language.ast.PostfixExpression;
@@ -61,11 +63,14 @@ import org.eclipselabs.mscript.language.ast.PostfixOperator;
 import org.eclipselabs.mscript.language.ast.PowerExpression;
 import org.eclipselabs.mscript.language.ast.PowerOperator;
 import org.eclipselabs.mscript.language.ast.RangeExpression;
+import org.eclipselabs.mscript.language.ast.RangeStepExpression;
 import org.eclipselabs.mscript.language.ast.RecordDefinition;
 import org.eclipselabs.mscript.language.ast.RecordFieldDeclaration;
 import org.eclipselabs.mscript.language.ast.RelationalExpression;
 import org.eclipselabs.mscript.language.ast.RelationalOperator;
 import org.eclipselabs.mscript.language.ast.StateVariableDeclaration;
+import org.eclipselabs.mscript.language.ast.StepLiteral;
+import org.eclipselabs.mscript.language.ast.StepN;
 import org.eclipselabs.mscript.language.ast.SwitchCase;
 import org.eclipselabs.mscript.language.ast.SwitchExpression;
 import org.eclipselabs.mscript.language.ast.TypeAliasDefinition;
@@ -166,6 +171,11 @@ public class AstFactoryImpl extends EFactoryImpl implements AstFactory {
 			case AstPackage.UNARY_EXPRESSION: return createUnaryExpression();
 			case AstPackage.POSTFIX_EXPRESSION: return createPostfixExpression();
 			case AstPackage.VARIABLE_ACCESS: return createVariableAccess();
+			case AstPackage.RANGE_STEP_EXPRESSION: return createRangeStepExpression();
+			case AstPackage.ADDITIVE_STEP_EXPRESSION: return createAdditiveStepExpression();
+			case AstPackage.NEGATE_STEP_EXPRESSION: return createNegateStepExpression();
+			case AstPackage.STEP_LITERAL: return createStepLiteral();
+			case AstPackage.STEP_N: return createStepN();
 			case AstPackage.FUNCTION_CALL: return createFunctionCall();
 			case AstPackage.MEMBER_VARIABLE_ACCESS: return createMemberVariableAccess();
 			case AstPackage.BUILTIN_DEFINITION: return createBuiltinDefinition();
@@ -704,6 +714,56 @@ public class AstFactoryImpl extends EFactoryImpl implements AstFactory {
 		return variableAccess;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RangeStepExpression createRangeStepExpression() {
+		RangeStepExpressionImpl rangeStepExpression = new RangeStepExpressionImpl();
+		return rangeStepExpression;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public AdditiveStepExpression createAdditiveStepExpression() {
+		AdditiveStepExpressionImpl additiveStepExpression = new AdditiveStepExpressionImpl();
+		return additiveStepExpression;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NegateStepExpression createNegateStepExpression() {
+		NegateStepExpressionImpl negateStepExpression = new NegateStepExpressionImpl();
+		return negateStepExpression;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StepLiteral createStepLiteral() {
+		StepLiteralImpl stepLiteral = new StepLiteralImpl();
+		return stepLiteral;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StepN createStepN() {
+		StepNImpl stepN = new StepNImpl();
+		return stepN;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->

+ 231 - 1
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/AstPackageImpl.java

@@ -15,6 +15,7 @@ import org.eclipse.emf.ecore.impl.EPackageImpl;
 import org.eclipselabs.mscript.language.ast.AdditiveExpression;
 import org.eclipselabs.mscript.language.ast.AdditiveExpressionPart;
 import org.eclipselabs.mscript.language.ast.AdditiveOperator;
+import org.eclipselabs.mscript.language.ast.AdditiveStepExpression;
 import org.eclipselabs.mscript.language.ast.ArrayConcatenationOperator;
 import org.eclipselabs.mscript.language.ast.ArrayConstructionIterationClause;
 import org.eclipselabs.mscript.language.ast.ArrayConstructionOperator;
@@ -58,18 +59,24 @@ import org.eclipselabs.mscript.language.ast.Module;
 import org.eclipselabs.mscript.language.ast.MultiplicativeExpression;
 import org.eclipselabs.mscript.language.ast.MultiplicativeExpressionPart;
 import org.eclipselabs.mscript.language.ast.MultiplicativeOperator;
+import org.eclipselabs.mscript.language.ast.NegateStepExpression;
 import org.eclipselabs.mscript.language.ast.ParameterDeclaration;
 import org.eclipselabs.mscript.language.ast.ParenthesizedExpression;
 import org.eclipselabs.mscript.language.ast.PostfixExpression;
 import org.eclipselabs.mscript.language.ast.PostfixOperator;
 import org.eclipselabs.mscript.language.ast.PowerExpression;
 import org.eclipselabs.mscript.language.ast.PowerOperator;
+import org.eclipselabs.mscript.language.ast.PrimitiveStepExpression;
 import org.eclipselabs.mscript.language.ast.RangeExpression;
+import org.eclipselabs.mscript.language.ast.RangeStepExpression;
 import org.eclipselabs.mscript.language.ast.RecordDefinition;
 import org.eclipselabs.mscript.language.ast.RecordFieldDeclaration;
 import org.eclipselabs.mscript.language.ast.RelationalExpression;
 import org.eclipselabs.mscript.language.ast.RelationalOperator;
 import org.eclipselabs.mscript.language.ast.StateVariableDeclaration;
+import org.eclipselabs.mscript.language.ast.StepExpression;
+import org.eclipselabs.mscript.language.ast.StepLiteral;
+import org.eclipselabs.mscript.language.ast.StepN;
 import org.eclipselabs.mscript.language.ast.SwitchCase;
 import org.eclipselabs.mscript.language.ast.SwitchExpression;
 import org.eclipselabs.mscript.language.ast.TypeAliasDefinition;
@@ -444,6 +451,55 @@ public class AstPackageImpl extends EPackageImpl implements AstPackage {
 	 */
 	private EClass variableAccessEClass = null;
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stepExpressionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass rangeStepExpressionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass additiveStepExpressionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass negateStepExpressionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass primitiveStepExpressionEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stepLiteralEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass stepNEClass = null;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1913,6 +1969,132 @@ public class AstPackageImpl extends EPackageImpl implements AstPackage {
 		return (EReference)variableAccessEClass.getEStructuralFeatures().get(0);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStepExpression() {
+		return stepExpressionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getRangeStepExpression() {
+		return rangeStepExpressionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getRangeStepExpression_Start() {
+		return (EReference)rangeStepExpressionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getRangeStepExpression_End() {
+		return (EReference)rangeStepExpressionEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getAdditiveStepExpression() {
+		return additiveStepExpressionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getAdditiveStepExpression_Operator() {
+		return (EAttribute)additiveStepExpressionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getAdditiveStepExpression_LeftOperand() {
+		return (EReference)additiveStepExpressionEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getAdditiveStepExpression_RightOperand() {
+		return (EReference)additiveStepExpressionEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getNegateStepExpression() {
+		return negateStepExpressionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getNegateStepExpression_Operand() {
+		return (EReference)negateStepExpressionEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getPrimitiveStepExpression() {
+		return primitiveStepExpressionEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStepLiteral() {
+		return stepLiteralEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getStepLiteral_Value() {
+		return (EAttribute)stepLiteralEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getStepN() {
+		return stepNEClass;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2282,6 +2464,27 @@ public class AstPackageImpl extends EPackageImpl implements AstPackage {
 		variableAccessEClass = createEClass(VARIABLE_ACCESS);
 		createEReference(variableAccessEClass, VARIABLE_ACCESS__STEP_EXPRESSION);
 
+		stepExpressionEClass = createEClass(STEP_EXPRESSION);
+
+		rangeStepExpressionEClass = createEClass(RANGE_STEP_EXPRESSION);
+		createEReference(rangeStepExpressionEClass, RANGE_STEP_EXPRESSION__START);
+		createEReference(rangeStepExpressionEClass, RANGE_STEP_EXPRESSION__END);
+
+		additiveStepExpressionEClass = createEClass(ADDITIVE_STEP_EXPRESSION);
+		createEAttribute(additiveStepExpressionEClass, ADDITIVE_STEP_EXPRESSION__OPERATOR);
+		createEReference(additiveStepExpressionEClass, ADDITIVE_STEP_EXPRESSION__LEFT_OPERAND);
+		createEReference(additiveStepExpressionEClass, ADDITIVE_STEP_EXPRESSION__RIGHT_OPERAND);
+
+		negateStepExpressionEClass = createEClass(NEGATE_STEP_EXPRESSION);
+		createEReference(negateStepExpressionEClass, NEGATE_STEP_EXPRESSION__OPERAND);
+
+		primitiveStepExpressionEClass = createEClass(PRIMITIVE_STEP_EXPRESSION);
+
+		stepLiteralEClass = createEClass(STEP_LITERAL);
+		createEAttribute(stepLiteralEClass, STEP_LITERAL__VALUE);
+
+		stepNEClass = createEClass(STEP_N);
+
 		functionCallEClass = createEClass(FUNCTION_CALL);
 		createEReference(functionCallEClass, FUNCTION_CALL__ARGUMENTS);
 
@@ -2374,6 +2577,12 @@ public class AstPackageImpl extends EPackageImpl implements AstPackage {
 		postfixExpressionEClass.getESuperTypes().add(theTypeSystemPackage.getExpression());
 		featureCallEClass.getESuperTypes().add(theTypeSystemPackage.getExpression());
 		variableAccessEClass.getESuperTypes().add(this.getFeatureCall());
+		rangeStepExpressionEClass.getESuperTypes().add(this.getStepExpression());
+		additiveStepExpressionEClass.getESuperTypes().add(this.getStepExpression());
+		negateStepExpressionEClass.getESuperTypes().add(this.getStepExpression());
+		primitiveStepExpressionEClass.getESuperTypes().add(this.getStepExpression());
+		stepLiteralEClass.getESuperTypes().add(this.getPrimitiveStepExpression());
+		stepNEClass.getESuperTypes().add(this.getPrimitiveStepExpression());
 		functionCallEClass.getESuperTypes().add(this.getFeatureCall());
 		memberVariableAccessEClass.getESuperTypes().add(theTypeSystemPackage.getExpression());
 		builtinDefinitionEClass.getESuperTypes().add(this.getDefinition());
@@ -2581,7 +2790,28 @@ public class AstPackageImpl extends EPackageImpl implements AstPackage {
 		initEReference(getFeatureCall_Feature(), this.getCallableElement(), null, "feature", null, 0, 1, FeatureCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(variableAccessEClass, VariableAccess.class, "VariableAccess", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEReference(getVariableAccess_StepExpression(), theTypeSystemPackage.getExpression(), null, "stepExpression", null, 0, 1, VariableAccess.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getVariableAccess_StepExpression(), this.getStepExpression(), null, "stepExpression", null, 0, 1, VariableAccess.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(stepExpressionEClass, StepExpression.class, "StepExpression", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(rangeStepExpressionEClass, RangeStepExpression.class, "RangeStepExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getRangeStepExpression_Start(), this.getStepExpression(), null, "start", null, 0, 1, RangeStepExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getRangeStepExpression_End(), this.getStepExpression(), null, "end", null, 0, 1, RangeStepExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(additiveStepExpressionEClass, AdditiveStepExpression.class, "AdditiveStepExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getAdditiveStepExpression_Operator(), this.getAdditiveOperator(), "operator", null, 0, 1, AdditiveStepExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getAdditiveStepExpression_LeftOperand(), this.getStepExpression(), null, "leftOperand", null, 0, 1, AdditiveStepExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getAdditiveStepExpression_RightOperand(), this.getStepExpression(), null, "rightOperand", null, 0, 1, AdditiveStepExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(negateStepExpressionEClass, NegateStepExpression.class, "NegateStepExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getNegateStepExpression_Operand(), this.getStepExpression(), null, "operand", null, 0, 1, NegateStepExpression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(primitiveStepExpressionEClass, PrimitiveStepExpression.class, "PrimitiveStepExpression", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(stepLiteralEClass, StepLiteral.class, "StepLiteral", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getStepLiteral_Value(), ecorePackage.getEInt(), "value", null, 0, 1, StepLiteral.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(stepNEClass, StepN.class, "StepN", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
 		initEClass(functionCallEClass, FunctionCall.class, "FunctionCall", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getFunctionCall_Arguments(), theTypeSystemPackage.getExpression(), null, "arguments", null, 0, -1, FunctionCall.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+ 176 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/NegateStepExpressionImpl.java

@@ -0,0 +1,176 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipselabs.mscript.language.ast.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipselabs.mscript.language.ast.AstPackage;
+import org.eclipselabs.mscript.language.ast.NegateStepExpression;
+import org.eclipselabs.mscript.language.ast.StepExpression;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Negate Step Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipselabs.mscript.language.ast.impl.NegateStepExpressionImpl#getOperand <em>Operand</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class NegateStepExpressionImpl extends StepExpressionImpl implements NegateStepExpression {
+	/**
+	 * The cached value of the '{@link #getOperand() <em>Operand</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getOperand()
+	 * @generated
+	 * @ordered
+	 */
+	protected StepExpression operand;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected NegateStepExpressionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return AstPackage.Literals.NEGATE_STEP_EXPRESSION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StepExpression getOperand() {
+		return operand;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetOperand(StepExpression newOperand, NotificationChain msgs) {
+		StepExpression oldOperand = operand;
+		operand = newOperand;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, AstPackage.NEGATE_STEP_EXPRESSION__OPERAND, oldOperand, newOperand);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOperand(StepExpression newOperand) {
+		if (newOperand != operand) {
+			NotificationChain msgs = null;
+			if (operand != null)
+				msgs = ((InternalEObject)operand).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - AstPackage.NEGATE_STEP_EXPRESSION__OPERAND, null, msgs);
+			if (newOperand != null)
+				msgs = ((InternalEObject)newOperand).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - AstPackage.NEGATE_STEP_EXPRESSION__OPERAND, null, msgs);
+			msgs = basicSetOperand(newOperand, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, AstPackage.NEGATE_STEP_EXPRESSION__OPERAND, newOperand, newOperand));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case AstPackage.NEGATE_STEP_EXPRESSION__OPERAND:
+				return basicSetOperand(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case AstPackage.NEGATE_STEP_EXPRESSION__OPERAND:
+				return getOperand();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case AstPackage.NEGATE_STEP_EXPRESSION__OPERAND:
+				setOperand((StepExpression)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case AstPackage.NEGATE_STEP_EXPRESSION__OPERAND:
+				setOperand((StepExpression)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case AstPackage.NEGATE_STEP_EXPRESSION__OPERAND:
+				return operand != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //NegateStepExpressionImpl

+ 42 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/PrimitiveStepExpressionImpl.java

@@ -0,0 +1,42 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipselabs.mscript.language.ast.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipselabs.mscript.language.ast.AstPackage;
+import org.eclipselabs.mscript.language.ast.PrimitiveStepExpression;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Primitive Step Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class PrimitiveStepExpressionImpl extends StepExpressionImpl implements PrimitiveStepExpression {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PrimitiveStepExpressionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return AstPackage.Literals.PRIMITIVE_STEP_EXPRESSION;
+	}
+
+} //PrimitiveStepExpressionImpl

+ 242 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/RangeStepExpressionImpl.java

@@ -0,0 +1,242 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipselabs.mscript.language.ast.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipselabs.mscript.language.ast.AstPackage;
+import org.eclipselabs.mscript.language.ast.RangeStepExpression;
+import org.eclipselabs.mscript.language.ast.StepExpression;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Range Step Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipselabs.mscript.language.ast.impl.RangeStepExpressionImpl#getStart <em>Start</em>}</li>
+ *   <li>{@link org.eclipselabs.mscript.language.ast.impl.RangeStepExpressionImpl#getEnd <em>End</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RangeStepExpressionImpl extends StepExpressionImpl implements RangeStepExpression {
+	/**
+	 * The cached value of the '{@link #getStart() <em>Start</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getStart()
+	 * @generated
+	 * @ordered
+	 */
+	protected StepExpression start;
+
+	/**
+	 * The cached value of the '{@link #getEnd() <em>End</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getEnd()
+	 * @generated
+	 * @ordered
+	 */
+	protected StepExpression end;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RangeStepExpressionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return AstPackage.Literals.RANGE_STEP_EXPRESSION;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StepExpression getStart() {
+		return start;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetStart(StepExpression newStart, NotificationChain msgs) {
+		StepExpression oldStart = start;
+		start = newStart;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, AstPackage.RANGE_STEP_EXPRESSION__START, oldStart, newStart);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setStart(StepExpression newStart) {
+		if (newStart != start) {
+			NotificationChain msgs = null;
+			if (start != null)
+				msgs = ((InternalEObject)start).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - AstPackage.RANGE_STEP_EXPRESSION__START, null, msgs);
+			if (newStart != null)
+				msgs = ((InternalEObject)newStart).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - AstPackage.RANGE_STEP_EXPRESSION__START, null, msgs);
+			msgs = basicSetStart(newStart, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, AstPackage.RANGE_STEP_EXPRESSION__START, newStart, newStart));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public StepExpression getEnd() {
+		return end;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public NotificationChain basicSetEnd(StepExpression newEnd, NotificationChain msgs) {
+		StepExpression oldEnd = end;
+		end = newEnd;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, AstPackage.RANGE_STEP_EXPRESSION__END, oldEnd, newEnd);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setEnd(StepExpression newEnd) {
+		if (newEnd != end) {
+			NotificationChain msgs = null;
+			if (end != null)
+				msgs = ((InternalEObject)end).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - AstPackage.RANGE_STEP_EXPRESSION__END, null, msgs);
+			if (newEnd != null)
+				msgs = ((InternalEObject)newEnd).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - AstPackage.RANGE_STEP_EXPRESSION__END, null, msgs);
+			msgs = basicSetEnd(newEnd, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, AstPackage.RANGE_STEP_EXPRESSION__END, newEnd, newEnd));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case AstPackage.RANGE_STEP_EXPRESSION__START:
+				return basicSetStart(null, msgs);
+			case AstPackage.RANGE_STEP_EXPRESSION__END:
+				return basicSetEnd(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case AstPackage.RANGE_STEP_EXPRESSION__START:
+				return getStart();
+			case AstPackage.RANGE_STEP_EXPRESSION__END:
+				return getEnd();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case AstPackage.RANGE_STEP_EXPRESSION__START:
+				setStart((StepExpression)newValue);
+				return;
+			case AstPackage.RANGE_STEP_EXPRESSION__END:
+				setEnd((StepExpression)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case AstPackage.RANGE_STEP_EXPRESSION__START:
+				setStart((StepExpression)null);
+				return;
+			case AstPackage.RANGE_STEP_EXPRESSION__END:
+				setEnd((StepExpression)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case AstPackage.RANGE_STEP_EXPRESSION__START:
+				return start != null;
+			case AstPackage.RANGE_STEP_EXPRESSION__END:
+				return end != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //RangeStepExpressionImpl

+ 43 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/StepExpressionImpl.java

@@ -0,0 +1,43 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipselabs.mscript.language.ast.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+import org.eclipselabs.mscript.language.ast.AstPackage;
+import org.eclipselabs.mscript.language.ast.StepExpression;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Step Expression</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class StepExpressionImpl extends MinimalEObjectImpl.Container implements StepExpression {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StepExpressionImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return AstPackage.Literals.STEP_EXPRESSION;
+	}
+
+} //StepExpressionImpl

+ 163 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/StepLiteralImpl.java

@@ -0,0 +1,163 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipselabs.mscript.language.ast.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipselabs.mscript.language.ast.AstPackage;
+import org.eclipselabs.mscript.language.ast.StepLiteral;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Step Literal</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipselabs.mscript.language.ast.impl.StepLiteralImpl#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class StepLiteralImpl extends PrimitiveStepExpressionImpl implements StepLiteral {
+	/**
+	 * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final int VALUE_EDEFAULT = 0;
+
+	/**
+	 * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getValue()
+	 * @generated
+	 * @ordered
+	 */
+	protected int value = VALUE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StepLiteralImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return AstPackage.Literals.STEP_LITERAL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getValue() {
+		return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setValue(int newValue) {
+		int oldValue = value;
+		value = newValue;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, AstPackage.STEP_LITERAL__VALUE, oldValue, value));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case AstPackage.STEP_LITERAL__VALUE:
+				return getValue();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case AstPackage.STEP_LITERAL__VALUE:
+				setValue((Integer)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case AstPackage.STEP_LITERAL__VALUE:
+				setValue(VALUE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case AstPackage.STEP_LITERAL__VALUE:
+				return value != VALUE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (value: ");
+		result.append(value);
+		result.append(')');
+		return result.toString();
+	}
+
+} //StepLiteralImpl

+ 42 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/StepNImpl.java

@@ -0,0 +1,42 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipselabs.mscript.language.ast.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipselabs.mscript.language.ast.AstPackage;
+import org.eclipselabs.mscript.language.ast.StepN;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Step N</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class StepNImpl extends PrimitiveStepExpressionImpl implements StepN {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected StepNImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return AstPackage.Literals.STEP_N;
+	}
+
+} //StepNImpl

+ 8 - 8
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/impl/VariableAccessImpl.java

@@ -12,8 +12,8 @@ import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipselabs.mscript.language.ast.AstPackage;
+import org.eclipselabs.mscript.language.ast.StepExpression;
 import org.eclipselabs.mscript.language.ast.VariableAccess;
-import org.eclipselabs.mscript.typesystem.Expression;
 
 /**
  * <!-- begin-user-doc -->
@@ -37,7 +37,7 @@ public class VariableAccessImpl extends FeatureCallImpl implements VariableAcces
 	 * @generated
 	 * @ordered
 	 */
-	protected Expression stepExpression;
+	protected StepExpression stepExpression;
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -63,7 +63,7 @@ public class VariableAccessImpl extends FeatureCallImpl implements VariableAcces
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public Expression getStepExpression() {
+	public StepExpression getStepExpression() {
 		return stepExpression;
 	}
 
@@ -72,8 +72,8 @@ public class VariableAccessImpl extends FeatureCallImpl implements VariableAcces
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public NotificationChain basicSetStepExpression(Expression newStepExpression, NotificationChain msgs) {
-		Expression oldStepExpression = stepExpression;
+	public NotificationChain basicSetStepExpression(StepExpression newStepExpression, NotificationChain msgs) {
+		StepExpression oldStepExpression = stepExpression;
 		stepExpression = newStepExpression;
 		if (eNotificationRequired()) {
 			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, AstPackage.VARIABLE_ACCESS__STEP_EXPRESSION, oldStepExpression, newStepExpression);
@@ -87,7 +87,7 @@ public class VariableAccessImpl extends FeatureCallImpl implements VariableAcces
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	public void setStepExpression(Expression newStepExpression) {
+	public void setStepExpression(StepExpression newStepExpression) {
 		if (newStepExpression != stepExpression) {
 			NotificationChain msgs = null;
 			if (stepExpression != null)
@@ -138,7 +138,7 @@ public class VariableAccessImpl extends FeatureCallImpl implements VariableAcces
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
 			case AstPackage.VARIABLE_ACCESS__STEP_EXPRESSION:
-				setStepExpression((Expression)newValue);
+				setStepExpression((StepExpression)newValue);
 				return;
 		}
 		super.eSet(featureID, newValue);
@@ -153,7 +153,7 @@ public class VariableAccessImpl extends FeatureCallImpl implements VariableAcces
 	public void eUnset(int featureID) {
 		switch (featureID) {
 			case AstPackage.VARIABLE_ACCESS__STEP_EXPRESSION:
-				setStepExpression((Expression)null);
+				setStepExpression((StepExpression)null);
 				return;
 		}
 		super.eUnset(featureID);

+ 133 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/util/AstAdapterFactory.java

@@ -12,6 +12,7 @@ import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipselabs.mscript.language.ast.AdditiveExpression;
 import org.eclipselabs.mscript.language.ast.AdditiveExpressionPart;
+import org.eclipselabs.mscript.language.ast.AdditiveStepExpression;
 import org.eclipselabs.mscript.language.ast.ArrayConcatenationOperator;
 import org.eclipselabs.mscript.language.ast.ArrayConstructionIterationClause;
 import org.eclipselabs.mscript.language.ast.ArrayConstructionOperator;
@@ -51,15 +52,21 @@ import org.eclipselabs.mscript.language.ast.MemberVariableAccess;
 import org.eclipselabs.mscript.language.ast.Module;
 import org.eclipselabs.mscript.language.ast.MultiplicativeExpression;
 import org.eclipselabs.mscript.language.ast.MultiplicativeExpressionPart;
+import org.eclipselabs.mscript.language.ast.NegateStepExpression;
 import org.eclipselabs.mscript.language.ast.ParameterDeclaration;
 import org.eclipselabs.mscript.language.ast.ParenthesizedExpression;
 import org.eclipselabs.mscript.language.ast.PostfixExpression;
 import org.eclipselabs.mscript.language.ast.PowerExpression;
+import org.eclipselabs.mscript.language.ast.PrimitiveStepExpression;
 import org.eclipselabs.mscript.language.ast.RangeExpression;
+import org.eclipselabs.mscript.language.ast.RangeStepExpression;
 import org.eclipselabs.mscript.language.ast.RecordDefinition;
 import org.eclipselabs.mscript.language.ast.RecordFieldDeclaration;
 import org.eclipselabs.mscript.language.ast.RelationalExpression;
 import org.eclipselabs.mscript.language.ast.StateVariableDeclaration;
+import org.eclipselabs.mscript.language.ast.StepExpression;
+import org.eclipselabs.mscript.language.ast.StepLiteral;
+import org.eclipselabs.mscript.language.ast.StepN;
 import org.eclipselabs.mscript.language.ast.SwitchCase;
 import org.eclipselabs.mscript.language.ast.SwitchExpression;
 import org.eclipselabs.mscript.language.ast.TypeAliasDefinition;
@@ -330,6 +337,34 @@ public class AstAdapterFactory extends AdapterFactoryImpl {
 				return createVariableAccessAdapter();
 			}
 			@Override
+			public Adapter caseStepExpression(StepExpression object) {
+				return createStepExpressionAdapter();
+			}
+			@Override
+			public Adapter caseRangeStepExpression(RangeStepExpression object) {
+				return createRangeStepExpressionAdapter();
+			}
+			@Override
+			public Adapter caseAdditiveStepExpression(AdditiveStepExpression object) {
+				return createAdditiveStepExpressionAdapter();
+			}
+			@Override
+			public Adapter caseNegateStepExpression(NegateStepExpression object) {
+				return createNegateStepExpressionAdapter();
+			}
+			@Override
+			public Adapter casePrimitiveStepExpression(PrimitiveStepExpression object) {
+				return createPrimitiveStepExpressionAdapter();
+			}
+			@Override
+			public Adapter caseStepLiteral(StepLiteral object) {
+				return createStepLiteralAdapter();
+			}
+			@Override
+			public Adapter caseStepN(StepN object) {
+				return createStepNAdapter();
+			}
+			@Override
 			public Adapter caseFunctionCall(FunctionCall object) {
 				return createFunctionCallAdapter();
 			}
@@ -1101,6 +1136,104 @@ public class AstAdapterFactory extends AdapterFactoryImpl {
 		return null;
 	}
 
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipselabs.mscript.language.ast.StepExpression <em>Step Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipselabs.mscript.language.ast.StepExpression
+	 * @generated
+	 */
+	public Adapter createStepExpressionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipselabs.mscript.language.ast.RangeStepExpression <em>Range Step Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipselabs.mscript.language.ast.RangeStepExpression
+	 * @generated
+	 */
+	public Adapter createRangeStepExpressionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipselabs.mscript.language.ast.AdditiveStepExpression <em>Additive Step Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipselabs.mscript.language.ast.AdditiveStepExpression
+	 * @generated
+	 */
+	public Adapter createAdditiveStepExpressionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipselabs.mscript.language.ast.NegateStepExpression <em>Negate Step Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipselabs.mscript.language.ast.NegateStepExpression
+	 * @generated
+	 */
+	public Adapter createNegateStepExpressionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipselabs.mscript.language.ast.PrimitiveStepExpression <em>Primitive Step Expression</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipselabs.mscript.language.ast.PrimitiveStepExpression
+	 * @generated
+	 */
+	public Adapter createPrimitiveStepExpressionAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipselabs.mscript.language.ast.StepLiteral <em>Step Literal</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipselabs.mscript.language.ast.StepLiteral
+	 * @generated
+	 */
+	public Adapter createStepLiteralAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipselabs.mscript.language.ast.StepN <em>Step N</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipselabs.mscript.language.ast.StepN
+	 * @generated
+	 */
+	public Adapter createStepNAdapter() {
+		return null;
+	}
+
 	/**
 	 * Creates a new adapter for an object of class '{@link org.eclipselabs.mscript.language.ast.FunctionCall <em>Function Call</em>}'.
 	 * <!-- begin-user-doc -->

+ 162 - 0
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/ast/util/AstSwitch.java

@@ -11,6 +11,7 @@ import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.util.Switch;
 import org.eclipselabs.mscript.language.ast.AdditiveExpression;
 import org.eclipselabs.mscript.language.ast.AdditiveExpressionPart;
+import org.eclipselabs.mscript.language.ast.AdditiveStepExpression;
 import org.eclipselabs.mscript.language.ast.ArrayConcatenationOperator;
 import org.eclipselabs.mscript.language.ast.ArrayConstructionIterationClause;
 import org.eclipselabs.mscript.language.ast.ArrayConstructionOperator;
@@ -50,15 +51,21 @@ import org.eclipselabs.mscript.language.ast.MemberVariableAccess;
 import org.eclipselabs.mscript.language.ast.Module;
 import org.eclipselabs.mscript.language.ast.MultiplicativeExpression;
 import org.eclipselabs.mscript.language.ast.MultiplicativeExpressionPart;
+import org.eclipselabs.mscript.language.ast.NegateStepExpression;
 import org.eclipselabs.mscript.language.ast.ParameterDeclaration;
 import org.eclipselabs.mscript.language.ast.ParenthesizedExpression;
 import org.eclipselabs.mscript.language.ast.PostfixExpression;
 import org.eclipselabs.mscript.language.ast.PowerExpression;
+import org.eclipselabs.mscript.language.ast.PrimitiveStepExpression;
 import org.eclipselabs.mscript.language.ast.RangeExpression;
+import org.eclipselabs.mscript.language.ast.RangeStepExpression;
 import org.eclipselabs.mscript.language.ast.RecordDefinition;
 import org.eclipselabs.mscript.language.ast.RecordFieldDeclaration;
 import org.eclipselabs.mscript.language.ast.RelationalExpression;
 import org.eclipselabs.mscript.language.ast.StateVariableDeclaration;
+import org.eclipselabs.mscript.language.ast.StepExpression;
+import org.eclipselabs.mscript.language.ast.StepLiteral;
+import org.eclipselabs.mscript.language.ast.StepN;
 import org.eclipselabs.mscript.language.ast.SwitchCase;
 import org.eclipselabs.mscript.language.ast.SwitchExpression;
 import org.eclipselabs.mscript.language.ast.TypeAliasDefinition;
@@ -472,6 +479,56 @@ public class AstSwitch<T> extends Switch<T> {
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case AstPackage.STEP_EXPRESSION: {
+				StepExpression stepExpression = (StepExpression)theEObject;
+				T result = caseStepExpression(stepExpression);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case AstPackage.RANGE_STEP_EXPRESSION: {
+				RangeStepExpression rangeStepExpression = (RangeStepExpression)theEObject;
+				T result = caseRangeStepExpression(rangeStepExpression);
+				if (result == null) result = caseStepExpression(rangeStepExpression);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case AstPackage.ADDITIVE_STEP_EXPRESSION: {
+				AdditiveStepExpression additiveStepExpression = (AdditiveStepExpression)theEObject;
+				T result = caseAdditiveStepExpression(additiveStepExpression);
+				if (result == null) result = caseStepExpression(additiveStepExpression);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case AstPackage.NEGATE_STEP_EXPRESSION: {
+				NegateStepExpression negateStepExpression = (NegateStepExpression)theEObject;
+				T result = caseNegateStepExpression(negateStepExpression);
+				if (result == null) result = caseStepExpression(negateStepExpression);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case AstPackage.PRIMITIVE_STEP_EXPRESSION: {
+				PrimitiveStepExpression primitiveStepExpression = (PrimitiveStepExpression)theEObject;
+				T result = casePrimitiveStepExpression(primitiveStepExpression);
+				if (result == null) result = caseStepExpression(primitiveStepExpression);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case AstPackage.STEP_LITERAL: {
+				StepLiteral stepLiteral = (StepLiteral)theEObject;
+				T result = caseStepLiteral(stepLiteral);
+				if (result == null) result = casePrimitiveStepExpression(stepLiteral);
+				if (result == null) result = caseStepExpression(stepLiteral);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case AstPackage.STEP_N: {
+				StepN stepN = (StepN)theEObject;
+				T result = caseStepN(stepN);
+				if (result == null) result = casePrimitiveStepExpression(stepN);
+				if (result == null) result = caseStepExpression(stepN);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			case AstPackage.FUNCTION_CALL: {
 				FunctionCall functionCall = (FunctionCall)theEObject;
 				T result = caseFunctionCall(functionCall);
@@ -1297,6 +1354,111 @@ public class AstSwitch<T> extends Switch<T> {
 		return null;
 	}
 
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Step Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Step Expression</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseStepExpression(StepExpression object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Range Step Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Range Step Expression</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseRangeStepExpression(RangeStepExpression object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Additive Step Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Additive Step Expression</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseAdditiveStepExpression(AdditiveStepExpression object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Negate Step Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Negate Step Expression</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseNegateStepExpression(NegateStepExpression object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Primitive Step Expression</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Primitive Step Expression</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T casePrimitiveStepExpression(PrimitiveStepExpression object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Step Literal</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Step Literal</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseStepLiteral(StepLiteral object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Step N</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Step N</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseStepN(StepN object) {
+		return null;
+	}
+
 	/**
 	 * Returns the result of interpreting the object as an instance of '<em>Function Call</em>'.
 	 * <!-- begin-user-doc -->

+ 24 - 25
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/conversion/MscriptTerminalConverters.java

@@ -15,7 +15,6 @@ import org.eclipse.xtext.common.services.DefaultTerminalConverters;
 import org.eclipse.xtext.conversion.IValueConverter;
 import org.eclipse.xtext.conversion.ValueConverter;
 import org.eclipse.xtext.conversion.ValueConverterException;
-import org.eclipse.xtext.conversion.impl.AbstractNullSafeConverter;
 import org.eclipse.xtext.nodemodel.INode;
 import org.eclipse.xtext.util.Strings;
 
@@ -25,50 +24,50 @@ import org.eclipse.xtext.util.Strings;
  */
 public class MscriptTerminalConverters extends DefaultTerminalConverters {
 
-	@ValueConverter(rule = "IDENT")
-	public IValueConverter<String> IDENT() {
-		return new AbstractNullSafeConverter<String>() {
-			@Override
-			protected String internalToValue(String string, INode node) {
-				if (string.startsWith("'") && string.endsWith("'")) {
-					return Strings.convertFromJavaString(string.substring(1, string.length() - 1), false);
+	@ValueConverter(rule = "ValidDouble")
+	public IValueConverter<Double> ValidDouble() {
+		return new IValueConverter<Double>() {
+			
+			public Double toValue(String string, INode node) {
+				if (Strings.isEmpty(string))
+					throw new ValueConverterException("Couldn't convert empty string to double", node, null);
+				try {
+					return Double.valueOf(string);
+				} catch (NumberFormatException e) {
+					throw new ValueConverterException("Couldn't convert '" + string + "' to double", node, e);
 				}
-				return string;
 			}
 
-			@Override
-			protected String internalToString(String value) {
-				if (value.matches("\\A[_a-zA-Z]\\w*\\z")) {
-					return Strings.convertToJavaString(value);
-				}
-				return "'" + Strings.convertToJavaString(value) + "'";
+			public String toString(Double value) {
+				return value.toString();
 			}
+
 		};
 	}
 
-	@ValueConverter(rule = "ValidReal")
-	public IValueConverter<Double> ValidReal() {
-		return new IValueConverter<Double>() {
+	@ValueConverter(rule = "ValidInt")
+	public IValueConverter<Integer> ValidInt() {
+		return new IValueConverter<Integer>() {
 			
-			public Double toValue(String string, INode node) {
+			public Integer toValue(String string, INode node) {
 				if (Strings.isEmpty(string))
-					throw new ValueConverterException("Couldn't convert empty string to double", node, null);
+					throw new ValueConverterException("Couldn't convert empty string to long", node, null);
 				try {
-					return Double.valueOf(string);
+					return Integer.valueOf(string);
 				} catch (NumberFormatException e) {
-					throw new ValueConverterException("Couldn't convert '" + string + "' to double", node, e);
+					throw new ValueConverterException("Couldn't convert '" + string + "' to long", node, e);
 				}
 			}
 
-			public String toString(Double value) {
+			public String toString(Integer value) {
 				return value.toString();
 			}
 
 		};
 	}
 
-	@ValueConverter(rule = "ValidInteger")
-	public IValueConverter<Long> ValidInteger() {
+	@ValueConverter(rule = "ValidLong")
+	public IValueConverter<Long> ValidLong() {
 		return new IValueConverter<Long>() {
 			
 			public Long toValue(String string, INode node) {

+ 31 - 77
org.eclipselabs.mscript/plugins/org.eclipselabs.mscript.language/src/org/eclipselabs/mscript/language/internal/functionmodel/util/StepExpressionHelper.java

@@ -15,19 +15,15 @@ import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.MultiStatus;
 import org.eclipse.emf.ecore.EObject;
-import org.eclipselabs.mscript.language.ast.AdditiveExpression;
-import org.eclipselabs.mscript.language.ast.AdditiveExpressionPart;
-import org.eclipselabs.mscript.language.ast.AdditiveOperator;
-import org.eclipselabs.mscript.language.ast.ParenthesizedExpression;
-import org.eclipselabs.mscript.language.ast.UnaryExpression;
+import org.eclipselabs.mscript.language.ast.AdditiveStepExpression;
+import org.eclipselabs.mscript.language.ast.NegateStepExpression;
+import org.eclipselabs.mscript.language.ast.StepExpression;
+import org.eclipselabs.mscript.language.ast.StepLiteral;
+import org.eclipselabs.mscript.language.ast.StepN;
 import org.eclipselabs.mscript.language.ast.VariableAccess;
 import org.eclipselabs.mscript.language.ast.util.AstSwitch;
 import org.eclipselabs.mscript.language.internal.LanguagePlugin;
 import org.eclipselabs.mscript.language.util.SyntaxStatus;
-import org.eclipselabs.mscript.typesystem.Expression;
-import org.eclipselabs.mscript.typesystem.IntegerLiteral;
-import org.eclipselabs.mscript.typesystem.Unit;
-import org.eclipselabs.mscript.typesystem.util.TypeSystemSwitch;
 
 /**
  * @author Andreas Unger
@@ -42,9 +38,9 @@ public class StepExpressionHelper {
 		return new StepExpressionResult(0, false);
 	}
 
-	private StepExpressionResult evaluateStepExpression(Expression expression) throws CoreException {
+	private StepExpressionResult evaluateStepExpression(StepExpression stepExpression) throws CoreException {
 		Evaluator evaluator = new Evaluator();
-		int result = evaluator.doSwitch(expression);
+		int result = evaluator.doSwitch(stepExpression);
 		IStatus status = evaluator.getStatus();
 		if (status.isOK()) {
 			return new StepExpressionResult(result, evaluator.isAbsolute());
@@ -77,23 +73,17 @@ public class StepExpressionHelper {
 		}
 		
 		/* (non-Javadoc)
-		 * @see org.eclipselabs.mscript.language.ast.util.AstSwitch#caseAdditiveExpression(org.eclipselabs.mscript.language.ast.AdditiveExpression)
+		 * @see org.eclipselabs.mscript.language.ast.util.AstSwitch#caseAdditiveStepExpression(org.eclipselabs.mscript.language.ast.AdditiveStepExpression)
 		 */
 		@Override
-		public Integer caseAdditiveExpression(AdditiveExpression addSubtractExpression) {
-			Integer result = doSwitch(addSubtractExpression.getLeftOperand());
-			for (AdditiveExpressionPart part : addSubtractExpression.getRightParts()) {
-				result = addSubtract(result, doSwitch(part.getOperand()), part.getOperator());
-			}
-			return result;
-		}
-		
-		protected Integer addSubtract(Integer operand1, Integer operand2, AdditiveOperator operator) {
-			switch (operator) {
+		public Integer caseAdditiveStepExpression(AdditiveStepExpression additiveStepExpression) {
+			Integer leftOperand = doSwitch(additiveStepExpression.getLeftOperand());
+			Integer rightOperand = doSwitch(additiveStepExpression.getRightOperand());
+			switch (additiveStepExpression.getOperator()) {
 			case ADD:
-				return operand1 + operand2;
+				return leftOperand + rightOperand;
 			case SUBTRACT:
-				return operand1 - operand2;
+				return leftOperand - rightOperand;
 			}
 			throw new IllegalArgumentException();
 		}
@@ -102,61 +92,29 @@ public class StepExpressionHelper {
 		 * @see org.eclipselabs.mscript.language.ast.util.AstSwitch#caseUnaryExpression(org.eclipselabs.mscript.language.ast.UnaryExpression)
 		 */
 		@Override
-		public Integer caseUnaryExpression(UnaryExpression unaryExpression) {
-			Integer result;
-			Integer operandValue = doSwitch(unaryExpression.getOperand());
-			switch (unaryExpression.getOperator()) {
-			case NEGATE:
-				result = -operandValue;
-				break;
-			case LOGICAL_NOT:
-				result = 0;
-				status.add(new SyntaxStatus(IStatus.ERROR, LanguagePlugin.PLUGIN_ID, 0, "Invalid unary operation", unaryExpression));
-				break;
-			default:
-				throw new IllegalArgumentException();
-			}
-			return result;
+		public Integer caseNegateStepExpression(NegateStepExpression negateStepExpression) {
+			return -doSwitch(negateStepExpression.getOperand());
 		}
-	
+
+		/* (non-Javadoc)
+		 * @see org.eclipselabs.mscript.language.ast.util.AstSwitch#caseStepLiteral(org.eclipselabs.mscript.language.ast.StepLiteral)
+		 */
 		@Override
-		public Integer caseVariableAccess(VariableAccess variableAccess) {
-			if (variableAccess.getFeature().getName().equals("n")) {
-				if (absolute) {
-					absolute = false;
-					return 0;
-				} else {
-					status.add(new SyntaxStatus(IStatus.ERROR, LanguagePlugin.PLUGIN_ID, 0, "Duplicate 'n'", variableAccess));
-				}
-			} else {
-				status.add(new SyntaxStatus(IStatus.ERROR, LanguagePlugin.PLUGIN_ID, 0, "Invalid symbol", variableAccess));
-			}
-			return 0;
+		public Integer caseStepLiteral(StepLiteral stepLiteral) {
+			return stepLiteral.getValue();
 		}
 		
-		private TypeSystemSwitch<Integer> typeSystemSwitch = new TypeSystemSwitch<Integer>() {
-		
-			/* (non-Javadoc)
-			 * @see org.eclipselabs.mscript.language.ast.util.AstSwitch#caseIntegerLiteral(org.eclipselabs.mscript.language.ast.IntegerLiteral)
-			 */
-			@Override
-			public Integer caseIntegerLiteral(IntegerLiteral integerLiteral) {
-				Unit unit = integerLiteral.getUnit();
-				if (unit.isWildcard() || !unit.getNumerator().getFactors().isEmpty() || unit.getDenominator() != null) {
-					status.add(new SyntaxStatus(IStatus.ERROR, LanguagePlugin.PLUGIN_ID, 0, "Integer literal must not specify unit", unit));
-					return 0;
-				}
-				return (int) integerLiteral.getValue();
-			}
-		
-		};
-		
 		/* (non-Javadoc)
-		 * @see org.eclipselabs.mscript.language.ast.util.AstSwitch#caseParenthesizedExpression(org.eclipselabs.mscript.language.ast.ParenthesizedExpression)
+		 * @see org.eclipselabs.mscript.language.ast.util.AstSwitch#caseStepN(org.eclipselabs.mscript.language.ast.StepN)
 		 */
 		@Override
-		public Integer caseParenthesizedExpression(ParenthesizedExpression parenthesizedExpression) {
-			return doSwitch(parenthesizedExpression.getExpressions().get(0));
+		public Integer caseStepN(StepN stepN) {
+			if (absolute) {
+				absolute = false;
+			} else {
+				status.add(new SyntaxStatus(IStatus.ERROR, LanguagePlugin.PLUGIN_ID, 0, "Duplicate 'n'", stepN));
+			}
+			return 0;
 		}
 		
 		/* (non-Javadoc)
@@ -164,11 +122,7 @@ public class StepExpressionHelper {
 		 */
 		@Override
 		public Integer defaultCase(EObject object) {
-			Integer result = typeSystemSwitch.doSwitch(object);
-			if (result != null) {
-				return result;
-			}
-			status.add(new SyntaxStatus(IStatus.ERROR, LanguagePlugin.PLUGIN_ID, 0, "Invalid expression part", object));
+			status.add(new SyntaxStatus(IStatus.ERROR, LanguagePlugin.PLUGIN_ID, 0, "Invalid expression", object));
 			return 0;
 		}