iee$iee
MatrixMultiplication op
StringConcatenation
StringConcatenation _compileMatrixExpression(MatrixMultiplication op)
Interval op
StringConcatenation
StringConcatenation _compileExpression(Interval op)
iee$iee
MatrixMultiplication op
StringConcatenation
StringConcatenation _compileMatrixExpression(MatrixMultiplication op)
Interval op
StringConcatenation
StringConcatenation _compileExpression(Interval op)
iee$iee
EObject semanticObject,ISynNavigable transition,List<INode> nodes
void
void emit_MatrixRow_CommaKeyword_1_2_q(EObject semanticObject,ISynNavigable transition,List<INode> nodes)
EObject semanticObject,ISynTransition transition,INode fromNode,INode toNode
void
void emit_MatrixDefinition_CommaKeyword_3_2_q(EObject semanticObject,ISynTransition transition,INode fromNode,INode toNode)
iee$iee
EObject semanticObject,ISynNavigable transition,List<INode> nodes
void
void emit_MatrixRow_CommaKeyword_1_2_q(EObject semanticObject,ISynNavigable transition,List<INode> nodes)
EObject semanticObject,ISynTransition transition,INode fromNode,INode toNode
void
void emit_MatrixDefinition_CommaKeyword_3_2_q(EObject semanticObject,ISynTransition transition,INode fromNode,INode toNode)
iee$iee
EObject semanticObject,ISynNavigable transition,List<INode> nodes
void
void emit_Matrix_CommaKeyword_1_2_q(EObject semanticObject,ISynNavigable transition,List<INode> nodes)
EObject semanticObject,ISynTransition transition,INode fromNode,INode toNode
void
void emit_MatrixRow_CommaKeyword_1_2_q(EObject semanticObject,ISynTransition transition,INode fromNode,INode toNode)
iee$iee
EObject semanticObject,ISynNavigable transition,List<INode> nodes
void
void emit_Matrix_CommaKeyword_1_2_q(EObject semanticObject,ISynNavigable transition,List<INode> nodes)
EObject semanticObject,ISynTransition transition,INode fromNode,INode toNode
void
void emit_MatrixRow_CommaKeyword_1_2_q(EObject semanticObject,ISynTransition transition,INode fromNode,INode toNode)
iee$iee
EObject semanticObject,ISynNavigable transition,List<INode> nodes
void
void emit_PrimaryMatrix_LeftParenthesisKeyword_3_0_a(EObject semanticObject,ISynNavigable transition,List<INode> nodes)
EObject semanticObject,ISynTransition transition,INode fromNode,INode toNode
void
void emit_Primary_LeftParenthesisKeyword_3_0_a(EObject semanticObject,ISynTransition transition,INode fromNode,INode toNode)
iee$iee
EObject semanticObject,ISynNavigable transition,List<INode> nodes
void
void emit_PrimaryMatrix_LeftParenthesisKeyword_3_0_a(EObject semanticObject,ISynNavigable transition,List<INode> nodes)
EObject semanticObject,ISynTransition transition,INode fromNode,INode toNode
void
void emit_Primary_LeftParenthesisKeyword_3_0_a(EObject semanticObject,ISynTransition transition,INode fromNode,INode toNode)
iee$iee
EObject semanticObject,ISynNavigable transition,List<INode> nodes
void
void emit_PrimaryMatrix_LeftParenthesisKeyword_3_0_p(EObject semanticObject,ISynNavigable transition,List<INode> nodes)
EObject semanticObject,ISynTransition transition,INode fromNode,INode toNode
void
void emit_Primary_LeftParenthesisKeyword_3_0_p(EObject semanticObject,ISynTransition transition,INode fromNode,INode toNode)
iee$iee
EObject semanticObject,ISynNavigable transition,List<INode> nodes
void
void emit_PrimaryMatrix_LeftParenthesisKeyword_3_0_p(EObject semanticObject,ISynNavigable transition,List<INode> nodes)
EObject semanticObject,ISynTransition transition,INode fromNode,INode toNode
void
void emit_Primary_LeftParenthesisKeyword_3_0_p(EObject semanticObject,ISynTransition transition,INode fromNode,INode toNode)
iee$iee
EObject context,Addition semanticObject
void
void sequence_Addition(EObject context,Addition semanticObject)
EObject context,Addition semanticObject
void
void sequence_Addition_Addition(EObject context,Addition semanticObject)
iee$iee
EObject context,Addition semanticObject
void
void sequence_Addition(EObject context,Addition semanticObject)
EObject context,Addition semanticObject
void
void sequence_Addition_Addition(EObject context,Addition semanticObject)
iee$iee
EObject context,Expression semanticObject
void
void sequence_AdditionInBrackets(EObject context,Expression semanticObject)
EObject context,Subtraction semanticObject
void
void sequence_Addition_Subtraction(EObject context,Subtraction semanticObject)
iee$iee
EObject context,MatrixAssignment semanticObject
void
void sequence_MatrixAssignment(EObject context,MatrixAssignment semanticObject)
EObject context,Assignment semanticObject
void
void sequence_Assignment_Assignment(EObject context,Assignment semanticObject)
iee$iee
EObject context,MatrixAssignment semanticObject
void
void sequence_MatrixAssignment(EObject context,MatrixAssignment semanticObject)
EObject context,Assignment semanticObject
void
void sequence_Assignment_Assignment(EObject context,Assignment semanticObject)
iee$iee
EObject context,Exponent semanticObject
void
void sequence_Exponent(EObject context,Exponent semanticObject)
EObject context,Exponent semanticObject
void
void sequence_Exponent_Exponent(EObject context,Exponent semanticObject)
iee$iee
EObject context,Exponent semanticObject
void
void sequence_Exponent(EObject context,Exponent semanticObject)
EObject context,Exponent semanticObject
void
void sequence_Exponent_Exponent(EObject context,Exponent semanticObject)
iee$iee
EObject context,Formula semanticObject
void
void sequence_Formula(EObject context,Formula semanticObject)
EObject context,Formula semanticObject
void
void sequence_Formula_Formula(EObject context,Formula semanticObject)
iee$iee
EObject context,Formula semanticObject
void
void sequence_Formula(EObject context,Formula semanticObject)
EObject context,Formula semanticObject
void
void sequence_Formula_Formula(EObject context,Formula semanticObject)
iee$iee
EObject context,FunctionDefinition semanticObject
void
void sequence_FunctionDefinition(EObject context,FunctionDefinition semanticObject)
EObject context,FunctionDefinition semanticObject
void
void sequence_FunctionDefinition_FunctionDefinition(EObject context,FunctionDefinition semanticObject)
iee$iee
EObject context,FunctionDefinition semanticObject
void
void sequence_FunctionDefinition(EObject context,FunctionDefinition semanticObject)
EObject context,FunctionDefinition semanticObject
void
void sequence_FunctionDefinition_FunctionDefinition(EObject context,FunctionDefinition semanticObject)
iee$iee
EObject context,Expression semanticObject
void
void sequence_Function(EObject context,Expression semanticObject)
EObject context,Expression semanticObject
void
void sequence_Function_Expression(EObject context,Expression semanticObject)
iee$iee
EObject context,Expression semanticObject
void
void sequence_Function(EObject context,Expression semanticObject)
EObject context,Expression semanticObject
void
void sequence_Function_Expression(EObject context,Expression semanticObject)
iee$iee
EObject context,MatrixMultiplication semanticObject
void
void sequence_MatrixMultiplication(EObject context,MatrixMultiplication semanticObject)
EObject context,MatrixDefinition semanticObject
void
void sequence_MatrixDefinition_MatrixDefinition(EObject context,MatrixDefinition semanticObject)
iee$iee
EObject context,MatrixMultiplication semanticObject
void
void sequence_MatrixMultiplication(EObject context,MatrixMultiplication semanticObject)
EObject context,MatrixDefinition semanticObject
void
void sequence_MatrixDefinition_MatrixDefinition(EObject context,MatrixDefinition semanticObject)
iee$iee
EObject context,MatrixRow semanticObject
void
void sequence_MatrixRow(EObject context,MatrixRow semanticObject)
EObject context,MatrixRow semanticObject
void
void sequence_MatrixRow_MatrixRow(EObject context,MatrixRow semanticObject)
iee$iee
EObject context,Division semanticObject
void
void sequence_Multiplication(EObject context,Division semanticObject)
EObject context,Division semanticObject
void
void sequence_Multiplication_Division(EObject context,Division semanticObject)
iee$iee
EObject context,Division semanticObject
void
void sequence_Multiplication(EObject context,Division semanticObject)
EObject context,Division semanticObject
void
void sequence_Multiplication_Division(EObject context,Division semanticObject)
iee$iee
EObject context,Modulo semanticObject
void
void sequence_Multiplication(EObject context,Modulo semanticObject)
EObject context,Modulo semanticObject
void
void sequence_Multiplication_Modulo(EObject context,Modulo semanticObject)
iee$iee
EObject context,Modulo semanticObject
void
void sequence_Multiplication(EObject context,Modulo semanticObject)
EObject context,Modulo semanticObject
void
void sequence_Multiplication_Modulo(EObject context,Modulo semanticObject)
iee$iee
EObject context,Multiplication semanticObject
void
void sequence_Multiplication(EObject context,Multiplication semanticObject)
EObject context,Multiplication semanticObject
void
void sequence_Multiplication_Multiplication(EObject context,Multiplication semanticObject)
iee$iee
EObject context,Multiplication semanticObject
void
void sequence_Multiplication(EObject context,Multiplication semanticObject)
EObject context,Multiplication semanticObject
void
void sequence_Multiplication_Multiplication(EObject context,Multiplication semanticObject)
iee$iee
EObject context,Float semanticObject
void
void sequence_Primary(EObject context,Float semanticObject)
EObject context,Float semanticObject
void
void sequence_Primary_Float(EObject context,Float semanticObject)
iee$iee
EObject context,MatrixInBrackets semanticObject
void
void sequence_PrimaryMatrix(EObject context,MatrixInBrackets semanticObject)
EObject context,Float semanticObject
void
void sequence_Primary_Float(EObject context,Float semanticObject)
iee$iee
EObject context,Function semanticObject
void
void sequence_Primary(EObject context,Function semanticObject)
EObject context,Function semanticObject
void
void sequence_Primary_Function(EObject context,Function semanticObject)
iee$iee
EObject context,MatrixVariable semanticObject
void
void sequence_PrimaryMatrix(EObject context,MatrixVariable semanticObject)
EObject context,Function semanticObject
void
void sequence_Primary_Function(EObject context,Function semanticObject)
iee$iee
EObject context,MatrixElement semanticObject
void
void sequence_Primary(EObject context,MatrixElement semanticObject)
EObject context,Variable semanticObject
void
void sequence_Primary_Variable(EObject context,Variable semanticObject)
iee$iee
EObject context,NewMatrix semanticObject
void
void sequence_PrimaryMatrix(EObject context,NewMatrix semanticObject)
EObject context,Variable semanticObject
void
void sequence_Primary_Variable(EObject context,Variable semanticObject)
iee$iee
EObject context,Statement semanticObject
void
void sequence_Statement(EObject context,Statement semanticObject)
EObject context,Statement semanticObject
void
void sequence_Statement_Statement(EObject context,Statement semanticObject)
iee$iee
EObject context,Statement semanticObject
void
void sequence_Statement(EObject context,Statement semanticObject)
EObject context,Statement semanticObject
void
void sequence_Statement_Statement(EObject context,Statement semanticObject)
iee$iee
EObject context,Factorial semanticObject
void
void sequence_UnaryExpression(EObject context,Factorial semanticObject)
EObject context,Factorial semanticObject
void
void sequence_UnaryExpression_Factorial(EObject context,Factorial semanticObject)
iee$iee
EObject context,Factorial semanticObject
void
void sequence_UnaryExpression(EObject context,Factorial semanticObject)
EObject context,Factorial semanticObject
void
void sequence_UnaryExpression_Factorial(EObject context,Factorial semanticObject)
iee$iee
EObject context,Invert semanticObject
void
void sequence_UnaryExpression(EObject context,Invert semanticObject)
EObject context,Interval semanticObject
void
void sequence_UnaryExpression_Interval(EObject context,Interval semanticObject)
iee$iee
EObject context,Invert semanticObject
void
void sequence_UnaryExpression(EObject context,Invert semanticObject)
EObject context,Interval semanticObject
void
void sequence_UnaryExpression_Interval(EObject context,Interval semanticObject)
iee$iee
EObject context,MatrixAddition semanticObject
void
void sequence_MatrixAddition(EObject context,MatrixAddition semanticObject)
EObject context,Invert semanticObject
void
void sequence_UnaryExpression_Invert(EObject context,Invert semanticObject)
iee$iee
VariableAssignment newVariableAssignment,NotificationChain msgs
NotificationChain
NotificationChain basicSetVariableAssignment(VariableAssignment newVariableAssignment,NotificationChain msgs)
Assignment newAssignment,NotificationChain msgs
NotificationChain
NotificationChain basicSetAssignment(Assignment newAssignment,NotificationChain msgs)
iee$iee
VariableAssignment newVariableAssignment,NotificationChain msgs
NotificationChain
NotificationChain basicSetVariableAssignment(VariableAssignment newVariableAssignment,NotificationChain msgs)
Assignment newAssignment,NotificationChain msgs
NotificationChain
NotificationChain basicSetAssignment(Assignment newAssignment,NotificationChain msgs)
iee$iee
MatrixAssignment newMatrixAssignment,NotificationChain msgs
NotificationChain
NotificationChain basicSetMatrixAssignment(MatrixAssignment newMatrixAssignment,NotificationChain msgs)
MatrixDefinition newMatrixDefinition,NotificationChain msgs
NotificationChain
NotificationChain basicSetMatrixDefinition(MatrixDefinition newMatrixDefinition,NotificationChain msgs)
iee$iee
MatrixAssignment newMatrixAssignment,NotificationChain msgs
NotificationChain
NotificationChain basicSetMatrixAssignment(MatrixAssignment newMatrixAssignment,NotificationChain msgs)
MatrixDefinition newMatrixDefinition,NotificationChain msgs
NotificationChain
NotificationChain basicSetMatrixDefinition(MatrixDefinition newMatrixDefinition,NotificationChain msgs)
iee$iee
MatrixAssignment object
T
T caseMatrixAssignment(MatrixAssignment object)
Assignment object
T
T caseAssignment(Assignment object)
iee$iee
MatrixAssignment object
T
T caseMatrixAssignment(MatrixAssignment object)
Assignment object
T
T caseAssignment(Assignment object)
iee$iee
Matrix object
T
T caseMatrix(Matrix object)
Interval object
T
T caseInterval(Interval object)
iee$iee
Matrix object
T
T caseMatrix(Matrix object)
Interval object
T
T caseInterval(Interval object)
iee$iee
MatrixAddition object
T
T caseMatrixAddition(MatrixAddition object)
MatrixDefinition object
T
T caseMatrixDefinition(MatrixDefinition object)
iee$iee
MatrixAddition object
T
T caseMatrixAddition(MatrixAddition object)
MatrixDefinition object
T
T caseMatrixDefinition(MatrixDefinition object)
iee$iee
VariableAssignment a
StringConcatenation
StringConcatenation compileVariableAssignment(VariableAssignment a)
Assignment a
StringConcatenation
StringConcatenation compileAssignment(Assignment a)
iee$iee
Adapter
Adapter createMatrixAssignmentAdapter()
Adapter
Adapter createAssignmentAdapter()
iee$iee
Adapter
Adapter createMatrixAssignmentAdapter()
Adapter
Adapter createAssignmentAdapter()
iee$iee
Adapter
Adapter createMatrixAdapter()
Adapter
Adapter createIntervalAdapter()
iee$iee
Adapter
Adapter createMatrixAdapter()
Adapter
Adapter createIntervalAdapter()
iee$iee
Adapter
Adapter createMatrixAdditionAdapter()
Adapter
Adapter createMatrixDefinitionAdapter()
iee$iee
Adapter
Adapter createMatrixAdditionAdapter()
Adapter
Adapter createMatrixDefinitionAdapter()
iee$iee
EObject
EObject entryRuleMatrixAssignment()
EObject
EObject entryRuleAssignment()
iee$iee
EObject
EObject entryRuleMatrixAssignment()
EObject
EObject entryRuleAssignment()
iee$iee
EObject
EObject entryRuleMatrixAddition()
EObject
EObject entryRuleMatrixDefinition()
iee$iee
EObject
EObject entryRuleMatrixAddition()
EObject
EObject entryRuleMatrixDefinition()
iee$iee
return cAdditionParserRuleCall_4_1;
RuleCall
RuleCall getAdditionParserRuleCall_4_1()
return cAdditionParserRuleCall_3_1;
RuleCall
RuleCall getAdditionParserRuleCall_3_1()
iee$iee
RuleCall
RuleCall getRowINTTerminalRuleCall_3_3_0()
RuleCall
RuleCall getAdditionParserRuleCall_3_1()
iee$iee
EClass
EClass getMatrixAssignment()
EClass
EClass getAssignment()
iee$iee
EClass
EClass getMatrixAssignment()
EClass
EClass getAssignment()
iee$iee
return (pVariableAssignment != null) ? pVariableAssignment : (pVariableAssignment = new VariableAssignmentElements());
	public ParserRule getVariableAssignmentRule() {
		return getVariableAssignmentAccess().getRule();
	//	Exponent | "(-" {Invert
VariableAssignmentElements
VariableAssignmentElements getVariableAssignmentAccess()
return (pAssignment != null) ? pAssignment : (pAssignment = new AssignmentElements());
	public ParserRule getAssignmentRule() {
		return getAssignmentAccess().getRule();
	//
	//
	//
	//	Exponent | "-" {Invert
AssignmentElements
AssignmentElements getAssignmentAccess()
iee$iee
return (pVariableAssignment != null) ? pVariableAssignment : (pVariableAssignment = new VariableAssignmentElements());
	public ParserRule getVariableAssignmentRule() {
		return getVariableAssignmentAccess().getRule();
	//	Exponent | "(-" {Invert
VariableAssignmentElements
VariableAssignmentElements getVariableAssignmentAccess()
return (pAssignment != null) ? pAssignment : (pAssignment = new AssignmentElements());
	public ParserRule getAssignmentRule() {
		return getAssignmentAccess().getRule();
	//
	//
	//
	//	Exponent | "-" {Invert
AssignmentElements
AssignmentElements getAssignmentAccess()
iee$iee
return cVariableAssignmentVariableAssignmentParserRuleCall_1_0;
RuleCall
RuleCall getVariableAssignmentVariableAssignmentParserRuleCall_1_0()
return cAssignmentAssignmentParserRuleCall_2_0;
RuleCall
RuleCall getAssignmentAssignmentParserRuleCall_2_0()
iee$iee
return cVariableAssignmentVariableAssignmentParserRuleCall_1_0;
RuleCall
RuleCall getVariableAssignmentVariableAssignmentParserRuleCall_1_0()
return cAssignmentAssignmentParserRuleCall_2_0;
RuleCall
RuleCall getAssignmentAssignmentParserRuleCall_2_0()
iee$iee
return cVariableAssignmentAssignment_1;
Assignment
Assignment getVariableAssignmentAssignment_1()
return cAssignmentAssignment_2;
Assignment
Assignment getAssignmentAssignment_2()
iee$iee
return cVariableAssignmentAssignment_1;
Assignment
Assignment getVariableAssignmentAssignment_1()
return cAssignmentAssignment_2;
Assignment
Assignment getAssignmentAssignment_2()
iee$iee
ParserRule
ParserRule getVariableAssignmentRule()
ParserRule
ParserRule getAssignmentRule()
iee$iee
ParserRule
ParserRule getVariableAssignmentRule()
ParserRule
ParserRule getAssignmentRule()
iee$iee
EReference
EReference getMatrixAssignment_Value()
EReference
EReference getAssignment_Value()
iee$iee
EReference
EReference getMatrixAssignment_Value()
EReference
EReference getAssignment_Value()
iee$iee
EAttribute
EAttribute getMatrixAssignment_Variable()
EAttribute
EAttribute getAssignment_Variable()
iee$iee
EAttribute
EAttribute getMatrixAssignment_Variable()
EAttribute
EAttribute getAssignment_Variable()
iee$iee
return cFormulaAssignment_2;
Assignment
Assignment getFormulaAssignment_2()
return cFormulaAssignment_3;
Assignment
Assignment getFormulaAssignment_3()
iee$iee
return cFormulaAssignment_2;
Assignment
Assignment getFormulaAssignment_2()
return cFormulaAssignment_3;
Assignment
Assignment getFormulaAssignment_3()
iee$iee
return cFormulaFormulaParserRuleCall_2_0;
RuleCall
RuleCall getFormulaFormulaParserRuleCall_2_0()
return cFormulaFormulaParserRuleCall_3_0;
RuleCall
RuleCall getFormulaFormulaParserRuleCall_3_0()
iee$iee
return cFormulaFormulaParserRuleCall_2_0;
RuleCall
RuleCall getFormulaFormulaParserRuleCall_2_0()
return cFormulaFormulaParserRuleCall_3_0;
RuleCall
RuleCall getFormulaFormulaParserRuleCall_3_0()
iee$iee
return cFunctionAction_3_0;
Action
Action getFunctionAction_3_0()
return cFunctionAction_2_0;
Action
Action getFunctionAction_2_0()
iee$iee
return cFunctionAssignment_3_1;
Assignment
Assignment getFunctionAssignment_3_1()
return cFunctionAssignment_2_1;
Assignment
Assignment getFunctionAssignment_2_1()
iee$iee
return cFunctionFunctionParserRuleCall_3_1_0;
RuleCall
RuleCall getFunctionFunctionParserRuleCall_3_1_0()
return cFunctionFunctionParserRuleCall_2_1_0;
RuleCall
RuleCall getFunctionFunctionParserRuleCall_2_1_0()
iee$iee
EClass
EClass getMatrix()
EClass
EClass getInterval()
iee$iee
EClass
EClass getMatrix()
EClass
EClass getInterval()
iee$iee
EReference
EReference getMatrixAddition_Right()
EReference
EReference getInterval_Ceil()
iee$iee
EReference
EReference getMatrixAddition_Right()
EReference
EReference getInterval_Ceil()
iee$iee
EReference
EReference getMatrixMultiplication_RightScalar()
EReference
EReference getInterval_Floor()
iee$iee
EAttribute
EAttribute getMatrixElement_Element()
EAttribute
EAttribute getInterval_OpeningBracket()
iee$iee
EAttribute
EAttribute getMatrixElement_Element()
EAttribute
EAttribute getInterval_OpeningBracket()
iee$iee
Keyword
Keyword getLeftParenthesisKeyword_4_0()
Keyword
Keyword getLeftParenthesisKeyword_3_0()
iee$iee
Keyword
Keyword getLeftSquareBracketKeyword_3_2()
Keyword
Keyword getLeftParenthesisKeyword_3_0()
iee$iee
return cLeftParenthesisHyphenMinusKeyword_1_0;
Keyword
Keyword getLeftParenthesisHyphenMinusKeyword_1_0()
return cLeftParenthesisKeyword_3_2;
Keyword
Keyword getLeftParenthesisKeyword_3_2()
iee$iee
return cLeftParenthesisHyphenMinusKeyword_1_0;
Keyword
Keyword getLeftParenthesisHyphenMinusKeyword_1_0()
return cLeftParenthesisKeyword_3_2;
Keyword
Keyword getLeftParenthesisKeyword_3_2()
iee$iee
EClass
EClass getMatrixExpression()
EClass
EClass getMatrixDefinition()
iee$iee
EClass
EClass getMatrixExpression()
EClass
EClass getMatrixDefinition()
iee$iee
return (pMatrixAssignment != null) ? pMatrixAssignment : (pMatrixAssignment = new MatrixAssignmentElements());
MatrixAssignmentElements
MatrixAssignmentElements getMatrixAssignmentAccess()
return (pMatrixDefinition != null) ? pMatrixDefinition : (pMatrixDefinition = new MatrixDefinitionElements());
MatrixDefinitionElements
MatrixDefinitionElements getMatrixDefinitionAccess()
iee$iee
return (pMatrixFormula != null) ? pMatrixFormula : (pMatrixFormula = new MatrixFormulaElements());
MatrixFormulaElements
MatrixFormulaElements getMatrixFormulaAccess()
return (pMatrixDefinition != null) ? pMatrixDefinition : (pMatrixDefinition = new MatrixDefinitionElements());
MatrixDefinitionElements
MatrixDefinitionElements getMatrixDefinitionAccess()
iee$iee
return cMatrixAssignmentAssignment_3;
Assignment
Assignment getMatrixAssignmentAssignment_3()
return cMatrixDefinitionAssignment_1;
Assignment
Assignment getMatrixDefinitionAssignment_1()
iee$iee
return cMatrixAssignmentAssignment_3;
Assignment
Assignment getMatrixAssignmentAssignment_3()
return cMatrixDefinitionAssignment_1;
Assignment
Assignment getMatrixDefinitionAssignment_1()
iee$iee
return cMatrixAssignmentMatrixAssignmentParserRuleCall_3_0;
RuleCall
RuleCall getMatrixAssignmentMatrixAssignmentParserRuleCall_3_0()
return cMatrixDefinitionMatrixDefinitionParserRuleCall_1_0;
RuleCall
RuleCall getMatrixDefinitionMatrixDefinitionParserRuleCall_1_0()
iee$iee
return cMatrixAssignmentMatrixAssignmentParserRuleCall_3_0;
RuleCall
RuleCall getMatrixAssignmentMatrixAssignmentParserRuleCall_3_0()
return cMatrixDefinitionMatrixDefinitionParserRuleCall_1_0;
RuleCall
RuleCall getMatrixDefinitionMatrixDefinitionParserRuleCall_1_0()
iee$iee
return getMatrixAdditionAccess().getRule();
ParserRule
ParserRule getMatrixAdditionRule()
return getMatrixDefinitionAccess().getRule();
ParserRule
ParserRule getMatrixDefinitionRule()
iee$iee
return getMatrixAdditionAccess().getRule();
ParserRule
ParserRule getMatrixAdditionRule()
return getMatrixDefinitionAccess().getRule();
ParserRule
ParserRule getMatrixDefinitionRule()
iee$iee
EAttribute
EAttribute getVariableAssignment_Variable()
EAttribute
EAttribute getMatrixDefinition_Name()
iee$iee
EAttribute
EAttribute getVariableAssignment_Variable()
EAttribute
EAttribute getMatrixDefinition_Name()
iee$iee
EReference
EReference getVariableAssignment_Value()
EReference
EReference getMatrixDefinition_Rows()
iee$iee
EReference
EReference getVariableAssignment_Value()
EReference
EReference getMatrixDefinition_Rows()
iee$iee
Keyword
Keyword getRightParenthesisKeyword_4_2()
Keyword
Keyword getRightParenthesisKeyword_3_2()
iee$iee
Keyword
Keyword getRightSquareBracketKeyword_3_4()
Keyword
Keyword getRightParenthesisKeyword_3_2()
iee$iee
return cRightParenthesisKeyword_1_3;
Keyword
Keyword getRightParenthesisKeyword_1_3()
return cRightParenthesisKeyword_3_4;
Keyword
Keyword getRightParenthesisKeyword_3_4()
iee$iee
return cRightParenthesisKeyword_1_3;
Keyword
Keyword getRightParenthesisKeyword_1_3()
return cRightParenthesisKeyword_3_4;
Keyword
Keyword getRightParenthesisKeyword_3_4()
iee$iee
EReference
EReference getStatement_MatrixAssignment()
EReference
EReference getStatement_Assignment()
iee$iee
EReference
EReference getStatement_MatrixAssignment()
EReference
EReference getStatement_Assignment()
iee$iee
EReference
EReference getStatement_VariableAssignment()
EReference
EReference getStatement_MatrixDefinition()
iee$iee
EReference
EReference getStatement_VariableAssignment()
EReference
EReference getStatement_MatrixDefinition()
iee$iee
EObject
EObject entryRuleVariableAssignment()
EObject
EObject ruleAssignment()
iee$iee
EObject
EObject entryRuleVariableAssignment()
EObject
EObject ruleAssignment()
iee$iee
EObject
EObject ruleMatrixMultiplication()
EObject
EObject ruleMatrixDefinition()
iee$iee
EObject
EObject rulePrimaryMatrix()
EObject
EObject ruleMatrixDefinition()
iee$iee
MatrixAssignment newMatrixAssignment
void
void setMatrixAssignment(MatrixAssignment newMatrixAssignment)
Assignment newAssignment
void
void setAssignment(Assignment newAssignment)
iee$iee
MatrixAssignment newMatrixAssignment
void
void setMatrixAssignment(MatrixAssignment newMatrixAssignment)
Assignment newAssignment
void
void setAssignment(Assignment newAssignment)
iee$iee
VariableAssignment newVariableAssignment
void
void setVariableAssignment(VariableAssignment newVariableAssignment)
MatrixDefinition newMatrixDefinition
void
void setMatrixDefinition(MatrixDefinition newMatrixDefinition)
iee$iee
VariableAssignment newVariableAssignment
void
void setVariableAssignment(VariableAssignment newVariableAssignment)
MatrixDefinition newMatrixDefinition
void
void setMatrixDefinition(MatrixDefinition newMatrixDefinition)
iee$iee
boolean
boolean synpred10_InternalMath()
boolean
boolean synpred11_InternalMath()
iee$iee
void
void synpred6_InternalMath_fragment()
void
void synpred11_InternalMath_fragment()
iee$iee
boolean
boolean synpred10_InternalMex()
boolean
boolean synpred11_InternalMex()
iee$iee
void
void synpred6_InternalMex_fragment()
void
void synpred11_InternalMex_fragment()
iee$iee
boolean
boolean synpred5_InternalMath()
boolean
boolean synpred9_InternalMath()
iee$iee
void
void synpred10_InternalMath_fragment()
void
void synpred9_InternalMath_fragment()
iee$iee
boolean
boolean synpred6_InternalMex()
boolean
boolean synpred9_InternalMex()
iee$iee
void
void synpred10_InternalMex_fragment()
void
void synpred9_InternalMex_fragment()
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.ecore
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.ecore?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/bin/org/eclipse/iee/translator/jmole/math/Math.ecore
    <eStructuralFeatures xsi:type="ecore:EReference" name="variableAssignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//VariableAssignment"
    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixAssignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAssignment"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixFormula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixFormula"
        containment="true"/>
  <eClassifiers xsi:type="ecore:EClass" name="VariableAssignment">
  <eClassifiers xsi:type="ecore:EClass" name="Matrix">
  <eClassifiers xsi:type="ecore:EClass" name="MatrixAssignment">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixFormula"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixFormula">
    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixExpression"/>
  <eClassifiers xsi:type="ecore:EClass" name="FunctionDefinition">
    <eStructuralFeatures xsi:type="ecore:EReference" name="function" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="formula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixElement" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="row" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="column" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixAddition" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixSubtraction" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixMultiplication" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="rightMatrix" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="rightScalar" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="NewMatrix" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="matrix" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Matrix"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="TransposeMatrix" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixVariable" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  </eClassifiers>
    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixDefinition" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixDefinition"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="assignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Assignment"
  <eClassifiers xsi:type="ecore:EClass" name="Assignment">
  <eClassifiers xsi:type="ecore:EClass" name="FunctionDefinition">
    <eStructuralFeatures xsi:type="ecore:EReference" name="function" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="formula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixDefinition">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  <eClassifiers xsi:type="ecore:EClass" name="Interval" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="openingBracket" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="ceil" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="floor" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="closingBracket" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  </eClassifiers>
@@ -6,14 +6,16 @@
   <eClassifiers xsi:type="ecore:EClass" name="Statement">
     <eStructuralFeatures xsi:type="ecore:EReference" name="functionDefinition" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixDefinition" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixDefinition"
-        containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="assignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Assignment"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="variableAssignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//VariableAssignment"
         containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="formula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
         containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixAssignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAssignment"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixFormula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixFormula"
+        containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Assignment">
+  <eClassifiers xsi:type="ecore:EClass" name="VariableAssignment">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="variable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
         containment="true"/>
@@ -28,21 +30,30 @@
         eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FunctionDefinition">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="function" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
-        containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="formula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
-        containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="MatrixDefinition">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Matrix">
     <eStructuralFeatures xsi:type="ecore:EReference" name="rows" upperBound="-1" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixRow"
         containment="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="MatrixRow">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="elements" unique="false"
         upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixAssignment">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixFormula"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixFormula">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixExpression"/>
+  <eClassifiers xsi:type="ecore:EClass" name="FunctionDefinition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="function" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="formula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
+        containment="true"/>
+  </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Addition" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression">
     <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
         containment="true"/>
@@ -81,14 +92,6 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Interval" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="openingBracket" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="ceil" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
-        containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="floor" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
-        containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="closingBracket" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-  </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Exponent" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression">
     <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
         containment="true"/>
@@ -99,8 +102,43 @@
   <eClassifiers xsi:type="ecore:EClass" name="Float" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixElement" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="row" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="column" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+  </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Function" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression">
     <eStructuralFeatures xsi:type="ecore:EReference" name="function" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
         containment="true"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixAddition" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixSubtraction" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixMultiplication" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="rightMatrix" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="rightScalar" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NewMatrix" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="matrix" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Matrix"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TransposeMatrix" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixVariable" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
 </ecore:EPackage>
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.ecore
1e33bf66f7ba9ca9d14a1a38c79e55e3e220cb41
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.genmodel
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.genmodel?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/bin/org/eclipse/iee/translator/jmole/math/Math.genmodel
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/variableAssignment"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/matrixAssignment"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/matrixFormula"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//VariableAssignment">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//VariableAssignment/variable"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//VariableAssignment/value"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Matrix">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Matrix/rows"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAssignment">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAssignment/variable"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAssignment/value"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixFormula">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixFormula/expression"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition/function"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition/formula"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixElement">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixElement/element"/>
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixElement/row"/>
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixElement/column"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAddition">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAddition/left"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAddition/right"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixSubtraction">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixSubtraction/left"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixSubtraction/right"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixMultiplication">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixMultiplication/left"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixMultiplication/rightMatrix"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixMultiplication/rightScalar"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//NewMatrix">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//NewMatrix/matrix"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//TransposeMatrix">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//TransposeMatrix/name"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixVariable">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixVariable/name"/>
    </genClasses>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/matrixDefinition"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/assignment"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Assignment">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Assignment/variable"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Assignment/value"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition/function"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition/formula"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixDefinition">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixDefinition/name"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixDefinition/rows"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval/openingBracket"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval/ceil"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval/floor"/>
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval/closingBracket"/>
    </genClasses>
@@ -11,13 +11,14 @@
       ecorePackage="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#/">
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/functionDefinition"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/matrixDefinition"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/assignment"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/variableAssignment"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/formula"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/matrixAssignment"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/matrixFormula"/>
     </genClasses>
-    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Assignment">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Assignment/variable"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Assignment/value"/>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//VariableAssignment">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//VariableAssignment/variable"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//VariableAssignment/value"/>
     </genClasses>
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula/expression"/>
@@ -26,17 +27,24 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression/name"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression/parameters"/>
     </genClasses>
-    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition/function"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition/formula"/>
-    </genClasses>
-    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixDefinition">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixDefinition/name"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixDefinition/rows"/>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Matrix">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Matrix/rows"/>
     </genClasses>
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixRow">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixRow/elements"/>
     </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAssignment">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAssignment/variable"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAssignment/value"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixFormula">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixFormula/expression"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"/>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition/function"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition/formula"/>
+    </genClasses>
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Addition">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Addition/left"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Addition/right"/>
@@ -63,12 +71,6 @@
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Factorial">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Factorial/expression"/>
     </genClasses>
-    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval/openingBracket"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval/ceil"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval/floor"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval/closingBracket"/>
-    </genClasses>
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Exponent">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Exponent/left"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Exponent/right"/>
@@ -77,8 +79,35 @@
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Float">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Float/value"/>
     </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixElement">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixElement/element"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixElement/row"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixElement/column"/>
+    </genClasses>
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Function">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Function/function"/>
     </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAddition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAddition/left"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAddition/right"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixSubtraction">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixSubtraction/left"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixSubtraction/right"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixMultiplication">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixMultiplication/left"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixMultiplication/rightMatrix"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixMultiplication/rightScalar"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//NewMatrix">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//NewMatrix/matrix"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//TransposeMatrix">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//TransposeMatrix/name"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixVariable">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixVariable/name"/>
+    </genClasses>
   </genPackages>
 </genmodel:GenModel>
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.genmodel
753e79ff1a42386f5fb070f2e10972e5be5a015f
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.xmi
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.xmi?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/bin/org/eclipse/iee/translator/jmole/math/Math.xmi
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.17"/>
        <elements xsi:type="xtext:Assignment" feature="variableAssignment" operator="=">
        <elements xsi:type="xtext:Assignment" feature="matrixAssignment" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
        </elements>
        <elements xsi:type="xtext:Assignment" feature="matrixFormula" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
        </elements>
    <rules xsi:type="xtext:ParserRule" name="VariableAssignment">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//VariableAssignment"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
          <elements xsi:type="xtext:Keyword" value="(-"/>
          <elements xsi:type="xtext:Keyword" value=")"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixElement"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Assignment" feature="element" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value="["/>
          <elements xsi:type="xtext:Assignment" feature="row" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value="]"/>
          <elements xsi:type="xtext:Keyword" value="["/>
          <elements xsi:type="xtext:Assignment" feature="column" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value="]"/>
        </elements>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.16"/>
    <rules xsi:type="xtext:ParserRule" name="Matrix">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//Matrix"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Keyword" value="{"/>
        <elements xsi:type="xtext:Group" cardinality="?">
          <elements xsi:type="xtext:Assignment" feature="rows" operator="+=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
          </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="/0/@rules.9"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="}"/>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixRow">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixRow"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Keyword" value="{"/>
        <elements xsi:type="xtext:Group" cardinality="?">
          <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
          </elements>
          <elements xsi:type="xtext:Group" cardinality="*">
            <elements xsi:type="xtext:Keyword" value=","/>
            <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="}"/>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixAssignment">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixAssignment"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Keyword" value="["/>
        <elements xsi:type="xtext:Assignment" feature="variable" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="]"/>
        <elements xsi:type="xtext:Keyword" value="="/>
        <elements xsi:type="xtext:Assignment" feature="value" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
        </elements>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixFormula">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixFormula"/>
      </type>
      <alternatives xsi:type="xtext:Assignment" feature="expression" operator="=">
        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixAddition">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixExpression"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
        <elements xsi:type="xtext:Alternatives" cardinality="*">
          <elements xsi:type="xtext:Group">
            <elements xsi:type="xtext:Keyword" value="+"/>
            <elements xsi:type="xtext:Action" feature="left" operator="=">
              <type metamodel="/0/@metamodelDeclarations.1">
                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixAddition"/>
              </type>
            </elements>
            <elements xsi:type="xtext:Assignment" feature="right" operator="=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Group">
            <elements xsi:type="xtext:Keyword" value="-"/>
            <elements xsi:type="xtext:Action" feature="left" operator="=">
              <type metamodel="/0/@metamodelDeclarations.1">
                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixSubtraction"/>
              </type>
            </elements>
            <elements xsi:type="xtext:Assignment" feature="right" operator="=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
            </elements>
          </elements>
        </elements>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixMultiplication">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixExpression"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
        <elements xsi:type="xtext:Alternatives" cardinality="*">
          <elements xsi:type="xtext:Group">
            <elements xsi:type="xtext:Keyword" value="*"/>
            <elements xsi:type="xtext:Action" feature="left" operator="=">
              <type metamodel="/0/@metamodelDeclarations.1">
                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixMultiplication"/>
              </type>
            </elements>
            <elements xsi:type="xtext:Assignment" feature="rightMatrix" operator="=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Group">
            <elements xsi:type="xtext:Keyword" value="*"/>
            <elements xsi:type="xtext:Action" feature="left" operator="=">
              <type metamodel="/0/@metamodelDeclarations.1">
                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixMultiplication"/>
              </type>
            </elements>
            <elements xsi:type="xtext:Assignment" feature="rightScalar" operator="=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
            </elements>
          </elements>
        </elements>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="PrimaryMatrix">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixExpression"/>
      </type>
      <alternatives xsi:type="xtext:Alternatives">
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//NewMatrix"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Assignment" feature="matrix" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
          </elements>
        </elements>
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//TransposeMatrix"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Keyword" value="["/>
          <elements xsi:type="xtext:Assignment" feature="name" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value="]^T"/>
        </elements>
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixVariable"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Keyword" value="["/>
          <elements xsi:type="xtext:Assignment" feature="name" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value="]"/>
        </elements>
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Keyword" value="("/>
          <elements xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
          <elements xsi:type="xtext:Keyword" value=")"/>
        </elements>
      </alternatives>
    </rules>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.16"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
        </elements>
        <elements xsi:type="xtext:Assignment" feature="matrixDefinition" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
        <elements xsi:type="xtext:Assignment" feature="assignment" operator="=">
    <rules xsi:type="xtext:ParserRule" name="Assignment">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//Assignment"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
          <elements xsi:type="xtext:Keyword" value="-"/>
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//Interval"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Assignment" feature="openingBracket" operator="=">
            <terminal xsi:type="xtext:Alternatives">
              <elements xsi:type="xtext:Keyword" value="["/>
              <elements xsi:type="xtext:Keyword" value="("/>
            </terminal>
          </elements>
          <elements xsi:type="xtext:Keyword" value="("/>
          <elements xsi:type="xtext:Assignment" feature="ceil" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value=")"/>
          <elements xsi:type="xtext:Keyword" value=".."/>
          <elements xsi:type="xtext:Keyword" value="("/>
          <elements xsi:type="xtext:Assignment" feature="floor" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value=")"/>
          <elements xsi:type="xtext:Assignment" feature="closingBracket" operator="=">
            <terminal xsi:type="xtext:Alternatives">
              <elements xsi:type="xtext:Keyword" value="]"/>
              <elements xsi:type="xtext:Keyword" value=")"/>
            </terminal>
          </elements>
        </elements>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
    <rules xsi:type="xtext:ParserRule" name="MatrixDefinition">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixDefinition"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="="/>
        <elements xsi:type="xtext:Keyword" value="{"/>
        <elements xsi:type="xtext:Group" cardinality="?">
          <elements xsi:type="xtext:Assignment" feature="rows" operator="+=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
          </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="/0/@rules.12"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="}"/>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixRow">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixRow"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Keyword" value="{"/>
        <elements xsi:type="xtext:Group" cardinality="?">
          <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
          </elements>
          <elements xsi:type="xtext:Group" cardinality="*">
            <elements xsi:type="xtext:Keyword" value=","/>
            <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="}"/>
      </alternatives>
    </rules>
@@ -13,26 +13,29 @@
       </type>
       <alternatives xsi:type="xtext:Alternatives">
         <elements xsi:type="xtext:Assignment" feature="functionDefinition" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
-        </elements>
-        <elements xsi:type="xtext:Assignment" feature="matrixDefinition" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.17"/>
         </elements>
-        <elements xsi:type="xtext:Assignment" feature="assignment" operator="=">
+        <elements xsi:type="xtext:Assignment" feature="variableAssignment" operator="=">
           <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.1"/>
         </elements>
         <elements xsi:type="xtext:Assignment" feature="formula" operator="=">
           <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
         </elements>
+        <elements xsi:type="xtext:Assignment" feature="matrixAssignment" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
+        </elements>
+        <elements xsi:type="xtext:Assignment" feature="matrixFormula" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
+        </elements>
       </alternatives>
     </rules>
-    <rules xsi:type="xtext:ParserRule" name="Assignment">
+    <rules xsi:type="xtext:ParserRule" name="VariableAssignment">
       <type metamodel="/0/@metamodelDeclarations.1">
-        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//Assignment"/>
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//VariableAssignment"/>
       </type>
       <alternatives xsi:type="xtext:Group">
         <elements xsi:type="xtext:Assignment" feature="variable" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
         </elements>
         <elements xsi:type="xtext:Keyword" value="="/>
         <elements xsi:type="xtext:Assignment" feature="value" operator="=">
@@ -130,7 +133,7 @@
       <alternatives xsi:type="xtext:Alternatives">
         <elements xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
         <elements xsi:type="xtext:Group">
-          <elements xsi:type="xtext:Keyword" value="-"/>
+          <elements xsi:type="xtext:Keyword" value="(-"/>
           <elements xsi:type="xtext:Action">
             <type metamodel="/0/@metamodelDeclarations.1">
               <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//Invert"/>
@@ -139,6 +142,7 @@
           <elements xsi:type="xtext:Assignment" feature="expression" operator="=">
             <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
           </elements>
+          <elements xsi:type="xtext:Keyword" value=")"/>
         </elements>
         <elements xsi:type="xtext:Group">
           <elements xsi:type="xtext:Keyword" value="("/>
@@ -152,36 +156,6 @@
           </elements>
           <elements xsi:type="xtext:Keyword" value=")!"/>
         </elements>
-        <elements xsi:type="xtext:Group">
-          <elements xsi:type="xtext:Action">
-            <type metamodel="/0/@metamodelDeclarations.1">
-              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//Interval"/>
-            </type>
-          </elements>
-          <elements xsi:type="xtext:Assignment" feature="openingBracket" operator="=">
-            <terminal xsi:type="xtext:Alternatives">
-              <elements xsi:type="xtext:Keyword" value="["/>
-              <elements xsi:type="xtext:Keyword" value="("/>
-            </terminal>
-          </elements>
-          <elements xsi:type="xtext:Keyword" value="("/>
-          <elements xsi:type="xtext:Assignment" feature="ceil" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
-          </elements>
-          <elements xsi:type="xtext:Keyword" value=")"/>
-          <elements xsi:type="xtext:Keyword" value=".."/>
-          <elements xsi:type="xtext:Keyword" value="("/>
-          <elements xsi:type="xtext:Assignment" feature="floor" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
-          </elements>
-          <elements xsi:type="xtext:Keyword" value=")"/>
-          <elements xsi:type="xtext:Assignment" feature="closingBracket" operator="=">
-            <terminal xsi:type="xtext:Alternatives">
-              <elements xsi:type="xtext:Keyword" value="]"/>
-              <elements xsi:type="xtext:Keyword" value=")"/>
-            </terminal>
-          </elements>
-        </elements>
       </alternatives>
     </rules>
     <rules xsi:type="xtext:ParserRule" name="Exponent">
@@ -215,7 +189,7 @@
             </type>
           </elements>
           <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
           </elements>
         </elements>
         <elements xsi:type="xtext:Group">
@@ -225,17 +199,37 @@
             </type>
           </elements>
           <elements xsi:type="xtext:Assignment" feature="value" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
           </elements>
         </elements>
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Action">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixElement"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Assignment" feature="element" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="["/>
+          <elements xsi:type="xtext:Assignment" feature="row" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="]"/>
+          <elements xsi:type="xtext:Keyword" value="["/>
+          <elements xsi:type="xtext:Assignment" feature="column" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="]"/>
+        </elements>
         <elements xsi:type="xtext:Group">
           <elements xsi:type="xtext:Action">
             <type metamodel="/0/@metamodelDeclarations.1">
               <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//Function"/>
             </type>
           </elements>
           <elements xsi:type="xtext:Assignment" feature="function" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.16"/>
           </elements>
         </elements>
         <elements xsi:type="xtext:Group">
@@ -245,6 +239,182 @@
         </elements>
       </alternatives>
     </rules>
+    <rules xsi:type="xtext:ParserRule" name="Matrix">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//Matrix"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Assignment" feature="rows" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
+          </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="/0/@rules.9"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="MatrixRow">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixRow"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="MatrixAssignment">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixAssignment"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="["/>
+        <elements xsi:type="xtext:Assignment" feature="variable" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="]"/>
+        <elements xsi:type="xtext:Keyword" value="="/>
+        <elements xsi:type="xtext:Assignment" feature="value" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="MatrixFormula">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixFormula"/>
+      </type>
+      <alternatives xsi:type="xtext:Assignment" feature="expression" operator="=">
+        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="MatrixAddition">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixExpression"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+        <elements xsi:type="xtext:Alternatives" cardinality="*">
+          <elements xsi:type="xtext:Group">
+            <elements xsi:type="xtext:Keyword" value="+"/>
+            <elements xsi:type="xtext:Action" feature="left" operator="=">
+              <type metamodel="/0/@metamodelDeclarations.1">
+                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixAddition"/>
+              </type>
+            </elements>
+            <elements xsi:type="xtext:Assignment" feature="right" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Group">
+            <elements xsi:type="xtext:Keyword" value="-"/>
+            <elements xsi:type="xtext:Action" feature="left" operator="=">
+              <type metamodel="/0/@metamodelDeclarations.1">
+                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixSubtraction"/>
+              </type>
+            </elements>
+            <elements xsi:type="xtext:Assignment" feature="right" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+            </elements>
+          </elements>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="MatrixMultiplication">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixExpression"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+        <elements xsi:type="xtext:Alternatives" cardinality="*">
+          <elements xsi:type="xtext:Group">
+            <elements xsi:type="xtext:Keyword" value="*"/>
+            <elements xsi:type="xtext:Action" feature="left" operator="=">
+              <type metamodel="/0/@metamodelDeclarations.1">
+                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixMultiplication"/>
+              </type>
+            </elements>
+            <elements xsi:type="xtext:Assignment" feature="rightMatrix" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Group">
+            <elements xsi:type="xtext:Keyword" value="*"/>
+            <elements xsi:type="xtext:Action" feature="left" operator="=">
+              <type metamodel="/0/@metamodelDeclarations.1">
+                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixMultiplication"/>
+              </type>
+            </elements>
+            <elements xsi:type="xtext:Assignment" feature="rightScalar" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
+            </elements>
+          </elements>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="PrimaryMatrix">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixExpression"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Action">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//NewMatrix"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Assignment" feature="matrix" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
+          </elements>
+        </elements>
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Action">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//TransposeMatrix"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="["/>
+          <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="]^T"/>
+        </elements>
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Action">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixVariable"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="["/>
+          <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="]"/>
+        </elements>
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Keyword" value="("/>
+          <elements xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
+          <elements xsi:type="xtext:Keyword" value=")"/>
+        </elements>
+      </alternatives>
+    </rules>
     <rules xsi:type="xtext:ParserRule" name="Float">
       <type metamodel="/0/@metamodelDeclarations.0">
         <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
@@ -271,7 +441,7 @@
       </type>
       <alternatives xsi:type="xtext:Group">
         <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
         </elements>
         <elements xsi:type="xtext:Keyword" value="("/>
         <elements xsi:type="xtext:Group" cardinality="?">
@@ -295,60 +465,14 @@
       </type>
       <alternatives xsi:type="xtext:Group">
         <elements xsi:type="xtext:Assignment" feature="function" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.16"/>
         </elements>
         <elements xsi:type="xtext:Keyword" value="="/>
         <elements xsi:type="xtext:Assignment" feature="formula" operator="=">
           <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
         </elements>
       </alternatives>
     </rules>
-    <rules xsi:type="xtext:ParserRule" name="MatrixDefinition">
-      <type metamodel="/0/@metamodelDeclarations.1">
-        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixDefinition"/>
-      </type>
-      <alternatives xsi:type="xtext:Group">
-        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
-        </elements>
-        <elements xsi:type="xtext:Keyword" value="="/>
-        <elements xsi:type="xtext:Keyword" value="{"/>
-        <elements xsi:type="xtext:Group" cardinality="?">
-          <elements xsi:type="xtext:Assignment" feature="rows" operator="+=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
-          </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="/0/@rules.12"/>
-            </elements>
-          </elements>
-          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
-        </elements>
-        <elements xsi:type="xtext:Keyword" value="}"/>
-      </alternatives>
-    </rules>
-    <rules xsi:type="xtext:ParserRule" name="MatrixRow">
-      <type metamodel="/0/@metamodelDeclarations.1">
-        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixRow"/>
-      </type>
-      <alternatives xsi:type="xtext:Group">
-        <elements xsi:type="xtext:Keyword" value="{"/>
-        <elements xsi:type="xtext:Group" cardinality="?">
-          <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
-          </elements>
-          <elements xsi:type="xtext:Group" cardinality="*">
-            <elements xsi:type="xtext:Keyword" value=","/>
-            <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
-              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
-            </elements>
-          </elements>
-          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
-        </elements>
-        <elements xsi:type="xtext:Keyword" value="}"/>
-      </alternatives>
-    </rules>
     <rules xsi:type="xtext:TerminalRule" name="MATH_NAME">
       <type metamodel="/0/@metamodelDeclarations.0">
         <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.xmi
f20f0b4c4bbec3af389940b5732653f0af267e50
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.xtext
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.xtext?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/bin/org/eclipse/iee/translator/jmole/math/Math.xtext
	variableAssignment=VariableAssignment |
	formula=Formula |
	matrixAssignment=MatrixAssignment |
	matrixFormula=MatrixFormula;
VariableAssignment:
	'(-' {Invert} expression=UnaryExpression')' |
	'(' {Factorial} expression=UnaryExpression ')!';
	
	{MatrixElement} element=MATH_NAME '[' row=INT ']' '[' column=INT ']' | 
Matrix:
	'{' (rows+=MatrixRow (',' rows+=MatrixRow)* ','?)? '}';
	
MatrixRow:
	'{' (elements+=Float (',' elements+=Float)* ','?)? '}';

MatrixAssignment:
	'[' variable=MATH_NAME ']' '=' value=MatrixFormula;

MatrixFormula:
	expression=MatrixAddition;

MatrixAddition returns MatrixExpression:
	MatrixMultiplication ('+' {MatrixAddition.left=current} right=MatrixMultiplication | '-' {MatrixSubtraction.left=current}
	right=MatrixMultiplication)*;
	
MatrixMultiplication returns MatrixExpression:
	PrimaryMatrix ('*' {MatrixMultiplication.left=current} rightMatrix=PrimaryMatrix |
				   '*' {MatrixMultiplication.left=current} rightScalar=Formula
	)*;
	
PrimaryMatrix returns MatrixExpression:
	{NewMatrix} matrix=Matrix |
	{TransposeMatrix} '[' name=MATH_NAME ']^T'|
	{MatrixVariable} '[' name=MATH_NAME ']' |
	'(' MatrixAddition ')';

	name=MATH_NAME '(' (parameters+=Formula (',' parameters+=Formula)* ','?)? ')';
	
	matrixDefinition=MatrixDefinition |
	assignment=Assignment |
	formula=Formula;
Assignment:
	('-' {Invert} expression=UnaryExpression) |
	'(' {Factorial} expression=UnaryExpression ')!'|
	{Interval} openingBracket=('['|'(') '('ceil=UnaryExpression')' '..' '('floor=UnaryExpression')' closingBracket=(']'|')');

	(name=MATH_NAME) '(' (parameters+=Formula (',' parameters+=Formula)* ','?)? ')';

MatrixDefinition:
	(name=MATH_NAME) '=' '{' (rows+=MatrixRow (',' rows+=MatrixRow)* ','?)? '}';

MatrixRow:
	'{' (elements+=Float (',' elements+=Float)* ','?)? '}';

@@ -5,11 +5,12 @@ generate math "http://www.eclipse.org/iee/translator/jmole/math/Math"
 
 Statement:
 	functionDefinition=FunctionDefinition |
-	matrixDefinition=MatrixDefinition |
-	assignment=Assignment |
-	formula=Formula;
+	variableAssignment=VariableAssignment |
+	formula=Formula |
+	matrixAssignment=MatrixAssignment |
+	matrixFormula=MatrixFormula;
 
-Assignment:
+VariableAssignment:
 	variable=MATH_NAME '=' value=Formula;
 
 Formula:
@@ -28,34 +29,55 @@ Multiplication returns Expression:
 	// Unary operators: right associative, priority 2
 UnaryExpression returns Expression:
 	Exponent |
-	('-' {Invert} expression=UnaryExpression) |
-	'(' {Factorial} expression=UnaryExpression ')!'|
-	{Interval} openingBracket=('['|'(') '('ceil=UnaryExpression')' '..' '('floor=UnaryExpression')' closingBracket=(']'|')');
-
+	'(-' {Invert} expression=UnaryExpression')' |
+	'(' {Factorial} expression=UnaryExpression ')!';
+	
 	// exponentiation: right associative, priority 3
 Exponent returns Expression:
 	Primary ({Exponent.left=current} '^' right=Primary)?;
 
 Primary returns Expression:
 	{Variable} name=MATH_NAME |
 	{Float} value=Float |
+	{MatrixElement} element=MATH_NAME '[' row=INT ']' '[' column=INT ']' | 
 	{Function} function=Function |
 	'(' Addition ')';
 
+Matrix:
+	'{' (rows+=MatrixRow (',' rows+=MatrixRow)* ','?)? '}';
+	
+MatrixRow:
+	'{' (elements+=Float (',' elements+=Float)* ','?)? '}';
+
+MatrixAssignment:
+	'[' variable=MATH_NAME ']' '=' value=MatrixFormula;
+
+MatrixFormula:
+	expression=MatrixAddition;
+
+MatrixAddition returns MatrixExpression:
+	MatrixMultiplication ('+' {MatrixAddition.left=current} right=MatrixMultiplication | '-' {MatrixSubtraction.left=current}
+	right=MatrixMultiplication)*;
+	
+MatrixMultiplication returns MatrixExpression:
+	PrimaryMatrix ('*' {MatrixMultiplication.left=current} rightMatrix=PrimaryMatrix |
+				   '*' {MatrixMultiplication.left=current} rightScalar=Formula
+	)*;
+	
+PrimaryMatrix returns MatrixExpression:
+	{NewMatrix} matrix=Matrix |
+	{TransposeMatrix} '[' name=MATH_NAME ']^T'|
+	{MatrixVariable} '[' name=MATH_NAME ']' |
+	'(' MatrixAddition ')';
+
 Float:
 	INT+ ('.' INT+ (('E' | 'e') ('-')? (INT)+)?)?;
 
 Function returns Expression:
-	(name=MATH_NAME) '(' (parameters+=Formula (',' parameters+=Formula)* ','?)? ')';
+	name=MATH_NAME '(' (parameters+=Formula (',' parameters+=Formula)* ','?)? ')';
 
 FunctionDefinition:
 	function=Function '=' formula=Formula;
-
-MatrixDefinition:
-	(name=MATH_NAME) '=' '{' (rows+=MatrixRow (',' rows+=MatrixRow)* ','?)? '}';
-
-MatrixRow:
-	'{' (elements+=Float (',' elements+=Float)* ','?)? '}';
-
+	
 terminal MATH_NAME returns ecore::EString:
 	('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*;
\ No newline at end of file
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.xtext
4c5ef668d0e8f6e1552f90fcba741b594f14c7a5
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fgenerator%2FMathGenerator.xtend
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fgenerator%2FMathGenerator.xtend?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/bin/org/eclipse/iee/translator/jmole/math/generator/MathGenerator.xtend
	'''	
		�IF s.variableAssignment != null��compileVariableAssignment(s.variableAssignment)�;�ENDIF�
		�IF s.matrixAssignment != null��compileMatrixAssignment(s.matrixAssignment)�;�ENDIF�
		�IF s.matrixFormula != null��compileMatrixFormula(s.matrixFormula)�;�ENDIF�
	def compileVariableAssignment(VariableAssignment a)
	def compileMatrixFormula(MatrixFormula f) 
		�compileMatrixExpression(f.expression)�
	def compileMatrixAssignment(MatrixAssignment a)
	{
	 '''
	 	�a.variable� = �compileMatrixFormula(a.value)�
	 '''
	}
	
	
	//Expressions
		
	def dispatch compileExpression(MatrixElement e) '''
		�e.element�.get(�e.row�,�e.column�)'''	
		
		Math.pow((�compileExpression(op.left)�),(�compileExpression(op.right)�))'''
	
	//Matrix Expressions
	def dispatch compileMatrixExpression(MatrixVariable n) '''
		�n.name�'''
		
	def dispatch compileMatrixExpression(NewMatrix m) '''
		new Matrix(new double[][]
		{
		�var j = 0�
		�FOR row:m.matrix.rows�
		 �IF row != null�
		 {
		 	�var i = 0�
	 		�FOR element:row.elements�
			 �IF element != null�
			 	�element�
			 �ENDIF�
			 �IF (i = i + 1) != row.elements.size()�,�ENDIF�
			�ENDFOR�
		 }
		 �ENDIF�
		 �IF (j = j + 1) != m.matrix.rows.size()�,�ENDIF�
		�ENDFOR�
		})'''	
	
	def dispatch compileMatrixExpression(TransposeMatrix n) '''
		�n.name�.transpose()'''		
		
	def dispatch compileMatrixExpression(MatrixAddition op) '''
		�compileMatrixExpression(op.left)�.plus(�compileMatrixExpression(op.right)�)'''
	
	def dispatch compileMatrixExpression(MatrixSubtraction op) '''
		�compileMatrixExpression(op.left)�.minus(�compileMatrixExpression(op.right)�)'''
	
	def dispatch compileMatrixExpression(MatrixMultiplication op) '''
		�IF op.rightMatrix != null��compileMatrixExpression(op.left)�.times(�compileMatrixExpression(op.rightMatrix)�)�ENDIF�
		�IF op.rightScalar != null��compileMatrixExpression(op.left)�.times(�compileFormula(op.rightScalar)�)�ENDIF�'''
	 	
MatrixAssignment a
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/bin/org/eclipse/iee/translator/jmole/math/generator/MathGenerator.xtend
'''
	 	�a.variable� = �compileMatrixFormula(a.value)�
	 '''
def compileMatrixAssignment(MatrixAssignment a)
	'''
		�IF s.matrixDefinition != null��compileMatrixDefinition(s.matrixDefinition)�;�ENDIF�
		�IF s.assignment != null��compileAssignment(s.assignment)�;�ENDIF�
		
	def compileAssignment(Assignment a)
	def compileMatrixDefinition(MatrixDefinition m) 
		Matrix �m.name� = new Matrix(new double[][]
		{
		�var j = 0�
		�FOR row:m.rows�
		 �IF row != null�
		 {
		 	�var i = 0�
	 		�FOR element:row.elements�
			 �IF element != null�
			 	�element�
			 �ENDIF�
			 �IF (i = i + 1) != row.elements.size()�,�ENDIF�
			�ENDFOR�
		 }
		 �ENDIF�
		 �IF (j = j + 1) != m.rows.size()�,�ENDIF�
		�ENDFOR�
		})
			
	def dispatch compileExpression(Interval op) '''
	�IF op.ceil != null && op.floor != null��op.openingBracket�(�compileExpression(op.ceil)�)..(�compileExpression(op.floor)�)�op.closingBracket��ENDIF�'''  
	
		(�compileExpression(op.left)�) ^ (�compileExpression(op.right)�)'''
@@ -31,12 +31,12 @@ class MathGenerator implements IGenerator {
 	
 	def compileStatement(Statement s)
 	{
-	'''
+	'''	
 		�IF s.functionDefinition != null��compileFunctionDefinition(s.functionDefinition)��ENDIF�
-		�IF s.matrixDefinition != null��compileMatrixDefinition(s.matrixDefinition)�;�ENDIF�
-		�IF s.assignment != null��compileAssignment(s.assignment)�;�ENDIF�
+		�IF s.variableAssignment != null��compileVariableAssignment(s.variableAssignment)�;�ENDIF�
+		�IF s.matrixAssignment != null��compileMatrixAssignment(s.matrixAssignment)�;�ENDIF�
 		�IF s.formula != null��compileFormula(s.formula)�;�ENDIF�
-		
+		�IF s.matrixFormula != null��compileMatrixFormula(s.matrixFormula)�;�ENDIF�
 	'''
 	}
 	
@@ -52,7 +52,7 @@ class MathGenerator implements IGenerator {
 	'''
 	}
 	
-	def compileAssignment(Assignment a)
+	def compileVariableAssignment(VariableAssignment a)
 	{
 	 '''
 	 	�a.variable� = �compileFormula(a.value)�
@@ -66,44 +66,39 @@ class MathGenerator implements IGenerator {
 	'''
 	}
 	
-	def compileMatrixDefinition(MatrixDefinition m) 
+	def compileMatrixFormula(MatrixFormula f) 
 	{
 	'''
-		Matrix �m.name� = new Matrix(new double[][]
-		{
-		�var j = 0�
-		�FOR row:m.rows�
-		 �IF row != null�
-		 {
-		 	�var i = 0�
-	 		�FOR element:row.elements�
-			 �IF element != null�
-			 	�element�
-			 �ENDIF�
-			 �IF (i = i + 1) != row.elements.size()�,�ENDIF�
-			�ENDFOR�
-		 }
-		 �ENDIF�
-		 �IF (j = j + 1) != m.rows.size()�,�ENDIF�
-		�ENDFOR�
-		})
+		�compileMatrixExpression(f.expression)�
 	'''
 	}
 	
+	def compileMatrixAssignment(MatrixAssignment a)
+	{
+	 '''
+	 	�a.variable� = �compileMatrixFormula(a.value)�
+	 '''
+	}
+	
 	def compileFunction(Function f) '''
 		�f.function.name�
 		(�FOR param:f.function.parameters�
 		 �IF param != null��compileFormula(param)��ENDIF�
 		 �IF f.function.parameters.last() != param�,�ENDIF�
 		�ENDFOR�)
 	'''
-			
+	
+	//Expressions
+		
 	def dispatch compileExpression(Variable n) '''
 		�n.name�'''
 		
 	def dispatch compileExpression(Float n) '''
 		�n.value�'''
 		
+	def dispatch compileExpression(MatrixElement e) '''
+		�e.element�.get(�e.row�,�e.column�)'''	
+		
 	def dispatch compileExpression(Function f) '''
 		�compileFunction(f)�'''
 	
@@ -128,9 +123,44 @@ class MathGenerator implements IGenerator {
 	def dispatch compileExpression(Factorial op) '''
 	�IF op.expression != null� (�compileExpression(op.expression)�)! �ENDIF�'''  
 	
-	def dispatch compileExpression(Interval op) '''
-	�IF op.ceil != null && op.floor != null��op.openingBracket�(�compileExpression(op.ceil)�)..(�compileExpression(op.floor)�)�op.closingBracket��ENDIF�'''  
-	
 	def dispatch compileExpression(Exponent op) '''
-		(�compileExpression(op.left)�) ^ (�compileExpression(op.right)�)'''
+		Math.pow((�compileExpression(op.left)�),(�compileExpression(op.right)�))'''
+	
+	//Matrix Expressions
+	def dispatch compileMatrixExpression(MatrixVariable n) '''
+		�n.name�'''
+		
+	def dispatch compileMatrixExpression(NewMatrix m) '''
+		new Matrix(new double[][]
+		{
+		�var j = 0�
+		�FOR row:m.matrix.rows�
+		 �IF row != null�
+		 {
+		 	�var i = 0�
+	 		�FOR element:row.elements�
+			 �IF element != null�
+			 	�element�
+			 �ENDIF�
+			 �IF (i = i + 1) != row.elements.size()�,�ENDIF�
+			�ENDFOR�
+		 }
+		 �ENDIF�
+		 �IF (j = j + 1) != m.matrix.rows.size()�,�ENDIF�
+		�ENDFOR�
+		})'''	
+	
+	def dispatch compileMatrixExpression(TransposeMatrix n) '''
+		�n.name�.transpose()'''		
+		
+	def dispatch compileMatrixExpression(MatrixAddition op) '''
+		�compileMatrixExpression(op.left)�.plus(�compileMatrixExpression(op.right)�)'''
+	
+	def dispatch compileMatrixExpression(MatrixSubtraction op) '''
+		�compileMatrixExpression(op.left)�.minus(�compileMatrixExpression(op.right)�)'''
+	
+	def dispatch compileMatrixExpression(MatrixMultiplication op) '''
+		�IF op.rightMatrix != null��compileMatrixExpression(op.left)�.times(�compileMatrixExpression(op.rightMatrix)�)�ENDIF�
+		�IF op.rightScalar != null��compileMatrixExpression(op.left)�.times(�compileFormula(op.rightScalar)�)�ENDIF�'''
+	 	
 }
\ No newline at end of file
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fgenerator%2FMathGenerator.xtend
42b4feb50acad2bc2ffe491b1bada89a4fd14fa5
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fparser%2Fantlr%2Finternal%2FInternalMath.tokens
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fparser%2Fantlr%2Finternal%2FInternalMath.tokens?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/bin/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.tokens
T__31=31
'(-'=18
'}'=27
')!'=21
'{'=25
'e'=31
'('=20
'['=23
']^T'=28
','=26
'E'=30
'.'=29
')'=19
'^'=22
']'=24
'..'=22
'}'=30
')!'=19
'{'=29
'e'=27
'('=18
'['=20
','=28
'E'=26
'.'=25
')'=21
'^'=24
']'=23
@@ -15,6 +15,7 @@ RULE_MATH_NAME=4
 RULE_ML_COMMENT=8
 T__30=30
 T__19=19
+T__31=31
 RULE_STRING=7
 T__16=16
 T__15=15
@@ -25,22 +26,23 @@ T__14=14
 T__13=13
 RULE_INT=5
 RULE_WS=10
-'..'=22
-'}'=30
+'(-'=18
+'}'=27
 '/'=16
-')!'=19
-'{'=29
-'e'=27
+')!'=21
+'{'=25
+'e'=31
 '='=12
-'('=18
+'('=20
 '-'=14
 '*'=15
-'['=20
+'['=23
 '+'=13
-','=28
-'E'=26
-'.'=25
-')'=21
-'^'=24
+']^T'=28
+','=26
+'E'=30
+'.'=29
+')'=19
+'^'=22
 '%'=17
-']'=23
+']'=24
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fparser%2Fantlr%2Finternal%2FInternalMath.tokens
10f871d96eb7658a3ec21b5d0fc2235b16fa3b42
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.ecore
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.ecore?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore
    <eStructuralFeatures xsi:type="ecore:EReference" name="variableAssignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//VariableAssignment"
    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixAssignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAssignment"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixFormula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixFormula"
        containment="true"/>
  <eClassifiers xsi:type="ecore:EClass" name="VariableAssignment">
  <eClassifiers xsi:type="ecore:EClass" name="Matrix">
  <eClassifiers xsi:type="ecore:EClass" name="MatrixAssignment">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixFormula"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixFormula">
    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixExpression"/>
  <eClassifiers xsi:type="ecore:EClass" name="FunctionDefinition">
    <eStructuralFeatures xsi:type="ecore:EReference" name="function" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="formula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixElement" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="row" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="column" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixAddition" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixSubtraction" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixMultiplication" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="rightMatrix" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="rightScalar" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="NewMatrix" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="matrix" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Matrix"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="TransposeMatrix" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixVariable" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  </eClassifiers>
    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixDefinition" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixDefinition"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="assignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Assignment"
  <eClassifiers xsi:type="ecore:EClass" name="Assignment">
  <eClassifiers xsi:type="ecore:EClass" name="FunctionDefinition">
    <eStructuralFeatures xsi:type="ecore:EReference" name="function" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="formula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixDefinition">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  <eClassifiers xsi:type="ecore:EClass" name="Interval" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="openingBracket" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="ceil" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="floor" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="closingBracket" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  </eClassifiers>
@@ -6,14 +6,16 @@
   <eClassifiers xsi:type="ecore:EClass" name="Statement">
     <eStructuralFeatures xsi:type="ecore:EReference" name="functionDefinition" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixDefinition" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixDefinition"
-        containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="assignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Assignment"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="variableAssignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//VariableAssignment"
         containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="formula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
         containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixAssignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAssignment"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixFormula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixFormula"
+        containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Assignment">
+  <eClassifiers xsi:type="ecore:EClass" name="VariableAssignment">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="variable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
         containment="true"/>
@@ -28,21 +30,30 @@
         eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FunctionDefinition">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="function" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
-        containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="formula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
-        containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="MatrixDefinition">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Matrix">
     <eStructuralFeatures xsi:type="ecore:EReference" name="rows" upperBound="-1" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixRow"
         containment="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="MatrixRow">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="elements" unique="false"
         upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixAssignment">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixFormula"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixFormula">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixExpression"/>
+  <eClassifiers xsi:type="ecore:EClass" name="FunctionDefinition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="function" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="formula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
+        containment="true"/>
+  </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Addition" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression">
     <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
         containment="true"/>
@@ -81,14 +92,6 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Interval" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="openingBracket" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="ceil" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
-        containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="floor" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
-        containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="closingBracket" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-  </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Exponent" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression">
     <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
         containment="true"/>
@@ -99,8 +102,43 @@
   <eClassifiers xsi:type="ecore:EClass" name="Float" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixElement" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="row" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="column" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+  </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Function" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression">
     <eStructuralFeatures xsi:type="ecore:EReference" name="function" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression"
         containment="true"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixAddition" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixSubtraction" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixMultiplication" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="rightMatrix" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="rightScalar" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NewMatrix" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="matrix" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Matrix"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TransposeMatrix" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixVariable" eSuperTypes="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
 </ecore:EPackage>
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.ecore
1e33bf66f7ba9ca9d14a1a38c79e55e3e220cb41
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.genmodel
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.genmodel?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.genmodel
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/variableAssignment"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/matrixAssignment"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/matrixFormula"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//VariableAssignment">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//VariableAssignment/variable"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//VariableAssignment/value"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Matrix">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Matrix/rows"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAssignment">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAssignment/variable"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAssignment/value"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixFormula">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixFormula/expression"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition/function"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition/formula"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixElement">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixElement/element"/>
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixElement/row"/>
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixElement/column"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAddition">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAddition/left"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAddition/right"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixSubtraction">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixSubtraction/left"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixSubtraction/right"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixMultiplication">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixMultiplication/left"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixMultiplication/rightMatrix"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixMultiplication/rightScalar"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//NewMatrix">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//NewMatrix/matrix"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//TransposeMatrix">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//TransposeMatrix/name"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixVariable">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixVariable/name"/>
    </genClasses>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/matrixDefinition"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/assignment"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Assignment">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Assignment/variable"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Assignment/value"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition/function"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition/formula"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixDefinition">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixDefinition/name"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixDefinition/rows"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval/openingBracket"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval/ceil"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval/floor"/>
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval/closingBracket"/>
    </genClasses>
@@ -11,13 +11,14 @@
       ecorePackage="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#/">
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/functionDefinition"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/matrixDefinition"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/assignment"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/variableAssignment"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/formula"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/matrixAssignment"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Statement/matrixFormula"/>
     </genClasses>
-    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Assignment">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Assignment/variable"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Assignment/value"/>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//VariableAssignment">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//VariableAssignment/variable"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//VariableAssignment/value"/>
     </genClasses>
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Formula/expression"/>
@@ -26,17 +27,24 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression/name"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Expression/parameters"/>
     </genClasses>
-    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition/function"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition/formula"/>
-    </genClasses>
-    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixDefinition">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixDefinition/name"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixDefinition/rows"/>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Matrix">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Matrix/rows"/>
     </genClasses>
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixRow">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixRow/elements"/>
     </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAssignment">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAssignment/variable"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAssignment/value"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixFormula">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixFormula/expression"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixExpression"/>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition/function"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//FunctionDefinition/formula"/>
+    </genClasses>
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Addition">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Addition/left"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Addition/right"/>
@@ -63,12 +71,6 @@
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Factorial">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Factorial/expression"/>
     </genClasses>
-    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval/openingBracket"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval/ceil"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval/floor"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Interval/closingBracket"/>
-    </genClasses>
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Exponent">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Exponent/left"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Exponent/right"/>
@@ -77,8 +79,35 @@
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Float">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Float/value"/>
     </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixElement">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixElement/element"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixElement/row"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixElement/column"/>
+    </genClasses>
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Function">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//Function/function"/>
     </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAddition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAddition/left"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixAddition/right"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixSubtraction">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixSubtraction/left"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixSubtraction/right"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixMultiplication">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixMultiplication/left"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixMultiplication/rightMatrix"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixMultiplication/rightScalar"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//NewMatrix">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//NewMatrix/matrix"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//TransposeMatrix">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//TransposeMatrix/name"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixVariable">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.ecore#//MatrixVariable/name"/>
+    </genClasses>
   </genPackages>
 </genmodel:GenModel>
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.genmodel
753e79ff1a42386f5fb070f2e10972e5be5a015f
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.xmi
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.xmi?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/Math.xmi
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.17"/>
        <elements xsi:type="xtext:Assignment" feature="variableAssignment" operator="=">
        <elements xsi:type="xtext:Assignment" feature="matrixAssignment" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
        </elements>
        <elements xsi:type="xtext:Assignment" feature="matrixFormula" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
        </elements>
    <rules xsi:type="xtext:ParserRule" name="VariableAssignment">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//VariableAssignment"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
          <elements xsi:type="xtext:Keyword" value="(-"/>
          <elements xsi:type="xtext:Keyword" value=")"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixElement"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Assignment" feature="element" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value="["/>
          <elements xsi:type="xtext:Assignment" feature="row" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value="]"/>
          <elements xsi:type="xtext:Keyword" value="["/>
          <elements xsi:type="xtext:Assignment" feature="column" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value="]"/>
        </elements>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.16"/>
    <rules xsi:type="xtext:ParserRule" name="Matrix">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//Matrix"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Keyword" value="{"/>
        <elements xsi:type="xtext:Group" cardinality="?">
          <elements xsi:type="xtext:Assignment" feature="rows" operator="+=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
          </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="/0/@rules.9"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="}"/>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixRow">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixRow"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Keyword" value="{"/>
        <elements xsi:type="xtext:Group" cardinality="?">
          <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
          </elements>
          <elements xsi:type="xtext:Group" cardinality="*">
            <elements xsi:type="xtext:Keyword" value=","/>
            <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="}"/>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixAssignment">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixAssignment"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Keyword" value="["/>
        <elements xsi:type="xtext:Assignment" feature="variable" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="]"/>
        <elements xsi:type="xtext:Keyword" value="="/>
        <elements xsi:type="xtext:Assignment" feature="value" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
        </elements>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixFormula">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixFormula"/>
      </type>
      <alternatives xsi:type="xtext:Assignment" feature="expression" operator="=">
        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixAddition">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixExpression"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
        <elements xsi:type="xtext:Alternatives" cardinality="*">
          <elements xsi:type="xtext:Group">
            <elements xsi:type="xtext:Keyword" value="+"/>
            <elements xsi:type="xtext:Action" feature="left" operator="=">
              <type metamodel="/0/@metamodelDeclarations.1">
                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixAddition"/>
              </type>
            </elements>
            <elements xsi:type="xtext:Assignment" feature="right" operator="=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Group">
            <elements xsi:type="xtext:Keyword" value="-"/>
            <elements xsi:type="xtext:Action" feature="left" operator="=">
              <type metamodel="/0/@metamodelDeclarations.1">
                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixSubtraction"/>
              </type>
            </elements>
            <elements xsi:type="xtext:Assignment" feature="right" operator="=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
            </elements>
          </elements>
        </elements>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixMultiplication">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixExpression"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
        <elements xsi:type="xtext:Alternatives" cardinality="*">
          <elements xsi:type="xtext:Group">
            <elements xsi:type="xtext:Keyword" value="*"/>
            <elements xsi:type="xtext:Action" feature="left" operator="=">
              <type metamodel="/0/@metamodelDeclarations.1">
                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixMultiplication"/>
              </type>
            </elements>
            <elements xsi:type="xtext:Assignment" feature="rightMatrix" operator="=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Group">
            <elements xsi:type="xtext:Keyword" value="*"/>
            <elements xsi:type="xtext:Action" feature="left" operator="=">
              <type metamodel="/0/@metamodelDeclarations.1">
                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixMultiplication"/>
              </type>
            </elements>
            <elements xsi:type="xtext:Assignment" feature="rightScalar" operator="=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
            </elements>
          </elements>
        </elements>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="PrimaryMatrix">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixExpression"/>
      </type>
      <alternatives xsi:type="xtext:Alternatives">
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//NewMatrix"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Assignment" feature="matrix" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
          </elements>
        </elements>
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//TransposeMatrix"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Keyword" value="["/>
          <elements xsi:type="xtext:Assignment" feature="name" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value="]^T"/>
        </elements>
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixVariable"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Keyword" value="["/>
          <elements xsi:type="xtext:Assignment" feature="name" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value="]"/>
        </elements>
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Keyword" value="("/>
          <elements xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
          <elements xsi:type="xtext:Keyword" value=")"/>
        </elements>
      </alternatives>
    </rules>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.16"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
        </elements>
        <elements xsi:type="xtext:Assignment" feature="matrixDefinition" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
        <elements xsi:type="xtext:Assignment" feature="assignment" operator="=">
    <rules xsi:type="xtext:ParserRule" name="Assignment">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//Assignment"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
          <elements xsi:type="xtext:Keyword" value="-"/>
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//Interval"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Assignment" feature="openingBracket" operator="=">
            <terminal xsi:type="xtext:Alternatives">
              <elements xsi:type="xtext:Keyword" value="["/>
              <elements xsi:type="xtext:Keyword" value="("/>
            </terminal>
          </elements>
          <elements xsi:type="xtext:Keyword" value="("/>
          <elements xsi:type="xtext:Assignment" feature="ceil" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value=")"/>
          <elements xsi:type="xtext:Keyword" value=".."/>
          <elements xsi:type="xtext:Keyword" value="("/>
          <elements xsi:type="xtext:Assignment" feature="floor" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value=")"/>
          <elements xsi:type="xtext:Assignment" feature="closingBracket" operator="=">
            <terminal xsi:type="xtext:Alternatives">
              <elements xsi:type="xtext:Keyword" value="]"/>
              <elements xsi:type="xtext:Keyword" value=")"/>
            </terminal>
          </elements>
        </elements>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
    <rules xsi:type="xtext:ParserRule" name="MatrixDefinition">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixDefinition"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="="/>
        <elements xsi:type="xtext:Keyword" value="{"/>
        <elements xsi:type="xtext:Group" cardinality="?">
          <elements xsi:type="xtext:Assignment" feature="rows" operator="+=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
          </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="/0/@rules.12"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="}"/>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixRow">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixRow"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Keyword" value="{"/>
        <elements xsi:type="xtext:Group" cardinality="?">
          <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
          </elements>
          <elements xsi:type="xtext:Group" cardinality="*">
            <elements xsi:type="xtext:Keyword" value=","/>
            <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="}"/>
      </alternatives>
    </rules>
@@ -13,26 +13,29 @@
       </type>
       <alternatives xsi:type="xtext:Alternatives">
         <elements xsi:type="xtext:Assignment" feature="functionDefinition" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
-        </elements>
-        <elements xsi:type="xtext:Assignment" feature="matrixDefinition" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.17"/>
         </elements>
-        <elements xsi:type="xtext:Assignment" feature="assignment" operator="=">
+        <elements xsi:type="xtext:Assignment" feature="variableAssignment" operator="=">
           <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.1"/>
         </elements>
         <elements xsi:type="xtext:Assignment" feature="formula" operator="=">
           <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
         </elements>
+        <elements xsi:type="xtext:Assignment" feature="matrixAssignment" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
+        </elements>
+        <elements xsi:type="xtext:Assignment" feature="matrixFormula" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
+        </elements>
       </alternatives>
     </rules>
-    <rules xsi:type="xtext:ParserRule" name="Assignment">
+    <rules xsi:type="xtext:ParserRule" name="VariableAssignment">
       <type metamodel="/0/@metamodelDeclarations.1">
-        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//Assignment"/>
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//VariableAssignment"/>
       </type>
       <alternatives xsi:type="xtext:Group">
         <elements xsi:type="xtext:Assignment" feature="variable" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
         </elements>
         <elements xsi:type="xtext:Keyword" value="="/>
         <elements xsi:type="xtext:Assignment" feature="value" operator="=">
@@ -130,7 +133,7 @@
       <alternatives xsi:type="xtext:Alternatives">
         <elements xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
         <elements xsi:type="xtext:Group">
-          <elements xsi:type="xtext:Keyword" value="-"/>
+          <elements xsi:type="xtext:Keyword" value="(-"/>
           <elements xsi:type="xtext:Action">
             <type metamodel="/0/@metamodelDeclarations.1">
               <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//Invert"/>
@@ -139,6 +142,7 @@
           <elements xsi:type="xtext:Assignment" feature="expression" operator="=">
             <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
           </elements>
+          <elements xsi:type="xtext:Keyword" value=")"/>
         </elements>
         <elements xsi:type="xtext:Group">
           <elements xsi:type="xtext:Keyword" value="("/>
@@ -152,36 +156,6 @@
           </elements>
           <elements xsi:type="xtext:Keyword" value=")!"/>
         </elements>
-        <elements xsi:type="xtext:Group">
-          <elements xsi:type="xtext:Action">
-            <type metamodel="/0/@metamodelDeclarations.1">
-              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//Interval"/>
-            </type>
-          </elements>
-          <elements xsi:type="xtext:Assignment" feature="openingBracket" operator="=">
-            <terminal xsi:type="xtext:Alternatives">
-              <elements xsi:type="xtext:Keyword" value="["/>
-              <elements xsi:type="xtext:Keyword" value="("/>
-            </terminal>
-          </elements>
-          <elements xsi:type="xtext:Keyword" value="("/>
-          <elements xsi:type="xtext:Assignment" feature="ceil" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
-          </elements>
-          <elements xsi:type="xtext:Keyword" value=")"/>
-          <elements xsi:type="xtext:Keyword" value=".."/>
-          <elements xsi:type="xtext:Keyword" value="("/>
-          <elements xsi:type="xtext:Assignment" feature="floor" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
-          </elements>
-          <elements xsi:type="xtext:Keyword" value=")"/>
-          <elements xsi:type="xtext:Assignment" feature="closingBracket" operator="=">
-            <terminal xsi:type="xtext:Alternatives">
-              <elements xsi:type="xtext:Keyword" value="]"/>
-              <elements xsi:type="xtext:Keyword" value=")"/>
-            </terminal>
-          </elements>
-        </elements>
       </alternatives>
     </rules>
     <rules xsi:type="xtext:ParserRule" name="Exponent">
@@ -215,7 +189,7 @@
             </type>
           </elements>
           <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
           </elements>
         </elements>
         <elements xsi:type="xtext:Group">
@@ -225,17 +199,37 @@
             </type>
           </elements>
           <elements xsi:type="xtext:Assignment" feature="value" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
           </elements>
         </elements>
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Action">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixElement"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Assignment" feature="element" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="["/>
+          <elements xsi:type="xtext:Assignment" feature="row" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="]"/>
+          <elements xsi:type="xtext:Keyword" value="["/>
+          <elements xsi:type="xtext:Assignment" feature="column" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="]"/>
+        </elements>
         <elements xsi:type="xtext:Group">
           <elements xsi:type="xtext:Action">
             <type metamodel="/0/@metamodelDeclarations.1">
               <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//Function"/>
             </type>
           </elements>
           <elements xsi:type="xtext:Assignment" feature="function" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.16"/>
           </elements>
         </elements>
         <elements xsi:type="xtext:Group">
@@ -245,6 +239,182 @@
         </elements>
       </alternatives>
     </rules>
+    <rules xsi:type="xtext:ParserRule" name="Matrix">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//Matrix"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Assignment" feature="rows" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
+          </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="/0/@rules.9"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="MatrixRow">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixRow"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="MatrixAssignment">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixAssignment"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="["/>
+        <elements xsi:type="xtext:Assignment" feature="variable" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="]"/>
+        <elements xsi:type="xtext:Keyword" value="="/>
+        <elements xsi:type="xtext:Assignment" feature="value" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="MatrixFormula">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixFormula"/>
+      </type>
+      <alternatives xsi:type="xtext:Assignment" feature="expression" operator="=">
+        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="MatrixAddition">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixExpression"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+        <elements xsi:type="xtext:Alternatives" cardinality="*">
+          <elements xsi:type="xtext:Group">
+            <elements xsi:type="xtext:Keyword" value="+"/>
+            <elements xsi:type="xtext:Action" feature="left" operator="=">
+              <type metamodel="/0/@metamodelDeclarations.1">
+                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixAddition"/>
+              </type>
+            </elements>
+            <elements xsi:type="xtext:Assignment" feature="right" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Group">
+            <elements xsi:type="xtext:Keyword" value="-"/>
+            <elements xsi:type="xtext:Action" feature="left" operator="=">
+              <type metamodel="/0/@metamodelDeclarations.1">
+                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixSubtraction"/>
+              </type>
+            </elements>
+            <elements xsi:type="xtext:Assignment" feature="right" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+            </elements>
+          </elements>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="MatrixMultiplication">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixExpression"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+        <elements xsi:type="xtext:Alternatives" cardinality="*">
+          <elements xsi:type="xtext:Group">
+            <elements xsi:type="xtext:Keyword" value="*"/>
+            <elements xsi:type="xtext:Action" feature="left" operator="=">
+              <type metamodel="/0/@metamodelDeclarations.1">
+                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixMultiplication"/>
+              </type>
+            </elements>
+            <elements xsi:type="xtext:Assignment" feature="rightMatrix" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Group">
+            <elements xsi:type="xtext:Keyword" value="*"/>
+            <elements xsi:type="xtext:Action" feature="left" operator="=">
+              <type metamodel="/0/@metamodelDeclarations.1">
+                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixMultiplication"/>
+              </type>
+            </elements>
+            <elements xsi:type="xtext:Assignment" feature="rightScalar" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
+            </elements>
+          </elements>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="PrimaryMatrix">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixExpression"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Action">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//NewMatrix"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Assignment" feature="matrix" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
+          </elements>
+        </elements>
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Action">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//TransposeMatrix"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="["/>
+          <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="]^T"/>
+        </elements>
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Action">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixVariable"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="["/>
+          <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="]"/>
+        </elements>
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Keyword" value="("/>
+          <elements xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
+          <elements xsi:type="xtext:Keyword" value=")"/>
+        </elements>
+      </alternatives>
+    </rules>
     <rules xsi:type="xtext:ParserRule" name="Float">
       <type metamodel="/0/@metamodelDeclarations.0">
         <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
@@ -271,7 +441,7 @@
       </type>
       <alternatives xsi:type="xtext:Group">
         <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
         </elements>
         <elements xsi:type="xtext:Keyword" value="("/>
         <elements xsi:type="xtext:Group" cardinality="?">
@@ -295,60 +465,14 @@
       </type>
       <alternatives xsi:type="xtext:Group">
         <elements xsi:type="xtext:Assignment" feature="function" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.16"/>
         </elements>
         <elements xsi:type="xtext:Keyword" value="="/>
         <elements xsi:type="xtext:Assignment" feature="formula" operator="=">
           <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
         </elements>
       </alternatives>
     </rules>
-    <rules xsi:type="xtext:ParserRule" name="MatrixDefinition">
-      <type metamodel="/0/@metamodelDeclarations.1">
-        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixDefinition"/>
-      </type>
-      <alternatives xsi:type="xtext:Group">
-        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
-        </elements>
-        <elements xsi:type="xtext:Keyword" value="="/>
-        <elements xsi:type="xtext:Keyword" value="{"/>
-        <elements xsi:type="xtext:Group" cardinality="?">
-          <elements xsi:type="xtext:Assignment" feature="rows" operator="+=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
-          </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="/0/@rules.12"/>
-            </elements>
-          </elements>
-          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
-        </elements>
-        <elements xsi:type="xtext:Keyword" value="}"/>
-      </alternatives>
-    </rules>
-    <rules xsi:type="xtext:ParserRule" name="MatrixRow">
-      <type metamodel="/0/@metamodelDeclarations.1">
-        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/jmole/math/Math#//MatrixRow"/>
-      </type>
-      <alternatives xsi:type="xtext:Group">
-        <elements xsi:type="xtext:Keyword" value="{"/>
-        <elements xsi:type="xtext:Group" cardinality="?">
-          <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
-          </elements>
-          <elements xsi:type="xtext:Group" cardinality="*">
-            <elements xsi:type="xtext:Keyword" value=","/>
-            <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
-              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
-            </elements>
-          </elements>
-          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
-        </elements>
-        <elements xsi:type="xtext:Keyword" value="}"/>
-      </alternatives>
-    </rules>
     <rules xsi:type="xtext:TerminalRule" name="MATH_NAME">
       <type metamodel="/0/@metamodelDeclarations.0">
         <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.xmi
f20f0b4c4bbec3af389940b5732653f0af267e50
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2FMathFactory.java
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2FMathFactory.java?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/MathFactory.java
   * Returns a new object of class '<em>Variable Assignment</em>'.
   * @return a new object of class '<em>Variable Assignment</em>'.
  VariableAssignment createVariableAssignment();
   * Returns a new object of class '<em>Matrix</em>'.
   * @return a new object of class '<em>Matrix</em>'.
  Matrix createMatrix();
   * Returns a new object of class '<em>Matrix Row</em>'.
   * @return a new object of class '<em>Matrix Row</em>'.
  MatrixRow createMatrixRow();
   * Returns a new object of class '<em>Matrix Assignment</em>'.
   * @return a new object of class '<em>Matrix Assignment</em>'.
  MatrixAssignment createMatrixAssignment();

  /**
   * Returns a new object of class '<em>Matrix Formula</em>'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return a new object of class '<em>Matrix Formula</em>'.
   * @generated
   */
  MatrixFormula createMatrixFormula();

  /**
   * Returns a new object of class '<em>Matrix Expression</em>'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return a new object of class '<em>Matrix Expression</em>'.
   * @generated
   */
  MatrixExpression createMatrixExpression();

  /**
   * Returns a new object of class '<em>Function Definition</em>'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return a new object of class '<em>Function Definition</em>'.
   * @generated
   */
  FunctionDefinition createFunctionDefinition();
  /**
   * Returns a new object of class '<em>Matrix Element</em>'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return a new object of class '<em>Matrix Element</em>'.
   * @generated
   */
  MatrixElement createMatrixElement();

  /**
   * Returns a new object of class '<em>Matrix Addition</em>'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return a new object of class '<em>Matrix Addition</em>'.
   * @generated
   */
  MatrixAddition createMatrixAddition();

  /**
   * Returns a new object of class '<em>Matrix Subtraction</em>'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return a new object of class '<em>Matrix Subtraction</em>'.
   * @generated
   */
  MatrixSubtraction createMatrixSubtraction();

  /**
   * Returns a new object of class '<em>Matrix Multiplication</em>'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return a new object of class '<em>Matrix Multiplication</em>'.
   * @generated
   */
  MatrixMultiplication createMatrixMultiplication();

  /**
   * Returns a new object of class '<em>New Matrix</em>'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return a new object of class '<em>New Matrix</em>'.
   * @generated
   */
  NewMatrix createNewMatrix();

  /**
   * Returns a new object of class '<em>Transpose Matrix</em>'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return a new object of class '<em>Transpose Matrix</em>'.
   * @generated
   */
  TransposeMatrix createTransposeMatrix();

  /**
   * Returns a new object of class '<em>Matrix Variable</em>'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return a new object of class '<em>Matrix Variable</em>'.
   * @generated
   */
  MatrixVariable createMatrixVariable();

   * Returns a new object of class '<em>Assignment</em>'.
   * @return a new object of class '<em>Assignment</em>'.
  Assignment createAssignment();
   * Returns a new object of class '<em>Function Definition</em>'.
   * @return a new object of class '<em>Function Definition</em>'.
  FunctionDefinition createFunctionDefinition();
   * Returns a new object of class '<em>Matrix Definition</em>'.
   * @return a new object of class '<em>Matrix Definition</em>'.
  MatrixDefinition createMatrixDefinition();
   * Returns a new object of class '<em>Matrix Row</em>'.
   * @return a new object of class '<em>Matrix Row</em>'.
  MatrixRow createMatrixRow();
  /**
   * Returns a new object of class '<em>Interval</em>'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return a new object of class '<em>Interval</em>'.
   * @generated
   */
  Interval createInterval();

@@ -36,13 +36,13 @@ public interface MathFactory extends EFactory
   Statement createStatement();
 
   /**
-   * Returns a new object of class '<em>Assignment</em>'.
+   * Returns a new object of class '<em>Variable Assignment</em>'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return a new object of class '<em>Assignment</em>'.
+   * @return a new object of class '<em>Variable Assignment</em>'.
    * @generated
    */
-  Assignment createAssignment();
+  VariableAssignment createVariableAssignment();
 
   /**
    * Returns a new object of class '<em>Formula</em>'.
@@ -63,31 +63,58 @@ public interface MathFactory extends EFactory
   Expression createExpression();
 
   /**
-   * Returns a new object of class '<em>Function Definition</em>'.
+   * Returns a new object of class '<em>Matrix</em>'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return a new object of class '<em>Function Definition</em>'.
+   * @return a new object of class '<em>Matrix</em>'.
    * @generated
    */
-  FunctionDefinition createFunctionDefinition();
+  Matrix createMatrix();
 
   /**
-   * Returns a new object of class '<em>Matrix Definition</em>'.
+   * Returns a new object of class '<em>Matrix Row</em>'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return a new object of class '<em>Matrix Definition</em>'.
+   * @return a new object of class '<em>Matrix Row</em>'.
    * @generated
    */
-  MatrixDefinition createMatrixDefinition();
+  MatrixRow createMatrixRow();
 
   /**
-   * Returns a new object of class '<em>Matrix Row</em>'.
+   * Returns a new object of class '<em>Matrix Assignment</em>'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return a new object of class '<em>Matrix Row</em>'.
+   * @return a new object of class '<em>Matrix Assignment</em>'.
    * @generated
    */
-  MatrixRow createMatrixRow();
+  MatrixAssignment createMatrixAssignment();
+
+  /**
+   * Returns a new object of class '<em>Matrix Formula</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Matrix Formula</em>'.
+   * @generated
+   */
+  MatrixFormula createMatrixFormula();
+
+  /**
+   * Returns a new object of class '<em>Matrix Expression</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Matrix Expression</em>'.
+   * @generated
+   */
+  MatrixExpression createMatrixExpression();
+
+  /**
+   * Returns a new object of class '<em>Function Definition</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Function Definition</em>'.
+   * @generated
+   */
+  FunctionDefinition createFunctionDefinition();
 
   /**
    * Returns a new object of class '<em>Addition</em>'.
@@ -152,15 +179,6 @@ public interface MathFactory extends EFactory
    */
   Factorial createFactorial();
 
-  /**
-   * Returns a new object of class '<em>Interval</em>'.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @return a new object of class '<em>Interval</em>'.
-   * @generated
-   */
-  Interval createInterval();
-
   /**
    * Returns a new object of class '<em>Exponent</em>'.
    * <!-- begin-user-doc -->
@@ -188,6 +206,15 @@ public interface MathFactory extends EFactory
    */
   Float createFloat();
 
+  /**
+   * Returns a new object of class '<em>Matrix Element</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Matrix Element</em>'.
+   * @generated
+   */
+  MatrixElement createMatrixElement();
+
   /**
    * Returns a new object of class '<em>Function</em>'.
    * <!-- begin-user-doc -->
@@ -197,6 +224,60 @@ public interface MathFactory extends EFactory
    */
   Function createFunction();
 
+  /**
+   * Returns a new object of class '<em>Matrix Addition</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Matrix Addition</em>'.
+   * @generated
+   */
+  MatrixAddition createMatrixAddition();
+
+  /**
+   * Returns a new object of class '<em>Matrix Subtraction</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Matrix Subtraction</em>'.
+   * @generated
+   */
+  MatrixSubtraction createMatrixSubtraction();
+
+  /**
+   * Returns a new object of class '<em>Matrix Multiplication</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Matrix Multiplication</em>'.
+   * @generated
+   */
+  MatrixMultiplication createMatrixMultiplication();
+
+  /**
+   * Returns a new object of class '<em>New Matrix</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>New Matrix</em>'.
+   * @generated
+   */
+  NewMatrix createNewMatrix();
+
+  /**
+   * Returns a new object of class '<em>Transpose Matrix</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Transpose Matrix</em>'.
+   * @generated
+   */
+  TransposeMatrix createTransposeMatrix();
+
+  /**
+   * Returns a new object of class '<em>Matrix Variable</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Matrix Variable</em>'.
+   * @generated
+   */
+  MatrixVariable createMatrixVariable();
+
   /**
    * Returns the package supported by this factory.
    * <!-- begin-user-doc -->
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2FMathFactory.java
592c14760213a1a34c881c75dbca7ebe08d94388
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2FMathPackage.java
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2FMathPackage.java?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/MathPackage.java
   * The feature id for the '<em><b>Variable Assignment</b></em>' containment reference.
  int STATEMENT__VARIABLE_ASSIGNMENT = 1;
   * The feature id for the '<em><b>Formula</b></em>' containment reference.
  int STATEMENT__FORMULA = 2;
   * The feature id for the '<em><b>Matrix Assignment</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int STATEMENT__MATRIX_ASSIGNMENT = 3;

  /**
   * The feature id for the '<em><b>Matrix Formula</b></em>' containment reference.
  int STATEMENT__MATRIX_FORMULA = 4;
  int STATEMENT_FEATURE_COUNT = 5;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.VariableAssignmentImpl <em>Variable Assignment</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.VariableAssignmentImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getVariableAssignment()
  int VARIABLE_ASSIGNMENT = 1;
  int VARIABLE_ASSIGNMENT__VARIABLE = 0;
  int VARIABLE_ASSIGNMENT__VALUE = 1;
   * The number of structural features of the '<em>Variable Assignment</em>' class.
  int VARIABLE_ASSIGNMENT_FEATURE_COUNT = 2;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixImpl <em>Matrix</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrix()
  int MATRIX = 4;
   * The feature id for the '<em><b>Rows</b></em>' containment reference list.
  int MATRIX__ROWS = 0;
   * The number of structural features of the '<em>Matrix</em>' class.
  int MATRIX_FEATURE_COUNT = 1;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixRowImpl <em>Matrix Row</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixRowImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixRow()
   * @generated
   */
  int MATRIX_ROW = 5;

  /**
   * The feature id for the '<em><b>Elements</b></em>' attribute list.
  int MATRIX_ROW__ELEMENTS = 0;

  /**
   * The number of structural features of the '<em>Matrix Row</em>' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int MATRIX_ROW_FEATURE_COUNT = 1;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixAssignmentImpl <em>Matrix Assignment</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixAssignmentImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixAssignment()
  int MATRIX_ASSIGNMENT = 6;
   * The feature id for the '<em><b>Variable</b></em>' attribute.
  int MATRIX_ASSIGNMENT__VARIABLE = 0;
   * The feature id for the '<em><b>Value</b></em>' containment reference.
  int MATRIX_ASSIGNMENT__VALUE = 1;
   * The number of structural features of the '<em>Matrix Assignment</em>' class.
  int MATRIX_ASSIGNMENT_FEATURE_COUNT = 2;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixFormulaImpl <em>Matrix Formula</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixFormulaImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixFormula()
  int MATRIX_FORMULA = 7;
   * The feature id for the '<em><b>Expression</b></em>' containment reference.
  int MATRIX_FORMULA__EXPRESSION = 0;
   * The number of structural features of the '<em>Matrix Formula</em>' class.
  int MATRIX_FORMULA_FEATURE_COUNT = 1;

  /**
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixExpressionImpl <em>Matrix Expression</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixExpressionImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixExpression()
   * @generated
   */
  int MATRIX_EXPRESSION = 8;

  /**
   * The number of structural features of the '<em>Matrix Expression</em>' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int MATRIX_EXPRESSION_FEATURE_COUNT = 0;

  /**
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FunctionDefinitionImpl <em>Function Definition</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see org.eclipse.iee.translator.jmole.math.math.impl.FunctionDefinitionImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFunctionDefinition()
   * @generated
   */
  int FUNCTION_DEFINITION = 9;

  /**
   * The feature id for the '<em><b>Function</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int FUNCTION_DEFINITION__FUNCTION = 0;

  /**
   * The feature id for the '<em><b>Formula</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int FUNCTION_DEFINITION__FORMULA = 1;

  /**
   * The number of structural features of the '<em>Function Definition</em>' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int FUNCTION_DEFINITION_FEATURE_COUNT = 2;
  int ADDITION = 10;
  int SUBTRACTION = 11;
  int MULTIPLICATION = 12;
  int DIVISION = 13;
  int MODULO = 14;
  int INVERT = 15;
  int FACTORIAL = 16;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.ExponentImpl <em>Exponent</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.ExponentImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getExponent()
  int EXPONENT = 17;
  int EXPONENT__NAME = EXPRESSION__NAME;
  int EXPONENT__PARAMETERS = EXPRESSION__PARAMETERS;
   * The feature id for the '<em><b>Left</b></em>' containment reference.
  int EXPONENT__LEFT = EXPRESSION_FEATURE_COUNT + 0;
   * The feature id for the '<em><b>Right</b></em>' containment reference.
  int EXPONENT__RIGHT = EXPRESSION_FEATURE_COUNT + 1;
   * The number of structural features of the '<em>Exponent</em>' class.
  int EXPONENT_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 2;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.VariableImpl <em>Variable</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.VariableImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getVariable()
  int VARIABLE = 18;
   * The feature id for the '<em><b>Name</b></em>' attribute.
  int VARIABLE__NAME = EXPRESSION__NAME;
   * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
  int VARIABLE__PARAMETERS = EXPRESSION__PARAMETERS;
   * The number of structural features of the '<em>Variable</em>' class.
  int VARIABLE_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 0;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FloatImpl <em>Float</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.FloatImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFloat()
  int FLOAT = 19;
   * The feature id for the '<em><b>Name</b></em>' attribute.
  int FLOAT__NAME = EXPRESSION__NAME;
   * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
  int FLOAT__PARAMETERS = EXPRESSION__PARAMETERS;
   * The feature id for the '<em><b>Value</b></em>' attribute.
   * @ordered
  int FLOAT__VALUE = EXPRESSION_FEATURE_COUNT + 0;
   * The number of structural features of the '<em>Float</em>' class.
  int FLOAT_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixElementImpl <em>Matrix Element</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixElementImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixElement()
  int MATRIX_ELEMENT = 20;
   * The feature id for the '<em><b>Name</b></em>' attribute.
  int MATRIX_ELEMENT__NAME = EXPRESSION__NAME;
   * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
   * @ordered
  int MATRIX_ELEMENT__PARAMETERS = EXPRESSION__PARAMETERS;
   * The feature id for the '<em><b>Element</b></em>' attribute.
  int MATRIX_ELEMENT__ELEMENT = EXPRESSION_FEATURE_COUNT + 0;
   * The feature id for the '<em><b>Row</b></em>' attribute.
  int MATRIX_ELEMENT__ROW = EXPRESSION_FEATURE_COUNT + 1;
   * The feature id for the '<em><b>Column</b></em>' attribute.
  int MATRIX_ELEMENT__COLUMN = EXPRESSION_FEATURE_COUNT + 2;
   * The number of structural features of the '<em>Matrix Element</em>' class.
  int MATRIX_ELEMENT_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 3;
  int FUNCTION = 21;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixAdditionImpl <em>Matrix Addition</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixAdditionImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixAddition()
  int MATRIX_ADDITION = 22;
   * The feature id for the '<em><b>Left</b></em>' containment reference.
   * @ordered
  int MATRIX_ADDITION__LEFT = MATRIX_EXPRESSION_FEATURE_COUNT + 0;
   * The feature id for the '<em><b>Right</b></em>' containment reference.
   * @ordered
  int MATRIX_ADDITION__RIGHT = MATRIX_EXPRESSION_FEATURE_COUNT + 1;
   * The number of structural features of the '<em>Matrix Addition</em>' class.
   * @ordered
  int MATRIX_ADDITION_FEATURE_COUNT = MATRIX_EXPRESSION_FEATURE_COUNT + 2;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixSubtractionImpl <em>Matrix Subtraction</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixSubtractionImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixSubtraction()
  int MATRIX_SUBTRACTION = 23;
   * The feature id for the '<em><b>Left</b></em>' containment reference.
   * @ordered
  int MATRIX_SUBTRACTION__LEFT = MATRIX_EXPRESSION_FEATURE_COUNT + 0;
   * The feature id for the '<em><b>Right</b></em>' containment reference.
   * @ordered
  int MATRIX_SUBTRACTION__RIGHT = MATRIX_EXPRESSION_FEATURE_COUNT + 1;
   * The number of structural features of the '<em>Matrix Subtraction</em>' class.
   * @ordered
  int MATRIX_SUBTRACTION_FEATURE_COUNT = MATRIX_EXPRESSION_FEATURE_COUNT + 2;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixMultiplicationImpl <em>Matrix Multiplication</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixMultiplicationImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixMultiplication()
  int MATRIX_MULTIPLICATION = 24;
   * The feature id for the '<em><b>Left</b></em>' containment reference.
   * @ordered
  int MATRIX_MULTIPLICATION__LEFT = MATRIX_EXPRESSION_FEATURE_COUNT + 0;
   * The feature id for the '<em><b>Right Matrix</b></em>' containment reference.
   * @ordered
  int MATRIX_MULTIPLICATION__RIGHT_MATRIX = MATRIX_EXPRESSION_FEATURE_COUNT + 1;
   * The feature id for the '<em><b>Right Scalar</b></em>' containment reference.
   * @ordered
  int MATRIX_MULTIPLICATION__RIGHT_SCALAR = MATRIX_EXPRESSION_FEATURE_COUNT + 2;
   * The number of structural features of the '<em>Matrix Multiplication</em>' class.
   * @ordered
  int MATRIX_MULTIPLICATION_FEATURE_COUNT = MATRIX_EXPRESSION_FEATURE_COUNT + 3;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.NewMatrixImpl <em>New Matrix</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.NewMatrixImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getNewMatrix()
  int NEW_MATRIX = 25;
   * The feature id for the '<em><b>Matrix</b></em>' containment reference.
   * @ordered
  int NEW_MATRIX__MATRIX = MATRIX_EXPRESSION_FEATURE_COUNT + 0;
   * The number of structural features of the '<em>New Matrix</em>' class.
   * @ordered
  int NEW_MATRIX_FEATURE_COUNT = MATRIX_EXPRESSION_FEATURE_COUNT + 1;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.TransposeMatrixImpl <em>Transpose Matrix</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.TransposeMatrixImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getTransposeMatrix()
  int TRANSPOSE_MATRIX = 26;
   * The feature id for the '<em><b>Name</b></em>' attribute.
   * @ordered
  int TRANSPOSE_MATRIX__NAME = MATRIX_EXPRESSION_FEATURE_COUNT + 0;
   * The number of structural features of the '<em>Transpose Matrix</em>' class.
   * @ordered
  int TRANSPOSE_MATRIX_FEATURE_COUNT = MATRIX_EXPRESSION_FEATURE_COUNT + 1;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixVariableImpl <em>Matrix Variable</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixVariableImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixVariable()
   * @generated
   */
  int MATRIX_VARIABLE = 27;

  /**
   * The feature id for the '<em><b>Name</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int MATRIX_VARIABLE__NAME = MATRIX_EXPRESSION_FEATURE_COUNT + 0;

  /**
   * The number of structural features of the '<em>Matrix Variable</em>' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   * @ordered
   */
  int MATRIX_VARIABLE_FEATURE_COUNT = MATRIX_EXPRESSION_FEATURE_COUNT + 1;


  /**
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Statement <em>Statement</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Statement</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Statement
   * @generated
   */
  EClass getStatement();

  /**
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getFunctionDefinition <em>Function Definition</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Function Definition</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getFunctionDefinition()
   * @see #getStatement()
   * @generated
   */
  EReference getStatement_FunctionDefinition();

  /**
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getVariableAssignment <em>Variable Assignment</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Variable Assignment</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getVariableAssignment()
   * @see #getStatement()
   * @generated
   */
  EReference getStatement_VariableAssignment();

  /**
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getFormula <em>Formula</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Formula</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getFormula()
   * @see #getStatement()
   * @generated
   */
  EReference getStatement_Formula();

  /**
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixAssignment <em>Matrix Assignment</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Matrix Assignment</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixAssignment()
   * @see #getStatement()
   * @generated
   */
  EReference getStatement_MatrixAssignment();

  /**
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixFormula <em>Matrix Formula</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Matrix Formula</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixFormula()
   * @see #getStatement()
   * @generated
   */
  EReference getStatement_MatrixFormula();

  /**
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.VariableAssignment <em>Variable Assignment</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Variable Assignment</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.VariableAssignment
   * @generated
   */
  EClass getVariableAssignment();

  /**
   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.VariableAssignment#getVariable <em>Variable</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Variable</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.VariableAssignment#getVariable()
   * @see #getVariableAssignment()
   * @generated
   */
  EAttribute getVariableAssignment_Variable();

  /**
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.VariableAssignment#getValue <em>Value</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Value</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.VariableAssignment#getValue()
   * @see #getVariableAssignment()
   * @generated
   */
  EReference getVariableAssignment_Value();

  /**
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Formula <em>Formula</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Formula</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Formula
   * @generated
   */
  EClass getFormula();

  /**
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Formula#getExpression <em>Expression</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Expression</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Formula#getExpression()
   * @see #getFormula()
   * @generated
   */
  EReference getFormula_Expression();

  /**
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Expression <em>Expression</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Expression</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Expression
   * @generated
   */
  EClass getExpression();

  /**
   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.Expression#getName <em>Name</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Name</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Expression#getName()
   * @see #getExpression()
   * @generated
   */
  EAttribute getExpression_Name();

  /**
   * Returns the meta object for the containment reference list '{@link org.eclipse.iee.translator.jmole.math.math.Expression#getParameters <em>Parameters</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference list '<em>Parameters</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Expression#getParameters()
   * @see #getExpression()
   * @generated
   */
  EReference getExpression_Parameters();

  /**
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Matrix <em>Matrix</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Matrix</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Matrix
   * @generated
   */
  EClass getMatrix();

  /**
   * Returns the meta object for the containment reference list '{@link org.eclipse.iee.translator.jmole.math.math.Matrix#getRows <em>Rows</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference list '<em>Rows</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Matrix#getRows()
   * @see #getMatrix()
   * @generated
   */
  EReference getMatrix_Rows();

  /**
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixRow <em>Matrix Row</em>}'.
  /**
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixAssignment <em>Matrix Assignment</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Matrix Assignment</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixAssignment
   * @generated
   */
  EClass getMatrixAssignment();

  /**
   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.MatrixAssignment#getVariable <em>Variable</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Variable</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixAssignment#getVariable()
   * @see #getMatrixAssignment()
   * @generated
   */
  EAttribute getMatrixAssignment_Variable();

  /**
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixAssignment#getValue <em>Value</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Value</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixAssignment#getValue()
   * @see #getMatrixAssignment()
   * @generated
   */
  EReference getMatrixAssignment_Value();

  /**
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixFormula <em>Matrix Formula</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Matrix Formula</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixFormula
   * @generated
   */
  EClass getMatrixFormula();

  /**
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixFormula#getExpression <em>Expression</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Expression</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixFormula#getExpression()
   * @see #getMatrixFormula()
   * @generated
   */
  EReference getMatrixFormula_Expression();

  /**
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixExpression <em>Matrix Expression</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Matrix Expression</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixExpression
   * @generated
   */
  EClass getMatrixExpression();

  /**
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.FunctionDefinition <em>Function Definition</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Function Definition</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.FunctionDefinition
   * @generated
   */
  EClass getFunctionDefinition();

  /**
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.FunctionDefinition#getFunction <em>Function</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Function</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.FunctionDefinition#getFunction()
   * @see #getFunctionDefinition()
   * @generated
   */
  EReference getFunctionDefinition_Function();

  /**
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.FunctionDefinition#getFormula <em>Formula</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Formula</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.FunctionDefinition#getFormula()
   * @see #getFunctionDefinition()
   * @generated
   */
  EReference getFunctionDefinition_Formula();

   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Exponent <em>Exponent</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Exponent</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Exponent
   * @generated
   */
  EClass getExponent();

  /**
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Exponent#getLeft <em>Left</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Left</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Exponent#getLeft()
   * @see #getExponent()
   * @generated
   */
  EReference getExponent_Left();

  /**
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Exponent#getRight <em>Right</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Right</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Exponent#getRight()
   * @see #getExponent()
   * @generated
   */
  EReference getExponent_Right();

  /**
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Variable <em>Variable</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Variable</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Variable
   * @generated
   */
  EClass getVariable();

  /**
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Float <em>Float</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Float</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Float
   * @generated
   */
  EClass getFloat();

  /**
   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.Float#getValue <em>Value</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Value</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Float#getValue()
   * @see #getFloat()
   * @generated
   */
  EAttribute getFloat_Value();

  /**
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixElement <em>Matrix Element</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Matrix Element</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixElement
   * @generated
   */
  EClass getMatrixElement();

  /**
   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.MatrixElement#getElement <em>Element</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Element</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixElement#getElement()
   * @see #getMatrixElement()
   * @generated
   */
  EAttribute getMatrixElement_Element();

  /**
   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.MatrixElement#getRow <em>Row</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Row</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixElement#getRow()
   * @see #getMatrixElement()
   * @generated
   */
  EAttribute getMatrixElement_Row();

  /**
   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.MatrixElement#getColumn <em>Column</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the attribute '<em>Column</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixElement#getColumn()
   * @see #getMatrixElement()
   * @generated
   */
  EAttribute getMatrixElement_Column();

  /**
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Function <em>Function</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Function</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Function
   * @generated
   */
  EClass getFunction();

  /**
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Function#getFunction <em>Function</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Function</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Function#getFunction()
   * @see #getFunction()
   * @generated
   */
  EReference getFunction_Function();

  /**
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixAddition <em>Matrix Addition</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for class '<em>Matrix Addition</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixAddition
   * @generated
   */
  EClass getMatrixAddition();

  /**
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixAddition#getLeft <em>Left</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Left</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixAddition#getLeft()
   * @see #getMatrixAddition()
   * @generated
   */
  EReference getMatrixAddition_Left();

  /**
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixAddition#getRight <em>Right</em>}'.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @return the meta object for the containment reference '<em>Right</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixAddition#getRight()
   * @see #getMatrixAddition()
   * @generated
   */
  EReference getMatrixAddition_Right();

  /**
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction <em>Matrix Subtraction</em>}'.
   * @return the meta object for class '<em>Matrix Subtraction</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction
  EClass getMatrixSubtraction();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction#getLeft <em>Left</em>}'.
   * @return the meta object for the containment reference '<em>Left</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction#getLeft()
   * @see #getMatrixSubtraction()
  EReference getMatrixSubtraction_Left();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction#getRight <em>Right</em>}'.
   * @return the meta object for the containment reference '<em>Right</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction#getRight()
   * @see #getMatrixSubtraction()
  EReference getMatrixSubtraction_Right();
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication <em>Matrix Multiplication</em>}'.
   * @return the meta object for class '<em>Matrix Multiplication</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication
  EClass getMatrixMultiplication();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication#getLeft <em>Left</em>}'.
   * @return the meta object for the containment reference '<em>Left</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication#getLeft()
   * @see #getMatrixMultiplication()
  EReference getMatrixMultiplication_Left();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication#getRightMatrix <em>Right Matrix</em>}'.
   * @return the meta object for the containment reference '<em>Right Matrix</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication#getRightMatrix()
   * @see #getMatrixMultiplication()
  EReference getMatrixMultiplication_RightMatrix();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication#getRightScalar <em>Right Scalar</em>}'.
   * @return the meta object for the containment reference '<em>Right Scalar</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication#getRightScalar()
   * @see #getMatrixMultiplication()
  EReference getMatrixMultiplication_RightScalar();
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.NewMatrix <em>New Matrix</em>}'.
   * @return the meta object for class '<em>New Matrix</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.NewMatrix
  EClass getNewMatrix();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.NewMatrix#getMatrix <em>Matrix</em>}'.
   * @return the meta object for the containment reference '<em>Matrix</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.NewMatrix#getMatrix()
   * @see #getNewMatrix()
  EReference getNewMatrix_Matrix();
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.TransposeMatrix <em>Transpose Matrix</em>}'.
   * @return the meta object for class '<em>Transpose Matrix</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.TransposeMatrix
  EClass getTransposeMatrix();
   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.TransposeMatrix#getName <em>Name</em>}'.
   * @return the meta object for the attribute '<em>Name</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.TransposeMatrix#getName()
   * @see #getTransposeMatrix()
  EAttribute getTransposeMatrix_Name();
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixVariable <em>Matrix Variable</em>}'.
   * @return the meta object for class '<em>Matrix Variable</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixVariable
  EClass getMatrixVariable();
   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.MatrixVariable#getName <em>Name</em>}'.
   * @return the meta object for the attribute '<em>Name</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixVariable#getName()
   * @see #getMatrixVariable()
  EAttribute getMatrixVariable_Name();
     * The meta object literal for the '<em><b>Variable Assignment</b></em>' containment reference feature.
    EReference STATEMENT__VARIABLE_ASSIGNMENT = eINSTANCE.getStatement_VariableAssignment();
     * The meta object literal for the '<em><b>Formula</b></em>' containment reference feature.
    EReference STATEMENT__FORMULA = eINSTANCE.getStatement_Formula();
     * The meta object literal for the '<em><b>Matrix Assignment</b></em>' containment reference feature.
    EReference STATEMENT__MATRIX_ASSIGNMENT = eINSTANCE.getStatement_MatrixAssignment();

    /**
     * The meta object literal for the '<em><b>Matrix Formula</b></em>' containment reference feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference STATEMENT__MATRIX_FORMULA = eINSTANCE.getStatement_MatrixFormula();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.VariableAssignmentImpl <em>Variable Assignment</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.VariableAssignmentImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getVariableAssignment()
    EClass VARIABLE_ASSIGNMENT = eINSTANCE.getVariableAssignment();
    EAttribute VARIABLE_ASSIGNMENT__VARIABLE = eINSTANCE.getVariableAssignment_Variable();
    EReference VARIABLE_ASSIGNMENT__VALUE = eINSTANCE.getVariableAssignment_Value();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixImpl <em>Matrix</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrix()
    EClass MATRIX = eINSTANCE.getMatrix();
     * The meta object literal for the '<em><b>Rows</b></em>' containment reference list feature.
    EReference MATRIX__ROWS = eINSTANCE.getMatrix_Rows();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixRowImpl <em>Matrix Row</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixRowImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixRow()
    EClass MATRIX_ROW = eINSTANCE.getMatrixRow();
     * The meta object literal for the '<em><b>Elements</b></em>' attribute list feature.
    EAttribute MATRIX_ROW__ELEMENTS = eINSTANCE.getMatrixRow_Elements();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixAssignmentImpl <em>Matrix Assignment</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixAssignmentImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixAssignment()
    EClass MATRIX_ASSIGNMENT = eINSTANCE.getMatrixAssignment();
     * The meta object literal for the '<em><b>Variable</b></em>' attribute feature.
    EAttribute MATRIX_ASSIGNMENT__VARIABLE = eINSTANCE.getMatrixAssignment_Variable();
     * The meta object literal for the '<em><b>Value</b></em>' containment reference feature.
    EReference MATRIX_ASSIGNMENT__VALUE = eINSTANCE.getMatrixAssignment_Value();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixFormulaImpl <em>Matrix Formula</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixFormulaImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixFormula()
    EClass MATRIX_FORMULA = eINSTANCE.getMatrixFormula();

    /**
     * The meta object literal for the '<em><b>Expression</b></em>' containment reference feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference MATRIX_FORMULA__EXPRESSION = eINSTANCE.getMatrixFormula_Expression();

    /**
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixExpressionImpl <em>Matrix Expression</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixExpressionImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixExpression()
     * @generated
     */
    EClass MATRIX_EXPRESSION = eINSTANCE.getMatrixExpression();

    /**
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FunctionDefinitionImpl <em>Function Definition</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see org.eclipse.iee.translator.jmole.math.math.impl.FunctionDefinitionImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFunctionDefinition()
     * @generated
     */
    EClass FUNCTION_DEFINITION = eINSTANCE.getFunctionDefinition();

    /**
     * The meta object literal for the '<em><b>Function</b></em>' containment reference feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference FUNCTION_DEFINITION__FUNCTION = eINSTANCE.getFunctionDefinition_Function();

    /**
     * The meta object literal for the '<em><b>Formula</b></em>' containment reference feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference FUNCTION_DEFINITION__FORMULA = eINSTANCE.getFunctionDefinition_Formula();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.ExponentImpl <em>Exponent</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see org.eclipse.iee.translator.jmole.math.math.impl.ExponentImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getExponent()
     * @generated
     */
    EClass EXPONENT = eINSTANCE.getExponent();

    /**
     * The meta object literal for the '<em><b>Left</b></em>' containment reference feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference EXPONENT__LEFT = eINSTANCE.getExponent_Left();

    /**
     * The meta object literal for the '<em><b>Right</b></em>' containment reference feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference EXPONENT__RIGHT = eINSTANCE.getExponent_Right();

    /**
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.VariableImpl <em>Variable</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.VariableImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getVariable()
    EClass VARIABLE = eINSTANCE.getVariable();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FloatImpl <em>Float</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.FloatImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFloat()
    EClass FLOAT = eINSTANCE.getFloat();
     * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
    EAttribute FLOAT__VALUE = eINSTANCE.getFloat_Value();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixElementImpl <em>Matrix Element</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixElementImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixElement()
    EClass MATRIX_ELEMENT = eINSTANCE.getMatrixElement();
     * The meta object literal for the '<em><b>Element</b></em>' attribute feature.
    EAttribute MATRIX_ELEMENT__ELEMENT = eINSTANCE.getMatrixElement_Element();
     * The meta object literal for the '<em><b>Row</b></em>' attribute feature.
    EAttribute MATRIX_ELEMENT__ROW = eINSTANCE.getMatrixElement_Row();

    /**
     * The meta object literal for the '<em><b>Column</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute MATRIX_ELEMENT__COLUMN = eINSTANCE.getMatrixElement_Column();

    /**
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FunctionImpl <em>Function</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see org.eclipse.iee.translator.jmole.math.math.impl.FunctionImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFunction()
     * @generated
     */
    EClass FUNCTION = eINSTANCE.getFunction();

    /**
     * The meta object literal for the '<em><b>Function</b></em>' containment reference feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference FUNCTION__FUNCTION = eINSTANCE.getFunction_Function();

    /**
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixAdditionImpl <em>Matrix Addition</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixAdditionImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixAddition()
     * @generated
     */
    EClass MATRIX_ADDITION = eINSTANCE.getMatrixAddition();
    EReference MATRIX_ADDITION__LEFT = eINSTANCE.getMatrixAddition_Left();
    EReference MATRIX_ADDITION__RIGHT = eINSTANCE.getMatrixAddition_Right();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixSubtractionImpl <em>Matrix Subtraction</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixSubtractionImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixSubtraction()
    EClass MATRIX_SUBTRACTION = eINSTANCE.getMatrixSubtraction();
     * The meta object literal for the '<em><b>Left</b></em>' containment reference feature.
    EReference MATRIX_SUBTRACTION__LEFT = eINSTANCE.getMatrixSubtraction_Left();
     * The meta object literal for the '<em><b>Right</b></em>' containment reference feature.
    EReference MATRIX_SUBTRACTION__RIGHT = eINSTANCE.getMatrixSubtraction_Right();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixMultiplicationImpl <em>Matrix Multiplication</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixMultiplicationImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixMultiplication()
    EClass MATRIX_MULTIPLICATION = eINSTANCE.getMatrixMultiplication();
     * The meta object literal for the '<em><b>Left</b></em>' containment reference feature.
    EReference MATRIX_MULTIPLICATION__LEFT = eINSTANCE.getMatrixMultiplication_Left();

    /**
     * The meta object literal for the '<em><b>Right Matrix</b></em>' containment reference feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference MATRIX_MULTIPLICATION__RIGHT_MATRIX = eINSTANCE.getMatrixMultiplication_RightMatrix();

    /**
     * The meta object literal for the '<em><b>Right Scalar</b></em>' containment reference feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference MATRIX_MULTIPLICATION__RIGHT_SCALAR = eINSTANCE.getMatrixMultiplication_RightScalar();

    /**
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.NewMatrixImpl <em>New Matrix</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see org.eclipse.iee.translator.jmole.math.math.impl.NewMatrixImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getNewMatrix()
     * @generated
     */
    EClass NEW_MATRIX = eINSTANCE.getNewMatrix();

    /**
     * The meta object literal for the '<em><b>Matrix</b></em>' containment reference feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EReference NEW_MATRIX__MATRIX = eINSTANCE.getNewMatrix_Matrix();

    /**
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.TransposeMatrixImpl <em>Transpose Matrix</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see org.eclipse.iee.translator.jmole.math.math.impl.TransposeMatrixImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getTransposeMatrix()
     * @generated
     */
    EClass TRANSPOSE_MATRIX = eINSTANCE.getTransposeMatrix();

    /**
     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute TRANSPOSE_MATRIX__NAME = eINSTANCE.getTransposeMatrix_Name();

    /**
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixVariableImpl <em>Matrix Variable</em>}' class.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixVariableImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixVariable()
     * @generated
     */
    EClass MATRIX_VARIABLE = eINSTANCE.getMatrixVariable();

    /**
     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
    EAttribute MATRIX_VARIABLE__NAME = eINSTANCE.getMatrixVariable_Name();
   * The feature id for the '<em><b>Matrix Definition</b></em>' containment reference.
  int STATEMENT__MATRIX_DEFINITION = 1;
   * The feature id for the '<em><b>Assignment</b></em>' containment reference.
  int STATEMENT__ASSIGNMENT = 2;
   * The feature id for the '<em><b>Formula</b></em>' containment reference.
  int STATEMENT__FORMULA = 3;
  int STATEMENT_FEATURE_COUNT = 4;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.AssignmentImpl <em>Assignment</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.AssignmentImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getAssignment()
  int ASSIGNMENT = 1;
  int ASSIGNMENT__VARIABLE = 0;
  int ASSIGNMENT__VALUE = 1;
   * The number of structural features of the '<em>Assignment</em>' class.
  int ASSIGNMENT_FEATURE_COUNT = 2;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FunctionDefinitionImpl <em>Function Definition</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.FunctionDefinitionImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFunctionDefinition()
  int FUNCTION_DEFINITION = 4;
   * The feature id for the '<em><b>Function</b></em>' containment reference.
  int FUNCTION_DEFINITION__FUNCTION = 0;
   * The feature id for the '<em><b>Formula</b></em>' containment reference.
  int FUNCTION_DEFINITION__FORMULA = 1;
   * The number of structural features of the '<em>Function Definition</em>' class.
  int FUNCTION_DEFINITION_FEATURE_COUNT = 2;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixDefinitionImpl <em>Matrix Definition</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixDefinitionImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixDefinition()
  int MATRIX_DEFINITION = 5;
   * The feature id for the '<em><b>Name</b></em>' attribute.
  int MATRIX_DEFINITION__NAME = 0;
   * The feature id for the '<em><b>Rows</b></em>' containment reference list.
  int MATRIX_DEFINITION__ROWS = 1;
   * The number of structural features of the '<em>Matrix Definition</em>' class.
  int MATRIX_DEFINITION_FEATURE_COUNT = 2;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixRowImpl <em>Matrix Row</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixRowImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixRow()
  int MATRIX_ROW = 6;
   * The feature id for the '<em><b>Elements</b></em>' attribute list.
  int MATRIX_ROW__ELEMENTS = 0;
   * The number of structural features of the '<em>Matrix Row</em>' class.
  int MATRIX_ROW_FEATURE_COUNT = 1;
  int ADDITION = 7;
  int SUBTRACTION = 8;
  int MULTIPLICATION = 9;
  int DIVISION = 10;
  int MODULO = 11;
  int INVERT = 12;
  int FACTORIAL = 13;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.IntervalImpl <em>Interval</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.IntervalImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getInterval()
  int INTERVAL = 14;
  int INTERVAL__NAME = EXPRESSION__NAME;
  int INTERVAL__PARAMETERS = EXPRESSION__PARAMETERS;
   * The feature id for the '<em><b>Opening Bracket</b></em>' attribute.
  int INTERVAL__OPENING_BRACKET = EXPRESSION_FEATURE_COUNT + 0;
   * The feature id for the '<em><b>Ceil</b></em>' containment reference.
  int INTERVAL__CEIL = EXPRESSION_FEATURE_COUNT + 1;
   * The feature id for the '<em><b>Floor</b></em>' containment reference.
  int INTERVAL__FLOOR = EXPRESSION_FEATURE_COUNT + 2;
   * The feature id for the '<em><b>Closing Bracket</b></em>' attribute.
   * @ordered
  int INTERVAL__CLOSING_BRACKET = EXPRESSION_FEATURE_COUNT + 3;
   * The number of structural features of the '<em>Interval</em>' class.
  int INTERVAL_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 4;

  /**
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.ExponentImpl <em>Exponent</em>}' class.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see org.eclipse.iee.translator.jmole.math.math.impl.ExponentImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getExponent()
   * @generated
   */
  int EXPONENT = 15;
   * The feature id for the '<em><b>Name</b></em>' attribute.
  int EXPONENT__NAME = EXPRESSION__NAME;
   * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
  int EXPONENT__PARAMETERS = EXPRESSION__PARAMETERS;
   * The feature id for the '<em><b>Left</b></em>' containment reference.
   * @ordered
  int EXPONENT__LEFT = EXPRESSION_FEATURE_COUNT + 0;
   * The feature id for the '<em><b>Right</b></em>' containment reference.
  int EXPONENT__RIGHT = EXPRESSION_FEATURE_COUNT + 1;
   * The number of structural features of the '<em>Exponent</em>' class.
  int EXPONENT_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 2;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.VariableImpl <em>Variable</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.VariableImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getVariable()
  int VARIABLE = 16;
   * The feature id for the '<em><b>Name</b></em>' attribute.
  int VARIABLE__NAME = EXPRESSION__NAME;
   * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
   * @ordered
  int VARIABLE__PARAMETERS = EXPRESSION__PARAMETERS;
   * The number of structural features of the '<em>Variable</em>' class.
  int VARIABLE_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 0;
   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FloatImpl <em>Float</em>}' class.
   * @see org.eclipse.iee.translator.jmole.math.math.impl.FloatImpl
   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFloat()
  int FLOAT = 17;
   * The feature id for the '<em><b>Name</b></em>' attribute.
  int FLOAT__NAME = EXPRESSION__NAME;
   * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
  int FLOAT__PARAMETERS = EXPRESSION__PARAMETERS;
   * The feature id for the '<em><b>Value</b></em>' attribute.
  int FLOAT__VALUE = EXPRESSION_FEATURE_COUNT + 0;
   * The number of structural features of the '<em>Float</em>' class.
  int FLOAT_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
  int FUNCTION = 18;

   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Statement <em>Statement</em>}'.
   * @return the meta object for class '<em>Statement</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Statement
  EClass getStatement();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getFunctionDefinition <em>Function Definition</em>}'.
   * @return the meta object for the containment reference '<em>Function Definition</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getFunctionDefinition()
   * @see #getStatement()
  EReference getStatement_FunctionDefinition();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixDefinition <em>Matrix Definition</em>}'.
   * @return the meta object for the containment reference '<em>Matrix Definition</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixDefinition()
   * @see #getStatement()
  EReference getStatement_MatrixDefinition();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getAssignment <em>Assignment</em>}'.
   * @return the meta object for the containment reference '<em>Assignment</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getAssignment()
   * @see #getStatement()
  EReference getStatement_Assignment();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getFormula <em>Formula</em>}'.
   * @return the meta object for the containment reference '<em>Formula</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getFormula()
   * @see #getStatement()
  EReference getStatement_Formula();
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Assignment <em>Assignment</em>}'.
   * @return the meta object for class '<em>Assignment</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Assignment
  EClass getAssignment();
   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.Assignment#getVariable <em>Variable</em>}'.
   * @return the meta object for the attribute '<em>Variable</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Assignment#getVariable()
   * @see #getAssignment()
  EAttribute getAssignment_Variable();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Assignment#getValue <em>Value</em>}'.
   * @return the meta object for the containment reference '<em>Value</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Assignment#getValue()
   * @see #getAssignment()
  EReference getAssignment_Value();
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Formula <em>Formula</em>}'.
   * @return the meta object for class '<em>Formula</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Formula
  EClass getFormula();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Formula#getExpression <em>Expression</em>}'.
   * @return the meta object for the containment reference '<em>Expression</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Formula#getExpression()
   * @see #getFormula()
  EReference getFormula_Expression();
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Expression <em>Expression</em>}'.
   * @return the meta object for class '<em>Expression</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Expression
  EClass getExpression();
   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.Expression#getName <em>Name</em>}'.
   * @return the meta object for the attribute '<em>Name</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Expression#getName()
   * @see #getExpression()
  EAttribute getExpression_Name();
   * Returns the meta object for the containment reference list '{@link org.eclipse.iee.translator.jmole.math.math.Expression#getParameters <em>Parameters</em>}'.
   * @return the meta object for the containment reference list '<em>Parameters</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Expression#getParameters()
   * @see #getExpression()
  EReference getExpression_Parameters();
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.FunctionDefinition <em>Function Definition</em>}'.
   * @return the meta object for class '<em>Function Definition</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.FunctionDefinition
  EClass getFunctionDefinition();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.FunctionDefinition#getFunction <em>Function</em>}'.
   * @return the meta object for the containment reference '<em>Function</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.FunctionDefinition#getFunction()
   * @see #getFunctionDefinition()
  EReference getFunctionDefinition_Function();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.FunctionDefinition#getFormula <em>Formula</em>}'.
   * @return the meta object for the containment reference '<em>Formula</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.FunctionDefinition#getFormula()
   * @see #getFunctionDefinition()
  EReference getFunctionDefinition_Formula();
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixDefinition <em>Matrix Definition</em>}'.
   * @return the meta object for class '<em>Matrix Definition</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixDefinition
  EClass getMatrixDefinition();
   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.MatrixDefinition#getName <em>Name</em>}'.
   * @return the meta object for the attribute '<em>Name</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixDefinition#getName()
   * @see #getMatrixDefinition()
  EAttribute getMatrixDefinition_Name();
   * Returns the meta object for the containment reference list '{@link org.eclipse.iee.translator.jmole.math.math.MatrixDefinition#getRows <em>Rows</em>}'.
   * @return the meta object for the containment reference list '<em>Rows</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixDefinition#getRows()
   * @see #getMatrixDefinition()
  EReference getMatrixDefinition_Rows();
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixRow <em>Matrix Row</em>}'.
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Interval <em>Interval</em>}'.
   * @return the meta object for class '<em>Interval</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Interval
  EClass getInterval();
   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.Interval#getOpeningBracket <em>Opening Bracket</em>}'.
   * @return the meta object for the attribute '<em>Opening Bracket</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Interval#getOpeningBracket()
   * @see #getInterval()
  EAttribute getInterval_OpeningBracket();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Interval#getCeil <em>Ceil</em>}'.
   * @return the meta object for the containment reference '<em>Ceil</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Interval#getCeil()
   * @see #getInterval()
  EReference getInterval_Ceil();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Interval#getFloor <em>Floor</em>}'.
   * @return the meta object for the containment reference '<em>Floor</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Interval#getFloor()
   * @see #getInterval()
  EReference getInterval_Floor();
   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.Interval#getClosingBracket <em>Closing Bracket</em>}'.
   * @return the meta object for the attribute '<em>Closing Bracket</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Interval#getClosingBracket()
   * @see #getInterval()
  EAttribute getInterval_ClosingBracket();
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Exponent <em>Exponent</em>}'.
   * @return the meta object for class '<em>Exponent</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Exponent
  EClass getExponent();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Exponent#getLeft <em>Left</em>}'.
   * @return the meta object for the containment reference '<em>Left</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Exponent#getLeft()
   * @see #getExponent()
  EReference getExponent_Left();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Exponent#getRight <em>Right</em>}'.
   * @return the meta object for the containment reference '<em>Right</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Exponent#getRight()
   * @see #getExponent()
  EReference getExponent_Right();
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Variable <em>Variable</em>}'.
   * @return the meta object for class '<em>Variable</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Variable
  EClass getVariable();
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Float <em>Float</em>}'.
   * @return the meta object for class '<em>Float</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Float
  EClass getFloat();
   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.Float#getValue <em>Value</em>}'.
   * @return the meta object for the attribute '<em>Value</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Float#getValue()
   * @see #getFloat()
  EAttribute getFloat_Value();
   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Function <em>Function</em>}'.
   * @return the meta object for class '<em>Function</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Function
  EClass getFunction();
   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Function#getFunction <em>Function</em>}'.
   * @return the meta object for the containment reference '<em>Function</em>'.
   * @see org.eclipse.iee.translator.jmole.math.math.Function#getFunction()
   * @see #getFunction()
  EReference getFunction_Function();
     * The meta object literal for the '<em><b>Matrix Definition</b></em>' containment reference feature.
    EReference STATEMENT__MATRIX_DEFINITION = eINSTANCE.getStatement_MatrixDefinition();
     * The meta object literal for the '<em><b>Assignment</b></em>' containment reference feature.
    EReference STATEMENT__ASSIGNMENT = eINSTANCE.getStatement_Assignment();
     * The meta object literal for the '<em><b>Formula</b></em>' containment reference feature.
    EReference STATEMENT__FORMULA = eINSTANCE.getStatement_Formula();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.AssignmentImpl <em>Assignment</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.AssignmentImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getAssignment()
    EClass ASSIGNMENT = eINSTANCE.getAssignment();
    EAttribute ASSIGNMENT__VARIABLE = eINSTANCE.getAssignment_Variable();
    EReference ASSIGNMENT__VALUE = eINSTANCE.getAssignment_Value();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FunctionDefinitionImpl <em>Function Definition</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.FunctionDefinitionImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFunctionDefinition()
    EClass FUNCTION_DEFINITION = eINSTANCE.getFunctionDefinition();
     * The meta object literal for the '<em><b>Function</b></em>' containment reference feature.
    EReference FUNCTION_DEFINITION__FUNCTION = eINSTANCE.getFunctionDefinition_Function();
     * The meta object literal for the '<em><b>Formula</b></em>' containment reference feature.
    EReference FUNCTION_DEFINITION__FORMULA = eINSTANCE.getFunctionDefinition_Formula();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixDefinitionImpl <em>Matrix Definition</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixDefinitionImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixDefinition()
    EClass MATRIX_DEFINITION = eINSTANCE.getMatrixDefinition();
     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
    EAttribute MATRIX_DEFINITION__NAME = eINSTANCE.getMatrixDefinition_Name();
     * The meta object literal for the '<em><b>Rows</b></em>' containment reference list feature.
    EReference MATRIX_DEFINITION__ROWS = eINSTANCE.getMatrixDefinition_Rows();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixRowImpl <em>Matrix Row</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixRowImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixRow()
    EClass MATRIX_ROW = eINSTANCE.getMatrixRow();
     * The meta object literal for the '<em><b>Elements</b></em>' attribute list feature.
    EAttribute MATRIX_ROW__ELEMENTS = eINSTANCE.getMatrixRow_Elements();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.IntervalImpl <em>Interval</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.IntervalImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getInterval()
    EClass INTERVAL = eINSTANCE.getInterval();
     * The meta object literal for the '<em><b>Opening Bracket</b></em>' attribute feature.
    EAttribute INTERVAL__OPENING_BRACKET = eINSTANCE.getInterval_OpeningBracket();
     * The meta object literal for the '<em><b>Ceil</b></em>' containment reference feature.
    EReference INTERVAL__CEIL = eINSTANCE.getInterval_Ceil();
     * The meta object literal for the '<em><b>Floor</b></em>' containment reference feature.
    EReference INTERVAL__FLOOR = eINSTANCE.getInterval_Floor();
     * The meta object literal for the '<em><b>Closing Bracket</b></em>' attribute feature.
    EAttribute INTERVAL__CLOSING_BRACKET = eINSTANCE.getInterval_ClosingBracket();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.ExponentImpl <em>Exponent</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.ExponentImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getExponent()
    EClass EXPONENT = eINSTANCE.getExponent();
    EReference EXPONENT__LEFT = eINSTANCE.getExponent_Left();
    EReference EXPONENT__RIGHT = eINSTANCE.getExponent_Right();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.VariableImpl <em>Variable</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.VariableImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getVariable()
    EClass VARIABLE = eINSTANCE.getVariable();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FloatImpl <em>Float</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.FloatImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFloat()
    EClass FLOAT = eINSTANCE.getFloat();
     * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
    EAttribute FLOAT__VALUE = eINSTANCE.getFloat_Value();
     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FunctionImpl <em>Function</em>}' class.
     * @see org.eclipse.iee.translator.jmole.math.math.impl.FunctionImpl
     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFunction()
    EClass FUNCTION = eINSTANCE.getFunction();
     * The meta object literal for the '<em><b>Function</b></em>' containment reference feature.
    EReference FUNCTION__FUNCTION = eINSTANCE.getFunction_Function();
@@ -80,31 +80,40 @@ public interface MathPackage extends EPackage
   int STATEMENT__FUNCTION_DEFINITION = 0;
 
   /**
-   * The feature id for the '<em><b>Matrix Definition</b></em>' containment reference.
+   * The feature id for the '<em><b>Variable Assignment</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int STATEMENT__MATRIX_DEFINITION = 1;
+  int STATEMENT__VARIABLE_ASSIGNMENT = 1;
 
   /**
-   * The feature id for the '<em><b>Assignment</b></em>' containment reference.
+   * The feature id for the '<em><b>Formula</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int STATEMENT__ASSIGNMENT = 2;
+  int STATEMENT__FORMULA = 2;
 
   /**
-   * The feature id for the '<em><b>Formula</b></em>' containment reference.
+   * The feature id for the '<em><b>Matrix Assignment</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int STATEMENT__MATRIX_ASSIGNMENT = 3;
+
+  /**
+   * The feature id for the '<em><b>Matrix Formula</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int STATEMENT__FORMULA = 3;
+  int STATEMENT__MATRIX_FORMULA = 4;
 
   /**
    * The number of structural features of the '<em>Statement</em>' class.
@@ -113,17 +122,17 @@ public interface MathPackage extends EPackage
    * @generated
    * @ordered
    */
-  int STATEMENT_FEATURE_COUNT = 4;
+  int STATEMENT_FEATURE_COUNT = 5;
 
   /**
-   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.AssignmentImpl <em>Assignment</em>}' class.
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.VariableAssignmentImpl <em>Variable Assignment</em>}' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @see org.eclipse.iee.translator.jmole.math.math.impl.AssignmentImpl
-   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getAssignment()
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.VariableAssignmentImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getVariableAssignment()
    * @generated
    */
-  int ASSIGNMENT = 1;
+  int VARIABLE_ASSIGNMENT = 1;
 
   /**
    * The feature id for the '<em><b>Variable</b></em>' attribute.
@@ -132,7 +141,7 @@ public interface MathPackage extends EPackage
    * @generated
    * @ordered
    */
-  int ASSIGNMENT__VARIABLE = 0;
+  int VARIABLE_ASSIGNMENT__VARIABLE = 0;
 
   /**
    * The feature id for the '<em><b>Value</b></em>' containment reference.
@@ -141,16 +150,16 @@ public interface MathPackage extends EPackage
    * @generated
    * @ordered
    */
-  int ASSIGNMENT__VALUE = 1;
+  int VARIABLE_ASSIGNMENT__VALUE = 1;
 
   /**
-   * The number of structural features of the '<em>Assignment</em>' class.
+   * The number of structural features of the '<em>Variable Assignment</em>' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int ASSIGNMENT_FEATURE_COUNT = 2;
+  int VARIABLE_ASSIGNMENT_FEATURE_COUNT = 2;
 
   /**
    * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FormulaImpl <em>Formula</em>}' class.
@@ -218,106 +227,181 @@ public interface MathPackage extends EPackage
   int EXPRESSION_FEATURE_COUNT = 2;
 
   /**
-   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FunctionDefinitionImpl <em>Function Definition</em>}' class.
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixImpl <em>Matrix</em>}' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @see org.eclipse.iee.translator.jmole.math.math.impl.FunctionDefinitionImpl
-   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFunctionDefinition()
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrix()
    * @generated
    */
-  int FUNCTION_DEFINITION = 4;
+  int MATRIX = 4;
 
   /**
-   * The feature id for the '<em><b>Function</b></em>' containment reference.
+   * The feature id for the '<em><b>Rows</b></em>' containment reference list.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int FUNCTION_DEFINITION__FUNCTION = 0;
+  int MATRIX__ROWS = 0;
 
   /**
-   * The feature id for the '<em><b>Formula</b></em>' containment reference.
+   * The number of structural features of the '<em>Matrix</em>' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int FUNCTION_DEFINITION__FORMULA = 1;
+  int MATRIX_FEATURE_COUNT = 1;
 
   /**
-   * The number of structural features of the '<em>Function Definition</em>' class.
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixRowImpl <em>Matrix Row</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixRowImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixRow()
+   * @generated
+   */
+  int MATRIX_ROW = 5;
+
+  /**
+   * The feature id for the '<em><b>Elements</b></em>' attribute list.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int FUNCTION_DEFINITION_FEATURE_COUNT = 2;
+  int MATRIX_ROW__ELEMENTS = 0;
+
+  /**
+   * The number of structural features of the '<em>Matrix Row</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MATRIX_ROW_FEATURE_COUNT = 1;
 
   /**
-   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixDefinitionImpl <em>Matrix Definition</em>}' class.
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixAssignmentImpl <em>Matrix Assignment</em>}' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixDefinitionImpl
-   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixDefinition()
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixAssignmentImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixAssignment()
    * @generated
    */
-  int MATRIX_DEFINITION = 5;
+  int MATRIX_ASSIGNMENT = 6;
 
   /**
-   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * The feature id for the '<em><b>Variable</b></em>' attribute.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int MATRIX_DEFINITION__NAME = 0;
+  int MATRIX_ASSIGNMENT__VARIABLE = 0;
 
   /**
-   * The feature id for the '<em><b>Rows</b></em>' containment reference list.
+   * The feature id for the '<em><b>Value</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int MATRIX_DEFINITION__ROWS = 1;
+  int MATRIX_ASSIGNMENT__VALUE = 1;
 
   /**
-   * The number of structural features of the '<em>Matrix Definition</em>' class.
+   * The number of structural features of the '<em>Matrix Assignment</em>' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int MATRIX_DEFINITION_FEATURE_COUNT = 2;
+  int MATRIX_ASSIGNMENT_FEATURE_COUNT = 2;
 
   /**
-   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixRowImpl <em>Matrix Row</em>}' class.
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixFormulaImpl <em>Matrix Formula</em>}' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixRowImpl
-   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixRow()
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixFormulaImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixFormula()
    * @generated
    */
-  int MATRIX_ROW = 6;
+  int MATRIX_FORMULA = 7;
 
   /**
-   * The feature id for the '<em><b>Elements</b></em>' attribute list.
+   * The feature id for the '<em><b>Expression</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int MATRIX_ROW__ELEMENTS = 0;
+  int MATRIX_FORMULA__EXPRESSION = 0;
 
   /**
-   * The number of structural features of the '<em>Matrix Row</em>' class.
+   * The number of structural features of the '<em>Matrix Formula</em>' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int MATRIX_ROW_FEATURE_COUNT = 1;
+  int MATRIX_FORMULA_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixExpressionImpl <em>Matrix Expression</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixExpressionImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixExpression()
+   * @generated
+   */
+  int MATRIX_EXPRESSION = 8;
+
+  /**
+   * The number of structural features of the '<em>Matrix Expression</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MATRIX_EXPRESSION_FEATURE_COUNT = 0;
+
+  /**
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FunctionDefinitionImpl <em>Function Definition</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.FunctionDefinitionImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFunctionDefinition()
+   * @generated
+   */
+  int FUNCTION_DEFINITION = 9;
+
+  /**
+   * The feature id for the '<em><b>Function</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FUNCTION_DEFINITION__FUNCTION = 0;
+
+  /**
+   * The feature id for the '<em><b>Formula</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FUNCTION_DEFINITION__FORMULA = 1;
+
+  /**
+   * The number of structural features of the '<em>Function Definition</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int FUNCTION_DEFINITION_FEATURE_COUNT = 2;
 
   /**
    * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.AdditionImpl <em>Addition</em>}' class.
@@ -327,7 +411,7 @@ public interface MathPackage extends EPackage
    * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getAddition()
    * @generated
    */
-  int ADDITION = 7;
+  int ADDITION = 10;
 
   /**
    * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -382,7 +466,7 @@ public interface MathPackage extends EPackage
    * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getSubtraction()
    * @generated
    */
-  int SUBTRACTION = 8;
+  int SUBTRACTION = 11;
 
   /**
    * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -437,7 +521,7 @@ public interface MathPackage extends EPackage
    * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMultiplication()
    * @generated
    */
-  int MULTIPLICATION = 9;
+  int MULTIPLICATION = 12;
 
   /**
    * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -492,7 +576,7 @@ public interface MathPackage extends EPackage
    * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getDivision()
    * @generated
    */
-  int DIVISION = 10;
+  int DIVISION = 13;
 
   /**
    * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -547,7 +631,7 @@ public interface MathPackage extends EPackage
    * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getModulo()
    * @generated
    */
-  int MODULO = 11;
+  int MODULO = 14;
 
   /**
    * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -602,7 +686,7 @@ public interface MathPackage extends EPackage
    * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getInvert()
    * @generated
    */
-  int INVERT = 12;
+  int INVERT = 15;
 
   /**
    * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -648,7 +732,7 @@ public interface MathPackage extends EPackage
    * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFactorial()
    * @generated
    */
-  int FACTORIAL = 13;
+  int FACTORIAL = 16;
 
   /**
    * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -687,14 +771,14 @@ public interface MathPackage extends EPackage
   int FACTORIAL_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
 
   /**
-   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.IntervalImpl <em>Interval</em>}' class.
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.ExponentImpl <em>Exponent</em>}' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @see org.eclipse.iee.translator.jmole.math.math.impl.IntervalImpl
-   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getInterval()
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.ExponentImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getExponent()
    * @generated
    */
-  int INTERVAL = 14;
+  int EXPONENT = 17;
 
   /**
    * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -703,7 +787,7 @@ public interface MathPackage extends EPackage
    * @generated
    * @ordered
    */
-  int INTERVAL__NAME = EXPRESSION__NAME;
+  int EXPONENT__NAME = EXPRESSION__NAME;
 
   /**
    * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
@@ -712,190 +796,181 @@ public interface MathPackage extends EPackage
    * @generated
    * @ordered
    */
-  int INTERVAL__PARAMETERS = EXPRESSION__PARAMETERS;
+  int EXPONENT__PARAMETERS = EXPRESSION__PARAMETERS;
 
   /**
-   * The feature id for the '<em><b>Opening Bracket</b></em>' attribute.
+   * The feature id for the '<em><b>Left</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int INTERVAL__OPENING_BRACKET = EXPRESSION_FEATURE_COUNT + 0;
+  int EXPONENT__LEFT = EXPRESSION_FEATURE_COUNT + 0;
 
   /**
-   * The feature id for the '<em><b>Ceil</b></em>' containment reference.
+   * The feature id for the '<em><b>Right</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int INTERVAL__CEIL = EXPRESSION_FEATURE_COUNT + 1;
+  int EXPONENT__RIGHT = EXPRESSION_FEATURE_COUNT + 1;
 
   /**
-   * The feature id for the '<em><b>Floor</b></em>' containment reference.
+   * The number of structural features of the '<em>Exponent</em>' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int INTERVAL__FLOOR = EXPRESSION_FEATURE_COUNT + 2;
+  int EXPONENT_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 2;
 
   /**
-   * The feature id for the '<em><b>Closing Bracket</b></em>' attribute.
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.VariableImpl <em>Variable</em>}' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.VariableImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getVariable()
    * @generated
-   * @ordered
    */
-  int INTERVAL__CLOSING_BRACKET = EXPRESSION_FEATURE_COUNT + 3;
+  int VARIABLE = 18;
 
   /**
-   * The number of structural features of the '<em>Interval</em>' class.
+   * The feature id for the '<em><b>Name</b></em>' attribute.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int INTERVAL_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 4;
-
-  /**
-   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.ExponentImpl <em>Exponent</em>}' class.
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @see org.eclipse.iee.translator.jmole.math.math.impl.ExponentImpl
-   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getExponent()
-   * @generated
-   */
-  int EXPONENT = 15;
+  int VARIABLE__NAME = EXPRESSION__NAME;
 
   /**
-   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int EXPONENT__NAME = EXPRESSION__NAME;
+  int VARIABLE__PARAMETERS = EXPRESSION__PARAMETERS;
 
   /**
-   * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+   * The number of structural features of the '<em>Variable</em>' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int EXPONENT__PARAMETERS = EXPRESSION__PARAMETERS;
+  int VARIABLE_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 0;
 
   /**
-   * The feature id for the '<em><b>Left</b></em>' containment reference.
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FloatImpl <em>Float</em>}' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.FloatImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFloat()
    * @generated
-   * @ordered
    */
-  int EXPONENT__LEFT = EXPRESSION_FEATURE_COUNT + 0;
+  int FLOAT = 19;
 
   /**
-   * The feature id for the '<em><b>Right</b></em>' containment reference.
+   * The feature id for the '<em><b>Name</b></em>' attribute.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int EXPONENT__RIGHT = EXPRESSION_FEATURE_COUNT + 1;
+  int FLOAT__NAME = EXPRESSION__NAME;
 
   /**
-   * The number of structural features of the '<em>Exponent</em>' class.
+   * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int EXPONENT_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 2;
+  int FLOAT__PARAMETERS = EXPRESSION__PARAMETERS;
 
   /**
-   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.VariableImpl <em>Variable</em>}' class.
+   * The feature id for the '<em><b>Value</b></em>' attribute.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @see org.eclipse.iee.translator.jmole.math.math.impl.VariableImpl
-   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getVariable()
    * @generated
+   * @ordered
    */
-  int VARIABLE = 16;
+  int FLOAT__VALUE = EXPRESSION_FEATURE_COUNT + 0;
 
   /**
-   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * The number of structural features of the '<em>Float</em>' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int VARIABLE__NAME = EXPRESSION__NAME;
+  int FLOAT_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
 
   /**
-   * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixElementImpl <em>Matrix Element</em>}' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixElementImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixElement()
    * @generated
-   * @ordered
    */
-  int VARIABLE__PARAMETERS = EXPRESSION__PARAMETERS;
+  int MATRIX_ELEMENT = 20;
 
   /**
-   * The number of structural features of the '<em>Variable</em>' class.
+   * The feature id for the '<em><b>Name</b></em>' attribute.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int VARIABLE_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 0;
+  int MATRIX_ELEMENT__NAME = EXPRESSION__NAME;
 
   /**
-   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FloatImpl <em>Float</em>}' class.
+   * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @see org.eclipse.iee.translator.jmole.math.math.impl.FloatImpl
-   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFloat()
    * @generated
+   * @ordered
    */
-  int FLOAT = 17;
+  int MATRIX_ELEMENT__PARAMETERS = EXPRESSION__PARAMETERS;
 
   /**
-   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * The feature id for the '<em><b>Element</b></em>' attribute.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int FLOAT__NAME = EXPRESSION__NAME;
+  int MATRIX_ELEMENT__ELEMENT = EXPRESSION_FEATURE_COUNT + 0;
 
   /**
-   * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+   * The feature id for the '<em><b>Row</b></em>' attribute.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int FLOAT__PARAMETERS = EXPRESSION__PARAMETERS;
+  int MATRIX_ELEMENT__ROW = EXPRESSION_FEATURE_COUNT + 1;
 
   /**
-   * The feature id for the '<em><b>Value</b></em>' attribute.
+   * The feature id for the '<em><b>Column</b></em>' attribute.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int FLOAT__VALUE = EXPRESSION_FEATURE_COUNT + 0;
+  int MATRIX_ELEMENT__COLUMN = EXPRESSION_FEATURE_COUNT + 2;
 
   /**
-   * The number of structural features of the '<em>Float</em>' class.
+   * The number of structural features of the '<em>Matrix Element</em>' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    * @ordered
    */
-  int FLOAT_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
+  int MATRIX_ELEMENT_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 3;
 
   /**
    * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FunctionImpl <em>Function</em>}' class.
@@ -905,7 +980,7 @@ public interface MathPackage extends EPackage
    * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFunction()
    * @generated
    */
-  int FUNCTION = 18;
+  int FUNCTION = 21;
 
   /**
    * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -943,212 +1018,384 @@ public interface MathPackage extends EPackage
    */
   int FUNCTION_FEATURE_COUNT = EXPRESSION_FEATURE_COUNT + 1;
 
-
   /**
-   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Statement <em>Statement</em>}'.
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixAdditionImpl <em>Matrix Addition</em>}' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for class '<em>Statement</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Statement
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixAdditionImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixAddition()
    * @generated
    */
-  EClass getStatement();
+  int MATRIX_ADDITION = 22;
 
   /**
-   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getFunctionDefinition <em>Function Definition</em>}'.
+   * The feature id for the '<em><b>Left</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Function Definition</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getFunctionDefinition()
-   * @see #getStatement()
    * @generated
+   * @ordered
    */
-  EReference getStatement_FunctionDefinition();
+  int MATRIX_ADDITION__LEFT = MATRIX_EXPRESSION_FEATURE_COUNT + 0;
 
   /**
-   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixDefinition <em>Matrix Definition</em>}'.
+   * The feature id for the '<em><b>Right</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Matrix Definition</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixDefinition()
-   * @see #getStatement()
    * @generated
+   * @ordered
    */
-  EReference getStatement_MatrixDefinition();
+  int MATRIX_ADDITION__RIGHT = MATRIX_EXPRESSION_FEATURE_COUNT + 1;
 
   /**
-   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getAssignment <em>Assignment</em>}'.
+   * The number of structural features of the '<em>Matrix Addition</em>' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Assignment</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getAssignment()
-   * @see #getStatement()
    * @generated
+   * @ordered
    */
-  EReference getStatement_Assignment();
+  int MATRIX_ADDITION_FEATURE_COUNT = MATRIX_EXPRESSION_FEATURE_COUNT + 2;
 
   /**
-   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getFormula <em>Formula</em>}'.
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixSubtractionImpl <em>Matrix Subtraction</em>}' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Formula</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getFormula()
-   * @see #getStatement()
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixSubtractionImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixSubtraction()
    * @generated
    */
-  EReference getStatement_Formula();
+  int MATRIX_SUBTRACTION = 23;
 
   /**
-   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Assignment <em>Assignment</em>}'.
+   * The feature id for the '<em><b>Left</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for class '<em>Assignment</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Assignment
    * @generated
+   * @ordered
    */
-  EClass getAssignment();
+  int MATRIX_SUBTRACTION__LEFT = MATRIX_EXPRESSION_FEATURE_COUNT + 0;
 
   /**
-   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.Assignment#getVariable <em>Variable</em>}'.
+   * The feature id for the '<em><b>Right</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the attribute '<em>Variable</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Assignment#getVariable()
-   * @see #getAssignment()
    * @generated
+   * @ordered
    */
-  EAttribute getAssignment_Variable();
+  int MATRIX_SUBTRACTION__RIGHT = MATRIX_EXPRESSION_FEATURE_COUNT + 1;
 
   /**
-   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Assignment#getValue <em>Value</em>}'.
+   * The number of structural features of the '<em>Matrix Subtraction</em>' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Value</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Assignment#getValue()
-   * @see #getAssignment()
    * @generated
+   * @ordered
    */
-  EReference getAssignment_Value();
+  int MATRIX_SUBTRACTION_FEATURE_COUNT = MATRIX_EXPRESSION_FEATURE_COUNT + 2;
 
   /**
-   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Formula <em>Formula</em>}'.
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixMultiplicationImpl <em>Matrix Multiplication</em>}' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for class '<em>Formula</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Formula
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixMultiplicationImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixMultiplication()
    * @generated
    */
-  EClass getFormula();
+  int MATRIX_MULTIPLICATION = 24;
 
   /**
-   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Formula#getExpression <em>Expression</em>}'.
+   * The feature id for the '<em><b>Left</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Expression</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Formula#getExpression()
-   * @see #getFormula()
    * @generated
+   * @ordered
    */
-  EReference getFormula_Expression();
+  int MATRIX_MULTIPLICATION__LEFT = MATRIX_EXPRESSION_FEATURE_COUNT + 0;
 
   /**
-   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Expression <em>Expression</em>}'.
+   * The feature id for the '<em><b>Right Matrix</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for class '<em>Expression</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Expression
    * @generated
+   * @ordered
    */
-  EClass getExpression();
+  int MATRIX_MULTIPLICATION__RIGHT_MATRIX = MATRIX_EXPRESSION_FEATURE_COUNT + 1;
 
   /**
-   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.Expression#getName <em>Name</em>}'.
+   * The feature id for the '<em><b>Right Scalar</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the attribute '<em>Name</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Expression#getName()
-   * @see #getExpression()
    * @generated
+   * @ordered
    */
-  EAttribute getExpression_Name();
+  int MATRIX_MULTIPLICATION__RIGHT_SCALAR = MATRIX_EXPRESSION_FEATURE_COUNT + 2;
 
   /**
-   * Returns the meta object for the containment reference list '{@link org.eclipse.iee.translator.jmole.math.math.Expression#getParameters <em>Parameters</em>}'.
+   * The number of structural features of the '<em>Matrix Multiplication</em>' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the containment reference list '<em>Parameters</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Expression#getParameters()
-   * @see #getExpression()
    * @generated
+   * @ordered
    */
-  EReference getExpression_Parameters();
+  int MATRIX_MULTIPLICATION_FEATURE_COUNT = MATRIX_EXPRESSION_FEATURE_COUNT + 3;
 
   /**
-   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.FunctionDefinition <em>Function Definition</em>}'.
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.NewMatrixImpl <em>New Matrix</em>}' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for class '<em>Function Definition</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.FunctionDefinition
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.NewMatrixImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getNewMatrix()
    * @generated
    */
-  EClass getFunctionDefinition();
+  int NEW_MATRIX = 25;
 
   /**
-   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.FunctionDefinition#getFunction <em>Function</em>}'.
+   * The feature id for the '<em><b>Matrix</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Function</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.FunctionDefinition#getFunction()
-   * @see #getFunctionDefinition()
    * @generated
+   * @ordered
    */
-  EReference getFunctionDefinition_Function();
+  int NEW_MATRIX__MATRIX = MATRIX_EXPRESSION_FEATURE_COUNT + 0;
 
   /**
-   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.FunctionDefinition#getFormula <em>Formula</em>}'.
+   * The number of structural features of the '<em>New Matrix</em>' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Formula</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.FunctionDefinition#getFormula()
-   * @see #getFunctionDefinition()
    * @generated
+   * @ordered
    */
-  EReference getFunctionDefinition_Formula();
+  int NEW_MATRIX_FEATURE_COUNT = MATRIX_EXPRESSION_FEATURE_COUNT + 1;
 
   /**
-   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixDefinition <em>Matrix Definition</em>}'.
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.TransposeMatrixImpl <em>Transpose Matrix</em>}' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for class '<em>Matrix Definition</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.MatrixDefinition
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.TransposeMatrixImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getTransposeMatrix()
    * @generated
    */
-  EClass getMatrixDefinition();
+  int TRANSPOSE_MATRIX = 26;
 
   /**
-   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.MatrixDefinition#getName <em>Name</em>}'.
+   * The feature id for the '<em><b>Name</b></em>' attribute.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the attribute '<em>Name</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.MatrixDefinition#getName()
-   * @see #getMatrixDefinition()
    * @generated
+   * @ordered
    */
-  EAttribute getMatrixDefinition_Name();
+  int TRANSPOSE_MATRIX__NAME = MATRIX_EXPRESSION_FEATURE_COUNT + 0;
 
   /**
-   * Returns the meta object for the containment reference list '{@link org.eclipse.iee.translator.jmole.math.math.MatrixDefinition#getRows <em>Rows</em>}'.
+   * The number of structural features of the '<em>Transpose Matrix</em>' class.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the containment reference list '<em>Rows</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.MatrixDefinition#getRows()
-   * @see #getMatrixDefinition()
    * @generated
+   * @ordered
    */
-  EReference getMatrixDefinition_Rows();
+  int TRANSPOSE_MATRIX_FEATURE_COUNT = MATRIX_EXPRESSION_FEATURE_COUNT + 1;
 
   /**
-   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixRow <em>Matrix Row</em>}'.
+   * The meta object id for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixVariableImpl <em>Matrix Variable</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixVariableImpl
+   * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixVariable()
+   * @generated
+   */
+  int MATRIX_VARIABLE = 27;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MATRIX_VARIABLE__NAME = MATRIX_EXPRESSION_FEATURE_COUNT + 0;
+
+  /**
+   * The number of structural features of the '<em>Matrix Variable</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MATRIX_VARIABLE_FEATURE_COUNT = MATRIX_EXPRESSION_FEATURE_COUNT + 1;
+
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Statement <em>Statement</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Statement</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Statement
+   * @generated
+   */
+  EClass getStatement();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getFunctionDefinition <em>Function Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Function Definition</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getFunctionDefinition()
+   * @see #getStatement()
+   * @generated
+   */
+  EReference getStatement_FunctionDefinition();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getVariableAssignment <em>Variable Assignment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Variable Assignment</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getVariableAssignment()
+   * @see #getStatement()
+   * @generated
+   */
+  EReference getStatement_VariableAssignment();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getFormula <em>Formula</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Formula</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getFormula()
+   * @see #getStatement()
+   * @generated
+   */
+  EReference getStatement_Formula();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixAssignment <em>Matrix Assignment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Matrix Assignment</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixAssignment()
+   * @see #getStatement()
+   * @generated
+   */
+  EReference getStatement_MatrixAssignment();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixFormula <em>Matrix Formula</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Matrix Formula</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixFormula()
+   * @see #getStatement()
+   * @generated
+   */
+  EReference getStatement_MatrixFormula();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.VariableAssignment <em>Variable Assignment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Variable Assignment</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.VariableAssignment
+   * @generated
+   */
+  EClass getVariableAssignment();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.VariableAssignment#getVariable <em>Variable</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Variable</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.VariableAssignment#getVariable()
+   * @see #getVariableAssignment()
+   * @generated
+   */
+  EAttribute getVariableAssignment_Variable();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.VariableAssignment#getValue <em>Value</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Value</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.VariableAssignment#getValue()
+   * @see #getVariableAssignment()
+   * @generated
+   */
+  EReference getVariableAssignment_Value();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Formula <em>Formula</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Formula</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Formula
+   * @generated
+   */
+  EClass getFormula();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Formula#getExpression <em>Expression</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Expression</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Formula#getExpression()
+   * @see #getFormula()
+   * @generated
+   */
+  EReference getFormula_Expression();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Expression <em>Expression</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Expression</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Expression
+   * @generated
+   */
+  EClass getExpression();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.Expression#getName <em>Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Expression#getName()
+   * @see #getExpression()
+   * @generated
+   */
+  EAttribute getExpression_Name();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.eclipse.iee.translator.jmole.math.math.Expression#getParameters <em>Parameters</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Parameters</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Expression#getParameters()
+   * @see #getExpression()
+   * @generated
+   */
+  EReference getExpression_Parameters();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Matrix <em>Matrix</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Matrix</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Matrix
+   * @generated
+   */
+  EClass getMatrix();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link org.eclipse.iee.translator.jmole.math.math.Matrix#getRows <em>Rows</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Rows</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Matrix#getRows()
+   * @see #getMatrix()
+   * @generated
+   */
+  EReference getMatrix_Rows();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixRow <em>Matrix Row</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @return the meta object for class '<em>Matrix Row</em>'.
@@ -1168,6 +1415,101 @@ public interface MathPackage extends EPackage
    */
   EAttribute getMatrixRow_Elements();
 
+  /**
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixAssignment <em>Matrix Assignment</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Matrix Assignment</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixAssignment
+   * @generated
+   */
+  EClass getMatrixAssignment();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.MatrixAssignment#getVariable <em>Variable</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Variable</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixAssignment#getVariable()
+   * @see #getMatrixAssignment()
+   * @generated
+   */
+  EAttribute getMatrixAssignment_Variable();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixAssignment#getValue <em>Value</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Value</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixAssignment#getValue()
+   * @see #getMatrixAssignment()
+   * @generated
+   */
+  EReference getMatrixAssignment_Value();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixFormula <em>Matrix Formula</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Matrix Formula</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixFormula
+   * @generated
+   */
+  EClass getMatrixFormula();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixFormula#getExpression <em>Expression</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Expression</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixFormula#getExpression()
+   * @see #getMatrixFormula()
+   * @generated
+   */
+  EReference getMatrixFormula_Expression();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixExpression <em>Matrix Expression</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Matrix Expression</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixExpression
+   * @generated
+   */
+  EClass getMatrixExpression();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.FunctionDefinition <em>Function Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Function Definition</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.FunctionDefinition
+   * @generated
+   */
+  EClass getFunctionDefinition();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.FunctionDefinition#getFunction <em>Function</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Function</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.FunctionDefinition#getFunction()
+   * @see #getFunctionDefinition()
+   * @generated
+   */
+  EReference getFunctionDefinition_Function();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.FunctionDefinition#getFormula <em>Formula</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Formula</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.FunctionDefinition#getFormula()
+   * @see #getFunctionDefinition()
+   * @generated
+   */
+  EReference getFunctionDefinition_Formula();
+
   /**
    * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Addition <em>Addition</em>}'.
    * <!-- begin-user-doc -->
@@ -1371,142 +1713,301 @@ public interface MathPackage extends EPackage
   EReference getFactorial_Expression();
 
   /**
-   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Interval <em>Interval</em>}'.
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Exponent <em>Exponent</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Exponent</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Exponent
+   * @generated
+   */
+  EClass getExponent();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Exponent#getLeft <em>Left</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Left</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Exponent#getLeft()
+   * @see #getExponent()
+   * @generated
+   */
+  EReference getExponent_Left();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Exponent#getRight <em>Right</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Right</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Exponent#getRight()
+   * @see #getExponent()
+   * @generated
+   */
+  EReference getExponent_Right();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Variable <em>Variable</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Variable</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Variable
+   * @generated
+   */
+  EClass getVariable();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Float <em>Float</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Float</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Float
+   * @generated
+   */
+  EClass getFloat();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.Float#getValue <em>Value</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Value</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Float#getValue()
+   * @see #getFloat()
+   * @generated
+   */
+  EAttribute getFloat_Value();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixElement <em>Matrix Element</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Matrix Element</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixElement
+   * @generated
+   */
+  EClass getMatrixElement();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.MatrixElement#getElement <em>Element</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Element</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixElement#getElement()
+   * @see #getMatrixElement()
+   * @generated
+   */
+  EAttribute getMatrixElement_Element();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.MatrixElement#getRow <em>Row</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Row</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixElement#getRow()
+   * @see #getMatrixElement()
+   * @generated
+   */
+  EAttribute getMatrixElement_Row();
+
+  /**
+   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.MatrixElement#getColumn <em>Column</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Column</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixElement#getColumn()
+   * @see #getMatrixElement()
+   * @generated
+   */
+  EAttribute getMatrixElement_Column();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Function <em>Function</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Function</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Function
+   * @generated
+   */
+  EClass getFunction();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Function#getFunction <em>Function</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Function</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.Function#getFunction()
+   * @see #getFunction()
+   * @generated
+   */
+  EReference getFunction_Function();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixAddition <em>Matrix Addition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Matrix Addition</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixAddition
+   * @generated
+   */
+  EClass getMatrixAddition();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixAddition#getLeft <em>Left</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Left</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixAddition#getLeft()
+   * @see #getMatrixAddition()
+   * @generated
+   */
+  EReference getMatrixAddition_Left();
+
+  /**
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixAddition#getRight <em>Right</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Right</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixAddition#getRight()
+   * @see #getMatrixAddition()
+   * @generated
+   */
+  EReference getMatrixAddition_Right();
+
+  /**
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction <em>Matrix Subtraction</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for class '<em>Interval</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Interval
+   * @return the meta object for class '<em>Matrix Subtraction</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction
    * @generated
    */
-  EClass getInterval();
+  EClass getMatrixSubtraction();
 
   /**
-   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.Interval#getOpeningBracket <em>Opening Bracket</em>}'.
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction#getLeft <em>Left</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the attribute '<em>Opening Bracket</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Interval#getOpeningBracket()
-   * @see #getInterval()
+   * @return the meta object for the containment reference '<em>Left</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction#getLeft()
+   * @see #getMatrixSubtraction()
    * @generated
    */
-  EAttribute getInterval_OpeningBracket();
+  EReference getMatrixSubtraction_Left();
 
   /**
-   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Interval#getCeil <em>Ceil</em>}'.
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction#getRight <em>Right</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Ceil</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Interval#getCeil()
-   * @see #getInterval()
+   * @return the meta object for the containment reference '<em>Right</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction#getRight()
+   * @see #getMatrixSubtraction()
    * @generated
    */
-  EReference getInterval_Ceil();
+  EReference getMatrixSubtraction_Right();
 
   /**
-   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Interval#getFloor <em>Floor</em>}'.
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication <em>Matrix Multiplication</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Floor</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Interval#getFloor()
-   * @see #getInterval()
+   * @return the meta object for class '<em>Matrix Multiplication</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication
    * @generated
    */
-  EReference getInterval_Floor();
+  EClass getMatrixMultiplication();
 
   /**
-   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.Interval#getClosingBracket <em>Closing Bracket</em>}'.
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication#getLeft <em>Left</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the attribute '<em>Closing Bracket</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Interval#getClosingBracket()
-   * @see #getInterval()
+   * @return the meta object for the containment reference '<em>Left</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication#getLeft()
+   * @see #getMatrixMultiplication()
    * @generated
    */
-  EAttribute getInterval_ClosingBracket();
+  EReference getMatrixMultiplication_Left();
 
   /**
-   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Exponent <em>Exponent</em>}'.
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication#getRightMatrix <em>Right Matrix</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for class '<em>Exponent</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Exponent
+   * @return the meta object for the containment reference '<em>Right Matrix</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication#getRightMatrix()
+   * @see #getMatrixMultiplication()
    * @generated
    */
-  EClass getExponent();
+  EReference getMatrixMultiplication_RightMatrix();
 
   /**
-   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Exponent#getLeft <em>Left</em>}'.
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication#getRightScalar <em>Right Scalar</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Left</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Exponent#getLeft()
-   * @see #getExponent()
+   * @return the meta object for the containment reference '<em>Right Scalar</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication#getRightScalar()
+   * @see #getMatrixMultiplication()
    * @generated
    */
-  EReference getExponent_Left();
+  EReference getMatrixMultiplication_RightScalar();
 
   /**
-   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Exponent#getRight <em>Right</em>}'.
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.NewMatrix <em>New Matrix</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Right</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Exponent#getRight()
-   * @see #getExponent()
+   * @return the meta object for class '<em>New Matrix</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.NewMatrix
    * @generated
    */
-  EReference getExponent_Right();
+  EClass getNewMatrix();
 
   /**
-   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Variable <em>Variable</em>}'.
+   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.NewMatrix#getMatrix <em>Matrix</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for class '<em>Variable</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Variable
+   * @return the meta object for the containment reference '<em>Matrix</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.NewMatrix#getMatrix()
+   * @see #getNewMatrix()
    * @generated
    */
-  EClass getVariable();
+  EReference getNewMatrix_Matrix();
 
   /**
-   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Float <em>Float</em>}'.
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.TransposeMatrix <em>Transpose Matrix</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for class '<em>Float</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Float
+   * @return the meta object for class '<em>Transpose Matrix</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.TransposeMatrix
    * @generated
    */
-  EClass getFloat();
+  EClass getTransposeMatrix();
 
   /**
-   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.Float#getValue <em>Value</em>}'.
+   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.TransposeMatrix#getName <em>Name</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the attribute '<em>Value</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Float#getValue()
-   * @see #getFloat()
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.TransposeMatrix#getName()
+   * @see #getTransposeMatrix()
    * @generated
    */
-  EAttribute getFloat_Value();
+  EAttribute getTransposeMatrix_Name();
 
   /**
-   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.Function <em>Function</em>}'.
+   * Returns the meta object for class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixVariable <em>Matrix Variable</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for class '<em>Function</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Function
+   * @return the meta object for class '<em>Matrix Variable</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixVariable
    * @generated
    */
-  EClass getFunction();
+  EClass getMatrixVariable();
 
   /**
-   * Returns the meta object for the containment reference '{@link org.eclipse.iee.translator.jmole.math.math.Function#getFunction <em>Function</em>}'.
+   * Returns the meta object for the attribute '{@link org.eclipse.iee.translator.jmole.math.math.MatrixVariable#getName <em>Name</em>}'.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @return the meta object for the containment reference '<em>Function</em>'.
-   * @see org.eclipse.iee.translator.jmole.math.math.Function#getFunction()
-   * @see #getFunction()
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixVariable#getName()
+   * @see #getMatrixVariable()
    * @generated
    */
-  EReference getFunction_Function();
+  EAttribute getMatrixVariable_Name();
 
   /**
    * Returns the factory that creates the instances of the model.
@@ -1550,54 +2051,62 @@ interface Literals
     EReference STATEMENT__FUNCTION_DEFINITION = eINSTANCE.getStatement_FunctionDefinition();
 
     /**
-     * The meta object literal for the '<em><b>Matrix Definition</b></em>' containment reference feature.
+     * The meta object literal for the '<em><b>Variable Assignment</b></em>' containment reference feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    EReference STATEMENT__MATRIX_DEFINITION = eINSTANCE.getStatement_MatrixDefinition();
+    EReference STATEMENT__VARIABLE_ASSIGNMENT = eINSTANCE.getStatement_VariableAssignment();
 
     /**
-     * The meta object literal for the '<em><b>Assignment</b></em>' containment reference feature.
+     * The meta object literal for the '<em><b>Formula</b></em>' containment reference feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    EReference STATEMENT__ASSIGNMENT = eINSTANCE.getStatement_Assignment();
+    EReference STATEMENT__FORMULA = eINSTANCE.getStatement_Formula();
 
     /**
-     * The meta object literal for the '<em><b>Formula</b></em>' containment reference feature.
+     * The meta object literal for the '<em><b>Matrix Assignment</b></em>' containment reference feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    EReference STATEMENT__FORMULA = eINSTANCE.getStatement_Formula();
+    EReference STATEMENT__MATRIX_ASSIGNMENT = eINSTANCE.getStatement_MatrixAssignment();
+
+    /**
+     * The meta object literal for the '<em><b>Matrix Formula</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference STATEMENT__MATRIX_FORMULA = eINSTANCE.getStatement_MatrixFormula();
 
     /**
-     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.AssignmentImpl <em>Assignment</em>}' class.
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.VariableAssignmentImpl <em>Variable Assignment</em>}' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.AssignmentImpl
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getAssignment()
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.VariableAssignmentImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getVariableAssignment()
      * @generated
      */
-    EClass ASSIGNMENT = eINSTANCE.getAssignment();
+    EClass VARIABLE_ASSIGNMENT = eINSTANCE.getVariableAssignment();
 
     /**
      * The meta object literal for the '<em><b>Variable</b></em>' attribute feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    EAttribute ASSIGNMENT__VARIABLE = eINSTANCE.getAssignment_Variable();
+    EAttribute VARIABLE_ASSIGNMENT__VARIABLE = eINSTANCE.getVariableAssignment_Variable();
 
     /**
      * The meta object literal for the '<em><b>Value</b></em>' containment reference feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    EReference ASSIGNMENT__VALUE = eINSTANCE.getAssignment_Value();
+    EReference VARIABLE_ASSIGNMENT__VALUE = eINSTANCE.getVariableAssignment_Value();
 
     /**
      * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FormulaImpl <em>Formula</em>}' class.
@@ -1644,74 +2153,120 @@ interface Literals
     EReference EXPRESSION__PARAMETERS = eINSTANCE.getExpression_Parameters();
 
     /**
-     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FunctionDefinitionImpl <em>Function Definition</em>}' class.
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixImpl <em>Matrix</em>}' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.FunctionDefinitionImpl
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFunctionDefinition()
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrix()
      * @generated
      */
-    EClass FUNCTION_DEFINITION = eINSTANCE.getFunctionDefinition();
+    EClass MATRIX = eINSTANCE.getMatrix();
 
     /**
-     * The meta object literal for the '<em><b>Function</b></em>' containment reference feature.
+     * The meta object literal for the '<em><b>Rows</b></em>' containment reference list feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    EReference FUNCTION_DEFINITION__FUNCTION = eINSTANCE.getFunctionDefinition_Function();
+    EReference MATRIX__ROWS = eINSTANCE.getMatrix_Rows();
 
     /**
-     * The meta object literal for the '<em><b>Formula</b></em>' containment reference feature.
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixRowImpl <em>Matrix Row</em>}' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixRowImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixRow()
      * @generated
      */
-    EReference FUNCTION_DEFINITION__FORMULA = eINSTANCE.getFunctionDefinition_Formula();
+    EClass MATRIX_ROW = eINSTANCE.getMatrixRow();
 
     /**
-     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixDefinitionImpl <em>Matrix Definition</em>}' class.
+     * The meta object literal for the '<em><b>Elements</b></em>' attribute list feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixDefinitionImpl
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixDefinition()
      * @generated
      */
-    EClass MATRIX_DEFINITION = eINSTANCE.getMatrixDefinition();
+    EAttribute MATRIX_ROW__ELEMENTS = eINSTANCE.getMatrixRow_Elements();
 
     /**
-     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixAssignmentImpl <em>Matrix Assignment</em>}' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixAssignmentImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixAssignment()
      * @generated
      */
-    EAttribute MATRIX_DEFINITION__NAME = eINSTANCE.getMatrixDefinition_Name();
+    EClass MATRIX_ASSIGNMENT = eINSTANCE.getMatrixAssignment();
 
     /**
-     * The meta object literal for the '<em><b>Rows</b></em>' containment reference list feature.
+     * The meta object literal for the '<em><b>Variable</b></em>' attribute feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    EReference MATRIX_DEFINITION__ROWS = eINSTANCE.getMatrixDefinition_Rows();
+    EAttribute MATRIX_ASSIGNMENT__VARIABLE = eINSTANCE.getMatrixAssignment_Variable();
 
     /**
-     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixRowImpl <em>Matrix Row</em>}' class.
+     * The meta object literal for the '<em><b>Value</b></em>' containment reference feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixRowImpl
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixRow()
      * @generated
      */
-    EClass MATRIX_ROW = eINSTANCE.getMatrixRow();
+    EReference MATRIX_ASSIGNMENT__VALUE = eINSTANCE.getMatrixAssignment_Value();
 
     /**
-     * The meta object literal for the '<em><b>Elements</b></em>' attribute list feature.
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixFormulaImpl <em>Matrix Formula</em>}' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixFormulaImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixFormula()
      * @generated
      */
-    EAttribute MATRIX_ROW__ELEMENTS = eINSTANCE.getMatrixRow_Elements();
+    EClass MATRIX_FORMULA = eINSTANCE.getMatrixFormula();
+
+    /**
+     * The meta object literal for the '<em><b>Expression</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference MATRIX_FORMULA__EXPRESSION = eINSTANCE.getMatrixFormula_Expression();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixExpressionImpl <em>Matrix Expression</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixExpressionImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixExpression()
+     * @generated
+     */
+    EClass MATRIX_EXPRESSION = eINSTANCE.getMatrixExpression();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FunctionDefinitionImpl <em>Function Definition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.FunctionDefinitionImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFunctionDefinition()
+     * @generated
+     */
+    EClass FUNCTION_DEFINITION = eINSTANCE.getFunctionDefinition();
+
+    /**
+     * The meta object literal for the '<em><b>Function</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference FUNCTION_DEFINITION__FUNCTION = eINSTANCE.getFunctionDefinition_Function();
+
+    /**
+     * The meta object literal for the '<em><b>Formula</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference FUNCTION_DEFINITION__FORMULA = eINSTANCE.getFunctionDefinition_Formula();
 
     /**
      * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.AdditionImpl <em>Addition</em>}' class.
@@ -1880,118 +2435,250 @@ interface Literals
     EReference FACTORIAL__EXPRESSION = eINSTANCE.getFactorial_Expression();
 
     /**
-     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.IntervalImpl <em>Interval</em>}' class.
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.ExponentImpl <em>Exponent</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.ExponentImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getExponent()
+     * @generated
+     */
+    EClass EXPONENT = eINSTANCE.getExponent();
+
+    /**
+     * The meta object literal for the '<em><b>Left</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference EXPONENT__LEFT = eINSTANCE.getExponent_Left();
+
+    /**
+     * The meta object literal for the '<em><b>Right</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference EXPONENT__RIGHT = eINSTANCE.getExponent_Right();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.VariableImpl <em>Variable</em>}' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.IntervalImpl
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getInterval()
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.VariableImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getVariable()
      * @generated
      */
-    EClass INTERVAL = eINSTANCE.getInterval();
+    EClass VARIABLE = eINSTANCE.getVariable();
 
     /**
-     * The meta object literal for the '<em><b>Opening Bracket</b></em>' attribute feature.
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FloatImpl <em>Float</em>}' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.FloatImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFloat()
      * @generated
      */
-    EAttribute INTERVAL__OPENING_BRACKET = eINSTANCE.getInterval_OpeningBracket();
+    EClass FLOAT = eINSTANCE.getFloat();
 
     /**
-     * The meta object literal for the '<em><b>Ceil</b></em>' containment reference feature.
+     * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    EReference INTERVAL__CEIL = eINSTANCE.getInterval_Ceil();
+    EAttribute FLOAT__VALUE = eINSTANCE.getFloat_Value();
 
     /**
-     * The meta object literal for the '<em><b>Floor</b></em>' containment reference feature.
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixElementImpl <em>Matrix Element</em>}' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixElementImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixElement()
      * @generated
      */
-    EReference INTERVAL__FLOOR = eINSTANCE.getInterval_Floor();
+    EClass MATRIX_ELEMENT = eINSTANCE.getMatrixElement();
 
     /**
-     * The meta object literal for the '<em><b>Closing Bracket</b></em>' attribute feature.
+     * The meta object literal for the '<em><b>Element</b></em>' attribute feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    EAttribute INTERVAL__CLOSING_BRACKET = eINSTANCE.getInterval_ClosingBracket();
+    EAttribute MATRIX_ELEMENT__ELEMENT = eINSTANCE.getMatrixElement_Element();
 
     /**
-     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.ExponentImpl <em>Exponent</em>}' class.
+     * The meta object literal for the '<em><b>Row</b></em>' attribute feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.ExponentImpl
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getExponent()
      * @generated
      */
-    EClass EXPONENT = eINSTANCE.getExponent();
+    EAttribute MATRIX_ELEMENT__ROW = eINSTANCE.getMatrixElement_Row();
+
+    /**
+     * The meta object literal for the '<em><b>Column</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute MATRIX_ELEMENT__COLUMN = eINSTANCE.getMatrixElement_Column();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FunctionImpl <em>Function</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.FunctionImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFunction()
+     * @generated
+     */
+    EClass FUNCTION = eINSTANCE.getFunction();
+
+    /**
+     * The meta object literal for the '<em><b>Function</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference FUNCTION__FUNCTION = eINSTANCE.getFunction_Function();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixAdditionImpl <em>Matrix Addition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixAdditionImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixAddition()
+     * @generated
+     */
+    EClass MATRIX_ADDITION = eINSTANCE.getMatrixAddition();
 
     /**
      * The meta object literal for the '<em><b>Left</b></em>' containment reference feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    EReference EXPONENT__LEFT = eINSTANCE.getExponent_Left();
+    EReference MATRIX_ADDITION__LEFT = eINSTANCE.getMatrixAddition_Left();
 
     /**
      * The meta object literal for the '<em><b>Right</b></em>' containment reference feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    EReference EXPONENT__RIGHT = eINSTANCE.getExponent_Right();
+    EReference MATRIX_ADDITION__RIGHT = eINSTANCE.getMatrixAddition_Right();
 
     /**
-     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.VariableImpl <em>Variable</em>}' class.
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixSubtractionImpl <em>Matrix Subtraction</em>}' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.VariableImpl
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getVariable()
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixSubtractionImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixSubtraction()
      * @generated
      */
-    EClass VARIABLE = eINSTANCE.getVariable();
+    EClass MATRIX_SUBTRACTION = eINSTANCE.getMatrixSubtraction();
 
     /**
-     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FloatImpl <em>Float</em>}' class.
+     * The meta object literal for the '<em><b>Left</b></em>' containment reference feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.FloatImpl
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFloat()
      * @generated
      */
-    EClass FLOAT = eINSTANCE.getFloat();
+    EReference MATRIX_SUBTRACTION__LEFT = eINSTANCE.getMatrixSubtraction_Left();
 
     /**
-     * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+     * The meta object literal for the '<em><b>Right</b></em>' containment reference feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    EAttribute FLOAT__VALUE = eINSTANCE.getFloat_Value();
+    EReference MATRIX_SUBTRACTION__RIGHT = eINSTANCE.getMatrixSubtraction_Right();
 
     /**
-     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.FunctionImpl <em>Function</em>}' class.
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixMultiplicationImpl <em>Matrix Multiplication</em>}' class.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.FunctionImpl
-     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getFunction()
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixMultiplicationImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixMultiplication()
      * @generated
      */
-    EClass FUNCTION = eINSTANCE.getFunction();
+    EClass MATRIX_MULTIPLICATION = eINSTANCE.getMatrixMultiplication();
 
     /**
-     * The meta object literal for the '<em><b>Function</b></em>' containment reference feature.
+     * The meta object literal for the '<em><b>Left</b></em>' containment reference feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
      * @generated
      */
-    EReference FUNCTION__FUNCTION = eINSTANCE.getFunction_Function();
+    EReference MATRIX_MULTIPLICATION__LEFT = eINSTANCE.getMatrixMultiplication_Left();
+
+    /**
+     * The meta object literal for the '<em><b>Right Matrix</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference MATRIX_MULTIPLICATION__RIGHT_MATRIX = eINSTANCE.getMatrixMultiplication_RightMatrix();
+
+    /**
+     * The meta object literal for the '<em><b>Right Scalar</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference MATRIX_MULTIPLICATION__RIGHT_SCALAR = eINSTANCE.getMatrixMultiplication_RightScalar();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.NewMatrixImpl <em>New Matrix</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.NewMatrixImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getNewMatrix()
+     * @generated
+     */
+    EClass NEW_MATRIX = eINSTANCE.getNewMatrix();
+
+    /**
+     * The meta object literal for the '<em><b>Matrix</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference NEW_MATRIX__MATRIX = eINSTANCE.getNewMatrix_Matrix();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.TransposeMatrixImpl <em>Transpose Matrix</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.TransposeMatrixImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getTransposeMatrix()
+     * @generated
+     */
+    EClass TRANSPOSE_MATRIX = eINSTANCE.getTransposeMatrix();
+
+    /**
+     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute TRANSPOSE_MATRIX__NAME = eINSTANCE.getTransposeMatrix_Name();
+
+    /**
+     * The meta object literal for the '{@link org.eclipse.iee.translator.jmole.math.math.impl.MatrixVariableImpl <em>Matrix Variable</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MatrixVariableImpl
+     * @see org.eclipse.iee.translator.jmole.math.math.impl.MathPackageImpl#getMatrixVariable()
+     * @generated
+     */
+    EClass MATRIX_VARIABLE = eINSTANCE.getMatrixVariable();
+
+    /**
+     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute MATRIX_VARIABLE__NAME = eINSTANCE.getMatrixVariable_Name();
 
   }
 
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2FMathPackage.java
7fd7b67431a4fe6914ee7319f3bd1924dfadf157
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2FStatement.java
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2FStatement.java?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/Statement.java
 *   <li>{@link org.eclipse.iee.translator.jmole.math.math.Statement#getVariableAssignment <em>Variable Assignment</em>}</li>
 *   <li>{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixAssignment <em>Matrix Assignment</em>}</li>
 *   <li>{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixFormula <em>Matrix Formula</em>}</li>
   * Returns the value of the '<em><b>Variable Assignment</b></em>' containment reference.
   * If the meaning of the '<em>Variable Assignment</em>' containment reference isn't clear,
   * @return the value of the '<em>Variable Assignment</em>' containment reference.
   * @see #setVariableAssignment(VariableAssignment)
   * @see org.eclipse.iee.translator.jmole.math.math.MathPackage#getStatement_VariableAssignment()
  VariableAssignment getVariableAssignment();
   * Sets the value of the '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getVariableAssignment <em>Variable Assignment</em>}' containment reference.
   * @param value the new value of the '<em>Variable Assignment</em>' containment reference.
   * @see #getVariableAssignment()
  void setVariableAssignment(VariableAssignment value);
   * Returns the value of the '<em><b>Formula</b></em>' containment reference.
   * If the meaning of the '<em>Formula</em>' containment reference isn't clear,
   * @return the value of the '<em>Formula</em>' containment reference.
   * @see #setFormula(Formula)
   * @see org.eclipse.iee.translator.jmole.math.math.MathPackage#getStatement_Formula()
  Formula getFormula();
   * Sets the value of the '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getFormula <em>Formula</em>}' containment reference.
   * @param value the new value of the '<em>Formula</em>' containment reference.
   * @see #getFormula()
  void setFormula(Formula value);
   * Returns the value of the '<em><b>Matrix Assignment</b></em>' containment reference.
   * If the meaning of the '<em>Matrix Assignment</em>' containment reference isn't clear,
   * @return the value of the '<em>Matrix Assignment</em>' containment reference.
   * @see #setMatrixAssignment(MatrixAssignment)
   * @see org.eclipse.iee.translator.jmole.math.math.MathPackage#getStatement_MatrixAssignment()
  MatrixAssignment getMatrixAssignment();
   * Sets the value of the '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixAssignment <em>Matrix Assignment</em>}' containment reference.
   * @param value the new value of the '<em>Matrix Assignment</em>' containment reference.
   * @see #getMatrixAssignment()
  void setMatrixAssignment(MatrixAssignment value);

  /**
   * Returns the value of the '<em><b>Matrix Formula</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Matrix Formula</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>Matrix Formula</em>' containment reference.
   * @see #setMatrixFormula(MatrixFormula)
   * @see org.eclipse.iee.translator.jmole.math.math.MathPackage#getStatement_MatrixFormula()
   * @model containment="true"
   * @generated
   */
  MatrixFormula getMatrixFormula();

  /**
   * Sets the value of the '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixFormula <em>Matrix Formula</em>}' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Matrix Formula</em>' containment reference.
   * @see #getMatrixFormula()
   * @generated
   */
  void setMatrixFormula(MatrixFormula value);
 *   <li>{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixDefinition <em>Matrix Definition</em>}</li>
 *   <li>{@link org.eclipse.iee.translator.jmole.math.math.Statement#getAssignment <em>Assignment</em>}</li>
   * Returns the value of the '<em><b>Matrix Definition</b></em>' containment reference.
   * If the meaning of the '<em>Matrix Definition</em>' containment reference isn't clear,
   * @return the value of the '<em>Matrix Definition</em>' containment reference.
   * @see #setMatrixDefinition(MatrixDefinition)
   * @see org.eclipse.iee.translator.jmole.math.math.MathPackage#getStatement_MatrixDefinition()
  MatrixDefinition getMatrixDefinition();
   * Sets the value of the '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixDefinition <em>Matrix Definition</em>}' containment reference.
   * @param value the new value of the '<em>Matrix Definition</em>' containment reference.
   * @see #getMatrixDefinition()
  void setMatrixDefinition(MatrixDefinition value);
   * Returns the value of the '<em><b>Assignment</b></em>' containment reference.
   * If the meaning of the '<em>Assignment</em>' containment reference isn't clear,
   * @return the value of the '<em>Assignment</em>' containment reference.
   * @see #setAssignment(Assignment)
   * @see org.eclipse.iee.translator.jmole.math.math.MathPackage#getStatement_Assignment()
  Assignment getAssignment();
   * Sets the value of the '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getAssignment <em>Assignment</em>}' containment reference.
   * @param value the new value of the '<em>Assignment</em>' containment reference.
   * @see #getAssignment()
  void setAssignment(Assignment value);
   * Returns the value of the '<em><b>Formula</b></em>' containment reference.
   * If the meaning of the '<em>Formula</em>' containment reference isn't clear,
   * @return the value of the '<em>Formula</em>' containment reference.
   * @see #setFormula(Formula)
   * @see org.eclipse.iee.translator.jmole.math.math.MathPackage#getStatement_Formula()
  Formula getFormula();
   * Sets the value of the '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getFormula <em>Formula</em>}' containment reference.
   * @param value the new value of the '<em>Formula</em>' containment reference.
   * @see #getFormula()
  void setFormula(Formula value);
@@ -17,9 +17,10 @@
  * The following features are supported:
  * <ul>
  *   <li>{@link org.eclipse.iee.translator.jmole.math.math.Statement#getFunctionDefinition <em>Function Definition</em>}</li>
- *   <li>{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixDefinition <em>Matrix Definition</em>}</li>
- *   <li>{@link org.eclipse.iee.translator.jmole.math.math.Statement#getAssignment <em>Assignment</em>}</li>
+ *   <li>{@link org.eclipse.iee.translator.jmole.math.math.Statement#getVariableAssignment <em>Variable Assignment</em>}</li>
  *   <li>{@link org.eclipse.iee.translator.jmole.math.math.Statement#getFormula <em>Formula</em>}</li>
+ *   <li>{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixAssignment <em>Matrix Assignment</em>}</li>
+ *   <li>{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixFormula <em>Matrix Formula</em>}</li>
  * </ul>
  * </p>
  *
@@ -56,81 +57,107 @@ public interface Statement extends EObject
   void setFunctionDefinition(FunctionDefinition value);
 
   /**
-   * Returns the value of the '<em><b>Matrix Definition</b></em>' containment reference.
+   * Returns the value of the '<em><b>Variable Assignment</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <p>
-   * If the meaning of the '<em>Matrix Definition</em>' containment reference isn't clear,
+   * If the meaning of the '<em>Variable Assignment</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>Matrix Definition</em>' containment reference.
-   * @see #setMatrixDefinition(MatrixDefinition)
-   * @see org.eclipse.iee.translator.jmole.math.math.MathPackage#getStatement_MatrixDefinition()
+   * @return the value of the '<em>Variable Assignment</em>' containment reference.
+   * @see #setVariableAssignment(VariableAssignment)
+   * @see org.eclipse.iee.translator.jmole.math.math.MathPackage#getStatement_VariableAssignment()
    * @model containment="true"
    * @generated
    */
-  MatrixDefinition getMatrixDefinition();
+  VariableAssignment getVariableAssignment();
 
   /**
-   * Sets the value of the '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixDefinition <em>Matrix Definition</em>}' containment reference.
+   * Sets the value of the '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getVariableAssignment <em>Variable Assignment</em>}' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @param value the new value of the '<em>Matrix Definition</em>' containment reference.
-   * @see #getMatrixDefinition()
+   * @param value the new value of the '<em>Variable Assignment</em>' containment reference.
+   * @see #getVariableAssignment()
    * @generated
    */
-  void setMatrixDefinition(MatrixDefinition value);
+  void setVariableAssignment(VariableAssignment value);
 
   /**
-   * Returns the value of the '<em><b>Assignment</b></em>' containment reference.
+   * Returns the value of the '<em><b>Formula</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <p>
-   * If the meaning of the '<em>Assignment</em>' containment reference isn't clear,
+   * If the meaning of the '<em>Formula</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>Assignment</em>' containment reference.
-   * @see #setAssignment(Assignment)
-   * @see org.eclipse.iee.translator.jmole.math.math.MathPackage#getStatement_Assignment()
+   * @return the value of the '<em>Formula</em>' containment reference.
+   * @see #setFormula(Formula)
+   * @see org.eclipse.iee.translator.jmole.math.math.MathPackage#getStatement_Formula()
    * @model containment="true"
    * @generated
    */
-  Assignment getAssignment();
+  Formula getFormula();
 
   /**
-   * Sets the value of the '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getAssignment <em>Assignment</em>}' containment reference.
+   * Sets the value of the '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getFormula <em>Formula</em>}' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @param value the new value of the '<em>Assignment</em>' containment reference.
-   * @see #getAssignment()
+   * @param value the new value of the '<em>Formula</em>' containment reference.
+   * @see #getFormula()
    * @generated
    */
-  void setAssignment(Assignment value);
+  void setFormula(Formula value);
 
   /**
-   * Returns the value of the '<em><b>Formula</b></em>' containment reference.
+   * Returns the value of the '<em><b>Matrix Assignment</b></em>' containment reference.
    * <!-- begin-user-doc -->
    * <p>
-   * If the meaning of the '<em>Formula</em>' containment reference isn't clear,
+   * If the meaning of the '<em>Matrix Assignment</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>Formula</em>' containment reference.
-   * @see #setFormula(Formula)
-   * @see org.eclipse.iee.translator.jmole.math.math.MathPackage#getStatement_Formula()
+   * @return the value of the '<em>Matrix Assignment</em>' containment reference.
+   * @see #setMatrixAssignment(MatrixAssignment)
+   * @see org.eclipse.iee.translator.jmole.math.math.MathPackage#getStatement_MatrixAssignment()
    * @model containment="true"
    * @generated
    */
-  Formula getFormula();
+  MatrixAssignment getMatrixAssignment();
 
   /**
-   * Sets the value of the '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getFormula <em>Formula</em>}' containment reference.
+   * Sets the value of the '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixAssignment <em>Matrix Assignment</em>}' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @param value the new value of the '<em>Formula</em>' containment reference.
-   * @see #getFormula()
+   * @param value the new value of the '<em>Matrix Assignment</em>' containment reference.
+   * @see #getMatrixAssignment()
    * @generated
    */
-  void setFormula(Formula value);
+  void setMatrixAssignment(MatrixAssignment value);
+
+  /**
+   * Returns the value of the '<em><b>Matrix Formula</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Matrix Formula</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>Matrix Formula</em>' containment reference.
+   * @see #setMatrixFormula(MatrixFormula)
+   * @see org.eclipse.iee.translator.jmole.math.math.MathPackage#getStatement_MatrixFormula()
+   * @model containment="true"
+   * @generated
+   */
+  MatrixFormula getMatrixFormula();
+
+  /**
+   * Sets the value of the '{@link org.eclipse.iee.translator.jmole.math.math.Statement#getMatrixFormula <em>Matrix Formula</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Matrix Formula</em>' containment reference.
+   * @see #getMatrixFormula()
+   * @generated
+   */
+  void setMatrixFormula(MatrixFormula value);
 
 } // Statement
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2FStatement.java
d45ef70d04dfb183ad60b23c4b202ceb47add157
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2Fimpl%2FMathFactoryImpl.java
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2Fimpl%2FMathFactoryImpl.java?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathFactoryImpl.java
import org.eclipse.iee.translator.jmole.math.math.Matrix;
import org.eclipse.iee.translator.jmole.math.math.MatrixAddition;
import org.eclipse.iee.translator.jmole.math.math.MatrixAssignment;
import org.eclipse.iee.translator.jmole.math.math.MatrixElement;
import org.eclipse.iee.translator.jmole.math.math.MatrixExpression;
import org.eclipse.iee.translator.jmole.math.math.MatrixFormula;
import org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication;
import org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction;
import org.eclipse.iee.translator.jmole.math.math.MatrixVariable;
import org.eclipse.iee.translator.jmole.math.math.NewMatrix;
import org.eclipse.iee.translator.jmole.math.math.TransposeMatrix;
import org.eclipse.iee.translator.jmole.math.math.VariableAssignment;
      case MathPackage.VARIABLE_ASSIGNMENT: return createVariableAssignment();
      case MathPackage.MATRIX: return createMatrix();
      case MathPackage.MATRIX_ASSIGNMENT: return createMatrixAssignment();
      case MathPackage.MATRIX_FORMULA: return createMatrixFormula();
      case MathPackage.MATRIX_EXPRESSION: return createMatrixExpression();
      case MathPackage.FUNCTION_DEFINITION: return createFunctionDefinition();
      case MathPackage.MATRIX_ELEMENT: return createMatrixElement();
      case MathPackage.MATRIX_ADDITION: return createMatrixAddition();
      case MathPackage.MATRIX_SUBTRACTION: return createMatrixSubtraction();
      case MathPackage.MATRIX_MULTIPLICATION: return createMatrixMultiplication();
      case MathPackage.NEW_MATRIX: return createNewMatrix();
      case MathPackage.TRANSPOSE_MATRIX: return createTransposeMatrix();
      case MathPackage.MATRIX_VARIABLE: return createMatrixVariable();
  public VariableAssignment createVariableAssignment()
    VariableAssignmentImpl variableAssignment = new VariableAssignmentImpl();
    return variableAssignment;
  public Matrix createMatrix()
    MatrixImpl matrix = new MatrixImpl();
    return matrix;
  public MatrixRow createMatrixRow()
    MatrixRowImpl matrixRow = new MatrixRowImpl();
    return matrixRow;
  public MatrixAssignment createMatrixAssignment()
    MatrixAssignmentImpl matrixAssignment = new MatrixAssignmentImpl();
    return matrixAssignment;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public MatrixFormula createMatrixFormula()
  {
    MatrixFormulaImpl matrixFormula = new MatrixFormulaImpl();
    return matrixFormula;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public MatrixExpression createMatrixExpression()
  {
    MatrixExpressionImpl matrixExpression = new MatrixExpressionImpl();
    return matrixExpression;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public FunctionDefinition createFunctionDefinition()
  {
    FunctionDefinitionImpl functionDefinition = new FunctionDefinitionImpl();
    return functionDefinition;
  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public MatrixElement createMatrixElement()
  {
    MatrixElementImpl matrixElement = new MatrixElementImpl();
    return matrixElement;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public MatrixAddition createMatrixAddition()
  {
    MatrixAdditionImpl matrixAddition = new MatrixAdditionImpl();
    return matrixAddition;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public MatrixSubtraction createMatrixSubtraction()
  {
    MatrixSubtractionImpl matrixSubtraction = new MatrixSubtractionImpl();
    return matrixSubtraction;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public MatrixMultiplication createMatrixMultiplication()
  {
    MatrixMultiplicationImpl matrixMultiplication = new MatrixMultiplicationImpl();
    return matrixMultiplication;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public NewMatrix createNewMatrix()
  {
    NewMatrixImpl newMatrix = new NewMatrixImpl();
    return newMatrix;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public TransposeMatrix createTransposeMatrix()
  {
    TransposeMatrixImpl transposeMatrix = new TransposeMatrixImpl();
    return transposeMatrix;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public MatrixVariable createMatrixVariable()
  {
    MatrixVariableImpl matrixVariable = new MatrixVariableImpl();
    return matrixVariable;
  }

org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathFactoryImpl.java
MatrixFormulaImpl matrixFormula = new MatrixFormulaImpl();
    return matrixFormula;
MatrixFormula createMatrixFormula()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathFactoryImpl.java
MatrixExpressionImpl matrixExpression = new MatrixExpressionImpl();
    return matrixExpression;
MatrixExpression createMatrixExpression()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathFactoryImpl.java
FunctionDefinitionImpl functionDefinition = new FunctionDefinitionImpl();
    return functionDefinition;
  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public MatrixElement createMatrixElement()
  {
    MatrixElementImpl matrixElement = new MatrixElementImpl();
    return matrixElement;
FunctionDefinition createFunctionDefinition()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathFactoryImpl.java
MatrixAdditionImpl matrixAddition = new MatrixAdditionImpl();
    return matrixAddition;
MatrixAddition createMatrixAddition()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathFactoryImpl.java
MatrixSubtractionImpl matrixSubtraction = new MatrixSubtractionImpl();
    return matrixSubtraction;
MatrixSubtraction createMatrixSubtraction()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathFactoryImpl.java
MatrixMultiplicationImpl matrixMultiplication = new MatrixMultiplicationImpl();
    return matrixMultiplication;
MatrixMultiplication createMatrixMultiplication()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathFactoryImpl.java
NewMatrixImpl newMatrix = new NewMatrixImpl();
    return newMatrix;
NewMatrix createNewMatrix()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathFactoryImpl.java
TransposeMatrixImpl transposeMatrix = new TransposeMatrixImpl();
    return transposeMatrix;
TransposeMatrix createTransposeMatrix()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathFactoryImpl.java
MatrixVariableImpl matrixVariable = new MatrixVariableImpl();
    return matrixVariable;
MatrixVariable createMatrixVariable()
import org.eclipse.iee.translator.jmole.math.math.Assignment;
import org.eclipse.iee.translator.jmole.math.math.Interval;
import org.eclipse.iee.translator.jmole.math.math.MatrixDefinition;
      case MathPackage.ASSIGNMENT: return createAssignment();
      case MathPackage.FUNCTION_DEFINITION: return createFunctionDefinition();
      case MathPackage.MATRIX_DEFINITION: return createMatrixDefinition();
      case MathPackage.INTERVAL: return createInterval();
  public Assignment createAssignment()
    AssignmentImpl assignment = new AssignmentImpl();
    return assignment;
  public FunctionDefinition createFunctionDefinition()
    FunctionDefinitionImpl functionDefinition = new FunctionDefinitionImpl();
    return functionDefinition;
  public MatrixDefinition createMatrixDefinition()
    MatrixDefinitionImpl matrixDefinition = new MatrixDefinitionImpl();
    return matrixDefinition;
  public MatrixRow createMatrixRow()
    MatrixRowImpl matrixRow = new MatrixRowImpl();
    return matrixRow;
  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public Interval createInterval()
  {
    IntervalImpl interval = new IntervalImpl();
    return interval;
  }

org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathFactoryImpl.java
IntervalImpl interval = new IntervalImpl();
    return interval;
Interval createInterval()
@@ -15,25 +15,34 @@
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
 
 import org.eclipse.iee.translator.jmole.math.math.Addition;
-import org.eclipse.iee.translator.jmole.math.math.Assignment;
 import org.eclipse.iee.translator.jmole.math.math.Division;
 import org.eclipse.iee.translator.jmole.math.math.Exponent;
 import org.eclipse.iee.translator.jmole.math.math.Expression;
 import org.eclipse.iee.translator.jmole.math.math.Factorial;
 import org.eclipse.iee.translator.jmole.math.math.Formula;
 import org.eclipse.iee.translator.jmole.math.math.Function;
 import org.eclipse.iee.translator.jmole.math.math.FunctionDefinition;
-import org.eclipse.iee.translator.jmole.math.math.Interval;
 import org.eclipse.iee.translator.jmole.math.math.Invert;
 import org.eclipse.iee.translator.jmole.math.math.MathFactory;
 import org.eclipse.iee.translator.jmole.math.math.MathPackage;
-import org.eclipse.iee.translator.jmole.math.math.MatrixDefinition;
+import org.eclipse.iee.translator.jmole.math.math.Matrix;
+import org.eclipse.iee.translator.jmole.math.math.MatrixAddition;
+import org.eclipse.iee.translator.jmole.math.math.MatrixAssignment;
+import org.eclipse.iee.translator.jmole.math.math.MatrixElement;
+import org.eclipse.iee.translator.jmole.math.math.MatrixExpression;
+import org.eclipse.iee.translator.jmole.math.math.MatrixFormula;
+import org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication;
 import org.eclipse.iee.translator.jmole.math.math.MatrixRow;
+import org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction;
+import org.eclipse.iee.translator.jmole.math.math.MatrixVariable;
 import org.eclipse.iee.translator.jmole.math.math.Modulo;
 import org.eclipse.iee.translator.jmole.math.math.Multiplication;
+import org.eclipse.iee.translator.jmole.math.math.NewMatrix;
 import org.eclipse.iee.translator.jmole.math.math.Statement;
 import org.eclipse.iee.translator.jmole.math.math.Subtraction;
+import org.eclipse.iee.translator.jmole.math.math.TransposeMatrix;
 import org.eclipse.iee.translator.jmole.math.math.Variable;
+import org.eclipse.iee.translator.jmole.math.math.VariableAssignment;
 
 /**
  * <!-- begin-user-doc -->
@@ -88,24 +97,33 @@ public EObject create(EClass eClass)
     switch (eClass.getClassifierID())
     {
       case MathPackage.STATEMENT: return createStatement();
-      case MathPackage.ASSIGNMENT: return createAssignment();
+      case MathPackage.VARIABLE_ASSIGNMENT: return createVariableAssignment();
       case MathPackage.FORMULA: return createFormula();
       case MathPackage.EXPRESSION: return createExpression();
-      case MathPackage.FUNCTION_DEFINITION: return createFunctionDefinition();
-      case MathPackage.MATRIX_DEFINITION: return createMatrixDefinition();
+      case MathPackage.MATRIX: return createMatrix();
       case MathPackage.MATRIX_ROW: return createMatrixRow();
+      case MathPackage.MATRIX_ASSIGNMENT: return createMatrixAssignment();
+      case MathPackage.MATRIX_FORMULA: return createMatrixFormula();
+      case MathPackage.MATRIX_EXPRESSION: return createMatrixExpression();
+      case MathPackage.FUNCTION_DEFINITION: return createFunctionDefinition();
       case MathPackage.ADDITION: return createAddition();
       case MathPackage.SUBTRACTION: return createSubtraction();
       case MathPackage.MULTIPLICATION: return createMultiplication();
       case MathPackage.DIVISION: return createDivision();
       case MathPackage.MODULO: return createModulo();
       case MathPackage.INVERT: return createInvert();
       case MathPackage.FACTORIAL: return createFactorial();
-      case MathPackage.INTERVAL: return createInterval();
       case MathPackage.EXPONENT: return createExponent();
       case MathPackage.VARIABLE: return createVariable();
       case MathPackage.FLOAT: return createFloat();
+      case MathPackage.MATRIX_ELEMENT: return createMatrixElement();
       case MathPackage.FUNCTION: return createFunction();
+      case MathPackage.MATRIX_ADDITION: return createMatrixAddition();
+      case MathPackage.MATRIX_SUBTRACTION: return createMatrixSubtraction();
+      case MathPackage.MATRIX_MULTIPLICATION: return createMatrixMultiplication();
+      case MathPackage.NEW_MATRIX: return createNewMatrix();
+      case MathPackage.TRANSPOSE_MATRIX: return createTransposeMatrix();
+      case MathPackage.MATRIX_VARIABLE: return createMatrixVariable();
       default:
         throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
     }
@@ -127,10 +145,10 @@ public Statement createStatement()
    * <!-- end-user-doc -->
    * @generated
    */
-  public Assignment createAssignment()
+  public VariableAssignment createVariableAssignment()
   {
-    AssignmentImpl assignment = new AssignmentImpl();
-    return assignment;
+    VariableAssignmentImpl variableAssignment = new VariableAssignmentImpl();
+    return variableAssignment;
   }
 
   /**
@@ -160,32 +178,65 @@ public Expression createExpression()
    * <!-- end-user-doc -->
    * @generated
    */
-  public FunctionDefinition createFunctionDefinition()
+  public Matrix createMatrix()
   {
-    FunctionDefinitionImpl functionDefinition = new FunctionDefinitionImpl();
-    return functionDefinition;
+    MatrixImpl matrix = new MatrixImpl();
+    return matrix;
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public MatrixDefinition createMatrixDefinition()
+  public MatrixRow createMatrixRow()
   {
-    MatrixDefinitionImpl matrixDefinition = new MatrixDefinitionImpl();
-    return matrixDefinition;
+    MatrixRowImpl matrixRow = new MatrixRowImpl();
+    return matrixRow;
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public MatrixRow createMatrixRow()
+  public MatrixAssignment createMatrixAssignment()
   {
-    MatrixRowImpl matrixRow = new MatrixRowImpl();
-    return matrixRow;
+    MatrixAssignmentImpl matrixAssignment = new MatrixAssignmentImpl();
+    return matrixAssignment;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MatrixFormula createMatrixFormula()
+  {
+    MatrixFormulaImpl matrixFormula = new MatrixFormulaImpl();
+    return matrixFormula;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MatrixExpression createMatrixExpression()
+  {
+    MatrixExpressionImpl matrixExpression = new MatrixExpressionImpl();
+    return matrixExpression;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public FunctionDefinition createFunctionDefinition()
+  {
+    FunctionDefinitionImpl functionDefinition = new FunctionDefinitionImpl();
+    return functionDefinition;
   }
 
   /**
@@ -265,17 +316,6 @@ public Factorial createFactorial()
     return factorial;
   }
 
-  /**
-   * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-   * @generated
-   */
-  public Interval createInterval()
-  {
-    IntervalImpl interval = new IntervalImpl();
-    return interval;
-  }
-
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -309,6 +349,17 @@ public org.eclipse.iee.translator.jmole.math.math.Float createFloat()
     return float_;
   }
 
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MatrixElement createMatrixElement()
+  {
+    MatrixElementImpl matrixElement = new MatrixElementImpl();
+    return matrixElement;
+  }
+
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -320,6 +371,72 @@ public Function createFunction()
     return function;
   }
 
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MatrixAddition createMatrixAddition()
+  {
+    MatrixAdditionImpl matrixAddition = new MatrixAdditionImpl();
+    return matrixAddition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MatrixSubtraction createMatrixSubtraction()
+  {
+    MatrixSubtractionImpl matrixSubtraction = new MatrixSubtractionImpl();
+    return matrixSubtraction;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MatrixMultiplication createMatrixMultiplication()
+  {
+    MatrixMultiplicationImpl matrixMultiplication = new MatrixMultiplicationImpl();
+    return matrixMultiplication;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NewMatrix createNewMatrix()
+  {
+    NewMatrixImpl newMatrix = new NewMatrixImpl();
+    return newMatrix;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public TransposeMatrix createTransposeMatrix()
+  {
+    TransposeMatrixImpl transposeMatrix = new TransposeMatrixImpl();
+    return transposeMatrix;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MatrixVariable createMatrixVariable()
+  {
+    MatrixVariableImpl matrixVariable = new MatrixVariableImpl();
+    return matrixVariable;
+  }
+
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2Fimpl%2FMathFactoryImpl.java
06d37364011cc2a512e54853e9020435cf382eca
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2Fimpl%2FMathPackageImpl.java
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2Fimpl%2FMathPackageImpl.java?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
import org.eclipse.iee.translator.jmole.math.math.Matrix;
import org.eclipse.iee.translator.jmole.math.math.MatrixAddition;
import org.eclipse.iee.translator.jmole.math.math.MatrixAssignment;
import org.eclipse.iee.translator.jmole.math.math.MatrixElement;
import org.eclipse.iee.translator.jmole.math.math.MatrixExpression;
import org.eclipse.iee.translator.jmole.math.math.MatrixFormula;
import org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication;
import org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction;
import org.eclipse.iee.translator.jmole.math.math.MatrixVariable;
import org.eclipse.iee.translator.jmole.math.math.NewMatrix;
import org.eclipse.iee.translator.jmole.math.math.TransposeMatrix;
import org.eclipse.iee.translator.jmole.math.math.VariableAssignment;
  private EClass variableAssignmentEClass = null;
  private EClass matrixEClass = null;
  private EClass matrixRowEClass = null;
  private EClass matrixAssignmentEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass matrixFormulaEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass matrixExpressionEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass functionDefinitionEClass = null;
  private EClass exponentEClass = null;
  private EClass variableEClass = null;
  private EClass floatEClass = null;
  private EClass matrixElementEClass = null;
  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass matrixAdditionEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass matrixSubtractionEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass matrixMultiplicationEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass newMatrixEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass transposeMatrixEClass = null;

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  private EClass matrixVariableEClass = null;

  public EReference getStatement_VariableAssignment()
  public EReference getStatement_Formula()
  public EReference getStatement_MatrixAssignment()
  public EReference getStatement_MatrixFormula()
  {
    return (EReference)statementEClass.getEStructuralFeatures().get(4);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getVariableAssignment()
    return variableAssignmentEClass;
  public EAttribute getVariableAssignment_Variable()
    return (EAttribute)variableAssignmentEClass.getEStructuralFeatures().get(0);
  public EReference getVariableAssignment_Value()
    return (EReference)variableAssignmentEClass.getEStructuralFeatures().get(1);
  public EClass getMatrix()
    return matrixEClass;
  public EReference getMatrix_Rows()
    return (EReference)matrixEClass.getEStructuralFeatures().get(0);
  public EClass getMatrixRow()
    return matrixRowEClass;
  public EAttribute getMatrixRow_Elements()
    return (EAttribute)matrixRowEClass.getEStructuralFeatures().get(0);
  public EClass getMatrixAssignment()
    return matrixAssignmentEClass;
  public EAttribute getMatrixAssignment_Variable()
    return (EAttribute)matrixAssignmentEClass.getEStructuralFeatures().get(0);
  public EReference getMatrixAssignment_Value()
    return (EReference)matrixAssignmentEClass.getEStructuralFeatures().get(1);
  public EClass getMatrixFormula()
    return matrixFormulaEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getMatrixFormula_Expression()
  {
    return (EReference)matrixFormulaEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getMatrixExpression()
  {
    return matrixExpressionEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getFunctionDefinition()
  {
    return functionDefinitionEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getFunctionDefinition_Function()
  {
    return (EReference)functionDefinitionEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getFunctionDefinition_Formula()
  {
    return (EReference)functionDefinitionEClass.getEStructuralFeatures().get(1);
  public EClass getExponent()
    return exponentEClass;
  public EReference getExponent_Left()
    return (EReference)exponentEClass.getEStructuralFeatures().get(0);
  public EReference getExponent_Right()
    return (EReference)exponentEClass.getEStructuralFeatures().get(1);
  public EClass getVariable()
    return variableEClass;
  public EClass getFloat()
    return floatEClass;
  public EAttribute getFloat_Value()
    return (EAttribute)floatEClass.getEStructuralFeatures().get(0);
  public EClass getMatrixElement()
    return matrixElementEClass;
  public EAttribute getMatrixElement_Element()
    return (EAttribute)matrixElementEClass.getEStructuralFeatures().get(0);
  public EAttribute getMatrixElement_Row()
    return (EAttribute)matrixElementEClass.getEStructuralFeatures().get(1);
  public EAttribute getMatrixElement_Column()
    return (EAttribute)matrixElementEClass.getEStructuralFeatures().get(2);
  public EClass getFunction()
    return functionEClass;
  public EReference getFunction_Function()
    return (EReference)functionEClass.getEStructuralFeatures().get(0);
  public EClass getMatrixAddition()
    return matrixAdditionEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getMatrixAddition_Left()
  {
    return (EReference)matrixAdditionEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getMatrixAddition_Right()
  {
    return (EReference)matrixAdditionEClass.getEStructuralFeatures().get(1);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getMatrixSubtraction()
  {
    return matrixSubtractionEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getMatrixSubtraction_Left()
  {
    return (EReference)matrixSubtractionEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getMatrixSubtraction_Right()
  {
    return (EReference)matrixSubtractionEClass.getEStructuralFeatures().get(1);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getMatrixMultiplication()
  {
    return matrixMultiplicationEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getMatrixMultiplication_Left()
  {
    return (EReference)matrixMultiplicationEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getMatrixMultiplication_RightMatrix()
  {
    return (EReference)matrixMultiplicationEClass.getEStructuralFeatures().get(1);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getMatrixMultiplication_RightScalar()
  {
    return (EReference)matrixMultiplicationEClass.getEStructuralFeatures().get(2);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getNewMatrix()
  {
    return newMatrixEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EReference getNewMatrix_Matrix()
  {
    return (EReference)newMatrixEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getTransposeMatrix()
  {
    return transposeMatrixEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getTransposeMatrix_Name()
  {
    return (EAttribute)transposeMatrixEClass.getEStructuralFeatures().get(0);
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EClass getMatrixVariable()
  {
    return matrixVariableEClass;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public EAttribute getMatrixVariable_Name()
  {
    return (EAttribute)matrixVariableEClass.getEStructuralFeatures().get(0);
    createEReference(statementEClass, STATEMENT__VARIABLE_ASSIGNMENT);
    createEReference(statementEClass, STATEMENT__MATRIX_ASSIGNMENT);
    createEReference(statementEClass, STATEMENT__MATRIX_FORMULA);
    variableAssignmentEClass = createEClass(VARIABLE_ASSIGNMENT);
    createEAttribute(variableAssignmentEClass, VARIABLE_ASSIGNMENT__VARIABLE);
    createEReference(variableAssignmentEClass, VARIABLE_ASSIGNMENT__VALUE);
    matrixEClass = createEClass(MATRIX);
    createEReference(matrixEClass, MATRIX__ROWS);
    matrixAssignmentEClass = createEClass(MATRIX_ASSIGNMENT);
    createEAttribute(matrixAssignmentEClass, MATRIX_ASSIGNMENT__VARIABLE);
    createEReference(matrixAssignmentEClass, MATRIX_ASSIGNMENT__VALUE);

    matrixFormulaEClass = createEClass(MATRIX_FORMULA);
    createEReference(matrixFormulaEClass, MATRIX_FORMULA__EXPRESSION);

    matrixExpressionEClass = createEClass(MATRIX_EXPRESSION);

    functionDefinitionEClass = createEClass(FUNCTION_DEFINITION);
    createEReference(functionDefinitionEClass, FUNCTION_DEFINITION__FUNCTION);
    createEReference(functionDefinitionEClass, FUNCTION_DEFINITION__FORMULA);

    matrixElementEClass = createEClass(MATRIX_ELEMENT);
    createEAttribute(matrixElementEClass, MATRIX_ELEMENT__ELEMENT);
    createEAttribute(matrixElementEClass, MATRIX_ELEMENT__ROW);
    createEAttribute(matrixElementEClass, MATRIX_ELEMENT__COLUMN);


    matrixAdditionEClass = createEClass(MATRIX_ADDITION);
    createEReference(matrixAdditionEClass, MATRIX_ADDITION__LEFT);
    createEReference(matrixAdditionEClass, MATRIX_ADDITION__RIGHT);

    matrixSubtractionEClass = createEClass(MATRIX_SUBTRACTION);
    createEReference(matrixSubtractionEClass, MATRIX_SUBTRACTION__LEFT);
    createEReference(matrixSubtractionEClass, MATRIX_SUBTRACTION__RIGHT);

    matrixMultiplicationEClass = createEClass(MATRIX_MULTIPLICATION);
    createEReference(matrixMultiplicationEClass, MATRIX_MULTIPLICATION__LEFT);
    createEReference(matrixMultiplicationEClass, MATRIX_MULTIPLICATION__RIGHT_MATRIX);
    createEReference(matrixMultiplicationEClass, MATRIX_MULTIPLICATION__RIGHT_SCALAR);

    newMatrixEClass = createEClass(NEW_MATRIX);
    createEReference(newMatrixEClass, NEW_MATRIX__MATRIX);

    transposeMatrixEClass = createEClass(TRANSPOSE_MATRIX);
    createEAttribute(transposeMatrixEClass, TRANSPOSE_MATRIX__NAME);

    matrixVariableEClass = createEClass(MATRIX_VARIABLE);
    createEAttribute(matrixVariableEClass, MATRIX_VARIABLE__NAME);
    matrixElementEClass.getESuperTypes().add(this.getExpression());
    matrixAdditionEClass.getESuperTypes().add(this.getMatrixExpression());
    matrixSubtractionEClass.getESuperTypes().add(this.getMatrixExpression());
    matrixMultiplicationEClass.getESuperTypes().add(this.getMatrixExpression());
    newMatrixEClass.getESuperTypes().add(this.getMatrixExpression());
    transposeMatrixEClass.getESuperTypes().add(this.getMatrixExpression());
    matrixVariableEClass.getESuperTypes().add(this.getMatrixExpression());
    initEReference(getStatement_VariableAssignment(), this.getVariableAssignment(), null, "variableAssignment", null, 0, 1, Statement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getStatement_MatrixAssignment(), this.getMatrixAssignment(), null, "matrixAssignment", null, 0, 1, Statement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getStatement_MatrixFormula(), this.getMatrixFormula(), null, "matrixFormula", null, 0, 1, Statement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEClass(variableAssignmentEClass, VariableAssignment.class, "VariableAssignment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getVariableAssignment_Variable(), ecorePackage.getEString(), "variable", null, 0, 1, VariableAssignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getVariableAssignment_Value(), this.getFormula(), null, "value", null, 0, 1, VariableAssignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEClass(matrixEClass, Matrix.class, "Matrix", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEReference(getMatrix_Rows(), this.getMatrixRow(), null, "rows", null, 0, -1, Matrix.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEClass(matrixAssignmentEClass, MatrixAssignment.class, "MatrixAssignment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getMatrixAssignment_Variable(), ecorePackage.getEString(), "variable", null, 0, 1, MatrixAssignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getMatrixAssignment_Value(), this.getMatrixFormula(), null, "value", null, 0, 1, MatrixAssignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(matrixFormulaEClass, MatrixFormula.class, "MatrixFormula", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEReference(getMatrixFormula_Expression(), this.getMatrixExpression(), null, "expression", null, 0, 1, MatrixFormula.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(matrixExpressionEClass, MatrixExpression.class, "MatrixExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

    initEClass(functionDefinitionEClass, FunctionDefinition.class, "FunctionDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEReference(getFunctionDefinition_Function(), this.getExpression(), null, "function", null, 0, 1, FunctionDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getFunctionDefinition_Formula(), this.getFormula(), null, "formula", null, 0, 1, FunctionDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(matrixElementEClass, MatrixElement.class, "MatrixElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getMatrixElement_Element(), ecorePackage.getEString(), "element", null, 0, 1, MatrixElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEAttribute(getMatrixElement_Row(), ecorePackage.getEInt(), "row", null, 0, 1, MatrixElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEAttribute(getMatrixElement_Column(), ecorePackage.getEInt(), "column", null, 0, 1, MatrixElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(matrixAdditionEClass, MatrixAddition.class, "MatrixAddition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEReference(getMatrixAddition_Left(), this.getMatrixExpression(), null, "left", null, 0, 1, MatrixAddition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getMatrixAddition_Right(), this.getMatrixExpression(), null, "right", null, 0, 1, MatrixAddition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(matrixSubtractionEClass, MatrixSubtraction.class, "MatrixSubtraction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEReference(getMatrixSubtraction_Left(), this.getMatrixExpression(), null, "left", null, 0, 1, MatrixSubtraction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getMatrixSubtraction_Right(), this.getMatrixExpression(), null, "right", null, 0, 1, MatrixSubtraction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(matrixMultiplicationEClass, MatrixMultiplication.class, "MatrixMultiplication", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEReference(getMatrixMultiplication_Left(), this.getMatrixExpression(), null, "left", null, 0, 1, MatrixMultiplication.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getMatrixMultiplication_RightMatrix(), this.getMatrixExpression(), null, "rightMatrix", null, 0, 1, MatrixMultiplication.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getMatrixMultiplication_RightScalar(), this.getFormula(), null, "rightScalar", null, 0, 1, MatrixMultiplication.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(newMatrixEClass, NewMatrix.class, "NewMatrix", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEReference(getNewMatrix_Matrix(), this.getMatrix(), null, "matrix", null, 0, 1, NewMatrix.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(transposeMatrixEClass, TransposeMatrix.class, "TransposeMatrix", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getTransposeMatrix_Name(), ecorePackage.getEString(), "name", null, 0, 1, TransposeMatrix.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(matrixVariableEClass, MatrixVariable.class, "MatrixVariable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getMatrixVariable_Name(), ecorePackage.getEString(), "name", null, 0, 1, MatrixVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return (EReference)statementEClass.getEStructuralFeatures().get(4);
EReference getStatement_MatrixFormula()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return (EReference)matrixFormulaEClass.getEStructuralFeatures().get(0);
EReference getMatrixFormula_Expression()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return matrixExpressionEClass;
EClass getMatrixExpression()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return functionDefinitionEClass;
EClass getFunctionDefinition()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return (EReference)functionDefinitionEClass.getEStructuralFeatures().get(0);
EReference getFunctionDefinition_Function()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return (EReference)functionDefinitionEClass.getEStructuralFeatures().get(1);
  public EClass getExponent()
    return exponentEClass;
  public EReference getExponent_Left()
    return (EReference)exponentEClass.getEStructuralFeatures().get(0);
  public EReference getExponent_Right()
    return (EReference)exponentEClass.getEStructuralFeatures().get(1);
  public EClass getVariable()
    return variableEClass;
  public EClass getFloat()
    return floatEClass;
  public EAttribute getFloat_Value()
    return (EAttribute)floatEClass.getEStructuralFeatures().get(0);
  public EClass getMatrixElement()
    return matrixElementEClass;
  public EAttribute getMatrixElement_Element()
    return (EAttribute)matrixElementEClass.getEStructuralFeatures().get(0);
  public EAttribute getMatrixElement_Row()
    return (EAttribute)matrixElementEClass.getEStructuralFeatures().get(1);
  public EAttribute getMatrixElement_Column()
    return (EAttribute)matrixElementEClass.getEStructuralFeatures().get(2);
  public EClass getFunction()
    return functionEClass;
  public EReference getFunction_Function()
    return (EReference)functionEClass.getEStructuralFeatures().get(0);
  public EClass getMatrixAddition()
    return matrixAdditionEClass;
EReference getFunctionDefinition_Formula()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return (EReference)matrixAdditionEClass.getEStructuralFeatures().get(0);
EReference getMatrixAddition_Left()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return (EReference)matrixAdditionEClass.getEStructuralFeatures().get(1);
EReference getMatrixAddition_Right()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return matrixSubtractionEClass;
EClass getMatrixSubtraction()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return (EReference)matrixSubtractionEClass.getEStructuralFeatures().get(0);
EReference getMatrixSubtraction_Left()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return (EReference)matrixSubtractionEClass.getEStructuralFeatures().get(1);
EReference getMatrixSubtraction_Right()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return matrixMultiplicationEClass;
EClass getMatrixMultiplication()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return (EReference)matrixMultiplicationEClass.getEStructuralFeatures().get(0);
EReference getMatrixMultiplication_Left()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return (EReference)matrixMultiplicationEClass.getEStructuralFeatures().get(1);
EReference getMatrixMultiplication_RightMatrix()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return (EReference)matrixMultiplicationEClass.getEStructuralFeatures().get(2);
EReference getMatrixMultiplication_RightScalar()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return newMatrixEClass;
EClass getNewMatrix()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return (EReference)newMatrixEClass.getEStructuralFeatures().get(0);
EReference getNewMatrix_Matrix()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return transposeMatrixEClass;
EClass getTransposeMatrix()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return (EAttribute)transposeMatrixEClass.getEStructuralFeatures().get(0);
EAttribute getTransposeMatrix_Name()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/MathPackageImpl.java
return matrixVariableEClass;
EClass getMatrixVariable()
import org.eclipse.iee.translator.jmole.math.math.Assignment;
import org.eclipse.iee.translator.jmole.math.math.Interval;
import org.eclipse.iee.translator.jmole.math.math.MatrixDefinition;
  private EClass assignmentEClass = null;
  private EClass functionDefinitionEClass = null;
  private EClass matrixDefinitionEClass = null;
  private EClass matrixRowEClass = null;
  private EClass intervalEClass = null;
  private EClass exponentEClass = null;
  private EClass variableEClass = null;
  private EClass floatEClass = null;
  public EReference getStatement_MatrixDefinition()
  public EReference getStatement_Assignment()
  public EReference getStatement_Formula()
  public EClass getAssignment()
    return assignmentEClass;
  public EAttribute getAssignment_Variable()
    return (EAttribute)assignmentEClass.getEStructuralFeatures().get(0);
  public EReference getAssignment_Value()
    return (EReference)assignmentEClass.getEStructuralFeatures().get(1);
  public EClass getFunctionDefinition()
    return functionDefinitionEClass;
  public EReference getFunctionDefinition_Function()
    return (EReference)functionDefinitionEClass.getEStructuralFeatures().get(0);
  public EReference getFunctionDefinition_Formula()
    return (EReference)functionDefinitionEClass.getEStructuralFeatures().get(1);
  public EClass getMatrixDefinition()
    return matrixDefinitionEClass;
  public EAttribute getMatrixDefinition_Name()
    return (EAttribute)matrixDefinitionEClass.getEStructuralFeatures().get(0);
  public EReference getMatrixDefinition_Rows()
    return (EReference)matrixDefinitionEClass.getEStructuralFeatures().get(1);
  public EClass getMatrixRow()
    return matrixRowEClass;
  public EAttribute getMatrixRow_Elements()
    return (EAttribute)matrixRowEClass.getEStructuralFeatures().get(0);
  public EClass getInterval()
    return intervalEClass;
  public EAttribute getInterval_OpeningBracket()
    return (EAttribute)intervalEClass.getEStructuralFeatures().get(0);
  public EReference getInterval_Ceil()
    return (EReference)intervalEClass.getEStructuralFeatures().get(1);
  public EReference getInterval_Floor()
    return (EReference)intervalEClass.getEStructuralFeatures().get(2);
  public EAttribute getInterval_ClosingBracket()
    return (EAttribute)intervalEClass.getEStructuralFeatures().get(3);
  public EClass getExponent()
    return exponentEClass;
  public EReference getExponent_Left()
    return (EReference)exponentEClass.getEStructuralFeatures().get(0);
  public EReference getExponent_Right()
    return (EReference)exponentEClass.getEStructuralFeatures().get(1);
  public EClass getVariable()
    return variableEClass;
  public EClass getFloat()
    return floatEClass;
  public EAttribute getFloat_Value()
    return (EAttribute)floatEClass.getEStructuralFeatures().get(0);
  public EClass getFunction()
    return functionEClass;
  public EReference getFunction_Function()
    return (EReference)functionEClass.getEStructuralFeatures().get(0);
    createEReference(statementEClass, STATEMENT__MATRIX_DEFINITION);
    createEReference(statementEClass, STATEMENT__ASSIGNMENT);
    assignmentEClass = createEClass(ASSIGNMENT);
    createEAttribute(assignmentEClass, ASSIGNMENT__VARIABLE);
    createEReference(assignmentEClass, ASSIGNMENT__VALUE);
    functionDefinitionEClass = createEClass(FUNCTION_DEFINITION);
    createEReference(functionDefinitionEClass, FUNCTION_DEFINITION__FUNCTION);
    createEReference(functionDefinitionEClass, FUNCTION_DEFINITION__FORMULA);

    matrixDefinitionEClass = createEClass(MATRIX_DEFINITION);
    createEAttribute(matrixDefinitionEClass, MATRIX_DEFINITION__NAME);
    createEReference(matrixDefinitionEClass, MATRIX_DEFINITION__ROWS);
    intervalEClass = createEClass(INTERVAL);
    createEAttribute(intervalEClass, INTERVAL__OPENING_BRACKET);
    createEReference(intervalEClass, INTERVAL__CEIL);
    createEReference(intervalEClass, INTERVAL__FLOOR);
    createEAttribute(intervalEClass, INTERVAL__CLOSING_BRACKET);

    intervalEClass.getESuperTypes().add(this.getExpression());
    initEReference(getStatement_MatrixDefinition(), this.getMatrixDefinition(), null, "matrixDefinition", null, 0, 1, Statement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getStatement_Assignment(), this.getAssignment(), null, "assignment", null, 0, 1, Statement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEClass(assignmentEClass, Assignment.class, "Assignment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getAssignment_Variable(), ecorePackage.getEString(), "variable", null, 0, 1, Assignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getAssignment_Value(), this.getFormula(), null, "value", null, 0, 1, Assignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEClass(functionDefinitionEClass, FunctionDefinition.class, "FunctionDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEReference(getFunctionDefinition_Function(), this.getExpression(), null, "function", null, 0, 1, FunctionDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getFunctionDefinition_Formula(), this.getFormula(), null, "formula", null, 0, 1, FunctionDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

    initEClass(matrixDefinitionEClass, MatrixDefinition.class, "MatrixDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getMatrixDefinition_Name(), ecorePackage.getEString(), "name", null, 0, 1, MatrixDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getMatrixDefinition_Rows(), this.getMatrixRow(), null, "rows", null, 0, -1, MatrixDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEClass(intervalEClass, Interval.class, "Interval", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
    initEAttribute(getInterval_OpeningBracket(), ecorePackage.getEString(), "openingBracket", null, 0, 1, Interval.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getInterval_Ceil(), this.getExpression(), null, "ceil", null, 0, 1, Interval.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEReference(getInterval_Floor(), this.getExpression(), null, "floor", null, 0, 1, Interval.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
    initEAttribute(getInterval_ClosingBracket(), ecorePackage.getEString(), "closingBracket", null, 0, 1, Interval.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

@@ -14,25 +14,34 @@
 import org.eclipse.emf.ecore.impl.EPackageImpl;
 
 import org.eclipse.iee.translator.jmole.math.math.Addition;
-import org.eclipse.iee.translator.jmole.math.math.Assignment;
 import org.eclipse.iee.translator.jmole.math.math.Division;
 import org.eclipse.iee.translator.jmole.math.math.Exponent;
 import org.eclipse.iee.translator.jmole.math.math.Expression;
 import org.eclipse.iee.translator.jmole.math.math.Factorial;
 import org.eclipse.iee.translator.jmole.math.math.Formula;
 import org.eclipse.iee.translator.jmole.math.math.Function;
 import org.eclipse.iee.translator.jmole.math.math.FunctionDefinition;
-import org.eclipse.iee.translator.jmole.math.math.Interval;
 import org.eclipse.iee.translator.jmole.math.math.Invert;
 import org.eclipse.iee.translator.jmole.math.math.MathFactory;
 import org.eclipse.iee.translator.jmole.math.math.MathPackage;
-import org.eclipse.iee.translator.jmole.math.math.MatrixDefinition;
+import org.eclipse.iee.translator.jmole.math.math.Matrix;
+import org.eclipse.iee.translator.jmole.math.math.MatrixAddition;
+import org.eclipse.iee.translator.jmole.math.math.MatrixAssignment;
+import org.eclipse.iee.translator.jmole.math.math.MatrixElement;
+import org.eclipse.iee.translator.jmole.math.math.MatrixExpression;
+import org.eclipse.iee.translator.jmole.math.math.MatrixFormula;
+import org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication;
 import org.eclipse.iee.translator.jmole.math.math.MatrixRow;
+import org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction;
+import org.eclipse.iee.translator.jmole.math.math.MatrixVariable;
 import org.eclipse.iee.translator.jmole.math.math.Modulo;
 import org.eclipse.iee.translator.jmole.math.math.Multiplication;
+import org.eclipse.iee.translator.jmole.math.math.NewMatrix;
 import org.eclipse.iee.translator.jmole.math.math.Statement;
 import org.eclipse.iee.translator.jmole.math.math.Subtraction;
+import org.eclipse.iee.translator.jmole.math.math.TransposeMatrix;
 import org.eclipse.iee.translator.jmole.math.math.Variable;
+import org.eclipse.iee.translator.jmole.math.math.VariableAssignment;
 
 /**
  * <!-- begin-user-doc -->
@@ -54,7 +63,7 @@ public class MathPackageImpl extends EPackageImpl implements MathPackage
    * <!-- end-user-doc -->
    * @generated
    */
-  private EClass assignmentEClass = null;
+  private EClass variableAssignmentEClass = null;
 
   /**
    * <!-- begin-user-doc -->
@@ -75,21 +84,42 @@ public class MathPackageImpl extends EPackageImpl implements MathPackage
    * <!-- end-user-doc -->
    * @generated
    */
-  private EClass functionDefinitionEClass = null;
+  private EClass matrixEClass = null;
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  private EClass matrixDefinitionEClass = null;
+  private EClass matrixRowEClass = null;
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  private EClass matrixRowEClass = null;
+  private EClass matrixAssignmentEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass matrixFormulaEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass matrixExpressionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass functionDefinitionEClass = null;
 
   /**
    * <!-- begin-user-doc -->
@@ -145,28 +175,28 @@ public class MathPackageImpl extends EPackageImpl implements MathPackage
    * <!-- end-user-doc -->
    * @generated
    */
-  private EClass intervalEClass = null;
+  private EClass exponentEClass = null;
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  private EClass exponentEClass = null;
+  private EClass variableEClass = null;
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  private EClass variableEClass = null;
+  private EClass floatEClass = null;
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  private EClass floatEClass = null;
+  private EClass matrixElementEClass = null;
 
   /**
    * <!-- begin-user-doc -->
@@ -175,6 +205,48 @@ public class MathPackageImpl extends EPackageImpl implements MathPackage
    */
   private EClass functionEClass = null;
 
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass matrixAdditionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass matrixSubtractionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass matrixMultiplicationEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass newMatrixEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass transposeMatrixEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass matrixVariableEClass = null;
+
   /**
    * Creates an instance of the model <b>Package</b>, registered with
    * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
@@ -263,7 +335,7 @@ public EReference getStatement_FunctionDefinition()
    * <!-- end-user-doc -->
    * @generated
    */
-  public EReference getStatement_MatrixDefinition()
+  public EReference getStatement_VariableAssignment()
   {
     return (EReference)statementEClass.getEStructuralFeatures().get(1);
   }
@@ -273,7 +345,7 @@ public EReference getStatement_MatrixDefinition()
    * <!-- end-user-doc -->
    * @generated
    */
-  public EReference getStatement_Assignment()
+  public EReference getStatement_Formula()
   {
     return (EReference)statementEClass.getEStructuralFeatures().get(2);
   }
@@ -283,7 +355,7 @@ public EReference getStatement_Assignment()
    * <!-- end-user-doc -->
    * @generated
    */
-  public EReference getStatement_Formula()
+  public EReference getStatement_MatrixAssignment()
   {
     return (EReference)statementEClass.getEStructuralFeatures().get(3);
   }
@@ -293,29 +365,39 @@ public EReference getStatement_Formula()
    * <!-- end-user-doc -->
    * @generated
    */
-  public EClass getAssignment()
+  public EReference getStatement_MatrixFormula()
+  {
+    return (EReference)statementEClass.getEStructuralFeatures().get(4);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getVariableAssignment()
   {
-    return assignmentEClass;
+    return variableAssignmentEClass;
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EAttribute getAssignment_Variable()
+  public EAttribute getVariableAssignment_Variable()
   {
-    return (EAttribute)assignmentEClass.getEStructuralFeatures().get(0);
+    return (EAttribute)variableAssignmentEClass.getEStructuralFeatures().get(0);
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EReference getAssignment_Value()
+  public EReference getVariableAssignment_Value()
   {
-    return (EReference)assignmentEClass.getEStructuralFeatures().get(1);
+    return (EReference)variableAssignmentEClass.getEStructuralFeatures().get(1);
   }
 
   /**
@@ -373,79 +455,129 @@ public EReference getExpression_Parameters()
    * <!-- end-user-doc -->
    * @generated
    */
-  public EClass getFunctionDefinition()
+  public EClass getMatrix()
   {
-    return functionDefinitionEClass;
+    return matrixEClass;
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EReference getFunctionDefinition_Function()
+  public EReference getMatrix_Rows()
   {
-    return (EReference)functionDefinitionEClass.getEStructuralFeatures().get(0);
+    return (EReference)matrixEClass.getEStructuralFeatures().get(0);
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EReference getFunctionDefinition_Formula()
+  public EClass getMatrixRow()
   {
-    return (EReference)functionDefinitionEClass.getEStructuralFeatures().get(1);
+    return matrixRowEClass;
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EClass getMatrixDefinition()
+  public EAttribute getMatrixRow_Elements()
   {
-    return matrixDefinitionEClass;
+    return (EAttribute)matrixRowEClass.getEStructuralFeatures().get(0);
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EAttribute getMatrixDefinition_Name()
+  public EClass getMatrixAssignment()
   {
-    return (EAttribute)matrixDefinitionEClass.getEStructuralFeatures().get(0);
+    return matrixAssignmentEClass;
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EReference getMatrixDefinition_Rows()
+  public EAttribute getMatrixAssignment_Variable()
   {
-    return (EReference)matrixDefinitionEClass.getEStructuralFeatures().get(1);
+    return (EAttribute)matrixAssignmentEClass.getEStructuralFeatures().get(0);
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EClass getMatrixRow()
+  public EReference getMatrixAssignment_Value()
   {
-    return matrixRowEClass;
+    return (EReference)matrixAssignmentEClass.getEStructuralFeatures().get(1);
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EAttribute getMatrixRow_Elements()
+  public EClass getMatrixFormula()
   {
-    return (EAttribute)matrixRowEClass.getEStructuralFeatures().get(0);
+    return matrixFormulaEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getMatrixFormula_Expression()
+  {
+    return (EReference)matrixFormulaEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getMatrixExpression()
+  {
+    return matrixExpressionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getFunctionDefinition()
+  {
+    return functionDefinitionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getFunctionDefinition_Function()
+  {
+    return (EReference)functionDefinitionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getFunctionDefinition_Formula()
+  {
+    return (EReference)functionDefinitionEClass.getEStructuralFeatures().get(1);
   }
 
   /**
@@ -643,129 +775,279 @@ public EReference getFactorial_Expression()
    * <!-- end-user-doc -->
    * @generated
    */
-  public EClass getInterval()
+  public EClass getExponent()
   {
-    return intervalEClass;
+    return exponentEClass;
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EAttribute getInterval_OpeningBracket()
+  public EReference getExponent_Left()
   {
-    return (EAttribute)intervalEClass.getEStructuralFeatures().get(0);
+    return (EReference)exponentEClass.getEStructuralFeatures().get(0);
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EReference getInterval_Ceil()
+  public EReference getExponent_Right()
   {
-    return (EReference)intervalEClass.getEStructuralFeatures().get(1);
+    return (EReference)exponentEClass.getEStructuralFeatures().get(1);
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EReference getInterval_Floor()
+  public EClass getVariable()
   {
-    return (EReference)intervalEClass.getEStructuralFeatures().get(2);
+    return variableEClass;
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EAttribute getInterval_ClosingBracket()
+  public EClass getFloat()
   {
-    return (EAttribute)intervalEClass.getEStructuralFeatures().get(3);
+    return floatEClass;
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EClass getExponent()
+  public EAttribute getFloat_Value()
   {
-    return exponentEClass;
+    return (EAttribute)floatEClass.getEStructuralFeatures().get(0);
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EReference getExponent_Left()
+  public EClass getMatrixElement()
   {
-    return (EReference)exponentEClass.getEStructuralFeatures().get(0);
+    return matrixElementEClass;
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EReference getExponent_Right()
+  public EAttribute getMatrixElement_Element()
   {
-    return (EReference)exponentEClass.getEStructuralFeatures().get(1);
+    return (EAttribute)matrixElementEClass.getEStructuralFeatures().get(0);
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EClass getVariable()
+  public EAttribute getMatrixElement_Row()
   {
-    return variableEClass;
+    return (EAttribute)matrixElementEClass.getEStructuralFeatures().get(1);
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EClass getFloat()
+  public EAttribute getMatrixElement_Column()
   {
-    return floatEClass;
+    return (EAttribute)matrixElementEClass.getEStructuralFeatures().get(2);
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EAttribute getFloat_Value()
+  public EClass getFunction()
   {
-    return (EAttribute)floatEClass.getEStructuralFeatures().get(0);
+    return functionEClass;
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EClass getFunction()
+  public EReference getFunction_Function()
   {
-    return functionEClass;
+    return (EReference)functionEClass.getEStructuralFeatures().get(0);
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public EReference getFunction_Function()
+  public EClass getMatrixAddition()
   {
-    return (EReference)functionEClass.getEStructuralFeatures().get(0);
+    return matrixAdditionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getMatrixAddition_Left()
+  {
+    return (EReference)matrixAdditionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getMatrixAddition_Right()
+  {
+    return (EReference)matrixAdditionEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getMatrixSubtraction()
+  {
+    return matrixSubtractionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getMatrixSubtraction_Left()
+  {
+    return (EReference)matrixSubtractionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getMatrixSubtraction_Right()
+  {
+    return (EReference)matrixSubtractionEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getMatrixMultiplication()
+  {
+    return matrixMultiplicationEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getMatrixMultiplication_Left()
+  {
+    return (EReference)matrixMultiplicationEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getMatrixMultiplication_RightMatrix()
+  {
+    return (EReference)matrixMultiplicationEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getMatrixMultiplication_RightScalar()
+  {
+    return (EReference)matrixMultiplicationEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getNewMatrix()
+  {
+    return newMatrixEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getNewMatrix_Matrix()
+  {
+    return (EReference)newMatrixEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getTransposeMatrix()
+  {
+    return transposeMatrixEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getTransposeMatrix_Name()
+  {
+    return (EAttribute)transposeMatrixEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getMatrixVariable()
+  {
+    return matrixVariableEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getMatrixVariable_Name()
+  {
+    return (EAttribute)matrixVariableEClass.getEStructuralFeatures().get(0);
   }
 
   /**
@@ -800,13 +1082,14 @@ public void createPackageContents()
     // Create classes and their features
     statementEClass = createEClass(STATEMENT);
     createEReference(statementEClass, STATEMENT__FUNCTION_DEFINITION);
-    createEReference(statementEClass, STATEMENT__MATRIX_DEFINITION);
-    createEReference(statementEClass, STATEMENT__ASSIGNMENT);
+    createEReference(statementEClass, STATEMENT__VARIABLE_ASSIGNMENT);
     createEReference(statementEClass, STATEMENT__FORMULA);
+    createEReference(statementEClass, STATEMENT__MATRIX_ASSIGNMENT);
+    createEReference(statementEClass, STATEMENT__MATRIX_FORMULA);
 
-    assignmentEClass = createEClass(ASSIGNMENT);
-    createEAttribute(assignmentEClass, ASSIGNMENT__VARIABLE);
-    createEReference(assignmentEClass, ASSIGNMENT__VALUE);
+    variableAssignmentEClass = createEClass(VARIABLE_ASSIGNMENT);
+    createEAttribute(variableAssignmentEClass, VARIABLE_ASSIGNMENT__VARIABLE);
+    createEReference(variableAssignmentEClass, VARIABLE_ASSIGNMENT__VALUE);
 
     formulaEClass = createEClass(FORMULA);
     createEReference(formulaEClass, FORMULA__EXPRESSION);
@@ -815,17 +1098,25 @@ public void createPackageContents()
     createEAttribute(expressionEClass, EXPRESSION__NAME);
     createEReference(expressionEClass, EXPRESSION__PARAMETERS);
 
-    functionDefinitionEClass = createEClass(FUNCTION_DEFINITION);
-    createEReference(functionDefinitionEClass, FUNCTION_DEFINITION__FUNCTION);
-    createEReference(functionDefinitionEClass, FUNCTION_DEFINITION__FORMULA);
-
-    matrixDefinitionEClass = createEClass(MATRIX_DEFINITION);
-    createEAttribute(matrixDefinitionEClass, MATRIX_DEFINITION__NAME);
-    createEReference(matrixDefinitionEClass, MATRIX_DEFINITION__ROWS);
+    matrixEClass = createEClass(MATRIX);
+    createEReference(matrixEClass, MATRIX__ROWS);
 
     matrixRowEClass = createEClass(MATRIX_ROW);
     createEAttribute(matrixRowEClass, MATRIX_ROW__ELEMENTS);
 
+    matrixAssignmentEClass = createEClass(MATRIX_ASSIGNMENT);
+    createEAttribute(matrixAssignmentEClass, MATRIX_ASSIGNMENT__VARIABLE);
+    createEReference(matrixAssignmentEClass, MATRIX_ASSIGNMENT__VALUE);
+
+    matrixFormulaEClass = createEClass(MATRIX_FORMULA);
+    createEReference(matrixFormulaEClass, MATRIX_FORMULA__EXPRESSION);
+
+    matrixExpressionEClass = createEClass(MATRIX_EXPRESSION);
+
+    functionDefinitionEClass = createEClass(FUNCTION_DEFINITION);
+    createEReference(functionDefinitionEClass, FUNCTION_DEFINITION__FUNCTION);
+    createEReference(functionDefinitionEClass, FUNCTION_DEFINITION__FORMULA);
+
     additionEClass = createEClass(ADDITION);
     createEReference(additionEClass, ADDITION__LEFT);
     createEReference(additionEClass, ADDITION__RIGHT);
@@ -852,12 +1143,6 @@ public void createPackageContents()
     factorialEClass = createEClass(FACTORIAL);
     createEReference(factorialEClass, FACTORIAL__EXPRESSION);
 
-    intervalEClass = createEClass(INTERVAL);
-    createEAttribute(intervalEClass, INTERVAL__OPENING_BRACKET);
-    createEReference(intervalEClass, INTERVAL__CEIL);
-    createEReference(intervalEClass, INTERVAL__FLOOR);
-    createEAttribute(intervalEClass, INTERVAL__CLOSING_BRACKET);
-
     exponentEClass = createEClass(EXPONENT);
     createEReference(exponentEClass, EXPONENT__LEFT);
     createEReference(exponentEClass, EXPONENT__RIGHT);
@@ -867,8 +1152,35 @@ public void createPackageContents()
     floatEClass = createEClass(FLOAT);
     createEAttribute(floatEClass, FLOAT__VALUE);
 
+    matrixElementEClass = createEClass(MATRIX_ELEMENT);
+    createEAttribute(matrixElementEClass, MATRIX_ELEMENT__ELEMENT);
+    createEAttribute(matrixElementEClass, MATRIX_ELEMENT__ROW);
+    createEAttribute(matrixElementEClass, MATRIX_ELEMENT__COLUMN);
+
     functionEClass = createEClass(FUNCTION);
     createEReference(functionEClass, FUNCTION__FUNCTION);
+
+    matrixAdditionEClass = createEClass(MATRIX_ADDITION);
+    createEReference(matrixAdditionEClass, MATRIX_ADDITION__LEFT);
+    createEReference(matrixAdditionEClass, MATRIX_ADDITION__RIGHT);
+
+    matrixSubtractionEClass = createEClass(MATRIX_SUBTRACTION);
+    createEReference(matrixSubtractionEClass, MATRIX_SUBTRACTION__LEFT);
+    createEReference(matrixSubtractionEClass, MATRIX_SUBTRACTION__RIGHT);
+
+    matrixMultiplicationEClass = createEClass(MATRIX_MULTIPLICATION);
+    createEReference(matrixMultiplicationEClass, MATRIX_MULTIPLICATION__LEFT);
+    createEReference(matrixMultiplicationEClass, MATRIX_MULTIPLICATION__RIGHT_MATRIX);
+    createEReference(matrixMultiplicationEClass, MATRIX_MULTIPLICATION__RIGHT_SCALAR);
+
+    newMatrixEClass = createEClass(NEW_MATRIX);
+    createEReference(newMatrixEClass, NEW_MATRIX__MATRIX);
+
+    transposeMatrixEClass = createEClass(TRANSPOSE_MATRIX);
+    createEAttribute(transposeMatrixEClass, TRANSPOSE_MATRIX__NAME);
+
+    matrixVariableEClass = createEClass(MATRIX_VARIABLE);
+    createEAttribute(matrixVariableEClass, MATRIX_VARIABLE__NAME);
   }
 
   /**
@@ -907,22 +1219,29 @@ public void initializePackageContents()
     moduloEClass.getESuperTypes().add(this.getExpression());
     invertEClass.getESuperTypes().add(this.getExpression());
     factorialEClass.getESuperTypes().add(this.getExpression());
-    intervalEClass.getESuperTypes().add(this.getExpression());
     exponentEClass.getESuperTypes().add(this.getExpression());
     variableEClass.getESuperTypes().add(this.getExpression());
     floatEClass.getESuperTypes().add(this.getExpression());
+    matrixElementEClass.getESuperTypes().add(this.getExpression());
     functionEClass.getESuperTypes().add(this.getExpression());
+    matrixAdditionEClass.getESuperTypes().add(this.getMatrixExpression());
+    matrixSubtractionEClass.getESuperTypes().add(this.getMatrixExpression());
+    matrixMultiplicationEClass.getESuperTypes().add(this.getMatrixExpression());
+    newMatrixEClass.getESuperTypes().add(this.getMatrixExpression());
+    transposeMatrixEClass.getESuperTypes().add(this.getMatrixExpression());
+    matrixVariableEClass.getESuperTypes().add(this.getMatrixExpression());
 
     // Initialize classes and features; add operations and parameters
     initEClass(statementEClass, Statement.class, "Statement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
     initEReference(getStatement_FunctionDefinition(), this.getFunctionDefinition(), null, "functionDefinition", null, 0, 1, Statement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-    initEReference(getStatement_MatrixDefinition(), this.getMatrixDefinition(), null, "matrixDefinition", null, 0, 1, Statement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-    initEReference(getStatement_Assignment(), this.getAssignment(), null, "assignment", null, 0, 1, Statement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getStatement_VariableAssignment(), this.getVariableAssignment(), null, "variableAssignment", null, 0, 1, Statement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
     initEReference(getStatement_Formula(), this.getFormula(), null, "formula", null, 0, 1, Statement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getStatement_MatrixAssignment(), this.getMatrixAssignment(), null, "matrixAssignment", null, 0, 1, Statement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getStatement_MatrixFormula(), this.getMatrixFormula(), null, "matrixFormula", null, 0, 1, Statement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
-    initEClass(assignmentEClass, Assignment.class, "Assignment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-    initEAttribute(getAssignment_Variable(), ecorePackage.getEString(), "variable", null, 0, 1, Assignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-    initEReference(getAssignment_Value(), this.getFormula(), null, "value", null, 0, 1, Assignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEClass(variableAssignmentEClass, VariableAssignment.class, "VariableAssignment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getVariableAssignment_Variable(), ecorePackage.getEString(), "variable", null, 0, 1, VariableAssignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getVariableAssignment_Value(), this.getFormula(), null, "value", null, 0, 1, VariableAssignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
     initEClass(formulaEClass, Formula.class, "Formula", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
     initEReference(getFormula_Expression(), this.getExpression(), null, "expression", null, 0, 1, Formula.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -931,17 +1250,25 @@ public void initializePackageContents()
     initEAttribute(getExpression_Name(), ecorePackage.getEString(), "name", null, 0, 1, Expression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
     initEReference(getExpression_Parameters(), this.getFormula(), null, "parameters", null, 0, -1, Expression.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
-    initEClass(functionDefinitionEClass, FunctionDefinition.class, "FunctionDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-    initEReference(getFunctionDefinition_Function(), this.getExpression(), null, "function", null, 0, 1, FunctionDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-    initEReference(getFunctionDefinition_Formula(), this.getFormula(), null, "formula", null, 0, 1, FunctionDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-    initEClass(matrixDefinitionEClass, MatrixDefinition.class, "MatrixDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-    initEAttribute(getMatrixDefinition_Name(), ecorePackage.getEString(), "name", null, 0, 1, MatrixDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-    initEReference(getMatrixDefinition_Rows(), this.getMatrixRow(), null, "rows", null, 0, -1, MatrixDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEClass(matrixEClass, Matrix.class, "Matrix", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getMatrix_Rows(), this.getMatrixRow(), null, "rows", null, 0, -1, Matrix.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
     initEClass(matrixRowEClass, MatrixRow.class, "MatrixRow", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
     initEAttribute(getMatrixRow_Elements(), ecorePackage.getEString(), "elements", null, 0, -1, MatrixRow.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
+    initEClass(matrixAssignmentEClass, MatrixAssignment.class, "MatrixAssignment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getMatrixAssignment_Variable(), ecorePackage.getEString(), "variable", null, 0, 1, MatrixAssignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getMatrixAssignment_Value(), this.getMatrixFormula(), null, "value", null, 0, 1, MatrixAssignment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(matrixFormulaEClass, MatrixFormula.class, "MatrixFormula", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getMatrixFormula_Expression(), this.getMatrixExpression(), null, "expression", null, 0, 1, MatrixFormula.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(matrixExpressionEClass, MatrixExpression.class, "MatrixExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    initEClass(functionDefinitionEClass, FunctionDefinition.class, "FunctionDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getFunctionDefinition_Function(), this.getExpression(), null, "function", null, 0, 1, FunctionDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getFunctionDefinition_Formula(), this.getFormula(), null, "formula", null, 0, 1, FunctionDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
     initEClass(additionEClass, Addition.class, "Addition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
     initEReference(getAddition_Left(), this.getExpression(), null, "left", null, 0, 1, Addition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
     initEReference(getAddition_Right(), this.getExpression(), null, "right", null, 0, 1, Addition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -968,12 +1295,6 @@ public void initializePackageContents()
     initEClass(factorialEClass, Factorial.class, "Factorial", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
     initEReference(getFactorial_Expression(), this.getExpression(), null, "expression", null, 0, 1, Factorial.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
-    initEClass(intervalEClass, Interval.class, "Interval", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-    initEAttribute(getInterval_OpeningBracket(), ecorePackage.getEString(), "openingBracket", null, 0, 1, Interval.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-    initEReference(getInterval_Ceil(), this.getExpression(), null, "ceil", null, 0, 1, Interval.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-    initEReference(getInterval_Floor(), this.getExpression(), null, "floor", null, 0, 1, Interval.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-    initEAttribute(getInterval_ClosingBracket(), ecorePackage.getEString(), "closingBracket", null, 0, 1, Interval.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
     initEClass(exponentEClass, Exponent.class, "Exponent", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
     initEReference(getExponent_Left(), this.getExpression(), null, "left", null, 0, 1, Exponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
     initEReference(getExponent_Right(), this.getExpression(), null, "right", null, 0, 1, Exponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -983,9 +1304,36 @@ public void initializePackageContents()
     initEClass(floatEClass, org.eclipse.iee.translator.jmole.math.math.Float.class, "Float", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
     initEAttribute(getFloat_Value(), ecorePackage.getEString(), "value", null, 0, 1, org.eclipse.iee.translator.jmole.math.math.Float.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
+    initEClass(matrixElementEClass, MatrixElement.class, "MatrixElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getMatrixElement_Element(), ecorePackage.getEString(), "element", null, 0, 1, MatrixElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getMatrixElement_Row(), ecorePackage.getEInt(), "row", null, 0, 1, MatrixElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getMatrixElement_Column(), ecorePackage.getEInt(), "column", null, 0, 1, MatrixElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
     initEClass(functionEClass, Function.class, "Function", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
     initEReference(getFunction_Function(), this.getExpression(), null, "function", null, 0, 1, Function.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
+    initEClass(matrixAdditionEClass, MatrixAddition.class, "MatrixAddition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getMatrixAddition_Left(), this.getMatrixExpression(), null, "left", null, 0, 1, MatrixAddition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getMatrixAddition_Right(), this.getMatrixExpression(), null, "right", null, 0, 1, MatrixAddition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(matrixSubtractionEClass, MatrixSubtraction.class, "MatrixSubtraction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getMatrixSubtraction_Left(), this.getMatrixExpression(), null, "left", null, 0, 1, MatrixSubtraction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getMatrixSubtraction_Right(), this.getMatrixExpression(), null, "right", null, 0, 1, MatrixSubtraction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(matrixMultiplicationEClass, MatrixMultiplication.class, "MatrixMultiplication", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getMatrixMultiplication_Left(), this.getMatrixExpression(), null, "left", null, 0, 1, MatrixMultiplication.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getMatrixMultiplication_RightMatrix(), this.getMatrixExpression(), null, "rightMatrix", null, 0, 1, MatrixMultiplication.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getMatrixMultiplication_RightScalar(), this.getFormula(), null, "rightScalar", null, 0, 1, MatrixMultiplication.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(newMatrixEClass, NewMatrix.class, "NewMatrix", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getNewMatrix_Matrix(), this.getMatrix(), null, "matrix", null, 0, 1, NewMatrix.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(transposeMatrixEClass, TransposeMatrix.class, "TransposeMatrix", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getTransposeMatrix_Name(), ecorePackage.getEString(), "name", null, 0, 1, TransposeMatrix.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(matrixVariableEClass, MatrixVariable.class, "MatrixVariable", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getMatrixVariable_Name(), ecorePackage.getEString(), "name", null, 0, 1, MatrixVariable.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
     // Create resource
     createResource(eNS_URI);
   }
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2Fimpl%2FMathPackageImpl.java
624add62695488635dfc1c8169ea9a29dd6605ed
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2Fimpl%2FStatementImpl.java
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2Fimpl%2FStatementImpl.java?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/StatementImpl.java
import org.eclipse.iee.translator.jmole.math.math.MatrixAssignment;
import org.eclipse.iee.translator.jmole.math.math.MatrixFormula;
import org.eclipse.iee.translator.jmole.math.math.VariableAssignment;
 *   <li>{@link org.eclipse.iee.translator.jmole.math.math.impl.StatementImpl#getVariableAssignment <em>Variable Assignment</em>}</li>
 *   <li>{@link org.eclipse.iee.translator.jmole.math.math.impl.StatementImpl#getMatrixAssignment <em>Matrix Assignment</em>}</li>
 *   <li>{@link org.eclipse.iee.translator.jmole.math.math.impl.StatementImpl#getMatrixFormula <em>Matrix Formula</em>}</li>
   * The cached value of the '{@link #getVariableAssignment() <em>Variable Assignment</em>}' containment reference.
   * @see #getVariableAssignment()
  protected VariableAssignment variableAssignment;
   * The cached value of the '{@link #getFormula() <em>Formula</em>}' containment reference.
   * @see #getFormula()
  protected Formula formula;
   * The cached value of the '{@link #getMatrixAssignment() <em>Matrix Assignment</em>}' containment reference.
   * @see #getMatrixAssignment()
  protected MatrixAssignment matrixAssignment;

  /**
   * The cached value of the '{@link #getMatrixFormula() <em>Matrix Formula</em>}' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @see #getMatrixFormula()
   * @generated
   * @ordered
   */
  protected MatrixFormula matrixFormula;
  public VariableAssignment getVariableAssignment()
    return variableAssignment;
  public NotificationChain basicSetVariableAssignment(VariableAssignment newVariableAssignment, NotificationChain msgs)
    VariableAssignment oldVariableAssignment = variableAssignment;
    variableAssignment = newVariableAssignment;
      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__VARIABLE_ASSIGNMENT, oldVariableAssignment, newVariableAssignment);
  public void setVariableAssignment(VariableAssignment newVariableAssignment)
    if (newVariableAssignment != variableAssignment)
      if (variableAssignment != null)
        msgs = ((InternalEObject)variableAssignment).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__VARIABLE_ASSIGNMENT, null, msgs);
      if (newVariableAssignment != null)
        msgs = ((InternalEObject)newVariableAssignment).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__VARIABLE_ASSIGNMENT, null, msgs);
      msgs = basicSetVariableAssignment(newVariableAssignment, msgs);
      eNotify(new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__VARIABLE_ASSIGNMENT, newVariableAssignment, newVariableAssignment));
  public Formula getFormula()
    return formula;
  public NotificationChain basicSetFormula(Formula newFormula, NotificationChain msgs)
    Formula oldFormula = formula;
    formula = newFormula;
      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__FORMULA, oldFormula, newFormula);
  public void setFormula(Formula newFormula)
    if (newFormula != formula)
      if (formula != null)
        msgs = ((InternalEObject)formula).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__FORMULA, null, msgs);
      if (newFormula != null)
        msgs = ((InternalEObject)newFormula).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__FORMULA, null, msgs);
      msgs = basicSetFormula(newFormula, msgs);
      eNotify(new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__FORMULA, newFormula, newFormula));
  public MatrixAssignment getMatrixAssignment()
    return matrixAssignment;
  public NotificationChain basicSetMatrixAssignment(MatrixAssignment newMatrixAssignment, NotificationChain msgs)
    MatrixAssignment oldMatrixAssignment = matrixAssignment;
    matrixAssignment = newMatrixAssignment;
      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__MATRIX_ASSIGNMENT, oldMatrixAssignment, newMatrixAssignment);
  public void setMatrixAssignment(MatrixAssignment newMatrixAssignment)
    if (newMatrixAssignment != matrixAssignment)
      if (matrixAssignment != null)
        msgs = ((InternalEObject)matrixAssignment).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__MATRIX_ASSIGNMENT, null, msgs);
      if (newMatrixAssignment != null)
        msgs = ((InternalEObject)newMatrixAssignment).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__MATRIX_ASSIGNMENT, null, msgs);
      msgs = basicSetMatrixAssignment(newMatrixAssignment, msgs);
      eNotify(new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__MATRIX_ASSIGNMENT, newMatrixAssignment, newMatrixAssignment));
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public MatrixFormula getMatrixFormula()
  {
    return matrixFormula;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public NotificationChain basicSetMatrixFormula(MatrixFormula newMatrixFormula, NotificationChain msgs)
  {
    MatrixFormula oldMatrixFormula = matrixFormula;
    matrixFormula = newMatrixFormula;
    if (eNotificationRequired())
    {
      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__MATRIX_FORMULA, oldMatrixFormula, newMatrixFormula);
      if (msgs == null) msgs = notification; else msgs.add(notification);
    }
    return msgs;
  }

  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  public void setMatrixFormula(MatrixFormula newMatrixFormula)
  {
    if (newMatrixFormula != matrixFormula)
    {
      NotificationChain msgs = null;
      if (matrixFormula != null)
        msgs = ((InternalEObject)matrixFormula).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__MATRIX_FORMULA, null, msgs);
      if (newMatrixFormula != null)
        msgs = ((InternalEObject)newMatrixFormula).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__MATRIX_FORMULA, null, msgs);
      msgs = basicSetMatrixFormula(newMatrixFormula, msgs);
      if (msgs != null) msgs.dispatch();
    }
    else if (eNotificationRequired())
      eNotify(new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__MATRIX_FORMULA, newMatrixFormula, newMatrixFormula));
      case MathPackage.STATEMENT__VARIABLE_ASSIGNMENT:
        return basicSetVariableAssignment(null, msgs);
      case MathPackage.STATEMENT__MATRIX_ASSIGNMENT:
        return basicSetMatrixAssignment(null, msgs);
      case MathPackage.STATEMENT__MATRIX_FORMULA:
        return basicSetMatrixFormula(null, msgs);
      case MathPackage.STATEMENT__VARIABLE_ASSIGNMENT:
        return getVariableAssignment();
      case MathPackage.STATEMENT__MATRIX_ASSIGNMENT:
        return getMatrixAssignment();
      case MathPackage.STATEMENT__MATRIX_FORMULA:
        return getMatrixFormula();
      case MathPackage.STATEMENT__VARIABLE_ASSIGNMENT:
        setVariableAssignment((VariableAssignment)newValue);
      case MathPackage.STATEMENT__MATRIX_ASSIGNMENT:
        setMatrixAssignment((MatrixAssignment)newValue);
        return;
      case MathPackage.STATEMENT__MATRIX_FORMULA:
        setMatrixFormula((MatrixFormula)newValue);
        return;
      case MathPackage.STATEMENT__VARIABLE_ASSIGNMENT:
        setVariableAssignment((VariableAssignment)null);
      case MathPackage.STATEMENT__MATRIX_ASSIGNMENT:
        setMatrixAssignment((MatrixAssignment)null);
        return;
      case MathPackage.STATEMENT__MATRIX_FORMULA:
        setMatrixFormula((MatrixFormula)null);
        return;
      case MathPackage.STATEMENT__VARIABLE_ASSIGNMENT:
        return variableAssignment != null;
      case MathPackage.STATEMENT__MATRIX_ASSIGNMENT:
        return matrixAssignment != null;
      case MathPackage.STATEMENT__MATRIX_FORMULA:
        return matrixFormula != null;
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/StatementImpl.java
return matrixFormula;
MatrixFormula getMatrixFormula()
MatrixFormula newMatrixFormula  NotificationChain msgs
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/StatementImpl.java
MatrixFormula oldMatrixFormula = matrixFormula;
    matrixFormula = newMatrixFormula;
    if (eNotificationRequired())
    {
      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__MATRIX_FORMULA, oldMatrixFormula, newMatrixFormula);
      if (msgs == null) msgs = notification; else msgs.add(notification);
NotificationChain basicSetMatrixFormula(MatrixFormula newMatrixFormula, NotificationChain msgs)
MatrixFormula newMatrixFormula
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/impl/StatementImpl.java
if (newMatrixFormula != matrixFormula)
    {
      NotificationChain msgs = null;
      if (matrixFormula != null)
        msgs = ((InternalEObject)matrixFormula).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__MATRIX_FORMULA, null, msgs);
      if (newMatrixFormula != null)
        msgs = ((InternalEObject)newMatrixFormula).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__MATRIX_FORMULA, null, msgs);
      msgs = basicSetMatrixFormula(newMatrixFormula, msgs);
      if (msgs != null) msgs.dispatch();
void setMatrixFormula(MatrixFormula newMatrixFormula)
import org.eclipse.iee.translator.jmole.math.math.Assignment;
import org.eclipse.iee.translator.jmole.math.math.MatrixDefinition;
 *   <li>{@link org.eclipse.iee.translator.jmole.math.math.impl.StatementImpl#getMatrixDefinition <em>Matrix Definition</em>}</li>
 *   <li>{@link org.eclipse.iee.translator.jmole.math.math.impl.StatementImpl#getAssignment <em>Assignment</em>}</li>
   * The cached value of the '{@link #getMatrixDefinition() <em>Matrix Definition</em>}' containment reference.
   * @see #getMatrixDefinition()
  protected MatrixDefinition matrixDefinition;
   * The cached value of the '{@link #getAssignment() <em>Assignment</em>}' containment reference.
   * @see #getAssignment()
  protected Assignment assignment;
   * The cached value of the '{@link #getFormula() <em>Formula</em>}' containment reference.
   * @see #getFormula()
  protected Formula formula;
  public MatrixDefinition getMatrixDefinition()
    return matrixDefinition;
  public NotificationChain basicSetMatrixDefinition(MatrixDefinition newMatrixDefinition, NotificationChain msgs)
    MatrixDefinition oldMatrixDefinition = matrixDefinition;
    matrixDefinition = newMatrixDefinition;
      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__MATRIX_DEFINITION, oldMatrixDefinition, newMatrixDefinition);
  public void setMatrixDefinition(MatrixDefinition newMatrixDefinition)
    if (newMatrixDefinition != matrixDefinition)
      if (matrixDefinition != null)
        msgs = ((InternalEObject)matrixDefinition).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__MATRIX_DEFINITION, null, msgs);
      if (newMatrixDefinition != null)
        msgs = ((InternalEObject)newMatrixDefinition).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__MATRIX_DEFINITION, null, msgs);
      msgs = basicSetMatrixDefinition(newMatrixDefinition, msgs);
      eNotify(new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__MATRIX_DEFINITION, newMatrixDefinition, newMatrixDefinition));
  public Assignment getAssignment()
    return assignment;
  public NotificationChain basicSetAssignment(Assignment newAssignment, NotificationChain msgs)
    Assignment oldAssignment = assignment;
    assignment = newAssignment;
      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__ASSIGNMENT, oldAssignment, newAssignment);
  public void setAssignment(Assignment newAssignment)
    if (newAssignment != assignment)
      if (assignment != null)
        msgs = ((InternalEObject)assignment).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__ASSIGNMENT, null, msgs);
      if (newAssignment != null)
        msgs = ((InternalEObject)newAssignment).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__ASSIGNMENT, null, msgs);
      msgs = basicSetAssignment(newAssignment, msgs);
      eNotify(new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__ASSIGNMENT, newAssignment, newAssignment));
  public Formula getFormula()
    return formula;
  public NotificationChain basicSetFormula(Formula newFormula, NotificationChain msgs)
    Formula oldFormula = formula;
    formula = newFormula;
      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__FORMULA, oldFormula, newFormula);
  public void setFormula(Formula newFormula)
    if (newFormula != formula)
      if (formula != null)
        msgs = ((InternalEObject)formula).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__FORMULA, null, msgs);
      if (newFormula != null)
        msgs = ((InternalEObject)newFormula).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__FORMULA, null, msgs);
      msgs = basicSetFormula(newFormula, msgs);
      eNotify(new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__FORMULA, newFormula, newFormula));
      case MathPackage.STATEMENT__MATRIX_DEFINITION:
        return basicSetMatrixDefinition(null, msgs);
      case MathPackage.STATEMENT__ASSIGNMENT:
        return basicSetAssignment(null, msgs);
      case MathPackage.STATEMENT__MATRIX_DEFINITION:
        return getMatrixDefinition();
      case MathPackage.STATEMENT__ASSIGNMENT:
        return getAssignment();
      case MathPackage.STATEMENT__MATRIX_DEFINITION:
        setMatrixDefinition((MatrixDefinition)newValue);
        return;
      case MathPackage.STATEMENT__ASSIGNMENT:
        setAssignment((Assignment)newValue);
      case MathPackage.STATEMENT__MATRIX_DEFINITION:
        setMatrixDefinition((MatrixDefinition)null);
        return;
      case MathPackage.STATEMENT__ASSIGNMENT:
        setAssignment((Assignment)null);
      case MathPackage.STATEMENT__MATRIX_DEFINITION:
        return matrixDefinition != null;
      case MathPackage.STATEMENT__ASSIGNMENT:
        return assignment != null;
@@ -15,12 +15,13 @@
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
 
-import org.eclipse.iee.translator.jmole.math.math.Assignment;
 import org.eclipse.iee.translator.jmole.math.math.Formula;
 import org.eclipse.iee.translator.jmole.math.math.FunctionDefinition;
 import org.eclipse.iee.translator.jmole.math.math.MathPackage;
-import org.eclipse.iee.translator.jmole.math.math.MatrixDefinition;
+import org.eclipse.iee.translator.jmole.math.math.MatrixAssignment;
+import org.eclipse.iee.translator.jmole.math.math.MatrixFormula;
 import org.eclipse.iee.translator.jmole.math.math.Statement;
+import org.eclipse.iee.translator.jmole.math.math.VariableAssignment;
 
 /**
  * <!-- begin-user-doc -->
@@ -30,9 +31,10 @@
  * The following features are implemented:
  * <ul>
  *   <li>{@link org.eclipse.iee.translator.jmole.math.math.impl.StatementImpl#getFunctionDefinition <em>Function Definition</em>}</li>
- *   <li>{@link org.eclipse.iee.translator.jmole.math.math.impl.StatementImpl#getMatrixDefinition <em>Matrix Definition</em>}</li>
- *   <li>{@link org.eclipse.iee.translator.jmole.math.math.impl.StatementImpl#getAssignment <em>Assignment</em>}</li>
+ *   <li>{@link org.eclipse.iee.translator.jmole.math.math.impl.StatementImpl#getVariableAssignment <em>Variable Assignment</em>}</li>
  *   <li>{@link org.eclipse.iee.translator.jmole.math.math.impl.StatementImpl#getFormula <em>Formula</em>}</li>
+ *   <li>{@link org.eclipse.iee.translator.jmole.math.math.impl.StatementImpl#getMatrixAssignment <em>Matrix Assignment</em>}</li>
+ *   <li>{@link org.eclipse.iee.translator.jmole.math.math.impl.StatementImpl#getMatrixFormula <em>Matrix Formula</em>}</li>
  * </ul>
  * </p>
  *
@@ -51,34 +53,44 @@ public class StatementImpl extends MinimalEObjectImpl.Container implements State
   protected FunctionDefinition functionDefinition;
 
   /**
-   * The cached value of the '{@link #getMatrixDefinition() <em>Matrix Definition</em>}' containment reference.
+   * The cached value of the '{@link #getVariableAssignment() <em>Variable Assignment</em>}' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @see #getMatrixDefinition()
+   * @see #getVariableAssignment()
    * @generated
    * @ordered
    */
-  protected MatrixDefinition matrixDefinition;
+  protected VariableAssignment variableAssignment;
 
   /**
-   * The cached value of the '{@link #getAssignment() <em>Assignment</em>}' containment reference.
+   * The cached value of the '{@link #getFormula() <em>Formula</em>}' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @see #getAssignment()
+   * @see #getFormula()
    * @generated
    * @ordered
    */
-  protected Assignment assignment;
+  protected Formula formula;
 
   /**
-   * The cached value of the '{@link #getFormula() <em>Formula</em>}' containment reference.
+   * The cached value of the '{@link #getMatrixAssignment() <em>Matrix Assignment</em>}' containment reference.
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-   * @see #getFormula()
+   * @see #getMatrixAssignment()
    * @generated
    * @ordered
    */
-  protected Formula formula;
+  protected MatrixAssignment matrixAssignment;
+
+  /**
+   * The cached value of the '{@link #getMatrixFormula() <em>Matrix Formula</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getMatrixFormula()
+   * @generated
+   * @ordered
+   */
+  protected MatrixFormula matrixFormula;
 
   /**
    * <!-- begin-user-doc -->
@@ -154,23 +166,23 @@ else if (eNotificationRequired())
    * <!-- end-user-doc -->
    * @generated
    */
-  public MatrixDefinition getMatrixDefinition()
+  public VariableAssignment getVariableAssignment()
   {
-    return matrixDefinition;
+    return variableAssignment;
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public NotificationChain basicSetMatrixDefinition(MatrixDefinition newMatrixDefinition, NotificationChain msgs)
+  public NotificationChain basicSetVariableAssignment(VariableAssignment newVariableAssignment, NotificationChain msgs)
   {
-    MatrixDefinition oldMatrixDefinition = matrixDefinition;
-    matrixDefinition = newMatrixDefinition;
+    VariableAssignment oldVariableAssignment = variableAssignment;
+    variableAssignment = newVariableAssignment;
     if (eNotificationRequired())
     {
-      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__MATRIX_DEFINITION, oldMatrixDefinition, newMatrixDefinition);
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__VARIABLE_ASSIGNMENT, oldVariableAssignment, newVariableAssignment);
       if (msgs == null) msgs = notification; else msgs.add(notification);
     }
     return msgs;
@@ -181,44 +193,44 @@ public NotificationChain basicSetMatrixDefinition(MatrixDefinition newMatrixDefi
    * <!-- end-user-doc -->
    * @generated
    */
-  public void setMatrixDefinition(MatrixDefinition newMatrixDefinition)
+  public void setVariableAssignment(VariableAssignment newVariableAssignment)
   {
-    if (newMatrixDefinition != matrixDefinition)
+    if (newVariableAssignment != variableAssignment)
     {
       NotificationChain msgs = null;
-      if (matrixDefinition != null)
-        msgs = ((InternalEObject)matrixDefinition).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__MATRIX_DEFINITION, null, msgs);
-      if (newMatrixDefinition != null)
-        msgs = ((InternalEObject)newMatrixDefinition).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__MATRIX_DEFINITION, null, msgs);
-      msgs = basicSetMatrixDefinition(newMatrixDefinition, msgs);
+      if (variableAssignment != null)
+        msgs = ((InternalEObject)variableAssignment).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__VARIABLE_ASSIGNMENT, null, msgs);
+      if (newVariableAssignment != null)
+        msgs = ((InternalEObject)newVariableAssignment).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__VARIABLE_ASSIGNMENT, null, msgs);
+      msgs = basicSetVariableAssignment(newVariableAssignment, msgs);
       if (msgs != null) msgs.dispatch();
     }
     else if (eNotificationRequired())
-      eNotify(new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__MATRIX_DEFINITION, newMatrixDefinition, newMatrixDefinition));
+      eNotify(new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__VARIABLE_ASSIGNMENT, newVariableAssignment, newVariableAssignment));
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public Assignment getAssignment()
+  public Formula getFormula()
   {
-    return assignment;
+    return formula;
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public NotificationChain basicSetAssignment(Assignment newAssignment, NotificationChain msgs)
+  public NotificationChain basicSetFormula(Formula newFormula, NotificationChain msgs)
   {
-    Assignment oldAssignment = assignment;
-    assignment = newAssignment;
+    Formula oldFormula = formula;
+    formula = newFormula;
     if (eNotificationRequired())
     {
-      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__ASSIGNMENT, oldAssignment, newAssignment);
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__FORMULA, oldFormula, newFormula);
       if (msgs == null) msgs = notification; else msgs.add(notification);
     }
     return msgs;
@@ -229,44 +241,44 @@ public NotificationChain basicSetAssignment(Assignment newAssignment, Notificati
    * <!-- end-user-doc -->
    * @generated
    */
-  public void setAssignment(Assignment newAssignment)
+  public void setFormula(Formula newFormula)
   {
-    if (newAssignment != assignment)
+    if (newFormula != formula)
     {
       NotificationChain msgs = null;
-      if (assignment != null)
-        msgs = ((InternalEObject)assignment).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__ASSIGNMENT, null, msgs);
-      if (newAssignment != null)
-        msgs = ((InternalEObject)newAssignment).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__ASSIGNMENT, null, msgs);
-      msgs = basicSetAssignment(newAssignment, msgs);
+      if (formula != null)
+        msgs = ((InternalEObject)formula).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__FORMULA, null, msgs);
+      if (newFormula != null)
+        msgs = ((InternalEObject)newFormula).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__FORMULA, null, msgs);
+      msgs = basicSetFormula(newFormula, msgs);
       if (msgs != null) msgs.dispatch();
     }
     else if (eNotificationRequired())
-      eNotify(new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__ASSIGNMENT, newAssignment, newAssignment));
+      eNotify(new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__FORMULA, newFormula, newFormula));
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public Formula getFormula()
+  public MatrixAssignment getMatrixAssignment()
   {
-    return formula;
+    return matrixAssignment;
   }
 
   /**
    * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
    * @generated
    */
-  public NotificationChain basicSetFormula(Formula newFormula, NotificationChain msgs)
+  public NotificationChain basicSetMatrixAssignment(MatrixAssignment newMatrixAssignment, NotificationChain msgs)
   {
-    Formula oldFormula = formula;
-    formula = newFormula;
+    MatrixAssignment oldMatrixAssignment = matrixAssignment;
+    matrixAssignment = newMatrixAssignment;
     if (eNotificationRequired())
     {
-      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__FORMULA, oldFormula, newFormula);
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__MATRIX_ASSIGNMENT, oldMatrixAssignment, newMatrixAssignment);
       if (msgs == null) msgs = notification; else msgs.add(notification);
     }
     return msgs;
@@ -277,20 +289,68 @@ public NotificationChain basicSetFormula(Formula newFormula, NotificationChain m
    * <!-- end-user-doc -->
    * @generated
    */
-  public void setFormula(Formula newFormula)
+  public void setMatrixAssignment(MatrixAssignment newMatrixAssignment)
   {
-    if (newFormula != formula)
+    if (newMatrixAssignment != matrixAssignment)
     {
       NotificationChain msgs = null;
-      if (formula != null)
-        msgs = ((InternalEObject)formula).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__FORMULA, null, msgs);
-      if (newFormula != null)
-        msgs = ((InternalEObject)newFormula).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__FORMULA, null, msgs);
-      msgs = basicSetFormula(newFormula, msgs);
+      if (matrixAssignment != null)
+        msgs = ((InternalEObject)matrixAssignment).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__MATRIX_ASSIGNMENT, null, msgs);
+      if (newMatrixAssignment != null)
+        msgs = ((InternalEObject)newMatrixAssignment).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__MATRIX_ASSIGNMENT, null, msgs);
+      msgs = basicSetMatrixAssignment(newMatrixAssignment, msgs);
       if (msgs != null) msgs.dispatch();
     }
     else if (eNotificationRequired())
-      eNotify(new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__FORMULA, newFormula, newFormula));
+      eNotify(new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__MATRIX_ASSIGNMENT, newMatrixAssignment, newMatrixAssignment));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MatrixFormula getMatrixFormula()
+  {
+    return matrixFormula;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetMatrixFormula(MatrixFormula newMatrixFormula, NotificationChain msgs)
+  {
+    MatrixFormula oldMatrixFormula = matrixFormula;
+    matrixFormula = newMatrixFormula;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__MATRIX_FORMULA, oldMatrixFormula, newMatrixFormula);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setMatrixFormula(MatrixFormula newMatrixFormula)
+  {
+    if (newMatrixFormula != matrixFormula)
+    {
+      NotificationChain msgs = null;
+      if (matrixFormula != null)
+        msgs = ((InternalEObject)matrixFormula).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__MATRIX_FORMULA, null, msgs);
+      if (newMatrixFormula != null)
+        msgs = ((InternalEObject)newMatrixFormula).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MathPackage.STATEMENT__MATRIX_FORMULA, null, msgs);
+      msgs = basicSetMatrixFormula(newMatrixFormula, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, MathPackage.STATEMENT__MATRIX_FORMULA, newMatrixFormula, newMatrixFormula));
   }
 
   /**
@@ -305,12 +365,14 @@ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID,
     {
       case MathPackage.STATEMENT__FUNCTION_DEFINITION:
         return basicSetFunctionDefinition(null, msgs);
-      case MathPackage.STATEMENT__MATRIX_DEFINITION:
-        return basicSetMatrixDefinition(null, msgs);
-      case MathPackage.STATEMENT__ASSIGNMENT:
-        return basicSetAssignment(null, msgs);
+      case MathPackage.STATEMENT__VARIABLE_ASSIGNMENT:
+        return basicSetVariableAssignment(null, msgs);
       case MathPackage.STATEMENT__FORMULA:
         return basicSetFormula(null, msgs);
+      case MathPackage.STATEMENT__MATRIX_ASSIGNMENT:
+        return basicSetMatrixAssignment(null, msgs);
+      case MathPackage.STATEMENT__MATRIX_FORMULA:
+        return basicSetMatrixFormula(null, msgs);
     }
     return super.eInverseRemove(otherEnd, featureID, msgs);
   }
@@ -327,12 +389,14 @@ public Object eGet(int featureID, boolean resolve, boolean coreType)
     {
       case MathPackage.STATEMENT__FUNCTION_DEFINITION:
         return getFunctionDefinition();
-      case MathPackage.STATEMENT__MATRIX_DEFINITION:
-        return getMatrixDefinition();
-      case MathPackage.STATEMENT__ASSIGNMENT:
-        return getAssignment();
+      case MathPackage.STATEMENT__VARIABLE_ASSIGNMENT:
+        return getVariableAssignment();
       case MathPackage.STATEMENT__FORMULA:
         return getFormula();
+      case MathPackage.STATEMENT__MATRIX_ASSIGNMENT:
+        return getMatrixAssignment();
+      case MathPackage.STATEMENT__MATRIX_FORMULA:
+        return getMatrixFormula();
     }
     return super.eGet(featureID, resolve, coreType);
   }
@@ -350,15 +414,18 @@ public void eSet(int featureID, Object newValue)
       case MathPackage.STATEMENT__FUNCTION_DEFINITION:
         setFunctionDefinition((FunctionDefinition)newValue);
         return;
-      case MathPackage.STATEMENT__MATRIX_DEFINITION:
-        setMatrixDefinition((MatrixDefinition)newValue);
-        return;
-      case MathPackage.STATEMENT__ASSIGNMENT:
-        setAssignment((Assignment)newValue);
+      case MathPackage.STATEMENT__VARIABLE_ASSIGNMENT:
+        setVariableAssignment((VariableAssignment)newValue);
         return;
       case MathPackage.STATEMENT__FORMULA:
         setFormula((Formula)newValue);
         return;
+      case MathPackage.STATEMENT__MATRIX_ASSIGNMENT:
+        setMatrixAssignment((MatrixAssignment)newValue);
+        return;
+      case MathPackage.STATEMENT__MATRIX_FORMULA:
+        setMatrixFormula((MatrixFormula)newValue);
+        return;
     }
     super.eSet(featureID, newValue);
   }
@@ -376,15 +443,18 @@ public void eUnset(int featureID)
       case MathPackage.STATEMENT__FUNCTION_DEFINITION:
         setFunctionDefinition((FunctionDefinition)null);
         return;
-      case MathPackage.STATEMENT__MATRIX_DEFINITION:
-        setMatrixDefinition((MatrixDefinition)null);
-        return;
-      case MathPackage.STATEMENT__ASSIGNMENT:
-        setAssignment((Assignment)null);
+      case MathPackage.STATEMENT__VARIABLE_ASSIGNMENT:
+        setVariableAssignment((VariableAssignment)null);
         return;
       case MathPackage.STATEMENT__FORMULA:
         setFormula((Formula)null);
         return;
+      case MathPackage.STATEMENT__MATRIX_ASSIGNMENT:
+        setMatrixAssignment((MatrixAssignment)null);
+        return;
+      case MathPackage.STATEMENT__MATRIX_FORMULA:
+        setMatrixFormula((MatrixFormula)null);
+        return;
     }
     super.eUnset(featureID);
   }
@@ -401,12 +471,14 @@ public boolean eIsSet(int featureID)
     {
       case MathPackage.STATEMENT__FUNCTION_DEFINITION:
         return functionDefinition != null;
-      case MathPackage.STATEMENT__MATRIX_DEFINITION:
-        return matrixDefinition != null;
-      case MathPackage.STATEMENT__ASSIGNMENT:
-        return assignment != null;
+      case MathPackage.STATEMENT__VARIABLE_ASSIGNMENT:
+        return variableAssignment != null;
       case MathPackage.STATEMENT__FORMULA:
         return formula != null;
+      case MathPackage.STATEMENT__MATRIX_ASSIGNMENT:
+        return matrixAssignment != null;
+      case MathPackage.STATEMENT__MATRIX_FORMULA:
+        return matrixFormula != null;
     }
     return super.eIsSet(featureID);
   }
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2Fimpl%2FStatementImpl.java
9b66edbd65fdd0eb7e2c628cd5b3f057da47c84c
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2Futil%2FMathAdapterFactory.java
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2Futil%2FMathAdapterFactory.java?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
import org.eclipse.iee.translator.jmole.math.math.Matrix;
import org.eclipse.iee.translator.jmole.math.math.MatrixAddition;
import org.eclipse.iee.translator.jmole.math.math.MatrixAssignment;
import org.eclipse.iee.translator.jmole.math.math.MatrixElement;
import org.eclipse.iee.translator.jmole.math.math.MatrixExpression;
import org.eclipse.iee.translator.jmole.math.math.MatrixFormula;
import org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication;
import org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction;
import org.eclipse.iee.translator.jmole.math.math.MatrixVariable;
import org.eclipse.iee.translator.jmole.math.math.NewMatrix;
import org.eclipse.iee.translator.jmole.math.math.TransposeMatrix;
import org.eclipse.iee.translator.jmole.math.math.VariableAssignment;
      public Adapter caseVariableAssignment(VariableAssignment object)
        return createVariableAssignmentAdapter();
      public Adapter caseMatrix(Matrix object)
        return createMatrixAdapter();
      public Adapter caseMatrixRow(MatrixRow object)
        return createMatrixRowAdapter();
      public Adapter caseMatrixAssignment(MatrixAssignment object)
        return createMatrixAssignmentAdapter();
      }
      @Override
      public Adapter caseMatrixFormula(MatrixFormula object)
      {
        return createMatrixFormulaAdapter();
      }
      @Override
      public Adapter caseMatrixExpression(MatrixExpression object)
      {
        return createMatrixExpressionAdapter();
      }
      @Override
      public Adapter caseFunctionDefinition(FunctionDefinition object)
      {
        return createFunctionDefinitionAdapter();
      public Adapter caseMatrixElement(MatrixElement object)
      {
        return createMatrixElementAdapter();
      }
      @Override
      public Adapter caseMatrixAddition(MatrixAddition object)
      {
        return createMatrixAdditionAdapter();
      }
      @Override
      public Adapter caseMatrixSubtraction(MatrixSubtraction object)
      {
        return createMatrixSubtractionAdapter();
      }
      @Override
      public Adapter caseMatrixMultiplication(MatrixMultiplication object)
      {
        return createMatrixMultiplicationAdapter();
      }
      @Override
      public Adapter caseNewMatrix(NewMatrix object)
      {
        return createNewMatrixAdapter();
      }
      @Override
      public Adapter caseTransposeMatrix(TransposeMatrix object)
      {
        return createTransposeMatrixAdapter();
      }
      @Override
      public Adapter caseMatrixVariable(MatrixVariable object)
      {
        return createMatrixVariableAdapter();
      }
      @Override
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.VariableAssignment <em>Variable Assignment</em>}'.
   * @see org.eclipse.iee.translator.jmole.math.math.VariableAssignment
  public Adapter createVariableAssignmentAdapter()
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Matrix <em>Matrix</em>}'.
   * @see org.eclipse.iee.translator.jmole.math.math.Matrix
  public Adapter createMatrixAdapter()
  {
    return null;
  }

  /**
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixRow <em>Matrix Row</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.eclipse.iee.translator.jmole.math.math.MatrixRow
   * @generated
   */
  public Adapter createMatrixRowAdapter()
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixAssignment <em>Matrix Assignment</em>}'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixAssignment
  public Adapter createMatrixAssignmentAdapter()
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixFormula <em>Matrix Formula</em>}'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixFormula
  public Adapter createMatrixFormulaAdapter()
  {
    return null;
  }

  /**
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixExpression <em>Matrix 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.eclipse.iee.translator.jmole.math.math.MatrixExpression
   * @generated
   */
  public Adapter createMatrixExpressionAdapter()
  {
    return null;
  }

  /**
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.FunctionDefinition <em>Function Definition</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.eclipse.iee.translator.jmole.math.math.FunctionDefinition
   * @generated
   */
  public Adapter createFunctionDefinitionAdapter()
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Exponent <em>Exponent</em>}'.
   * @see org.eclipse.iee.translator.jmole.math.math.Exponent
  public Adapter createExponentAdapter()
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Variable <em>Variable</em>}'.
   * @see org.eclipse.iee.translator.jmole.math.math.Variable
  public Adapter createVariableAdapter()
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Float <em>Float</em>}'.
   * @see org.eclipse.iee.translator.jmole.math.math.Float
  public Adapter createFloatAdapter()
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixElement <em>Matrix Element</em>}'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixElement
  public Adapter createMatrixElementAdapter()
  /**
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixAddition <em>Matrix Addition</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.eclipse.iee.translator.jmole.math.math.MatrixAddition
   * @generated
   */
  public Adapter createMatrixAdditionAdapter()
  {
    return null;
  }

  /**
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction <em>Matrix Subtraction</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.eclipse.iee.translator.jmole.math.math.MatrixSubtraction
   * @generated
   */
  public Adapter createMatrixSubtractionAdapter()
  {
    return null;
  }

  /**
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication <em>Matrix Multiplication</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.eclipse.iee.translator.jmole.math.math.MatrixMultiplication
   * @generated
   */
  public Adapter createMatrixMultiplicationAdapter()
  {
    return null;
  }

  /**
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.NewMatrix <em>New Matrix</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.eclipse.iee.translator.jmole.math.math.NewMatrix
   * @generated
   */
  public Adapter createNewMatrixAdapter()
  {
    return null;
  }

  /**
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.TransposeMatrix <em>Transpose Matrix</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.eclipse.iee.translator.jmole.math.math.TransposeMatrix
   * @generated
   */
  public Adapter createTransposeMatrixAdapter()
  {
    return null;
  }

  /**
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixVariable <em>Matrix Variable</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.eclipse.iee.translator.jmole.math.math.MatrixVariable
   * @generated
   */
  public Adapter createMatrixVariableAdapter()
  {
    return null;
  }

MatrixFormula object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return createMatrixFormulaAdapter();
Adapter caseMatrixFormula(MatrixFormula object)
MatrixExpression object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return createMatrixExpressionAdapter();
Adapter caseMatrixExpression(MatrixExpression object)
FunctionDefinition object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return createFunctionDefinitionAdapter();
      public Adapter caseMatrixElement(MatrixElement object)
      {
        return createMatrixElementAdapter();
Adapter caseFunctionDefinition(FunctionDefinition object)
MatrixAddition object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return createMatrixAdditionAdapter();
Adapter caseMatrixAddition(MatrixAddition object)
MatrixSubtraction object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return createMatrixSubtractionAdapter();
Adapter caseMatrixSubtraction(MatrixSubtraction object)
MatrixMultiplication object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return createMatrixMultiplicationAdapter();
Adapter caseMatrixMultiplication(MatrixMultiplication object)
NewMatrix object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return createNewMatrixAdapter();
Adapter caseNewMatrix(NewMatrix object)
TransposeMatrix object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return createTransposeMatrixAdapter();
Adapter caseTransposeMatrix(TransposeMatrix object)
MatrixVariable object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return createMatrixVariableAdapter();
Adapter caseMatrixVariable(MatrixVariable object)
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return null;
Adapter createMatrixAdapter()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return null;
Adapter createMatrixFormulaAdapter()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return null;
Adapter createMatrixExpressionAdapter()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return null;
Adapter createMatrixAdditionAdapter()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return null;
Adapter createMatrixSubtractionAdapter()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return null;
Adapter createMatrixMultiplicationAdapter()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return null;
Adapter createNewMatrixAdapter()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return null;
Adapter createTransposeMatrixAdapter()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return null;
Adapter createMatrixVariableAdapter()
import org.eclipse.iee.translator.jmole.math.math.Assignment;
import org.eclipse.iee.translator.jmole.math.math.Interval;
import org.eclipse.iee.translator.jmole.math.math.MatrixDefinition;
      public Adapter caseAssignment(Assignment object)
        return createAssignmentAdapter();
      public Adapter caseFunctionDefinition(FunctionDefinition object)
        return createFunctionDefinitionAdapter();
      public Adapter caseMatrixDefinition(MatrixDefinition object)
        return createMatrixDefinitionAdapter();
      public Adapter caseMatrixRow(MatrixRow object)
        return createMatrixRowAdapter();
      public Adapter caseInterval(Interval object)
      {
        return createIntervalAdapter();
      }
      @Override
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Assignment <em>Assignment</em>}'.
   * @see org.eclipse.iee.translator.jmole.math.math.Assignment
  public Adapter createAssignmentAdapter()
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.FunctionDefinition <em>Function Definition</em>}'.
   * @see org.eclipse.iee.translator.jmole.math.math.FunctionDefinition
  public Adapter createFunctionDefinitionAdapter()
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixDefinition <em>Matrix Definition</em>}'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixDefinition
  public Adapter createMatrixDefinitionAdapter()
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixRow <em>Matrix Row</em>}'.
   * @see org.eclipse.iee.translator.jmole.math.math.MatrixRow
  public Adapter createMatrixRowAdapter()
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Interval <em>Interval</em>}'.
   * @see org.eclipse.iee.translator.jmole.math.math.Interval
  public Adapter createIntervalAdapter()
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Exponent <em>Exponent</em>}'.
   * @see org.eclipse.iee.translator.jmole.math.math.Exponent
  public Adapter createExponentAdapter()
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Variable <em>Variable</em>}'.
   * @see org.eclipse.iee.translator.jmole.math.math.Variable
  public Adapter createVariableAdapter()
   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Float <em>Float</em>}'.
   * @see org.eclipse.iee.translator.jmole.math.math.Float
  public Adapter createFloatAdapter()
Interval object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathAdapterFactory.java
return createIntervalAdapter();
Adapter caseInterval(Interval object)
@@ -14,24 +14,33 @@
 import org.eclipse.emf.ecore.EObject;
 
 import org.eclipse.iee.translator.jmole.math.math.Addition;
-import org.eclipse.iee.translator.jmole.math.math.Assignment;
 import org.eclipse.iee.translator.jmole.math.math.Division;
 import org.eclipse.iee.translator.jmole.math.math.Exponent;
 import org.eclipse.iee.translator.jmole.math.math.Expression;
 import org.eclipse.iee.translator.jmole.math.math.Factorial;
 import org.eclipse.iee.translator.jmole.math.math.Formula;
 import org.eclipse.iee.translator.jmole.math.math.Function;
 import org.eclipse.iee.translator.jmole.math.math.FunctionDefinition;
-import org.eclipse.iee.translator.jmole.math.math.Interval;
 import org.eclipse.iee.translator.jmole.math.math.Invert;
 import org.eclipse.iee.translator.jmole.math.math.MathPackage;
-import org.eclipse.iee.translator.jmole.math.math.MatrixDefinition;
+import org.eclipse.iee.translator.jmole.math.math.Matrix;
+import org.eclipse.iee.translator.jmole.math.math.MatrixAddition;
+import org.eclipse.iee.translator.jmole.math.math.MatrixAssignment;
+import org.eclipse.iee.translator.jmole.math.math.MatrixElement;
+import org.eclipse.iee.translator.jmole.math.math.MatrixExpression;
+import org.eclipse.iee.translator.jmole.math.math.MatrixFormula;
+import org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication;
 import org.eclipse.iee.translator.jmole.math.math.MatrixRow;
+import org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction;
+import org.eclipse.iee.translator.jmole.math.math.MatrixVariable;
 import org.eclipse.iee.translator.jmole.math.math.Modulo;
 import org.eclipse.iee.translator.jmole.math.math.Multiplication;
+import org.eclipse.iee.translator.jmole.math.math.NewMatrix;
 import org.eclipse.iee.translator.jmole.math.math.Statement;
 import org.eclipse.iee.translator.jmole.math.math.Subtraction;
+import org.eclipse.iee.translator.jmole.math.math.TransposeMatrix;
 import org.eclipse.iee.translator.jmole.math.math.Variable;
+import org.eclipse.iee.translator.jmole.math.math.VariableAssignment;
 
 /**
  * <!-- begin-user-doc -->
@@ -102,9 +111,9 @@ public Adapter caseStatement(Statement object)
         return createStatementAdapter();
       }
       @Override
-      public Adapter caseAssignment(Assignment object)
+      public Adapter caseVariableAssignment(VariableAssignment object)
       {
-        return createAssignmentAdapter();
+        return createVariableAssignmentAdapter();
       }
       @Override
       public Adapter caseFormula(Formula object)
@@ -117,19 +126,34 @@ public Adapter caseExpression(Expression object)
         return createExpressionAdapter();
       }
       @Override
-      public Adapter caseFunctionDefinition(FunctionDefinition object)
+      public Adapter caseMatrix(Matrix object)
       {
-        return createFunctionDefinitionAdapter();
+        return createMatrixAdapter();
       }
       @Override
-      public Adapter caseMatrixDefinition(MatrixDefinition object)
+      public Adapter caseMatrixRow(MatrixRow object)
       {
-        return createMatrixDefinitionAdapter();
+        return createMatrixRowAdapter();
       }
       @Override
-      public Adapter caseMatrixRow(MatrixRow object)
+      public Adapter caseMatrixAssignment(MatrixAssignment object)
       {
-        return createMatrixRowAdapter();
+        return createMatrixAssignmentAdapter();
+      }
+      @Override
+      public Adapter caseMatrixFormula(MatrixFormula object)
+      {
+        return createMatrixFormulaAdapter();
+      }
+      @Override
+      public Adapter caseMatrixExpression(MatrixExpression object)
+      {
+        return createMatrixExpressionAdapter();
+      }
+      @Override
+      public Adapter caseFunctionDefinition(FunctionDefinition object)
+      {
+        return createFunctionDefinitionAdapter();
       }
       @Override
       public Adapter caseAddition(Addition object)
@@ -167,11 +191,6 @@ public Adapter caseFactorial(Factorial object)
         return createFactorialAdapter();
       }
       @Override
-      public Adapter caseInterval(Interval object)
-      {
-        return createIntervalAdapter();
-      }
-      @Override
       public Adapter caseExponent(Exponent object)
       {
         return createExponentAdapter();
@@ -187,11 +206,46 @@ public Adapter caseFloat(org.eclipse.iee.translator.jmole.math.math.Float object
         return createFloatAdapter();
       }
       @Override
+      public Adapter caseMatrixElement(MatrixElement object)
+      {
+        return createMatrixElementAdapter();
+      }
+      @Override
       public Adapter caseFunction(Function object)
       {
         return createFunctionAdapter();
       }
       @Override
+      public Adapter caseMatrixAddition(MatrixAddition object)
+      {
+        return createMatrixAdditionAdapter();
+      }
+      @Override
+      public Adapter caseMatrixSubtraction(MatrixSubtraction object)
+      {
+        return createMatrixSubtractionAdapter();
+      }
+      @Override
+      public Adapter caseMatrixMultiplication(MatrixMultiplication object)
+      {
+        return createMatrixMultiplicationAdapter();
+      }
+      @Override
+      public Adapter caseNewMatrix(NewMatrix object)
+      {
+        return createNewMatrixAdapter();
+      }
+      @Override
+      public Adapter caseTransposeMatrix(TransposeMatrix object)
+      {
+        return createTransposeMatrixAdapter();
+      }
+      @Override
+      public Adapter caseMatrixVariable(MatrixVariable object)
+      {
+        return createMatrixVariableAdapter();
+      }
+      @Override
       public Adapter defaultCase(EObject object)
       {
         return createEObjectAdapter();
@@ -229,16 +283,16 @@ public Adapter createStatementAdapter()
   }
 
   /**
-   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Assignment <em>Assignment</em>}'.
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.VariableAssignment <em>Variable Assignment</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.eclipse.iee.translator.jmole.math.math.Assignment
+   * @see org.eclipse.iee.translator.jmole.math.math.VariableAssignment
    * @generated
    */
-  public Adapter createAssignmentAdapter()
+  public Adapter createVariableAssignmentAdapter()
   {
     return null;
   }
@@ -274,46 +328,91 @@ public Adapter createExpressionAdapter()
   }
 
   /**
-   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.FunctionDefinition <em>Function Definition</em>}'.
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Matrix <em>Matrix</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.eclipse.iee.translator.jmole.math.math.FunctionDefinition
+   * @see org.eclipse.iee.translator.jmole.math.math.Matrix
    * @generated
    */
-  public Adapter createFunctionDefinitionAdapter()
+  public Adapter createMatrixAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixRow <em>Matrix Row</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.eclipse.iee.translator.jmole.math.math.MatrixRow
+   * @generated
+   */
+  public Adapter createMatrixRowAdapter()
   {
     return null;
   }
 
   /**
-   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixDefinition <em>Matrix Definition</em>}'.
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixAssignment <em>Matrix Assignment</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.eclipse.iee.translator.jmole.math.math.MatrixDefinition
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixAssignment
    * @generated
    */
-  public Adapter createMatrixDefinitionAdapter()
+  public Adapter createMatrixAssignmentAdapter()
   {
     return null;
   }
 
   /**
-   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixRow <em>Matrix Row</em>}'.
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixFormula <em>Matrix Formula</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.eclipse.iee.translator.jmole.math.math.MatrixRow
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixFormula
    * @generated
    */
-  public Adapter createMatrixRowAdapter()
+  public Adapter createMatrixFormulaAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixExpression <em>Matrix 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.eclipse.iee.translator.jmole.math.math.MatrixExpression
+   * @generated
+   */
+  public Adapter createMatrixExpressionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.FunctionDefinition <em>Function Definition</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.eclipse.iee.translator.jmole.math.math.FunctionDefinition
+   * @generated
+   */
+  public Adapter createFunctionDefinitionAdapter()
   {
     return null;
   }
@@ -424,61 +523,61 @@ public Adapter createFactorialAdapter()
   }
 
   /**
-   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Interval <em>Interval</em>}'.
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Exponent <em>Exponent</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.eclipse.iee.translator.jmole.math.math.Interval
+   * @see org.eclipse.iee.translator.jmole.math.math.Exponent
    * @generated
    */
-  public Adapter createIntervalAdapter()
+  public Adapter createExponentAdapter()
   {
     return null;
   }
 
   /**
-   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Exponent <em>Exponent</em>}'.
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Variable <em>Variable</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.eclipse.iee.translator.jmole.math.math.Exponent
+   * @see org.eclipse.iee.translator.jmole.math.math.Variable
    * @generated
    */
-  public Adapter createExponentAdapter()
+  public Adapter createVariableAdapter()
   {
     return null;
   }
 
   /**
-   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Variable <em>Variable</em>}'.
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Float <em>Float</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.eclipse.iee.translator.jmole.math.math.Variable
+   * @see org.eclipse.iee.translator.jmole.math.math.Float
    * @generated
    */
-  public Adapter createVariableAdapter()
+  public Adapter createFloatAdapter()
   {
     return null;
   }
 
   /**
-   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.Float <em>Float</em>}'.
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixElement <em>Matrix Element</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.eclipse.iee.translator.jmole.math.math.Float
+   * @see org.eclipse.iee.translator.jmole.math.math.MatrixElement
    * @generated
    */
-  public Adapter createFloatAdapter()
+  public Adapter createMatrixElementAdapter()
   {
     return null;
   }
@@ -498,6 +597,96 @@ public Adapter createFunctionAdapter()
     return null;
   }
 
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixAddition <em>Matrix Addition</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.eclipse.iee.translator.jmole.math.math.MatrixAddition
+   * @generated
+   */
+  public Adapter createMatrixAdditionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction <em>Matrix Subtraction</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.eclipse.iee.translator.jmole.math.math.MatrixSubtraction
+   * @generated
+   */
+  public Adapter createMatrixSubtractionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication <em>Matrix Multiplication</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.eclipse.iee.translator.jmole.math.math.MatrixMultiplication
+   * @generated
+   */
+  public Adapter createMatrixMultiplicationAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.NewMatrix <em>New Matrix</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.eclipse.iee.translator.jmole.math.math.NewMatrix
+   * @generated
+   */
+  public Adapter createNewMatrixAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.TransposeMatrix <em>Transpose Matrix</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.eclipse.iee.translator.jmole.math.math.TransposeMatrix
+   * @generated
+   */
+  public Adapter createTransposeMatrixAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link org.eclipse.iee.translator.jmole.math.math.MatrixVariable <em>Matrix Variable</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.eclipse.iee.translator.jmole.math.math.MatrixVariable
+   * @generated
+   */
+  public Adapter createMatrixVariableAdapter()
+  {
+    return null;
+  }
+
   /**
    * Creates a new adapter for the default case.
    * <!-- begin-user-doc -->
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2Futil%2FMathAdapterFactory.java
29e1930770abdfe2a4fec731375425d0fbd95565
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2Futil%2FMathSwitch.java
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2Futil%2FMathSwitch.java?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathSwitch.java
import org.eclipse.iee.translator.jmole.math.math.Matrix;
import org.eclipse.iee.translator.jmole.math.math.MatrixAddition;
import org.eclipse.iee.translator.jmole.math.math.MatrixAssignment;
import org.eclipse.iee.translator.jmole.math.math.MatrixElement;
import org.eclipse.iee.translator.jmole.math.math.MatrixExpression;
import org.eclipse.iee.translator.jmole.math.math.MatrixFormula;
import org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication;
import org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction;
import org.eclipse.iee.translator.jmole.math.math.MatrixVariable;
import org.eclipse.iee.translator.jmole.math.math.NewMatrix;
import org.eclipse.iee.translator.jmole.math.math.TransposeMatrix;
import org.eclipse.iee.translator.jmole.math.math.VariableAssignment;
      case MathPackage.VARIABLE_ASSIGNMENT:
        VariableAssignment variableAssignment = (VariableAssignment)theEObject;
        T result = caseVariableAssignment(variableAssignment);
      case MathPackage.MATRIX:
        Matrix matrix = (Matrix)theEObject;
        T result = caseMatrix(matrix);
      case MathPackage.MATRIX_ROW:
        MatrixRow matrixRow = (MatrixRow)theEObject;
        T result = caseMatrixRow(matrixRow);
      case MathPackage.MATRIX_ASSIGNMENT:
        MatrixAssignment matrixAssignment = (MatrixAssignment)theEObject;
        T result = caseMatrixAssignment(matrixAssignment);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MathPackage.MATRIX_FORMULA:
      {
        MatrixFormula matrixFormula = (MatrixFormula)theEObject;
        T result = caseMatrixFormula(matrixFormula);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MathPackage.MATRIX_EXPRESSION:
      {
        MatrixExpression matrixExpression = (MatrixExpression)theEObject;
        T result = caseMatrixExpression(matrixExpression);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MathPackage.FUNCTION_DEFINITION:
      {
        FunctionDefinition functionDefinition = (FunctionDefinition)theEObject;
        T result = caseFunctionDefinition(functionDefinition);
      case MathPackage.MATRIX_ELEMENT:
      {
        MatrixElement matrixElement = (MatrixElement)theEObject;
        T result = caseMatrixElement(matrixElement);
        if (result == null) result = caseExpression(matrixElement);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MathPackage.MATRIX_ADDITION:
      {
        MatrixAddition matrixAddition = (MatrixAddition)theEObject;
        T result = caseMatrixAddition(matrixAddition);
        if (result == null) result = caseMatrixExpression(matrixAddition);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MathPackage.MATRIX_SUBTRACTION:
      {
        MatrixSubtraction matrixSubtraction = (MatrixSubtraction)theEObject;
        T result = caseMatrixSubtraction(matrixSubtraction);
        if (result == null) result = caseMatrixExpression(matrixSubtraction);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MathPackage.MATRIX_MULTIPLICATION:
      {
        MatrixMultiplication matrixMultiplication = (MatrixMultiplication)theEObject;
        T result = caseMatrixMultiplication(matrixMultiplication);
        if (result == null) result = caseMatrixExpression(matrixMultiplication);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MathPackage.NEW_MATRIX:
      {
        NewMatrix newMatrix = (NewMatrix)theEObject;
        T result = caseNewMatrix(newMatrix);
        if (result == null) result = caseMatrixExpression(newMatrix);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MathPackage.TRANSPOSE_MATRIX:
      {
        TransposeMatrix transposeMatrix = (TransposeMatrix)theEObject;
        T result = caseTransposeMatrix(transposeMatrix);
        if (result == null) result = caseMatrixExpression(transposeMatrix);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
      case MathPackage.MATRIX_VARIABLE:
      {
        MatrixVariable matrixVariable = (MatrixVariable)theEObject;
        T result = caseMatrixVariable(matrixVariable);
        if (result == null) result = caseMatrixExpression(matrixVariable);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
   * Returns the result of interpreting the object as an instance of '<em>Variable Assignment</em>'.
   * @return the result of interpreting the object as an instance of '<em>Variable Assignment</em>'.
  public T caseVariableAssignment(VariableAssignment object)
   * Returns the result of interpreting the object as an instance of '<em>Matrix</em>'.
   * @return the result of interpreting the object as an instance of '<em>Matrix</em>'.
  public T caseMatrix(Matrix object)
   * Returns the result of interpreting the object as an instance of '<em>Matrix Row</em>'.
   * @return the result of interpreting the object as an instance of '<em>Matrix Row</em>'.
  public T caseMatrixRow(MatrixRow object)
   * Returns the result of interpreting the object as an instance of '<em>Matrix Assignment</em>'.
   * @return the result of interpreting the object as an instance of '<em>Matrix Assignment</em>'.
  public T caseMatrixAssignment(MatrixAssignment object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Matrix Formula</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>Matrix Formula</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T caseMatrixFormula(MatrixFormula object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Matrix 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>Matrix Expression</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T caseMatrixExpression(MatrixExpression object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Function Definition</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>Function Definition</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T caseFunctionDefinition(FunctionDefinition object)
   * Returns the result of interpreting the object as an instance of '<em>Exponent</em>'.
   * @return the result of interpreting the object as an instance of '<em>Exponent</em>'.
  public T caseExponent(Exponent object)
   * Returns the result of interpreting the object as an instance of '<em>Variable</em>'.
   * @return the result of interpreting the object as an instance of '<em>Variable</em>'.
  public T caseVariable(Variable object)
   * Returns the result of interpreting the object as an instance of '<em>Float</em>'.
   * @return the result of interpreting the object as an instance of '<em>Float</em>'.
  public T caseFloat(org.eclipse.iee.translator.jmole.math.math.Float object)
   * Returns the result of interpreting the object as an instance of '<em>Matrix Element</em>'.
   * @return the result of interpreting the object as an instance of '<em>Matrix Element</em>'.
  public T caseMatrixElement(MatrixElement object)
  /**
   * Returns the result of interpreting the object as an instance of '<em>Matrix Addition</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>Matrix Addition</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T caseMatrixAddition(MatrixAddition object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Matrix Subtraction</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>Matrix Subtraction</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T caseMatrixSubtraction(MatrixSubtraction object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Matrix Multiplication</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>Matrix Multiplication</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T caseMatrixMultiplication(MatrixMultiplication object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>New Matrix</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>New Matrix</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T caseNewMatrix(NewMatrix object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Transpose Matrix</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>Transpose Matrix</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T caseTransposeMatrix(TransposeMatrix object)
  {
    return null;
  }

  /**
   * Returns the result of interpreting the object as an instance of '<em>Matrix Variable</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>Matrix Variable</em>'.
   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
   * @generated
   */
  public T caseMatrixVariable(MatrixVariable object)
  {
    return null;
  }

MatrixAssignment object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathSwitch.java
return null;
T caseMatrixAssignment(MatrixAssignment object)
MatrixFormula object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathSwitch.java
return null;
T caseMatrixFormula(MatrixFormula object)
MatrixExpression object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathSwitch.java
return null;
T caseMatrixExpression(MatrixExpression object)
MatrixAddition object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathSwitch.java
return null;
T caseMatrixAddition(MatrixAddition object)
MatrixSubtraction object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathSwitch.java
return null;
T caseMatrixSubtraction(MatrixSubtraction object)
MatrixMultiplication object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathSwitch.java
return null;
T caseMatrixMultiplication(MatrixMultiplication object)
NewMatrix object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathSwitch.java
return null;
T caseNewMatrix(NewMatrix object)
TransposeMatrix object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathSwitch.java
return null;
T caseTransposeMatrix(TransposeMatrix object)
MatrixVariable object
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/math/util/MathSwitch.java
return null;
T caseMatrixVariable(MatrixVariable object)
import org.eclipse.iee.translator.jmole.math.math.Assignment;
import org.eclipse.iee.translator.jmole.math.math.Interval;
import org.eclipse.iee.translator.jmole.math.math.MatrixDefinition;
      case MathPackage.ASSIGNMENT:
        Assignment assignment = (Assignment)theEObject;
        T result = caseAssignment(assignment);
      case MathPackage.FUNCTION_DEFINITION:
        FunctionDefinition functionDefinition = (FunctionDefinition)theEObject;
        T result = caseFunctionDefinition(functionDefinition);
      case MathPackage.MATRIX_DEFINITION:
        MatrixDefinition matrixDefinition = (MatrixDefinition)theEObject;
        T result = caseMatrixDefinition(matrixDefinition);
      case MathPackage.MATRIX_ROW:
        MatrixRow matrixRow = (MatrixRow)theEObject;
        T result = caseMatrixRow(matrixRow);
      case MathPackage.INTERVAL:
      {
        Interval interval = (Interval)theEObject;
        T result = caseInterval(interval);
        if (result == null) result = caseExpression(interval);
        if (result == null) result = defaultCase(theEObject);
        return result;
      }
   * Returns the result of interpreting the object as an instance of '<em>Assignment</em>'.
   * @return the result of interpreting the object as an instance of '<em>Assignment</em>'.
  public T caseAssignment(Assignment object)
   * Returns the result of interpreting the object as an instance of '<em>Function Definition</em>'.
   * @return the result of interpreting the object as an instance of '<em>Function Definition</em>'.
  public T caseFunctionDefinition(FunctionDefinition object)
   * Returns the result of interpreting the object as an instance of '<em>Matrix Definition</em>'.
   * @return the result of interpreting the object as an instance of '<em>Matrix Definition</em>'.
  public T caseMatrixDefinition(MatrixDefinition object)
   * Returns the result of interpreting the object as an instance of '<em>Matrix Row</em>'.
   * @return the result of interpreting the object as an instance of '<em>Matrix Row</em>'.
  public T caseMatrixRow(MatrixRow object)
   * Returns the result of interpreting the object as an instance of '<em>Interval</em>'.
   * @return the result of interpreting the object as an instance of '<em>Interval</em>'.
  public T caseInterval(Interval object)
   * Returns the result of interpreting the object as an instance of '<em>Exponent</em>'.
   * @return the result of interpreting the object as an instance of '<em>Exponent</em>'.
  public T caseExponent(Exponent object)
   * Returns the result of interpreting the object as an instance of '<em>Variable</em>'.
   * @return the result of interpreting the object as an instance of '<em>Variable</em>'.
  public T caseVariable(Variable object)
   * Returns the result of interpreting the object as an instance of '<em>Float</em>'.
   * @return the result of interpreting the object as an instance of '<em>Float</em>'.
  public T caseFloat(org.eclipse.iee.translator.jmole.math.math.Float object)
@@ -12,24 +12,33 @@
 import org.eclipse.emf.ecore.util.Switch;
 
 import org.eclipse.iee.translator.jmole.math.math.Addition;
-import org.eclipse.iee.translator.jmole.math.math.Assignment;
 import org.eclipse.iee.translator.jmole.math.math.Division;
 import org.eclipse.iee.translator.jmole.math.math.Exponent;
 import org.eclipse.iee.translator.jmole.math.math.Expression;
 import org.eclipse.iee.translator.jmole.math.math.Factorial;
 import org.eclipse.iee.translator.jmole.math.math.Formula;
 import org.eclipse.iee.translator.jmole.math.math.Function;
 import org.eclipse.iee.translator.jmole.math.math.FunctionDefinition;
-import org.eclipse.iee.translator.jmole.math.math.Interval;
 import org.eclipse.iee.translator.jmole.math.math.Invert;
 import org.eclipse.iee.translator.jmole.math.math.MathPackage;
-import org.eclipse.iee.translator.jmole.math.math.MatrixDefinition;
+import org.eclipse.iee.translator.jmole.math.math.Matrix;
+import org.eclipse.iee.translator.jmole.math.math.MatrixAddition;
+import org.eclipse.iee.translator.jmole.math.math.MatrixAssignment;
+import org.eclipse.iee.translator.jmole.math.math.MatrixElement;
+import org.eclipse.iee.translator.jmole.math.math.MatrixExpression;
+import org.eclipse.iee.translator.jmole.math.math.MatrixFormula;
+import org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication;
 import org.eclipse.iee.translator.jmole.math.math.MatrixRow;
+import org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction;
+import org.eclipse.iee.translator.jmole.math.math.MatrixVariable;
 import org.eclipse.iee.translator.jmole.math.math.Modulo;
 import org.eclipse.iee.translator.jmole.math.math.Multiplication;
+import org.eclipse.iee.translator.jmole.math.math.NewMatrix;
 import org.eclipse.iee.translator.jmole.math.math.Statement;
 import org.eclipse.iee.translator.jmole.math.math.Subtraction;
+import org.eclipse.iee.translator.jmole.math.math.TransposeMatrix;
 import org.eclipse.iee.translator.jmole.math.math.Variable;
+import org.eclipse.iee.translator.jmole.math.math.VariableAssignment;
 
 /**
  * <!-- begin-user-doc -->
@@ -101,10 +110,10 @@ protected T doSwitch(int classifierID, EObject theEObject)
         if (result == null) result = defaultCase(theEObject);
         return result;
       }
-      case MathPackage.ASSIGNMENT:
+      case MathPackage.VARIABLE_ASSIGNMENT:
       {
-        Assignment assignment = (Assignment)theEObject;
-        T result = caseAssignment(assignment);
+        VariableAssignment variableAssignment = (VariableAssignment)theEObject;
+        T result = caseVariableAssignment(variableAssignment);
         if (result == null) result = defaultCase(theEObject);
         return result;
       }
@@ -122,24 +131,45 @@ protected T doSwitch(int classifierID, EObject theEObject)
         if (result == null) result = defaultCase(theEObject);
         return result;
       }
-      case MathPackage.FUNCTION_DEFINITION:
+      case MathPackage.MATRIX:
       {
-        FunctionDefinition functionDefinition = (FunctionDefinition)theEObject;
-        T result = caseFunctionDefinition(functionDefinition);
+        Matrix matrix = (Matrix)theEObject;
+        T result = caseMatrix(matrix);
         if (result == null) result = defaultCase(theEObject);
         return result;
       }
-      case MathPackage.MATRIX_DEFINITION:
+      case MathPackage.MATRIX_ROW:
       {
-        MatrixDefinition matrixDefinition = (MatrixDefinition)theEObject;
-        T result = caseMatrixDefinition(matrixDefinition);
+        MatrixRow matrixRow = (MatrixRow)theEObject;
+        T result = caseMatrixRow(matrixRow);
         if (result == null) result = defaultCase(theEObject);
         return result;
       }
-      case MathPackage.MATRIX_ROW:
+      case MathPackage.MATRIX_ASSIGNMENT:
       {
-        MatrixRow matrixRow = (MatrixRow)theEObject;
-        T result = caseMatrixRow(matrixRow);
+        MatrixAssignment matrixAssignment = (MatrixAssignment)theEObject;
+        T result = caseMatrixAssignment(matrixAssignment);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MathPackage.MATRIX_FORMULA:
+      {
+        MatrixFormula matrixFormula = (MatrixFormula)theEObject;
+        T result = caseMatrixFormula(matrixFormula);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MathPackage.MATRIX_EXPRESSION:
+      {
+        MatrixExpression matrixExpression = (MatrixExpression)theEObject;
+        T result = caseMatrixExpression(matrixExpression);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MathPackage.FUNCTION_DEFINITION:
+      {
+        FunctionDefinition functionDefinition = (FunctionDefinition)theEObject;
+        T result = caseFunctionDefinition(functionDefinition);
         if (result == null) result = defaultCase(theEObject);
         return result;
       }
@@ -199,14 +229,6 @@ protected T doSwitch(int classifierID, EObject theEObject)
         if (result == null) result = defaultCase(theEObject);
         return result;
       }
-      case MathPackage.INTERVAL:
-      {
-        Interval interval = (Interval)theEObject;
-        T result = caseInterval(interval);
-        if (result == null) result = caseExpression(interval);
-        if (result == null) result = defaultCase(theEObject);
-        return result;
-      }
       case MathPackage.EXPONENT:
       {
         Exponent exponent = (Exponent)theEObject;
@@ -231,6 +253,14 @@ protected T doSwitch(int classifierID, EObject theEObject)
         if (result == null) result = defaultCase(theEObject);
         return result;
       }
+      case MathPackage.MATRIX_ELEMENT:
+      {
+        MatrixElement matrixElement = (MatrixElement)theEObject;
+        T result = caseMatrixElement(matrixElement);
+        if (result == null) result = caseExpression(matrixElement);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
       case MathPackage.FUNCTION:
       {
         Function function = (Function)theEObject;
@@ -239,6 +269,54 @@ protected T doSwitch(int classifierID, EObject theEObject)
         if (result == null) result = defaultCase(theEObject);
         return result;
       }
+      case MathPackage.MATRIX_ADDITION:
+      {
+        MatrixAddition matrixAddition = (MatrixAddition)theEObject;
+        T result = caseMatrixAddition(matrixAddition);
+        if (result == null) result = caseMatrixExpression(matrixAddition);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MathPackage.MATRIX_SUBTRACTION:
+      {
+        MatrixSubtraction matrixSubtraction = (MatrixSubtraction)theEObject;
+        T result = caseMatrixSubtraction(matrixSubtraction);
+        if (result == null) result = caseMatrixExpression(matrixSubtraction);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MathPackage.MATRIX_MULTIPLICATION:
+      {
+        MatrixMultiplication matrixMultiplication = (MatrixMultiplication)theEObject;
+        T result = caseMatrixMultiplication(matrixMultiplication);
+        if (result == null) result = caseMatrixExpression(matrixMultiplication);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MathPackage.NEW_MATRIX:
+      {
+        NewMatrix newMatrix = (NewMatrix)theEObject;
+        T result = caseNewMatrix(newMatrix);
+        if (result == null) result = caseMatrixExpression(newMatrix);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MathPackage.TRANSPOSE_MATRIX:
+      {
+        TransposeMatrix transposeMatrix = (TransposeMatrix)theEObject;
+        T result = caseTransposeMatrix(transposeMatrix);
+        if (result == null) result = caseMatrixExpression(transposeMatrix);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case MathPackage.MATRIX_VARIABLE:
+      {
+        MatrixVariable matrixVariable = (MatrixVariable)theEObject;
+        T result = caseMatrixVariable(matrixVariable);
+        if (result == null) result = caseMatrixExpression(matrixVariable);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
       default: return defaultCase(theEObject);
     }
   }
@@ -260,17 +338,17 @@ public T caseStatement(Statement object)
   }
 
   /**
-   * Returns the result of interpreting the object as an instance of '<em>Assignment</em>'.
+   * Returns the result of interpreting the object as an instance of '<em>Variable Assignment</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>Assignment</em>'.
+   * @return the result of interpreting the object as an instance of '<em>Variable Assignment</em>'.
    * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
    * @generated
    */
-  public T caseAssignment(Assignment object)
+  public T caseVariableAssignment(VariableAssignment object)
   {
     return null;
   }
@@ -308,49 +386,97 @@ public T caseExpression(Expression object)
   }
 
   /**
-   * Returns the result of interpreting the object as an instance of '<em>Function Definition</em>'.
+   * Returns the result of interpreting the object as an instance of '<em>Matrix</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>Function Definition</em>'.
+   * @return the result of interpreting the object as an instance of '<em>Matrix</em>'.
    * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
    * @generated
    */
-  public T caseFunctionDefinition(FunctionDefinition object)
+  public T caseMatrix(Matrix object)
   {
     return null;
   }
 
   /**
-   * Returns the result of interpreting the object as an instance of '<em>Matrix Definition</em>'.
+   * Returns the result of interpreting the object as an instance of '<em>Matrix Row</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>Matrix Definition</em>'.
+   * @return the result of interpreting the object as an instance of '<em>Matrix Row</em>'.
    * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
    * @generated
    */
-  public T caseMatrixDefinition(MatrixDefinition object)
+  public T caseMatrixRow(MatrixRow object)
   {
     return null;
   }
 
   /**
-   * Returns the result of interpreting the object as an instance of '<em>Matrix Row</em>'.
+   * Returns the result of interpreting the object as an instance of '<em>Matrix Assignment</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>Matrix Row</em>'.
+   * @return the result of interpreting the object as an instance of '<em>Matrix Assignment</em>'.
    * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
    * @generated
    */
-  public T caseMatrixRow(MatrixRow object)
+  public T caseMatrixAssignment(MatrixAssignment object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Matrix Formula</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>Matrix Formula</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseMatrixFormula(MatrixFormula object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Matrix 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>Matrix Expression</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseMatrixExpression(MatrixExpression object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Function Definition</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>Function Definition</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseFunctionDefinition(FunctionDefinition object)
   {
     return null;
   }
@@ -468,65 +594,65 @@ public T caseFactorial(Factorial object)
   }
 
   /**
-   * Returns the result of interpreting the object as an instance of '<em>Interval</em>'.
+   * Returns the result of interpreting the object as an instance of '<em>Exponent</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>Interval</em>'.
+   * @return the result of interpreting the object as an instance of '<em>Exponent</em>'.
    * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
    * @generated
    */
-  public T caseInterval(Interval object)
+  public T caseExponent(Exponent object)
   {
     return null;
   }
 
   /**
-   * Returns the result of interpreting the object as an instance of '<em>Exponent</em>'.
+   * Returns the result of interpreting the object as an instance of '<em>Variable</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>Exponent</em>'.
+   * @return the result of interpreting the object as an instance of '<em>Variable</em>'.
    * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
    * @generated
    */
-  public T caseExponent(Exponent object)
+  public T caseVariable(Variable object)
   {
     return null;
   }
 
   /**
-   * Returns the result of interpreting the object as an instance of '<em>Variable</em>'.
+   * Returns the result of interpreting the object as an instance of '<em>Float</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>Variable</em>'.
+   * @return the result of interpreting the object as an instance of '<em>Float</em>'.
    * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
    * @generated
    */
-  public T caseVariable(Variable object)
+  public T caseFloat(org.eclipse.iee.translator.jmole.math.math.Float object)
   {
     return null;
   }
 
   /**
-   * Returns the result of interpreting the object as an instance of '<em>Float</em>'.
+   * Returns the result of interpreting the object as an instance of '<em>Matrix Element</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>Float</em>'.
+   * @return the result of interpreting the object as an instance of '<em>Matrix Element</em>'.
    * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
    * @generated
    */
-  public T caseFloat(org.eclipse.iee.translator.jmole.math.math.Float object)
+  public T caseMatrixElement(MatrixElement object)
   {
     return null;
   }
@@ -547,6 +673,102 @@ public T caseFunction(Function object)
     return null;
   }
 
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Matrix Addition</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>Matrix Addition</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseMatrixAddition(MatrixAddition object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Matrix Subtraction</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>Matrix Subtraction</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseMatrixSubtraction(MatrixSubtraction object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Matrix Multiplication</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>Matrix Multiplication</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseMatrixMultiplication(MatrixMultiplication object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>New Matrix</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>New Matrix</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseNewMatrix(NewMatrix object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Transpose Matrix</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>Transpose Matrix</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseTransposeMatrix(TransposeMatrix object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Matrix Variable</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>Matrix Variable</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseMatrixVariable(MatrixVariable object)
+  {
+    return null;
+  }
+
   /**
    * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
    * <!-- begin-user-doc -->
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fmath%2Futil%2FMathSwitch.java
ce5d8ac9c65b30443b38a5d9b85412cc38ed7330
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fparser%2Fantlr%2Finternal%2FInternalMath.g
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fparser%2Fantlr%2Finternal%2FInternalMath.g?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g
	        newCompositeNode(grammarAccess.getStatementAccess().getVariableAssignmentVariableAssignmentParserRuleCall_1_0()); 
		lv_variableAssignment_1_0=ruleVariableAssignment		{
       			"variableAssignment",
        		lv_variableAssignment_1_0, 
        		"VariableAssignment");
	        newCompositeNode(grammarAccess.getStatementAccess().getFormulaFormulaParserRuleCall_2_0()); 
		lv_formula_2_0=ruleFormula		{
       			"formula",
        		lv_formula_2_0, 
        		"Formula");
	        newCompositeNode(grammarAccess.getStatementAccess().getMatrixAssignmentMatrixAssignmentParserRuleCall_3_0()); 
		lv_matrixAssignment_3_0=ruleMatrixAssignment		{
       			"matrixAssignment",
        		lv_matrixAssignment_3_0, 
        		"MatrixAssignment");
	        afterParserOrEnumRuleCall();
	    }

)
)
    |(
(
		{ 
	        newCompositeNode(grammarAccess.getStatementAccess().getMatrixFormulaMatrixFormulaParserRuleCall_4_0()); 
	    }
		lv_matrixFormula_4_0=ruleMatrixFormula		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getStatementRule());
	        }
       		set(
       			$current, 
       			"matrixFormula",
        		lv_matrixFormula_4_0, 
        		"MatrixFormula");
// Entry rule entryRuleVariableAssignment
entryRuleVariableAssignment returns [EObject current=null] 
	{ newCompositeNode(grammarAccess.getVariableAssignmentRule()); }
	 iv_ruleVariableAssignment=ruleVariableAssignment 
	 { $current=$iv_ruleVariableAssignment.current; } 
// Rule VariableAssignment
ruleVariableAssignment returns [EObject current=null] 
			newLeafNode(lv_variable_0_0, grammarAccess.getVariableAssignmentAccess().getVariableMATH_NAMETerminalRuleCall_0_0()); 
	            $current = createModelElement(grammarAccess.getVariableAssignmentRule());
    	newLeafNode(otherlv_1, grammarAccess.getVariableAssignmentAccess().getEqualsSignKeyword_1());
	        newCompositeNode(grammarAccess.getVariableAssignmentAccess().getValueFormulaParserRuleCall_2_0()); 
	            $current = createModelElementForParent(grammarAccess.getVariableAssignmentRule());
    |(	otherlv_1='(-' 
    	newLeafNode(otherlv_1, grammarAccess.getUnaryExpressionAccess().getLeftParenthesisHyphenMinusKeyword_1_0());
)	otherlv_4=')' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getUnaryExpressionAccess().getRightParenthesisKeyword_1_3());
    }
)
    |(	otherlv_5='(' 
    	newLeafNode(otherlv_5, grammarAccess.getUnaryExpressionAccess().getLeftParenthesisKeyword_2_0());
		lv_expression_7_0=ruleUnaryExpression		{
        		lv_expression_7_0, 
)	otherlv_8=')!' 
    	newLeafNode(otherlv_8, grammarAccess.getUnaryExpressionAccess().getRightParenthesisExclamationMarkKeyword_2_3());
))
            grammarAccess.getPrimaryAccess().getMatrixElementAction_2_0(),
            $current);
    }
)(
(
		lv_element_5_0=RULE_MATH_NAME
		{
			newLeafNode(lv_element_5_0, grammarAccess.getPrimaryAccess().getElementMATH_NAMETerminalRuleCall_2_1_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getPrimaryRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"element",
        		lv_element_5_0, 
        		"MATH_NAME");
	    }

)
)	otherlv_6='[' 
    {
    	newLeafNode(otherlv_6, grammarAccess.getPrimaryAccess().getLeftSquareBracketKeyword_2_2());
    }
(
(
		lv_row_7_0=RULE_INT
		{
			newLeafNode(lv_row_7_0, grammarAccess.getPrimaryAccess().getRowINTTerminalRuleCall_2_3_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getPrimaryRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"row",
        		lv_row_7_0, 
        		"INT");
	    }

)
)	otherlv_8=']' 
    {
    	newLeafNode(otherlv_8, grammarAccess.getPrimaryAccess().getRightSquareBracketKeyword_2_4());
    }
	otherlv_9='[' 
    {
    	newLeafNode(otherlv_9, grammarAccess.getPrimaryAccess().getLeftSquareBracketKeyword_2_5());
    }
(
(
		lv_column_10_0=RULE_INT
		{
			newLeafNode(lv_column_10_0, grammarAccess.getPrimaryAccess().getColumnINTTerminalRuleCall_2_6_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getPrimaryRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"column",
        		lv_column_10_0, 
        		"INT");
	    }

)
)	otherlv_11=']' 
    {
    	newLeafNode(otherlv_11, grammarAccess.getPrimaryAccess().getRightSquareBracketKeyword_2_7());
    }
)
    |((
	{ 
	  /* */ 
	}
    {
        $current = forceCreateModelElement(
            grammarAccess.getPrimaryAccess().getFunctionAction_3_0(),
	        newCompositeNode(grammarAccess.getPrimaryAccess().getFunctionFunctionParserRuleCall_3_1_0()); 
		lv_function_13_0=ruleFunction		{
        		lv_function_13_0, 
    |(	otherlv_14='(' 
    	newLeafNode(otherlv_14, grammarAccess.getPrimaryAccess().getLeftParenthesisKeyword_4_0());
        newCompositeNode(grammarAccess.getPrimaryAccess().getAdditionParserRuleCall_4_1()); 
    this_Addition_15=ruleAddition
        $current = $this_Addition_15.current; 
	otherlv_16=')' 
    	newLeafNode(otherlv_16, grammarAccess.getPrimaryAccess().getRightParenthesisKeyword_4_2());
// Entry rule entryRuleMatrix
entryRuleMatrix returns [EObject current=null] 
	{ newCompositeNode(grammarAccess.getMatrixRule()); }
	 iv_ruleMatrix=ruleMatrix 
	 { $current=$iv_ruleMatrix.current; } 
// Rule Matrix
ruleMatrix returns [EObject current=null] 
(	otherlv_0='{' 
    	newLeafNode(otherlv_0, grammarAccess.getMatrixAccess().getLeftCurlyBracketKeyword_0());
((
(
		{ 
	        newCompositeNode(grammarAccess.getMatrixAccess().getRowsMatrixRowParserRuleCall_1_0_0()); 
	    }
		lv_rows_1_0=ruleMatrixRow		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getMatrixRule());
	        }
       		add(
       			$current, 
       			"rows",
        		lv_rows_1_0, 
        		"MatrixRow");
	        afterParserOrEnumRuleCall();
	    }
)
)(	otherlv_2=',' 
    	newLeafNode(otherlv_2, grammarAccess.getMatrixAccess().getCommaKeyword_1_1_0());
(
(
		{ 
	        newCompositeNode(grammarAccess.getMatrixAccess().getRowsMatrixRowParserRuleCall_1_1_1_0()); 
	    }
		lv_rows_3_0=ruleMatrixRow		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getMatrixRule());
	        }
       		add(
       			$current, 
       			"rows",
        		lv_rows_3_0, 
        		"MatrixRow");
	        afterParserOrEnumRuleCall();
	    }
)
))*(	otherlv_4=',' 
    	newLeafNode(otherlv_4, grammarAccess.getMatrixAccess().getCommaKeyword_1_2());
)?)?	otherlv_5='}' 
    	newLeafNode(otherlv_5, grammarAccess.getMatrixAccess().getRightCurlyBracketKeyword_2());
)
;
// Entry rule entryRuleMatrixRow
entryRuleMatrixRow returns [EObject current=null] 
	{ newCompositeNode(grammarAccess.getMatrixRowRule()); }
	 iv_ruleMatrixRow=ruleMatrixRow 
	 { $current=$iv_ruleMatrixRow.current; } 
	 EOF 
// Rule MatrixRow
ruleMatrixRow returns [EObject current=null] 
(	otherlv_0='{' 
    	newLeafNode(otherlv_0, grammarAccess.getMatrixRowAccess().getLeftCurlyBracketKeyword_0());
	        newCompositeNode(grammarAccess.getMatrixRowAccess().getElementsFloatParserRuleCall_1_0_0()); 
		lv_elements_1_0=ruleFloat		{
	            $current = createModelElementForParent(grammarAccess.getMatrixRowRule());
       			"elements",
        		lv_elements_1_0, 
        		"Float");
)(	otherlv_2=',' 
    	newLeafNode(otherlv_2, grammarAccess.getMatrixRowAccess().getCommaKeyword_1_1_0());
	        newCompositeNode(grammarAccess.getMatrixRowAccess().getElementsFloatParserRuleCall_1_1_1_0()); 
		lv_elements_3_0=ruleFloat		{
	            $current = createModelElementForParent(grammarAccess.getMatrixRowRule());
       			"elements",
        		lv_elements_3_0, 
        		"Float");
))*(	otherlv_4=',' 
    	newLeafNode(otherlv_4, grammarAccess.getMatrixRowAccess().getCommaKeyword_1_2());
)?)?	otherlv_5='}' 
    	newLeafNode(otherlv_5, grammarAccess.getMatrixRowAccess().getRightCurlyBracketKeyword_2());
// Entry rule entryRuleMatrixAssignment
entryRuleMatrixAssignment returns [EObject current=null] 
	{ newCompositeNode(grammarAccess.getMatrixAssignmentRule()); }
	 iv_ruleMatrixAssignment=ruleMatrixAssignment 
	 { $current=$iv_ruleMatrixAssignment.current; } 
// Rule MatrixAssignment
ruleMatrixAssignment returns [EObject current=null] 
(	otherlv_0='[' 
    {
    	newLeafNode(otherlv_0, grammarAccess.getMatrixAssignmentAccess().getLeftSquareBracketKeyword_0());
    }
(
		lv_variable_1_0=RULE_MATH_NAME
		{
			newLeafNode(lv_variable_1_0, grammarAccess.getMatrixAssignmentAccess().getVariableMATH_NAMETerminalRuleCall_1_0()); 
		}
		{
	            $current = createModelElement(grammarAccess.getMatrixAssignmentRule());
       		setWithLastConsumed(
       			"variable",
        		lv_variable_1_0, 
        		"MATH_NAME");
)	otherlv_2=']' 
    	newLeafNode(otherlv_2, grammarAccess.getMatrixAssignmentAccess().getRightSquareBracketKeyword_2());
    }
	otherlv_3='=' 
    {
    	newLeafNode(otherlv_3, grammarAccess.getMatrixAssignmentAccess().getEqualsSignKeyword_3());
	        newCompositeNode(grammarAccess.getMatrixAssignmentAccess().getValueMatrixFormulaParserRuleCall_4_0()); 
		lv_value_4_0=ruleMatrixFormula		{
	            $current = createModelElementForParent(grammarAccess.getMatrixAssignmentRule());
       			"value",
        		lv_value_4_0, 
        		"MatrixFormula");
// Entry rule entryRuleMatrixFormula
entryRuleMatrixFormula returns [EObject current=null] 
	{ newCompositeNode(grammarAccess.getMatrixFormulaRule()); }
	 iv_ruleMatrixFormula=ruleMatrixFormula 
	 { $current=$iv_ruleMatrixFormula.current; } 
// Rule MatrixFormula
ruleMatrixFormula returns [EObject current=null] 
(
		{ 
	        newCompositeNode(grammarAccess.getMatrixFormulaAccess().getExpressionMatrixAdditionParserRuleCall_0()); 
	    }
		lv_expression_0_0=ruleMatrixAddition		{
	            $current = createModelElementForParent(grammarAccess.getMatrixFormulaRule());
       		set(
       			"expression",
        		lv_expression_0_0, 
        		"MatrixAddition");
	        afterParserOrEnumRuleCall();
)
;





// Entry rule entryRuleMatrixAddition
entryRuleMatrixAddition returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getMatrixAdditionRule()); }
	 iv_ruleMatrixAddition=ruleMatrixAddition 
	 { $current=$iv_ruleMatrixAddition.current; } 
	 EOF 
;

// Rule MatrixAddition
ruleMatrixAddition returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
(
	{ 
	  /* */ 
	}
    { 
        newCompositeNode(grammarAccess.getMatrixAdditionAccess().getMatrixMultiplicationParserRuleCall_0()); 
    }
    this_MatrixMultiplication_0=ruleMatrixMultiplication
    { 
        $current = $this_MatrixMultiplication_0.current; 
        afterParserOrEnumRuleCall();
    }
((	otherlv_1='+' 
    	newLeafNode(otherlv_1, grammarAccess.getMatrixAdditionAccess().getPlusSignKeyword_1_0_0());
(
	{ 
	  /* */ 
	}
        $current = forceCreateModelElementAndSet(
            grammarAccess.getMatrixAdditionAccess().getMatrixAdditionLeftAction_1_0_1(),
            $current);
)(
	        newCompositeNode(grammarAccess.getMatrixAdditionAccess().getRightMatrixMultiplicationParserRuleCall_1_0_2_0()); 
		lv_right_3_0=ruleMatrixMultiplication		{
	            $current = createModelElementForParent(grammarAccess.getMatrixAdditionRule());
       		set(
       			"right",
        		lv_right_3_0, 
        		"MatrixMultiplication");
))
    |(	otherlv_4='-' 
    	newLeafNode(otherlv_4, grammarAccess.getMatrixAdditionAccess().getHyphenMinusKeyword_1_1_0());
	{ 
	  /* */ 
	}
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getMatrixAdditionAccess().getMatrixSubtractionLeftAction_1_1_1(),
            $current);
    }
)(
	        newCompositeNode(grammarAccess.getMatrixAdditionAccess().getRightMatrixMultiplicationParserRuleCall_1_1_2_0()); 
		lv_right_6_0=ruleMatrixMultiplication		{
	            $current = createModelElementForParent(grammarAccess.getMatrixAdditionRule());
       		set(
       			"right",
        		lv_right_6_0, 
        		"MatrixMultiplication");
)))*)
// Entry rule entryRuleMatrixMultiplication
entryRuleMatrixMultiplication returns [EObject current=null] 
	{ newCompositeNode(grammarAccess.getMatrixMultiplicationRule()); }
	 iv_ruleMatrixMultiplication=ruleMatrixMultiplication 
	 { $current=$iv_ruleMatrixMultiplication.current; } 
// Rule MatrixMultiplication
ruleMatrixMultiplication returns [EObject current=null] 
(
	{ 
	  /* */ 
	}
    { 
        newCompositeNode(grammarAccess.getMatrixMultiplicationAccess().getPrimaryMatrixParserRuleCall_0()); 
    }
    this_PrimaryMatrix_0=rulePrimaryMatrix
    { 
        $current = $this_PrimaryMatrix_0.current; 
        afterParserOrEnumRuleCall();
    }
((	otherlv_1='*' 
    	newLeafNode(otherlv_1, grammarAccess.getMatrixMultiplicationAccess().getAsteriskKeyword_1_0_0());
(
	{ 
	  /* */ 
	}
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_0_1(),
            $current);
    }
)(
	        newCompositeNode(grammarAccess.getMatrixMultiplicationAccess().getRightMatrixPrimaryMatrixParserRuleCall_1_0_2_0()); 
		lv_rightMatrix_3_0=rulePrimaryMatrix		{
	            $current = createModelElementForParent(grammarAccess.getMatrixMultiplicationRule());
       		set(
       			"rightMatrix",
        		lv_rightMatrix_3_0, 
        		"PrimaryMatrix");
))
    |(	otherlv_4='*' 
    	newLeafNode(otherlv_4, grammarAccess.getMatrixMultiplicationAccess().getAsteriskKeyword_1_1_0());
	{ 
	  /* */ 
	}
    {
        $current = forceCreateModelElementAndSet(
            grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_1_1(),
            $current);
    }
)(
	        newCompositeNode(grammarAccess.getMatrixMultiplicationAccess().getRightScalarFormulaParserRuleCall_1_1_2_0()); 
		lv_rightScalar_6_0=ruleFormula		{
	            $current = createModelElementForParent(grammarAccess.getMatrixMultiplicationRule());
       		set(
       			"rightScalar",
        		lv_rightScalar_6_0, 
        		"Formula");
)))*)
;





// Entry rule entryRulePrimaryMatrix
entryRulePrimaryMatrix returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getPrimaryMatrixRule()); }
	 iv_rulePrimaryMatrix=rulePrimaryMatrix 
	 { $current=$iv_rulePrimaryMatrix.current; } 
	 EOF 
;

// Rule PrimaryMatrix
rulePrimaryMatrix returns [EObject current=null] 
    @init { enterRule(); 
    @after { leaveRule(); }:
(((
	{ 
	  /* */ 
	}
        $current = forceCreateModelElement(
            grammarAccess.getPrimaryMatrixAccess().getNewMatrixAction_0_0(),
            $current);
)(
(
		{ 
	        newCompositeNode(grammarAccess.getPrimaryMatrixAccess().getMatrixMatrixParserRuleCall_0_1_0()); 
	    }
		lv_matrix_1_0=ruleMatrix		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getPrimaryMatrixRule());
	        }
       		set(
       			$current, 
       			"matrix",
        		lv_matrix_1_0, 
        		"Matrix");
	        afterParserOrEnumRuleCall();
	    }

))
    |((
	{ 
	  /* */ 
	}
    {
        $current = forceCreateModelElement(
            grammarAccess.getPrimaryMatrixAccess().getTransposeMatrixAction_1_0(),
            $current);
    }
)	otherlv_3='[' 
    {
    	newLeafNode(otherlv_3, grammarAccess.getPrimaryMatrixAccess().getLeftSquareBracketKeyword_1_1());
    }
(
(
		lv_name_4_0=RULE_MATH_NAME
		{
			newLeafNode(lv_name_4_0, grammarAccess.getPrimaryMatrixAccess().getNameMATH_NAMETerminalRuleCall_1_2_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getPrimaryMatrixRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"name",
        		lv_name_4_0, 
        		"MATH_NAME");
	    }

)
)	otherlv_5=']^T' 
    {
    	newLeafNode(otherlv_5, grammarAccess.getPrimaryMatrixAccess().getTKeyword_1_3());
    }
)
    |((
	{ 
	  /* */ 
	}
    {
        $current = forceCreateModelElement(
            grammarAccess.getPrimaryMatrixAccess().getMatrixVariableAction_2_0(),
            $current);
    }
)	otherlv_7='[' 
    {
    	newLeafNode(otherlv_7, grammarAccess.getPrimaryMatrixAccess().getLeftSquareBracketKeyword_2_1());
    }
(
(
		lv_name_8_0=RULE_MATH_NAME
		{
			newLeafNode(lv_name_8_0, grammarAccess.getPrimaryMatrixAccess().getNameMATH_NAMETerminalRuleCall_2_2_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getPrimaryMatrixRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"name",
        		lv_name_8_0, 
        		"MATH_NAME");
	    }

)
)	otherlv_9=']' 
    {
    	newLeafNode(otherlv_9, grammarAccess.getPrimaryMatrixAccess().getRightSquareBracketKeyword_2_3());
    }
)
    |(	otherlv_10='(' 
    {
    	newLeafNode(otherlv_10, grammarAccess.getPrimaryMatrixAccess().getLeftParenthesisKeyword_3_0());
    }

	{ 
	  /* */ 
	}
    { 
        newCompositeNode(grammarAccess.getPrimaryMatrixAccess().getMatrixAdditionParserRuleCall_3_1()); 
    }
    this_MatrixAddition_11=ruleMatrixAddition
    { 
        $current = $this_MatrixAddition_11.current; 
        afterParserOrEnumRuleCall();
    }
	otherlv_12=')' 
    {
    	newLeafNode(otherlv_12, grammarAccess.getPrimaryMatrixAccess().getRightParenthesisKeyword_3_2());
    }
))
;





// Entry rule entryRuleFloat
entryRuleFloat returns [String current=null] 
	:
	{ newCompositeNode(grammarAccess.getFloatRule()); } 
	 iv_ruleFloat=ruleFloat 
	 { $current=$iv_ruleFloat.current.getText(); }  
	 EOF 
;

// Rule Float
ruleFloat returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((    this_INT_0=RULE_INT    {
		$current.merge(this_INT_0);
    }

    { 
    newLeafNode(this_INT_0, grammarAccess.getFloatAccess().getINTTerminalRuleCall_0()); 
    }
)+(
	kw='.' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFloatAccess().getFullStopKeyword_1_0()); 
    }
(    this_INT_2=RULE_INT    {
		$current.merge(this_INT_2);
    }

    { 
    newLeafNode(this_INT_2, grammarAccess.getFloatAccess().getINTTerminalRuleCall_1_1()); 
    }
)+((
	kw='E' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFloatAccess().getEKeyword_1_2_0_0()); 
    }

    |
	kw='e' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFloatAccess().getEKeyword_1_2_0_1()); 
    }
)(
	kw='-' 
    {
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFloatAccess().getHyphenMinusKeyword_1_2_1()); 
    }
)?(    this_INT_6=RULE_INT    {
		$current.merge(this_INT_6);
    }

    { 
    newLeafNode(this_INT_6, grammarAccess.getFloatAccess().getINTTerminalRuleCall_1_2_2()); 
    }
)+)?)?)
    ;





// Entry rule entryRuleFunction
entryRuleFunction returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getFunctionRule()); }
	 iv_ruleFunction=ruleFunction 
	 { $current=$iv_ruleFunction.current; } 
	 EOF 
;

// Rule Function
ruleFunction returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
(
		lv_name_0_0=RULE_MATH_NAME
		{
			newLeafNode(lv_name_0_0, grammarAccess.getFunctionAccess().getNameMATH_NAMETerminalRuleCall_0_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getFunctionRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"name",
        		lv_name_0_0, 
        		"MATH_NAME");
	    }

)
)	otherlv_1='(' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getFunctionAccess().getLeftParenthesisKeyword_1());
    }
((
(
		{ 
	        newCompositeNode(grammarAccess.getFunctionAccess().getParametersFormulaParserRuleCall_2_0_0()); 
	    }
		lv_parameters_2_0=ruleFormula		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getFunctionRule());
	        }
       		add(
       			$current, 
       			"parameters",
        		lv_parameters_2_0, 
        		"Formula");
	        afterParserOrEnumRuleCall();
	    }

)
)(	otherlv_3=',' 
    {
    	newLeafNode(otherlv_3, grammarAccess.getFunctionAccess().getCommaKeyword_2_1_0());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getFunctionAccess().getParametersFormulaParserRuleCall_2_1_1_0()); 
	    }
		lv_parameters_4_0=ruleFormula		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getFunctionRule());
	        }
       		add(
       			$current, 
       			"parameters",
        		lv_parameters_4_0, 
        		"Formula");
	        afterParserOrEnumRuleCall();
	    }

)
))*(	otherlv_5=',' 
    {
    	newLeafNode(otherlv_5, grammarAccess.getFunctionAccess().getCommaKeyword_2_2());
    }
)?)?	otherlv_6=')' 
    {
    	newLeafNode(otherlv_6, grammarAccess.getFunctionAccess().getRightParenthesisKeyword_3());
    }
)
;





// Entry rule entryRuleFunctionDefinition
entryRuleFunctionDefinition returns [EObject current=null] 
	:
	{ newCompositeNode(grammarAccess.getFunctionDefinitionRule()); }
	 iv_ruleFunctionDefinition=ruleFunctionDefinition 
	 { $current=$iv_ruleFunctionDefinition.current; } 
	 EOF 
;

// Rule FunctionDefinition
ruleFunctionDefinition returns [EObject current=null] 
    @init { enterRule(); 
    }
    @after { leaveRule(); }:
((
(
		{ 
	        newCompositeNode(grammarAccess.getFunctionDefinitionAccess().getFunctionFunctionParserRuleCall_0_0()); 
	    }
		lv_function_0_0=ruleFunction		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getFunctionDefinitionRule());
	        }
       		set(
       			$current, 
       			"function",
        		lv_function_0_0, 
        		"Function");
	        afterParserOrEnumRuleCall();
	    }

)
)	otherlv_1='=' 
    {
    	newLeafNode(otherlv_1, grammarAccess.getFunctionDefinitionAccess().getEqualsSignKeyword_1());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getFunctionDefinitionAccess().getFormulaFormulaParserRuleCall_2_0()); 
	    }
		lv_formula_2_0=ruleFormula		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getFunctionDefinitionRule());
	        }
       		set(
       			$current, 
       			"formula",
        		lv_formula_2_0, 
        		"Formula");
	        afterParserOrEnumRuleCall();
	    }

)
))
	        newCompositeNode(grammarAccess.getStatementAccess().getMatrixDefinitionMatrixDefinitionParserRuleCall_1_0()); 
		lv_matrixDefinition_1_0=ruleMatrixDefinition		{
       			"matrixDefinition",
        		lv_matrixDefinition_1_0, 
        		"MatrixDefinition");
	        newCompositeNode(grammarAccess.getStatementAccess().getAssignmentAssignmentParserRuleCall_2_0()); 
		lv_assignment_2_0=ruleAssignment		{
       			"assignment",
        		lv_assignment_2_0, 
        		"Assignment");
	        newCompositeNode(grammarAccess.getStatementAccess().getFormulaFormulaParserRuleCall_3_0()); 
		lv_formula_3_0=ruleFormula		{
       			"formula",
        		lv_formula_3_0, 
        		"Formula");
// Entry rule entryRuleAssignment
entryRuleAssignment returns [EObject current=null] 
	{ newCompositeNode(grammarAccess.getAssignmentRule()); }
	 iv_ruleAssignment=ruleAssignment 
	 { $current=$iv_ruleAssignment.current; } 
// Rule Assignment
ruleAssignment returns [EObject current=null] 
			newLeafNode(lv_variable_0_0, grammarAccess.getAssignmentAccess().getVariableMATH_NAMETerminalRuleCall_0_0()); 
	            $current = createModelElement(grammarAccess.getAssignmentRule());
    	newLeafNode(otherlv_1, grammarAccess.getAssignmentAccess().getEqualsSignKeyword_1());
	        newCompositeNode(grammarAccess.getAssignmentAccess().getValueFormulaParserRuleCall_2_0()); 
	            $current = createModelElementForParent(grammarAccess.getAssignmentRule());
    |(	otherlv_1='-' 
    	newLeafNode(otherlv_1, grammarAccess.getUnaryExpressionAccess().getHyphenMinusKeyword_1_0());
))
    |(	otherlv_4='(' 
    	newLeafNode(otherlv_4, grammarAccess.getUnaryExpressionAccess().getLeftParenthesisKeyword_2_0());
		lv_expression_6_0=ruleUnaryExpression		{
        		lv_expression_6_0, 
        		"UnaryExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)	otherlv_7=')!' 
    {
    	newLeafNode(otherlv_7, grammarAccess.getUnaryExpressionAccess().getRightParenthesisExclamationMarkKeyword_2_3());
    }
)
    |((
	{ 
	  /* */ 
	}
    {
        $current = forceCreateModelElement(
            grammarAccess.getUnaryExpressionAccess().getIntervalAction_3_0(),
            $current);
    }
)(
(
(
		lv_openingBracket_9_1=	'[' 
    {
        newLeafNode(lv_openingBracket_9_1, grammarAccess.getUnaryExpressionAccess().getOpeningBracketLeftSquareBracketKeyword_3_1_0_0());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getUnaryExpressionRule());
	        }
       		setWithLastConsumed($current, "openingBracket", lv_openingBracket_9_1, null);
	    }

    |		lv_openingBracket_9_2=	'(' 
    {
        newLeafNode(lv_openingBracket_9_2, grammarAccess.getUnaryExpressionAccess().getOpeningBracketLeftParenthesisKeyword_3_1_0_1());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getUnaryExpressionRule());
	        }
       		setWithLastConsumed($current, "openingBracket", lv_openingBracket_9_2, null);
	    }

)

)
)	otherlv_10='(' 
    {
    	newLeafNode(otherlv_10, grammarAccess.getUnaryExpressionAccess().getLeftParenthesisKeyword_3_2());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getUnaryExpressionAccess().getCeilUnaryExpressionParserRuleCall_3_3_0()); 
	    }
		lv_ceil_11_0=ruleUnaryExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getUnaryExpressionRule());
	        }
       		set(
       			$current, 
       			"ceil",
        		lv_ceil_11_0, 
        		"UnaryExpression");
	        afterParserOrEnumRuleCall();
	    }

)
)	otherlv_12=')' 
    {
    	newLeafNode(otherlv_12, grammarAccess.getUnaryExpressionAccess().getRightParenthesisKeyword_3_4());
    }
	otherlv_13='..' 
    {
    	newLeafNode(otherlv_13, grammarAccess.getUnaryExpressionAccess().getFullStopFullStopKeyword_3_5());
    }
	otherlv_14='(' 
    {
    	newLeafNode(otherlv_14, grammarAccess.getUnaryExpressionAccess().getLeftParenthesisKeyword_3_6());
    }
(
(
		{ 
	        newCompositeNode(grammarAccess.getUnaryExpressionAccess().getFloorUnaryExpressionParserRuleCall_3_7_0()); 
	    }
		lv_floor_15_0=ruleUnaryExpression		{
	        if ($current==null) {
	            $current = createModelElementForParent(grammarAccess.getUnaryExpressionRule());
	        }
       		set(
       			$current, 
       			"floor",
        		lv_floor_15_0, 
)	otherlv_16=')' 
    {
    	newLeafNode(otherlv_16, grammarAccess.getUnaryExpressionAccess().getRightParenthesisKeyword_3_8());
    }
(
(
(
		lv_closingBracket_17_1=	']' 
        newLeafNode(lv_closingBracket_17_1, grammarAccess.getUnaryExpressionAccess().getClosingBracketRightSquareBracketKeyword_3_9_0_0());
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getUnaryExpressionRule());
	        }
       		setWithLastConsumed($current, "closingBracket", lv_closingBracket_17_1, null);
	    }

    |		lv_closingBracket_17_2=	')' 
    {
        newLeafNode(lv_closingBracket_17_2, grammarAccess.getUnaryExpressionAccess().getClosingBracketRightParenthesisKeyword_3_9_0_1());
    }
 
	    {
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getUnaryExpressionRule());
	        }
       		setWithLastConsumed($current, "closingBracket", lv_closingBracket_17_2, null);
	    }

)

)
)))
            grammarAccess.getPrimaryAccess().getFunctionAction_2_0(),
	        newCompositeNode(grammarAccess.getPrimaryAccess().getFunctionFunctionParserRuleCall_2_1_0()); 
		lv_function_5_0=ruleFunction		{
        		lv_function_5_0, 
    |(	otherlv_6='(' 
    	newLeafNode(otherlv_6, grammarAccess.getPrimaryAccess().getLeftParenthesisKeyword_3_0());
        newCompositeNode(grammarAccess.getPrimaryAccess().getAdditionParserRuleCall_3_1()); 
    this_Addition_7=ruleAddition
        $current = $this_Addition_7.current; 
	otherlv_8=')' 
    	newLeafNode(otherlv_8, grammarAccess.getPrimaryAccess().getRightParenthesisKeyword_3_2());
// Entry rule entryRuleFloat
entryRuleFloat returns [String current=null] 
	{ newCompositeNode(grammarAccess.getFloatRule()); } 
	 iv_ruleFloat=ruleFloat 
	 { $current=$iv_ruleFloat.current.getText(); }  
// Rule Float
ruleFloat returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
((    this_INT_0=RULE_INT    {
		$current.merge(this_INT_0);
    }

    { 
    newLeafNode(this_INT_0, grammarAccess.getFloatAccess().getINTTerminalRuleCall_0()); 
    }
)+(
	kw='.' 
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFloatAccess().getFullStopKeyword_1_0()); 
    }
(    this_INT_2=RULE_INT    {
		$current.merge(this_INT_2);
    { 
    newLeafNode(this_INT_2, grammarAccess.getFloatAccess().getINTTerminalRuleCall_1_1()); 
    }
)+((
	kw='E' 
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFloatAccess().getEKeyword_1_2_0_0()); 
    |
	kw='e' 
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFloatAccess().getEKeyword_1_2_0_1()); 
)(
	kw='-' 
        $current.merge(kw);
        newLeafNode(kw, grammarAccess.getFloatAccess().getHyphenMinusKeyword_1_2_1()); 
    }
)?(    this_INT_6=RULE_INT    {
		$current.merge(this_INT_6);

    { 
    newLeafNode(this_INT_6, grammarAccess.getFloatAccess().getINTTerminalRuleCall_1_2_2()); 
    }
)+)?)?)
    ;
// Entry rule entryRuleFunction
entryRuleFunction returns [EObject current=null] 
	{ newCompositeNode(grammarAccess.getFunctionRule()); }
	 iv_ruleFunction=ruleFunction 
	 { $current=$iv_ruleFunction.current; } 
	 EOF 
// Rule Function
ruleFunction returns [EObject current=null] 
((
(
		lv_name_0_0=RULE_MATH_NAME
		{
			newLeafNode(lv_name_0_0, grammarAccess.getFunctionAccess().getNameMATH_NAMETerminalRuleCall_0_0()); 
		}
		{
	        if ($current==null) {
	            $current = createModelElement(grammarAccess.getFunctionRule());
	        }
       		setWithLastConsumed(
       			$current, 
       			"name",
        		lv_name_0_0, 
        		"MATH_NAME");
	    }

)
)	otherlv_1='(' 
    	newLeafNode(otherlv_1, grammarAccess.getFunctionAccess().getLeftParenthesisKeyword_1());
	        newCompositeNode(grammarAccess.getFunctionAccess().getParametersFormulaParserRuleCall_2_0_0()); 
		lv_parameters_2_0=ruleFormula		{
	            $current = createModelElementForParent(grammarAccess.getFunctionRule());
       			"parameters",
        		lv_parameters_2_0, 
        		"Formula");
)(	otherlv_3=',' 
    	newLeafNode(otherlv_3, grammarAccess.getFunctionAccess().getCommaKeyword_2_1_0());
	        newCompositeNode(grammarAccess.getFunctionAccess().getParametersFormulaParserRuleCall_2_1_1_0()); 
		lv_parameters_4_0=ruleFormula		{
	            $current = createModelElementForParent(grammarAccess.getFunctionRule());
       			"parameters",
        		lv_parameters_4_0, 
        		"Formula");
))*(	otherlv_5=',' 
    	newLeafNode(otherlv_5, grammarAccess.getFunctionAccess().getCommaKeyword_2_2());
)?)?	otherlv_6=')' 
    	newLeafNode(otherlv_6, grammarAccess.getFunctionAccess().getRightParenthesisKeyword_3());
// Entry rule entryRuleFunctionDefinition
entryRuleFunctionDefinition returns [EObject current=null] 
	{ newCompositeNode(grammarAccess.getFunctionDefinitionRule()); }
	 iv_ruleFunctionDefinition=ruleFunctionDefinition 
	 { $current=$iv_ruleFunctionDefinition.current; } 
// Rule FunctionDefinition
ruleFunctionDefinition returns [EObject current=null] 
((
		{ 
	        newCompositeNode(grammarAccess.getFunctionDefinitionAccess().getFunctionFunctionParserRuleCall_0_0()); 
	    }
		lv_function_0_0=ruleFunction		{
	            $current = createModelElementForParent(grammarAccess.getFunctionDefinitionRule());
       		set(
       			"function",
        		lv_function_0_0, 
        		"Function");
	        afterParserOrEnumRuleCall();
)	otherlv_1='=' 
    	newLeafNode(otherlv_1, grammarAccess.getFunctionDefinitionAccess().getEqualsSignKeyword_1());
	        newCompositeNode(grammarAccess.getFunctionDefinitionAccess().getFormulaFormulaParserRuleCall_2_0()); 
		lv_formula_2_0=ruleFormula		{
	            $current = createModelElementForParent(grammarAccess.getFunctionDefinitionRule());
       			"formula",
        		lv_formula_2_0, 
        		"Formula");
// Entry rule entryRuleMatrixDefinition
entryRuleMatrixDefinition returns [EObject current=null] 
	{ newCompositeNode(grammarAccess.getMatrixDefinitionRule()); }
	 iv_ruleMatrixDefinition=ruleMatrixDefinition 
	 { $current=$iv_ruleMatrixDefinition.current; } 
// Rule MatrixDefinition
ruleMatrixDefinition returns [EObject current=null] 
((
		lv_name_0_0=RULE_MATH_NAME
		{
			newLeafNode(lv_name_0_0, grammarAccess.getMatrixDefinitionAccess().getNameMATH_NAMETerminalRuleCall_0_0()); 
		}
		{
	            $current = createModelElement(grammarAccess.getMatrixDefinitionRule());
       		setWithLastConsumed(
       			"name",
        		lv_name_0_0, 
        		"MATH_NAME");
)	otherlv_1='=' 
    	newLeafNode(otherlv_1, grammarAccess.getMatrixDefinitionAccess().getEqualsSignKeyword_1());
	otherlv_2='{' 
    	newLeafNode(otherlv_2, grammarAccess.getMatrixDefinitionAccess().getLeftCurlyBracketKeyword_2());
((
	        newCompositeNode(grammarAccess.getMatrixDefinitionAccess().getRowsMatrixRowParserRuleCall_3_0_0()); 
		lv_rows_3_0=ruleMatrixRow		{
	            $current = createModelElementForParent(grammarAccess.getMatrixDefinitionRule());
       		add(
       			"rows",
        		lv_rows_3_0, 
        		"MatrixRow");
)(	otherlv_4=',' 
    	newLeafNode(otherlv_4, grammarAccess.getMatrixDefinitionAccess().getCommaKeyword_3_1_0());
	        newCompositeNode(grammarAccess.getMatrixDefinitionAccess().getRowsMatrixRowParserRuleCall_3_1_1_0()); 
		lv_rows_5_0=ruleMatrixRow		{
	            $current = createModelElementForParent(grammarAccess.getMatrixDefinitionRule());
       		add(
       			"rows",
        		lv_rows_5_0, 
        		"MatrixRow");
))*(	otherlv_6=',' 
    {
    	newLeafNode(otherlv_6, grammarAccess.getMatrixDefinitionAccess().getCommaKeyword_3_2());
    }
)?)?	otherlv_7='}' 
    {
    	newLeafNode(otherlv_7, grammarAccess.getMatrixDefinitionAccess().getRightCurlyBracketKeyword_4());
    }
)
// Entry rule entryRuleMatrixRow
entryRuleMatrixRow returns [EObject current=null] 
	{ newCompositeNode(grammarAccess.getMatrixRowRule()); }
	 iv_ruleMatrixRow=ruleMatrixRow 
	 { $current=$iv_ruleMatrixRow.current; } 
// Rule MatrixRow
ruleMatrixRow returns [EObject current=null] 
(	otherlv_0='{' 
    	newLeafNode(otherlv_0, grammarAccess.getMatrixRowAccess().getLeftCurlyBracketKeyword_0());
((
	        newCompositeNode(grammarAccess.getMatrixRowAccess().getElementsFloatParserRuleCall_1_0_0()); 
		lv_elements_1_0=ruleFloat		{
	            $current = createModelElementForParent(grammarAccess.getMatrixRowRule());
       		add(
       			"elements",
        		lv_elements_1_0, 
        		"Float");
)(	otherlv_2=',' 
    	newLeafNode(otherlv_2, grammarAccess.getMatrixRowAccess().getCommaKeyword_1_1_0());
	        newCompositeNode(grammarAccess.getMatrixRowAccess().getElementsFloatParserRuleCall_1_1_1_0()); 
		lv_elements_3_0=ruleFloat		{
	            $current = createModelElementForParent(grammarAccess.getMatrixRowRule());
       		add(
       			"elements",
        		lv_elements_3_0, 
        		"Float");
))*(	otherlv_4=',' 
    {
    	newLeafNode(otherlv_4, grammarAccess.getMatrixRowAccess().getCommaKeyword_1_2());
)?)?	otherlv_5='}' 
    	newLeafNode(otherlv_5, grammarAccess.getMatrixRowAccess().getRightCurlyBracketKeyword_2());
@@ -105,17 +105,17 @@ ruleStatement returns [EObject current=null]
     |(
 (
 		{ 
-	        newCompositeNode(grammarAccess.getStatementAccess().getMatrixDefinitionMatrixDefinitionParserRuleCall_1_0()); 
+	        newCompositeNode(grammarAccess.getStatementAccess().getVariableAssignmentVariableAssignmentParserRuleCall_1_0()); 
 	    }
-		lv_matrixDefinition_1_0=ruleMatrixDefinition		{
+		lv_variableAssignment_1_0=ruleVariableAssignment		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getStatementRule());
 	        }
        		set(
        			$current, 
-       			"matrixDefinition",
-        		lv_matrixDefinition_1_0, 
-        		"MatrixDefinition");
+       			"variableAssignment",
+        		lv_variableAssignment_1_0, 
+        		"VariableAssignment");
 	        afterParserOrEnumRuleCall();
 	    }
 
@@ -124,17 +124,17 @@ ruleStatement returns [EObject current=null]
     |(
 (
 		{ 
-	        newCompositeNode(grammarAccess.getStatementAccess().getAssignmentAssignmentParserRuleCall_2_0()); 
+	        newCompositeNode(grammarAccess.getStatementAccess().getFormulaFormulaParserRuleCall_2_0()); 
 	    }
-		lv_assignment_2_0=ruleAssignment		{
+		lv_formula_2_0=ruleFormula		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getStatementRule());
 	        }
        		set(
        			$current, 
-       			"assignment",
-        		lv_assignment_2_0, 
-        		"Assignment");
+       			"formula",
+        		lv_formula_2_0, 
+        		"Formula");
 	        afterParserOrEnumRuleCall();
 	    }
 
@@ -143,17 +143,36 @@ ruleStatement returns [EObject current=null]
     |(
 (
 		{ 
-	        newCompositeNode(grammarAccess.getStatementAccess().getFormulaFormulaParserRuleCall_3_0()); 
+	        newCompositeNode(grammarAccess.getStatementAccess().getMatrixAssignmentMatrixAssignmentParserRuleCall_3_0()); 
 	    }
-		lv_formula_3_0=ruleFormula		{
+		lv_matrixAssignment_3_0=ruleMatrixAssignment		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getStatementRule());
 	        }
        		set(
        			$current, 
-       			"formula",
-        		lv_formula_3_0, 
-        		"Formula");
+       			"matrixAssignment",
+        		lv_matrixAssignment_3_0, 
+        		"MatrixAssignment");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getStatementAccess().getMatrixFormulaMatrixFormulaParserRuleCall_4_0()); 
+	    }
+		lv_matrixFormula_4_0=ruleMatrixFormula		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getStatementRule());
+	        }
+       		set(
+       			$current, 
+       			"matrixFormula",
+        		lv_matrixFormula_4_0, 
+        		"MatrixFormula");
 	        afterParserOrEnumRuleCall();
 	    }
 
@@ -165,29 +184,29 @@ ruleStatement returns [EObject current=null]
 
 
 
-// Entry rule entryRuleAssignment
-entryRuleAssignment returns [EObject current=null] 
+// Entry rule entryRuleVariableAssignment
+entryRuleVariableAssignment returns [EObject current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getAssignmentRule()); }
-	 iv_ruleAssignment=ruleAssignment 
-	 { $current=$iv_ruleAssignment.current; } 
+	{ newCompositeNode(grammarAccess.getVariableAssignmentRule()); }
+	 iv_ruleVariableAssignment=ruleVariableAssignment 
+	 { $current=$iv_ruleVariableAssignment.current; } 
 	 EOF 
 ;
 
-// Rule Assignment
-ruleAssignment returns [EObject current=null] 
+// Rule VariableAssignment
+ruleVariableAssignment returns [EObject current=null] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
 ((
 (
 		lv_variable_0_0=RULE_MATH_NAME
 		{
-			newLeafNode(lv_variable_0_0, grammarAccess.getAssignmentAccess().getVariableMATH_NAMETerminalRuleCall_0_0()); 
+			newLeafNode(lv_variable_0_0, grammarAccess.getVariableAssignmentAccess().getVariableMATH_NAMETerminalRuleCall_0_0()); 
 		}
 		{
 	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getAssignmentRule());
+	            $current = createModelElement(grammarAccess.getVariableAssignmentRule());
 	        }
        		setWithLastConsumed(
        			$current, 
@@ -199,16 +218,16 @@ ruleAssignment returns [EObject current=null]
 )
 )	otherlv_1='=' 
     {
-    	newLeafNode(otherlv_1, grammarAccess.getAssignmentAccess().getEqualsSignKeyword_1());
+    	newLeafNode(otherlv_1, grammarAccess.getVariableAssignmentAccess().getEqualsSignKeyword_1());
     }
 (
 (
 		{ 
-	        newCompositeNode(grammarAccess.getAssignmentAccess().getValueFormulaParserRuleCall_2_0()); 
+	        newCompositeNode(grammarAccess.getVariableAssignmentAccess().getValueFormulaParserRuleCall_2_0()); 
 	    }
 		lv_value_2_0=ruleFormula		{
 	        if ($current==null) {
-	            $current = createModelElementForParent(grammarAccess.getAssignmentRule());
+	            $current = createModelElementForParent(grammarAccess.getVariableAssignmentRule());
 	        }
        		set(
        			$current, 
@@ -516,9 +535,9 @@ ruleUnaryExpression returns [EObject current=null]
         afterParserOrEnumRuleCall();
     }
 
-    |(	otherlv_1='-' 
+    |(	otherlv_1='(-' 
     {
-    	newLeafNode(otherlv_1, grammarAccess.getUnaryExpressionAccess().getHyphenMinusKeyword_1_0());
+    	newLeafNode(otherlv_1, grammarAccess.getUnaryExpressionAccess().getLeftParenthesisHyphenMinusKeyword_1_0());
     }
 (
 	{ 
@@ -547,10 +566,14 @@ ruleUnaryExpression returns [EObject current=null]
 	    }
 
 )
-))
-    |(	otherlv_4='(' 
+)	otherlv_4=')' 
+    {
+    	newLeafNode(otherlv_4, grammarAccess.getUnaryExpressionAccess().getRightParenthesisKeyword_1_3());
+    }
+)
+    |(	otherlv_5='(' 
     {
-    	newLeafNode(otherlv_4, grammarAccess.getUnaryExpressionAccess().getLeftParenthesisKeyword_2_0());
+    	newLeafNode(otherlv_5, grammarAccess.getUnaryExpressionAccess().getLeftParenthesisKeyword_2_0());
     }
 (
 	{ 
@@ -566,150 +589,24 @@ ruleUnaryExpression returns [EObject current=null]
 		{ 
 	        newCompositeNode(grammarAccess.getUnaryExpressionAccess().getExpressionUnaryExpressionParserRuleCall_2_2_0()); 
 	    }
-		lv_expression_6_0=ruleUnaryExpression		{
+		lv_expression_7_0=ruleUnaryExpression		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getUnaryExpressionRule());
 	        }
        		set(
        			$current, 
        			"expression",
-        		lv_expression_6_0, 
-        		"UnaryExpression");
-	        afterParserOrEnumRuleCall();
-	    }
-
-)
-)	otherlv_7=')!' 
-    {
-    	newLeafNode(otherlv_7, grammarAccess.getUnaryExpressionAccess().getRightParenthesisExclamationMarkKeyword_2_3());
-    }
-)
-    |((
-	{ 
-	  /* */ 
-	}
-    {
-        $current = forceCreateModelElement(
-            grammarAccess.getUnaryExpressionAccess().getIntervalAction_3_0(),
-            $current);
-    }
-)(
-(
-(
-		lv_openingBracket_9_1=	'[' 
-    {
-        newLeafNode(lv_openingBracket_9_1, grammarAccess.getUnaryExpressionAccess().getOpeningBracketLeftSquareBracketKeyword_3_1_0_0());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getUnaryExpressionRule());
-	        }
-       		setWithLastConsumed($current, "openingBracket", lv_openingBracket_9_1, null);
-	    }
-
-    |		lv_openingBracket_9_2=	'(' 
-    {
-        newLeafNode(lv_openingBracket_9_2, grammarAccess.getUnaryExpressionAccess().getOpeningBracketLeftParenthesisKeyword_3_1_0_1());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getUnaryExpressionRule());
-	        }
-       		setWithLastConsumed($current, "openingBracket", lv_openingBracket_9_2, null);
-	    }
-
-)
-
-)
-)	otherlv_10='(' 
-    {
-    	newLeafNode(otherlv_10, grammarAccess.getUnaryExpressionAccess().getLeftParenthesisKeyword_3_2());
-    }
-(
-(
-		{ 
-	        newCompositeNode(grammarAccess.getUnaryExpressionAccess().getCeilUnaryExpressionParserRuleCall_3_3_0()); 
-	    }
-		lv_ceil_11_0=ruleUnaryExpression		{
-	        if ($current==null) {
-	            $current = createModelElementForParent(grammarAccess.getUnaryExpressionRule());
-	        }
-       		set(
-       			$current, 
-       			"ceil",
-        		lv_ceil_11_0, 
-        		"UnaryExpression");
-	        afterParserOrEnumRuleCall();
-	    }
-
-)
-)	otherlv_12=')' 
-    {
-    	newLeafNode(otherlv_12, grammarAccess.getUnaryExpressionAccess().getRightParenthesisKeyword_3_4());
-    }
-	otherlv_13='..' 
-    {
-    	newLeafNode(otherlv_13, grammarAccess.getUnaryExpressionAccess().getFullStopFullStopKeyword_3_5());
-    }
-	otherlv_14='(' 
-    {
-    	newLeafNode(otherlv_14, grammarAccess.getUnaryExpressionAccess().getLeftParenthesisKeyword_3_6());
-    }
-(
-(
-		{ 
-	        newCompositeNode(grammarAccess.getUnaryExpressionAccess().getFloorUnaryExpressionParserRuleCall_3_7_0()); 
-	    }
-		lv_floor_15_0=ruleUnaryExpression		{
-	        if ($current==null) {
-	            $current = createModelElementForParent(grammarAccess.getUnaryExpressionRule());
-	        }
-       		set(
-       			$current, 
-       			"floor",
-        		lv_floor_15_0, 
+        		lv_expression_7_0, 
         		"UnaryExpression");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-)	otherlv_16=')' 
-    {
-    	newLeafNode(otherlv_16, grammarAccess.getUnaryExpressionAccess().getRightParenthesisKeyword_3_8());
-    }
-(
-(
-(
-		lv_closingBracket_17_1=	']' 
+)	otherlv_8=')!' 
     {
-        newLeafNode(lv_closingBracket_17_1, grammarAccess.getUnaryExpressionAccess().getClosingBracketRightSquareBracketKeyword_3_9_0_0());
+    	newLeafNode(otherlv_8, grammarAccess.getUnaryExpressionAccess().getRightParenthesisExclamationMarkKeyword_2_3());
     }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getUnaryExpressionRule());
-	        }
-       		setWithLastConsumed($current, "closingBracket", lv_closingBracket_17_1, null);
-	    }
-
-    |		lv_closingBracket_17_2=	')' 
-    {
-        newLeafNode(lv_closingBracket_17_2, grammarAccess.getUnaryExpressionAccess().getClosingBracketRightParenthesisKeyword_3_9_0_1());
-    }
- 
-	    {
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getUnaryExpressionRule());
-	        }
-       		setWithLastConsumed($current, "closingBracket", lv_closingBracket_17_2, null);
-	    }
-
-)
-
-)
-)))
+))
 ;
 
 
@@ -856,47 +753,127 @@ rulePrimary returns [EObject current=null]
 	}
     {
         $current = forceCreateModelElement(
-            grammarAccess.getPrimaryAccess().getFunctionAction_2_0(),
+            grammarAccess.getPrimaryAccess().getMatrixElementAction_2_0(),
+            $current);
+    }
+)(
+(
+		lv_element_5_0=RULE_MATH_NAME
+		{
+			newLeafNode(lv_element_5_0, grammarAccess.getPrimaryAccess().getElementMATH_NAMETerminalRuleCall_2_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getPrimaryRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"element",
+        		lv_element_5_0, 
+        		"MATH_NAME");
+	    }
+
+)
+)	otherlv_6='[' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getPrimaryAccess().getLeftSquareBracketKeyword_2_2());
+    }
+(
+(
+		lv_row_7_0=RULE_INT
+		{
+			newLeafNode(lv_row_7_0, grammarAccess.getPrimaryAccess().getRowINTTerminalRuleCall_2_3_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getPrimaryRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"row",
+        		lv_row_7_0, 
+        		"INT");
+	    }
+
+)
+)	otherlv_8=']' 
+    {
+    	newLeafNode(otherlv_8, grammarAccess.getPrimaryAccess().getRightSquareBracketKeyword_2_4());
+    }
+	otherlv_9='[' 
+    {
+    	newLeafNode(otherlv_9, grammarAccess.getPrimaryAccess().getLeftSquareBracketKeyword_2_5());
+    }
+(
+(
+		lv_column_10_0=RULE_INT
+		{
+			newLeafNode(lv_column_10_0, grammarAccess.getPrimaryAccess().getColumnINTTerminalRuleCall_2_6_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getPrimaryRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"column",
+        		lv_column_10_0, 
+        		"INT");
+	    }
+
+)
+)	otherlv_11=']' 
+    {
+    	newLeafNode(otherlv_11, grammarAccess.getPrimaryAccess().getRightSquareBracketKeyword_2_7());
+    }
+)
+    |((
+	{ 
+	  /* */ 
+	}
+    {
+        $current = forceCreateModelElement(
+            grammarAccess.getPrimaryAccess().getFunctionAction_3_0(),
             $current);
     }
 )(
 (
 		{ 
-	        newCompositeNode(grammarAccess.getPrimaryAccess().getFunctionFunctionParserRuleCall_2_1_0()); 
+	        newCompositeNode(grammarAccess.getPrimaryAccess().getFunctionFunctionParserRuleCall_3_1_0()); 
 	    }
-		lv_function_5_0=ruleFunction		{
+		lv_function_13_0=ruleFunction		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getPrimaryRule());
 	        }
        		set(
        			$current, 
        			"function",
-        		lv_function_5_0, 
+        		lv_function_13_0, 
         		"Function");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
 ))
-    |(	otherlv_6='(' 
+    |(	otherlv_14='(' 
     {
-    	newLeafNode(otherlv_6, grammarAccess.getPrimaryAccess().getLeftParenthesisKeyword_3_0());
+    	newLeafNode(otherlv_14, grammarAccess.getPrimaryAccess().getLeftParenthesisKeyword_4_0());
     }
 
 	{ 
 	  /* */ 
 	}
     { 
-        newCompositeNode(grammarAccess.getPrimaryAccess().getAdditionParserRuleCall_3_1()); 
+        newCompositeNode(grammarAccess.getPrimaryAccess().getAdditionParserRuleCall_4_1()); 
     }
-    this_Addition_7=ruleAddition
+    this_Addition_15=ruleAddition
     { 
-        $current = $this_Addition_7.current; 
+        $current = $this_Addition_15.current; 
         afterParserOrEnumRuleCall();
     }
-	otherlv_8=')' 
+	otherlv_16=')' 
     {
-    	newLeafNode(otherlv_8, grammarAccess.getPrimaryAccess().getRightParenthesisKeyword_3_2());
+    	newLeafNode(otherlv_16, grammarAccess.getPrimaryAccess().getRightParenthesisKeyword_4_2());
     }
 ))
 ;
@@ -905,156 +882,144 @@ rulePrimary returns [EObject current=null]
 
 
 
-// Entry rule entryRuleFloat
-entryRuleFloat returns [String current=null] 
+// Entry rule entryRuleMatrix
+entryRuleMatrix returns [EObject current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getFloatRule()); } 
-	 iv_ruleFloat=ruleFloat 
-	 { $current=$iv_ruleFloat.current.getText(); }  
+	{ newCompositeNode(grammarAccess.getMatrixRule()); }
+	 iv_ruleMatrix=ruleMatrix 
+	 { $current=$iv_ruleMatrix.current; } 
 	 EOF 
 ;
 
-// Rule Float
-ruleFloat returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+// Rule Matrix
+ruleMatrix returns [EObject current=null] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
-((    this_INT_0=RULE_INT    {
-		$current.merge(this_INT_0);
-    }
-
-    { 
-    newLeafNode(this_INT_0, grammarAccess.getFloatAccess().getINTTerminalRuleCall_0()); 
-    }
-)+(
-	kw='.' 
+(	otherlv_0='{' 
     {
-        $current.merge(kw);
-        newLeafNode(kw, grammarAccess.getFloatAccess().getFullStopKeyword_1_0()); 
-    }
-(    this_INT_2=RULE_INT    {
-		$current.merge(this_INT_2);
+    	newLeafNode(otherlv_0, grammarAccess.getMatrixAccess().getLeftCurlyBracketKeyword_0());
     }
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getMatrixAccess().getRowsMatrixRowParserRuleCall_1_0_0()); 
+	    }
+		lv_rows_1_0=ruleMatrixRow		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getMatrixRule());
+	        }
+       		add(
+       			$current, 
+       			"rows",
+        		lv_rows_1_0, 
+        		"MatrixRow");
+	        afterParserOrEnumRuleCall();
+	    }
 
-    { 
-    newLeafNode(this_INT_2, grammarAccess.getFloatAccess().getINTTerminalRuleCall_1_1()); 
-    }
-)+((
-	kw='E' 
+)
+)(	otherlv_2=',' 
     {
-        $current.merge(kw);
-        newLeafNode(kw, grammarAccess.getFloatAccess().getEKeyword_1_2_0_0()); 
+    	newLeafNode(otherlv_2, grammarAccess.getMatrixAccess().getCommaKeyword_1_1_0());
     }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getMatrixAccess().getRowsMatrixRowParserRuleCall_1_1_1_0()); 
+	    }
+		lv_rows_3_0=ruleMatrixRow		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getMatrixRule());
+	        }
+       		add(
+       			$current, 
+       			"rows",
+        		lv_rows_3_0, 
+        		"MatrixRow");
+	        afterParserOrEnumRuleCall();
+	    }
 
-    |
-	kw='e' 
+)
+))*(	otherlv_4=',' 
     {
-        $current.merge(kw);
-        newLeafNode(kw, grammarAccess.getFloatAccess().getEKeyword_1_2_0_1()); 
+    	newLeafNode(otherlv_4, grammarAccess.getMatrixAccess().getCommaKeyword_1_2());
     }
-)(
-	kw='-' 
+)?)?	otherlv_5='}' 
     {
-        $current.merge(kw);
-        newLeafNode(kw, grammarAccess.getFloatAccess().getHyphenMinusKeyword_1_2_1()); 
-    }
-)?(    this_INT_6=RULE_INT    {
-		$current.merge(this_INT_6);
+    	newLeafNode(otherlv_5, grammarAccess.getMatrixAccess().getRightCurlyBracketKeyword_2());
     }
-
-    { 
-    newLeafNode(this_INT_6, grammarAccess.getFloatAccess().getINTTerminalRuleCall_1_2_2()); 
-    }
-)+)?)?)
-    ;
+)
+;
 
 
 
 
 
-// Entry rule entryRuleFunction
-entryRuleFunction returns [EObject current=null] 
+// Entry rule entryRuleMatrixRow
+entryRuleMatrixRow returns [EObject current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getFunctionRule()); }
-	 iv_ruleFunction=ruleFunction 
-	 { $current=$iv_ruleFunction.current; } 
-	 EOF 
+	{ newCompositeNode(grammarAccess.getMatrixRowRule()); }
+	 iv_ruleMatrixRow=ruleMatrixRow 
+	 { $current=$iv_ruleMatrixRow.current; } 
+	 EOF 
 ;
 
-// Rule Function
-ruleFunction returns [EObject current=null] 
+// Rule MatrixRow
+ruleMatrixRow returns [EObject current=null] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
-((
-(
-		lv_name_0_0=RULE_MATH_NAME
-		{
-			newLeafNode(lv_name_0_0, grammarAccess.getFunctionAccess().getNameMATH_NAMETerminalRuleCall_0_0()); 
-		}
-		{
-	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getFunctionRule());
-	        }
-       		setWithLastConsumed(
-       			$current, 
-       			"name",
-        		lv_name_0_0, 
-        		"MATH_NAME");
-	    }
-
-)
-)	otherlv_1='(' 
+(	otherlv_0='{' 
     {
-    	newLeafNode(otherlv_1, grammarAccess.getFunctionAccess().getLeftParenthesisKeyword_1());
+    	newLeafNode(otherlv_0, grammarAccess.getMatrixRowAccess().getLeftCurlyBracketKeyword_0());
     }
 ((
 (
 		{ 
-	        newCompositeNode(grammarAccess.getFunctionAccess().getParametersFormulaParserRuleCall_2_0_0()); 
+	        newCompositeNode(grammarAccess.getMatrixRowAccess().getElementsFloatParserRuleCall_1_0_0()); 
 	    }
-		lv_parameters_2_0=ruleFormula		{
+		lv_elements_1_0=ruleFloat		{
 	        if ($current==null) {
-	            $current = createModelElementForParent(grammarAccess.getFunctionRule());
+	            $current = createModelElementForParent(grammarAccess.getMatrixRowRule());
 	        }
        		add(
        			$current, 
-       			"parameters",
-        		lv_parameters_2_0, 
-        		"Formula");
+       			"elements",
+        		lv_elements_1_0, 
+        		"Float");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-)(	otherlv_3=',' 
+)(	otherlv_2=',' 
     {
-    	newLeafNode(otherlv_3, grammarAccess.getFunctionAccess().getCommaKeyword_2_1_0());
+    	newLeafNode(otherlv_2, grammarAccess.getMatrixRowAccess().getCommaKeyword_1_1_0());
     }
 (
 (
 		{ 
-	        newCompositeNode(grammarAccess.getFunctionAccess().getParametersFormulaParserRuleCall_2_1_1_0()); 
+	        newCompositeNode(grammarAccess.getMatrixRowAccess().getElementsFloatParserRuleCall_1_1_1_0()); 
 	    }
-		lv_parameters_4_0=ruleFormula		{
+		lv_elements_3_0=ruleFloat		{
 	        if ($current==null) {
-	            $current = createModelElementForParent(grammarAccess.getFunctionRule());
+	            $current = createModelElementForParent(grammarAccess.getMatrixRowRule());
 	        }
        		add(
        			$current, 
-       			"parameters",
-        		lv_parameters_4_0, 
-        		"Formula");
+       			"elements",
+        		lv_elements_3_0, 
+        		"Float");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-))*(	otherlv_5=',' 
+))*(	otherlv_4=',' 
     {
-    	newLeafNode(otherlv_5, grammarAccess.getFunctionAccess().getCommaKeyword_2_2());
+    	newLeafNode(otherlv_4, grammarAccess.getMatrixRowAccess().getCommaKeyword_1_2());
     }
-)?)?	otherlv_6=')' 
+)?)?	otherlv_5='}' 
     {
-    	newLeafNode(otherlv_6, grammarAccess.getFunctionAccess().getRightParenthesisKeyword_3());
+    	newLeafNode(otherlv_5, grammarAccess.getMatrixRowAccess().getRightCurlyBracketKeyword_2());
     }
 )
 ;
@@ -1063,56 +1028,64 @@ ruleFunction returns [EObject current=null]
 
 
 
-// Entry rule entryRuleFunctionDefinition
-entryRuleFunctionDefinition returns [EObject current=null] 
+// Entry rule entryRuleMatrixAssignment
+entryRuleMatrixAssignment returns [EObject current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getFunctionDefinitionRule()); }
-	 iv_ruleFunctionDefinition=ruleFunctionDefinition 
-	 { $current=$iv_ruleFunctionDefinition.current; } 
+	{ newCompositeNode(grammarAccess.getMatrixAssignmentRule()); }
+	 iv_ruleMatrixAssignment=ruleMatrixAssignment 
+	 { $current=$iv_ruleMatrixAssignment.current; } 
 	 EOF 
 ;
 
-// Rule FunctionDefinition
-ruleFunctionDefinition returns [EObject current=null] 
+// Rule MatrixAssignment
+ruleMatrixAssignment returns [EObject current=null] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
-((
+(	otherlv_0='[' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getMatrixAssignmentAccess().getLeftSquareBracketKeyword_0());
+    }
 (
-		{ 
-	        newCompositeNode(grammarAccess.getFunctionDefinitionAccess().getFunctionFunctionParserRuleCall_0_0()); 
-	    }
-		lv_function_0_0=ruleFunction		{
+(
+		lv_variable_1_0=RULE_MATH_NAME
+		{
+			newLeafNode(lv_variable_1_0, grammarAccess.getMatrixAssignmentAccess().getVariableMATH_NAMETerminalRuleCall_1_0()); 
+		}
+		{
 	        if ($current==null) {
-	            $current = createModelElementForParent(grammarAccess.getFunctionDefinitionRule());
+	            $current = createModelElement(grammarAccess.getMatrixAssignmentRule());
 	        }
-       		set(
+       		setWithLastConsumed(
        			$current, 
-       			"function",
-        		lv_function_0_0, 
-        		"Function");
-	        afterParserOrEnumRuleCall();
+       			"variable",
+        		lv_variable_1_0, 
+        		"MATH_NAME");
 	    }
 
 )
-)	otherlv_1='=' 
+)	otherlv_2=']' 
     {
-    	newLeafNode(otherlv_1, grammarAccess.getFunctionDefinitionAccess().getEqualsSignKeyword_1());
+    	newLeafNode(otherlv_2, grammarAccess.getMatrixAssignmentAccess().getRightSquareBracketKeyword_2());
+    }
+	otherlv_3='=' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getMatrixAssignmentAccess().getEqualsSignKeyword_3());
     }
 (
 (
 		{ 
-	        newCompositeNode(grammarAccess.getFunctionDefinitionAccess().getFormulaFormulaParserRuleCall_2_0()); 
+	        newCompositeNode(grammarAccess.getMatrixAssignmentAccess().getValueMatrixFormulaParserRuleCall_4_0()); 
 	    }
-		lv_formula_2_0=ruleFormula		{
+		lv_value_4_0=ruleMatrixFormula		{
 	        if ($current==null) {
-	            $current = createModelElementForParent(grammarAccess.getFunctionDefinitionRule());
+	            $current = createModelElementForParent(grammarAccess.getMatrixAssignmentRule());
 	        }
        		set(
        			$current, 
-       			"formula",
-        		lv_formula_2_0, 
-        		"Formula");
+       			"value",
+        		lv_value_4_0, 
+        		"MatrixFormula");
 	        afterParserOrEnumRuleCall();
 	    }
 
@@ -1124,168 +1097,591 @@ ruleFunctionDefinition returns [EObject current=null]
 
 
 
-// Entry rule entryRuleMatrixDefinition
-entryRuleMatrixDefinition returns [EObject current=null] 
+// Entry rule entryRuleMatrixFormula
+entryRuleMatrixFormula returns [EObject current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getMatrixDefinitionRule()); }
-	 iv_ruleMatrixDefinition=ruleMatrixDefinition 
-	 { $current=$iv_ruleMatrixDefinition.current; } 
+	{ newCompositeNode(grammarAccess.getMatrixFormulaRule()); }
+	 iv_ruleMatrixFormula=ruleMatrixFormula 
+	 { $current=$iv_ruleMatrixFormula.current; } 
 	 EOF 
 ;
 
-// Rule MatrixDefinition
-ruleMatrixDefinition returns [EObject current=null] 
+// Rule MatrixFormula
+ruleMatrixFormula returns [EObject current=null] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
-((
 (
-		lv_name_0_0=RULE_MATH_NAME
-		{
-			newLeafNode(lv_name_0_0, grammarAccess.getMatrixDefinitionAccess().getNameMATH_NAMETerminalRuleCall_0_0()); 
-		}
-		{
+(
+		{ 
+	        newCompositeNode(grammarAccess.getMatrixFormulaAccess().getExpressionMatrixAdditionParserRuleCall_0()); 
+	    }
+		lv_expression_0_0=ruleMatrixAddition		{
 	        if ($current==null) {
-	            $current = createModelElement(grammarAccess.getMatrixDefinitionRule());
+	            $current = createModelElementForParent(grammarAccess.getMatrixFormulaRule());
 	        }
-       		setWithLastConsumed(
+       		set(
        			$current, 
-       			"name",
-        		lv_name_0_0, 
-        		"MATH_NAME");
+       			"expression",
+        		lv_expression_0_0, 
+        		"MatrixAddition");
+	        afterParserOrEnumRuleCall();
 	    }
 
 )
-)	otherlv_1='=' 
+)
+;
+
+
+
+
+
+// Entry rule entryRuleMatrixAddition
+entryRuleMatrixAddition returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getMatrixAdditionRule()); }
+	 iv_ruleMatrixAddition=ruleMatrixAddition 
+	 { $current=$iv_ruleMatrixAddition.current; } 
+	 EOF 
+;
+
+// Rule MatrixAddition
+ruleMatrixAddition returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+	{ 
+	  /* */ 
+	}
+    { 
+        newCompositeNode(grammarAccess.getMatrixAdditionAccess().getMatrixMultiplicationParserRuleCall_0()); 
+    }
+    this_MatrixMultiplication_0=ruleMatrixMultiplication
+    { 
+        $current = $this_MatrixMultiplication_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+((	otherlv_1='+' 
     {
-    	newLeafNode(otherlv_1, grammarAccess.getMatrixDefinitionAccess().getEqualsSignKeyword_1());
+    	newLeafNode(otherlv_1, grammarAccess.getMatrixAdditionAccess().getPlusSignKeyword_1_0_0());
     }
-	otherlv_2='{' 
+(
+	{ 
+	  /* */ 
+	}
     {
-    	newLeafNode(otherlv_2, grammarAccess.getMatrixDefinitionAccess().getLeftCurlyBracketKeyword_2());
+        $current = forceCreateModelElementAndSet(
+            grammarAccess.getMatrixAdditionAccess().getMatrixAdditionLeftAction_1_0_1(),
+            $current);
     }
-((
+)(
 (
 		{ 
-	        newCompositeNode(grammarAccess.getMatrixDefinitionAccess().getRowsMatrixRowParserRuleCall_3_0_0()); 
+	        newCompositeNode(grammarAccess.getMatrixAdditionAccess().getRightMatrixMultiplicationParserRuleCall_1_0_2_0()); 
 	    }
-		lv_rows_3_0=ruleMatrixRow		{
+		lv_right_3_0=ruleMatrixMultiplication		{
 	        if ($current==null) {
-	            $current = createModelElementForParent(grammarAccess.getMatrixDefinitionRule());
+	            $current = createModelElementForParent(grammarAccess.getMatrixAdditionRule());
 	        }
-       		add(
+       		set(
        			$current, 
-       			"rows",
-        		lv_rows_3_0, 
-        		"MatrixRow");
+       			"right",
+        		lv_right_3_0, 
+        		"MatrixMultiplication");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-)(	otherlv_4=',' 
+))
+    |(	otherlv_4='-' 
     {
-    	newLeafNode(otherlv_4, grammarAccess.getMatrixDefinitionAccess().getCommaKeyword_3_1_0());
+    	newLeafNode(otherlv_4, grammarAccess.getMatrixAdditionAccess().getHyphenMinusKeyword_1_1_0());
     }
 (
+	{ 
+	  /* */ 
+	}
+    {
+        $current = forceCreateModelElementAndSet(
+            grammarAccess.getMatrixAdditionAccess().getMatrixSubtractionLeftAction_1_1_1(),
+            $current);
+    }
+)(
 (
 		{ 
-	        newCompositeNode(grammarAccess.getMatrixDefinitionAccess().getRowsMatrixRowParserRuleCall_3_1_1_0()); 
+	        newCompositeNode(grammarAccess.getMatrixAdditionAccess().getRightMatrixMultiplicationParserRuleCall_1_1_2_0()); 
 	    }
-		lv_rows_5_0=ruleMatrixRow		{
+		lv_right_6_0=ruleMatrixMultiplication		{
 	        if ($current==null) {
-	            $current = createModelElementForParent(grammarAccess.getMatrixDefinitionRule());
+	            $current = createModelElementForParent(grammarAccess.getMatrixAdditionRule());
 	        }
-       		add(
+       		set(
        			$current, 
-       			"rows",
-        		lv_rows_5_0, 
-        		"MatrixRow");
+       			"right",
+        		lv_right_6_0, 
+        		"MatrixMultiplication");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-))*(	otherlv_6=',' 
-    {
-    	newLeafNode(otherlv_6, grammarAccess.getMatrixDefinitionAccess().getCommaKeyword_3_2());
-    }
-)?)?	otherlv_7='}' 
-    {
-    	newLeafNode(otherlv_7, grammarAccess.getMatrixDefinitionAccess().getRightCurlyBracketKeyword_4());
-    }
-)
+)))*)
 ;
 
 
 
 
 
-// Entry rule entryRuleMatrixRow
-entryRuleMatrixRow returns [EObject current=null] 
+// Entry rule entryRuleMatrixMultiplication
+entryRuleMatrixMultiplication returns [EObject current=null] 
 	:
-	{ newCompositeNode(grammarAccess.getMatrixRowRule()); }
-	 iv_ruleMatrixRow=ruleMatrixRow 
-	 { $current=$iv_ruleMatrixRow.current; } 
+	{ newCompositeNode(grammarAccess.getMatrixMultiplicationRule()); }
+	 iv_ruleMatrixMultiplication=ruleMatrixMultiplication 
+	 { $current=$iv_ruleMatrixMultiplication.current; } 
 	 EOF 
 ;
 
-// Rule MatrixRow
-ruleMatrixRow returns [EObject current=null] 
+// Rule MatrixMultiplication
+ruleMatrixMultiplication returns [EObject current=null] 
     @init { enterRule(); 
     }
     @after { leaveRule(); }:
-(	otherlv_0='{' 
+(
+	{ 
+	  /* */ 
+	}
+    { 
+        newCompositeNode(grammarAccess.getMatrixMultiplicationAccess().getPrimaryMatrixParserRuleCall_0()); 
+    }
+    this_PrimaryMatrix_0=rulePrimaryMatrix
+    { 
+        $current = $this_PrimaryMatrix_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+((	otherlv_1='*' 
     {
-    	newLeafNode(otherlv_0, grammarAccess.getMatrixRowAccess().getLeftCurlyBracketKeyword_0());
+    	newLeafNode(otherlv_1, grammarAccess.getMatrixMultiplicationAccess().getAsteriskKeyword_1_0_0());
     }
-((
+(
+	{ 
+	  /* */ 
+	}
+    {
+        $current = forceCreateModelElementAndSet(
+            grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_0_1(),
+            $current);
+    }
+)(
 (
 		{ 
-	        newCompositeNode(grammarAccess.getMatrixRowAccess().getElementsFloatParserRuleCall_1_0_0()); 
+	        newCompositeNode(grammarAccess.getMatrixMultiplicationAccess().getRightMatrixPrimaryMatrixParserRuleCall_1_0_2_0()); 
 	    }
-		lv_elements_1_0=ruleFloat		{
+		lv_rightMatrix_3_0=rulePrimaryMatrix		{
 	        if ($current==null) {
-	            $current = createModelElementForParent(grammarAccess.getMatrixRowRule());
+	            $current = createModelElementForParent(grammarAccess.getMatrixMultiplicationRule());
 	        }
-       		add(
+       		set(
        			$current, 
-       			"elements",
-        		lv_elements_1_0, 
-        		"Float");
+       			"rightMatrix",
+        		lv_rightMatrix_3_0, 
+        		"PrimaryMatrix");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-)(	otherlv_2=',' 
+))
+    |(	otherlv_4='*' 
     {
-    	newLeafNode(otherlv_2, grammarAccess.getMatrixRowAccess().getCommaKeyword_1_1_0());
+    	newLeafNode(otherlv_4, grammarAccess.getMatrixMultiplicationAccess().getAsteriskKeyword_1_1_0());
     }
 (
+	{ 
+	  /* */ 
+	}
+    {
+        $current = forceCreateModelElementAndSet(
+            grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_1_1(),
+            $current);
+    }
+)(
 (
 		{ 
-	        newCompositeNode(grammarAccess.getMatrixRowAccess().getElementsFloatParserRuleCall_1_1_1_0()); 
+	        newCompositeNode(grammarAccess.getMatrixMultiplicationAccess().getRightScalarFormulaParserRuleCall_1_1_2_0()); 
 	    }
-		lv_elements_3_0=ruleFloat		{
+		lv_rightScalar_6_0=ruleFormula		{
 	        if ($current==null) {
-	            $current = createModelElementForParent(grammarAccess.getMatrixRowRule());
+	            $current = createModelElementForParent(grammarAccess.getMatrixMultiplicationRule());
 	        }
-       		add(
+       		set(
        			$current, 
-       			"elements",
-        		lv_elements_3_0, 
-        		"Float");
+       			"rightScalar",
+        		lv_rightScalar_6_0, 
+        		"Formula");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-))*(	otherlv_4=',' 
-    {
-    	newLeafNode(otherlv_4, grammarAccess.getMatrixRowAccess().getCommaKeyword_1_2());
+)))*)
+;
+
+
+
+
+
+// Entry rule entryRulePrimaryMatrix
+entryRulePrimaryMatrix returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getPrimaryMatrixRule()); }
+	 iv_rulePrimaryMatrix=rulePrimaryMatrix 
+	 { $current=$iv_rulePrimaryMatrix.current; } 
+	 EOF 
+;
+
+// Rule PrimaryMatrix
+rulePrimaryMatrix returns [EObject current=null] 
+    @init { enterRule(); 
     }
-)?)?	otherlv_5='}' 
+    @after { leaveRule(); }:
+(((
+	{ 
+	  /* */ 
+	}
     {
-    	newLeafNode(otherlv_5, grammarAccess.getMatrixRowAccess().getRightCurlyBracketKeyword_2());
+        $current = forceCreateModelElement(
+            grammarAccess.getPrimaryMatrixAccess().getNewMatrixAction_0_0(),
+            $current);
     }
+)(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getPrimaryMatrixAccess().getMatrixMatrixParserRuleCall_0_1_0()); 
+	    }
+		lv_matrix_1_0=ruleMatrix		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getPrimaryMatrixRule());
+	        }
+       		set(
+       			$current, 
+       			"matrix",
+        		lv_matrix_1_0, 
+        		"Matrix");
+	        afterParserOrEnumRuleCall();
+	    }
+
 )
+))
+    |((
+	{ 
+	  /* */ 
+	}
+    {
+        $current = forceCreateModelElement(
+            grammarAccess.getPrimaryMatrixAccess().getTransposeMatrixAction_1_0(),
+            $current);
+    }
+)	otherlv_3='[' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getPrimaryMatrixAccess().getLeftSquareBracketKeyword_1_1());
+    }
+(
+(
+		lv_name_4_0=RULE_MATH_NAME
+		{
+			newLeafNode(lv_name_4_0, grammarAccess.getPrimaryMatrixAccess().getNameMATH_NAMETerminalRuleCall_1_2_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getPrimaryMatrixRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"name",
+        		lv_name_4_0, 
+        		"MATH_NAME");
+	    }
+
+)
+)	otherlv_5=']^T' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getPrimaryMatrixAccess().getTKeyword_1_3());
+    }
+)
+    |((
+	{ 
+	  /* */ 
+	}
+    {
+        $current = forceCreateModelElement(
+            grammarAccess.getPrimaryMatrixAccess().getMatrixVariableAction_2_0(),
+            $current);
+    }
+)	otherlv_7='[' 
+    {
+    	newLeafNode(otherlv_7, grammarAccess.getPrimaryMatrixAccess().getLeftSquareBracketKeyword_2_1());
+    }
+(
+(
+		lv_name_8_0=RULE_MATH_NAME
+		{
+			newLeafNode(lv_name_8_0, grammarAccess.getPrimaryMatrixAccess().getNameMATH_NAMETerminalRuleCall_2_2_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getPrimaryMatrixRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"name",
+        		lv_name_8_0, 
+        		"MATH_NAME");
+	    }
+
+)
+)	otherlv_9=']' 
+    {
+    	newLeafNode(otherlv_9, grammarAccess.getPrimaryMatrixAccess().getRightSquareBracketKeyword_2_3());
+    }
+)
+    |(	otherlv_10='(' 
+    {
+    	newLeafNode(otherlv_10, grammarAccess.getPrimaryMatrixAccess().getLeftParenthesisKeyword_3_0());
+    }
+
+	{ 
+	  /* */ 
+	}
+    { 
+        newCompositeNode(grammarAccess.getPrimaryMatrixAccess().getMatrixAdditionParserRuleCall_3_1()); 
+    }
+    this_MatrixAddition_11=ruleMatrixAddition
+    { 
+        $current = $this_MatrixAddition_11.current; 
+        afterParserOrEnumRuleCall();
+    }
+	otherlv_12=')' 
+    {
+    	newLeafNode(otherlv_12, grammarAccess.getPrimaryMatrixAccess().getRightParenthesisKeyword_3_2());
+    }
+))
+;
+
+
+
+
+
+// Entry rule entryRuleFloat
+entryRuleFloat returns [String current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getFloatRule()); } 
+	 iv_ruleFloat=ruleFloat 
+	 { $current=$iv_ruleFloat.current.getText(); }  
+	 EOF 
+;
+
+// Rule Float
+ruleFloat returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((    this_INT_0=RULE_INT    {
+		$current.merge(this_INT_0);
+    }
+
+    { 
+    newLeafNode(this_INT_0, grammarAccess.getFloatAccess().getINTTerminalRuleCall_0()); 
+    }
+)+(
+	kw='.' 
+    {
+        $current.merge(kw);
+        newLeafNode(kw, grammarAccess.getFloatAccess().getFullStopKeyword_1_0()); 
+    }
+(    this_INT_2=RULE_INT    {
+		$current.merge(this_INT_2);
+    }
+
+    { 
+    newLeafNode(this_INT_2, grammarAccess.getFloatAccess().getINTTerminalRuleCall_1_1()); 
+    }
+)+((
+	kw='E' 
+    {
+        $current.merge(kw);
+        newLeafNode(kw, grammarAccess.getFloatAccess().getEKeyword_1_2_0_0()); 
+    }
+
+    |
+	kw='e' 
+    {
+        $current.merge(kw);
+        newLeafNode(kw, grammarAccess.getFloatAccess().getEKeyword_1_2_0_1()); 
+    }
+)(
+	kw='-' 
+    {
+        $current.merge(kw);
+        newLeafNode(kw, grammarAccess.getFloatAccess().getHyphenMinusKeyword_1_2_1()); 
+    }
+)?(    this_INT_6=RULE_INT    {
+		$current.merge(this_INT_6);
+    }
+
+    { 
+    newLeafNode(this_INT_6, grammarAccess.getFloatAccess().getINTTerminalRuleCall_1_2_2()); 
+    }
+)+)?)?)
+    ;
+
+
+
+
+
+// Entry rule entryRuleFunction
+entryRuleFunction returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getFunctionRule()); }
+	 iv_ruleFunction=ruleFunction 
+	 { $current=$iv_ruleFunction.current; } 
+	 EOF 
+;
+
+// Rule Function
+ruleFunction returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		lv_name_0_0=RULE_MATH_NAME
+		{
+			newLeafNode(lv_name_0_0, grammarAccess.getFunctionAccess().getNameMATH_NAMETerminalRuleCall_0_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getFunctionRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"name",
+        		lv_name_0_0, 
+        		"MATH_NAME");
+	    }
+
+)
+)	otherlv_1='(' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getFunctionAccess().getLeftParenthesisKeyword_1());
+    }
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getFunctionAccess().getParametersFormulaParserRuleCall_2_0_0()); 
+	    }
+		lv_parameters_2_0=ruleFormula		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getFunctionRule());
+	        }
+       		add(
+       			$current, 
+       			"parameters",
+        		lv_parameters_2_0, 
+        		"Formula");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_3=',' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getFunctionAccess().getCommaKeyword_2_1_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getFunctionAccess().getParametersFormulaParserRuleCall_2_1_1_0()); 
+	    }
+		lv_parameters_4_0=ruleFormula		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getFunctionRule());
+	        }
+       		add(
+       			$current, 
+       			"parameters",
+        		lv_parameters_4_0, 
+        		"Formula");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*(	otherlv_5=',' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getFunctionAccess().getCommaKeyword_2_2());
+    }
+)?)?	otherlv_6=')' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getFunctionAccess().getRightParenthesisKeyword_3());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleFunctionDefinition
+entryRuleFunctionDefinition returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getFunctionDefinitionRule()); }
+	 iv_ruleFunctionDefinition=ruleFunctionDefinition 
+	 { $current=$iv_ruleFunctionDefinition.current; } 
+	 EOF 
+;
+
+// Rule FunctionDefinition
+ruleFunctionDefinition returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getFunctionDefinitionAccess().getFunctionFunctionParserRuleCall_0_0()); 
+	    }
+		lv_function_0_0=ruleFunction		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getFunctionDefinitionRule());
+	        }
+       		set(
+       			$current, 
+       			"function",
+        		lv_function_0_0, 
+        		"Function");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_1='=' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getFunctionDefinitionAccess().getEqualsSignKeyword_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getFunctionDefinitionAccess().getFormulaFormulaParserRuleCall_2_0()); 
+	    }
+		lv_formula_2_0=ruleFormula		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getFunctionDefinitionRule());
+	        }
+       		set(
+       			$current, 
+       			"formula",
+        		lv_formula_2_0, 
+        		"Formula");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))
 ;
 
 
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fparser%2Fantlr%2Finternal%2FInternalMath.g
6cf4e5b540395f3116a7f6929708aaced0c9e2c8
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fparser%2Fantlr%2Finternal%2FInternalMath.tokens
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fparser%2Fantlr%2Finternal%2FInternalMath.tokens?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.tokens
T__31=31
'(-'=18
'}'=27
')!'=21
'{'=25
'e'=31
'('=20
'['=23
']^T'=28
','=26
'E'=30
'.'=29
')'=19
'^'=22
']'=24
'..'=22
'}'=30
')!'=19
'{'=29
'e'=27
'('=18
'['=20
','=28
'E'=26
'.'=25
')'=21
'^'=24
']'=23
@@ -15,6 +15,7 @@ RULE_MATH_NAME=4
 RULE_ML_COMMENT=8
 T__30=30
 T__19=19
+T__31=31
 RULE_STRING=7
 T__16=16
 T__15=15
@@ -25,22 +26,23 @@ T__14=14
 T__13=13
 RULE_INT=5
 RULE_WS=10
-'..'=22
-'}'=30
+'(-'=18
+'}'=27
 '/'=16
-')!'=19
-'{'=29
-'e'=27
+')!'=21
+'{'=25
+'e'=31
 '='=12
-'('=18
+'('=20
 '-'=14
 '*'=15
-'['=20
+'['=23
 '+'=13
-','=28
-'E'=26
-'.'=25
-')'=21
-'^'=24
+']^T'=28
+','=26
+'E'=30
+'.'=29
+')'=19
+'^'=22
 '%'=17
-']'=23
+']'=24
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fparser%2Fantlr%2Finternal%2FInternalMath.tokens
10f871d96eb7658a3ec21b5d0fc2235b16fa3b42
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fparser%2Fantlr%2Finternal%2FInternalMathLexer.java
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fparser%2Fantlr%2Finternal%2FInternalMathLexer.java?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMathLexer.java
    public static final int T__31=31;
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:17:7: ( '(-' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:17:9: '(-'
            match("(-"); 

            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:18:7: ( ')' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:18:9: ')'
            match(')'); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:19:7: ( '(' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:19:9: '('
            match('('); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:20:7: ( ')!' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:20:9: ')!'
            match(")!"); 

            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:21:7: ( '^' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:21:9: '^'
            match('^'); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:22:7: ( '[' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:22:9: '['
            match('['); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:23:7: ( ']' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:23:9: ']'
            match(']'); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:24:7: ( '{' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:24:9: '{'
            match('{'); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:25:7: ( ',' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:25:9: ','
            match(','); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:26:7: ( '}' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:26:9: '}'
            match('}'); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:27:7: ( ']^T' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:27:9: ']^T'
            match("]^T"); 

            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:28:7: ( '.' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:28:9: '.'
            match('.'); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:29:7: ( 'E' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:29:9: 'E'
            match('E'); 
    // $ANTLR start "T__31"
    public final void mT__31() throws RecognitionException {
        try {
            int _type = T__31;
            int _channel = DEFAULT_TOKEN_CHANNEL;
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:30:7: ( 'e' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:30:9: 'e'
            {
            match('e'); 

            }

            state.type = _type;
            state.channel = _channel;
        }
        finally {
        }
    }
    // $ANTLR end "T__31"

            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1691:16: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1691:18: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1691:42: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1693:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1693:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1693:11: ( '^' )?
                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1693:11: '^'
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1693:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1695:10: ( ( '0' .. '9' )+ )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1695:12: ( '0' .. '9' )+
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1695:12: ( '0' .. '9' )+
            	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1695:13: '0' .. '9'
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:20: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )*
                    	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:21: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
                    	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:66: ~ ( ( '\\\\' | '\"' ) )
                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:86: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:91: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )*
                    	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:92: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
                    	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:137: ~ ( ( '\\\\' | '\\'' ) )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1699:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1699:19: '/*' ( options {greedy=false; } : . )* '*/'
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1699:24: ( options {greedy=false; } : . )*
            	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1699:52: .
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1701:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1701:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1701:24: (~ ( ( '\\n' | '\\r' ) ) )*
            	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1701:24: ~ ( ( '\\n' | '\\r' ) )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1701:40: ( ( '\\r' )? '\\n' )?
                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1701:41: ( '\\r' )? '\\n'
                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1701:41: ( '\\r' )?
                            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1701:41: '\\r'
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1703:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1703:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1703:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1705:16: ( . )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1705:18: .
        // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:8: ( T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | RULE_MATH_NAME | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
        int alt13=28;
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:124: T__31
                mT__31(); 
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:130: RULE_MATH_NAME
                mRULE_MATH_NAME(); 
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:145: RULE_ID
                mRULE_ID(); 
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:153: RULE_INT
                mRULE_INT(); 
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:162: RULE_STRING
                mRULE_STRING(); 
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:174: RULE_ML_COMMENT
                mRULE_ML_COMMENT(); 
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:190: RULE_SL_COMMENT
                mRULE_SL_COMMENT(); 
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:206: RULE_WS
                {
                mRULE_WS(); 

                }
                break;
            case 28 :
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:214: RULE_ANY_OTHER
        "\5\uffff\1\36\1\uffff\1\41\1\43\1\44\1\uffff\1\50\4\uffff\1\56"+
        "\1\57\1\60\1\uffff\2\27\27\uffff\1\60\6\uffff";
        "\64\uffff";
        "\1\0\4\uffff\1\52\1\uffff\1\55\1\41\1\101\1\uffff\1\136\4\uffff"+
        "\3\60\1\uffff\2\0\27\uffff\1\60\6\uffff";
        "\1\uffff\4\uffff\1\57\1\uffff\1\55\1\41\1\172\1\uffff\1\136\4\uffff"+
        "\3\172\1\uffff\2\uffff\27\uffff\1\172\6\uffff";
        "\1\uffff\1\1\1\2\1\3\1\4\1\uffff\1\6\3\uffff\1\14\1\uffff\1\16"+
        "\1\17\1\20\1\22\3\uffff\1\27\2\uffff\1\33\1\34\1\1\1\2\1\3\1\4\1"+
        "\31\1\32\1\5\1\6\1\7\1\11\1\12\1\10\1\13\1\26\1\14\1\21\1\15\1\16"+
        "\1\17\1\20\1\22\1\uffff\1\23\1\24\1\25\1\27\1\30\1\33";
        "\1\2\23\uffff\1\1\1\0\36\uffff}>";
            "\25\1\7\1\10\1\4\1\2\1\15\1\3\1\17\1\5\12\23\3\27\1\1\3\27\4"+
            "\22\1\20\25\22\1\12\1\27\1\13\1\11\1\22\1\27\4\22\1\21\25\22"+
            "\1\14\1\27\1\16\uff82\27",
            "\1\40",
            "\1\42",
            "\32\45\4\uffff\1\45\1\uffff\32\45",
            "\1\47",
            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
            "\0\62",
            "\0\62",
            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
            return "1:1: Tokens : ( T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | RULE_MATH_NAME | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
                        int LA13_21 = input.LA(1);

                        s = -1;
                        if ( ((LA13_21>='\u0000' && LA13_21<='\uFFFF')) ) {s = 50;}

                        else s = 23;

                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA13_20 = input.LA(1);

                        s = -1;
                        if ( ((LA13_20>='\u0000' && LA13_20<='\uFFFF')) ) {s = 50;}

                        else s = 23;

                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        else if ( (LA13_0=='^') ) {s = 9;}
                        else if ( (LA13_0=='[') ) {s = 10;}
                        else if ( (LA13_0=='{') ) {s = 12;}
                        else if ( (LA13_0==',') ) {s = 13;}
                        else if ( (LA13_0=='}') ) {s = 14;}
                        else if ( (LA13_0=='.') ) {s = 15;}
                        else if ( (LA13_0=='E') ) {s = 16;}
                        else if ( (LA13_0=='e') ) {s = 17;}
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:17:7: ( '(' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:17:9: '('
            match('('); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:18:7: ( ')!' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:18:9: ')!'
            match(")!"); 

            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:19:7: ( '[' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:19:9: '['
            match('['); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:20:7: ( ')' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:20:9: ')'
            match(')'); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:21:7: ( '..' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:21:9: '..'
            match(".."); 

            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:22:7: ( ']' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:22:9: ']'
            match(']'); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:23:7: ( '^' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:23:9: '^'
            match('^'); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:24:7: ( '.' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:24:9: '.'
            match('.'); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:25:7: ( 'E' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:25:9: 'E'
            match('E'); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:26:7: ( 'e' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:26:9: 'e'
            match('e'); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:27:7: ( ',' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:27:9: ','
            match(','); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:28:7: ( '{' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:28:9: '{'
            match('{'); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:29:7: ( '}' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:29:9: '}'
            match('}'); 
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1295:16: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1295:18: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1295:42: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1297:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1297:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1297:11: ( '^' )?
                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1297:11: '^'
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1297:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1299:10: ( ( '0' .. '9' )+ )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1299:12: ( '0' .. '9' )+
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1299:12: ( '0' .. '9' )+
            	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1299:13: '0' .. '9'
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:20: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )*
                    	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:21: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
                    	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:66: ~ ( ( '\\\\' | '\"' ) )
                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:86: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:91: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )*
                    	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:92: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
                    	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:137: ~ ( ( '\\\\' | '\\'' ) )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1303:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1303:19: '/*' ( options {greedy=false; } : . )* '*/'
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1303:24: ( options {greedy=false; } : . )*
            	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1303:52: .
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1305:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1305:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1305:24: (~ ( ( '\\n' | '\\r' ) ) )*
            	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1305:24: ~ ( ( '\\n' | '\\r' ) )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1305:40: ( ( '\\r' )? '\\n' )?
                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1305:41: ( '\\r' )? '\\n'
                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1305:41: ( '\\r' )?
                            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1305:41: '\\r'
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1307:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1307:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1307:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1309:16: ( . )
            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1309:18: .
        // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:8: ( T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | RULE_MATH_NAME | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
        int alt13=27;
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:124: RULE_MATH_NAME
                mRULE_MATH_NAME(); 
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:139: RULE_ID
                mRULE_ID(); 
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:147: RULE_INT
                mRULE_INT(); 
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:156: RULE_STRING
                mRULE_STRING(); 
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:168: RULE_ML_COMMENT
                mRULE_ML_COMMENT(); 
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:184: RULE_SL_COMMENT
                mRULE_SL_COMMENT(); 
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:200: RULE_WS
                mRULE_WS(); 
                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:208: RULE_ANY_OTHER
        "\5\uffff\1\36\2\uffff\1\42\1\uffff\1\45\1\uffff\1\47\1\52\1\53"+
        "\3\uffff\1\57\1\uffff\2\27\23\uffff\1\57\11\uffff";
        "\63\uffff";
        "\1\0\4\uffff\1\52\2\uffff\1\41\1\uffff\1\56\1\uffff\1\101\2\60"+
        "\3\uffff\1\60\1\uffff\2\0\23\uffff\1\60\11\uffff";
        "\1\uffff\4\uffff\1\57\2\uffff\1\41\1\uffff\1\56\1\uffff\3\172\3"+
        "\uffff\1\172\1\uffff\2\uffff\23\uffff\1\172\11\uffff";
        "\1\uffff\1\1\1\2\1\3\1\4\1\uffff\1\6\1\7\1\uffff\1\11\1\uffff\1"+
        "\14\3\uffff\1\21\1\22\1\23\1\uffff\1\26\2\uffff\1\32\1\33\1\1\1"+
        "\2\1\3\1\4\1\30\1\31\1\5\1\6\1\7\1\10\1\12\1\11\1\13\1\16\1\14\1"+
        "\15\1\25\1\uffff\1\17\1\20\1\21\1\22\1\23\1\24\1\26\1\27\1\32";
        "\1\0\23\uffff\1\1\1\2\35\uffff}>";
            "\25\1\7\1\10\1\4\1\2\1\17\1\3\1\12\1\5\12\23\3\27\1\1\3\27\4"+
            "\22\1\15\25\22\1\11\1\27\1\13\1\14\1\22\1\27\4\22\1\16\25\22"+
            "\1\20\1\27\1\21\uff82\27",
            "\1\41",
            "\1\44",
            "\32\50\4\uffff\1\50\1\uffff\32\50",
            "\12\51\7\uffff\32\51\4\uffff\1\51\1\uffff\32\51",
            "\12\51\7\uffff\32\51\4\uffff\1\51\1\uffff\32\51",
            "\12\51\7\uffff\32\51\4\uffff\1\51\1\uffff\32\51",
            "\0\61",
            "\0\61",
            "\12\51\7\uffff\32\51\4\uffff\1\51\1\uffff\32\51",
            return "1:1: Tokens : ( T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | RULE_MATH_NAME | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
                        else if ( (LA13_0=='[') ) {s = 9;}
                        else if ( (LA13_0=='.') ) {s = 10;}
                        else if ( (LA13_0=='^') ) {s = 12;}
                        else if ( (LA13_0=='E') ) {s = 13;}
                        else if ( (LA13_0=='e') ) {s = 14;}
                        else if ( (LA13_0==',') ) {s = 15;}
                        else if ( (LA13_0=='{') ) {s = 16;}
                        else if ( (LA13_0=='}') ) {s = 17;}
                        if ( s>=0 ) return s;
                        break;
                    case 1 : 
                        int LA13_20 = input.LA(1);

                        s = -1;
                        if ( ((LA13_20>='\u0000' && LA13_20<='\uFFFF')) ) {s = 49;}

                        else s = 23;

                        if ( s>=0 ) return s;
                        break;
                    case 2 : 
                        int LA13_21 = input.LA(1);

                        s = -1;
                        if ( ((LA13_21>='\u0000' && LA13_21<='\uFFFF')) ) {s = 49;}

                        else s = 23;

@@ -30,6 +30,7 @@ public class InternalMathLexer extends Lexer {
     public static final int RULE_ML_COMMENT=8;
     public static final int T__19=19;
     public static final int T__30=30;
+    public static final int T__31=31;
     public static final int RULE_STRING=7;
     public static final int T__16=16;
     public static final int T__15=15;
@@ -179,10 +180,11 @@ public final void mT__18() throws RecognitionException {
         try {
             int _type = T__18;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:17:7: ( '(' )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:17:9: '('
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:17:7: ( '(-' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:17:9: '(-'
             {
-            match('('); 
+            match("(-"); 
+
 
             }
 
@@ -199,11 +201,10 @@ public final void mT__19() throws RecognitionException {
         try {
             int _type = T__19;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:18:7: ( ')!' )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:18:9: ')!'
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:18:7: ( ')' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:18:9: ')'
             {
-            match(")!"); 
-
+            match(')'); 
 
             }
 
@@ -220,10 +221,10 @@ public final void mT__20() throws RecognitionException {
         try {
             int _type = T__20;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:19:7: ( '[' )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:19:9: '['
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:19:7: ( '(' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:19:9: '('
             {
-            match('['); 
+            match('('); 
 
             }
 
@@ -240,10 +241,11 @@ public final void mT__21() throws RecognitionException {
         try {
             int _type = T__21;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:20:7: ( ')' )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:20:9: ')'
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:20:7: ( ')!' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:20:9: ')!'
             {
-            match(')'); 
+            match(")!"); 
+
 
             }
 
@@ -260,11 +262,10 @@ public final void mT__22() throws RecognitionException {
         try {
             int _type = T__22;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:21:7: ( '..' )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:21:9: '..'
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:21:7: ( '^' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:21:9: '^'
             {
-            match(".."); 
-
+            match('^'); 
 
             }
 
@@ -281,10 +282,10 @@ public final void mT__23() throws RecognitionException {
         try {
             int _type = T__23;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:22:7: ( ']' )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:22:9: ']'
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:22:7: ( '[' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:22:9: '['
             {
-            match(']'); 
+            match('['); 
 
             }
 
@@ -301,10 +302,10 @@ public final void mT__24() throws RecognitionException {
         try {
             int _type = T__24;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:23:7: ( '^' )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:23:9: '^'
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:23:7: ( ']' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:23:9: ']'
             {
-            match('^'); 
+            match(']'); 
 
             }
 
@@ -321,10 +322,10 @@ public final void mT__25() throws RecognitionException {
         try {
             int _type = T__25;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:24:7: ( '.' )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:24:9: '.'
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:24:7: ( '{' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:24:9: '{'
             {
-            match('.'); 
+            match('{'); 
 
             }
 
@@ -341,10 +342,10 @@ public final void mT__26() throws RecognitionException {
         try {
             int _type = T__26;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:25:7: ( 'E' )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:25:9: 'E'
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:25:7: ( ',' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:25:9: ','
             {
-            match('E'); 
+            match(','); 
 
             }
 
@@ -361,10 +362,10 @@ public final void mT__27() throws RecognitionException {
         try {
             int _type = T__27;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:26:7: ( 'e' )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:26:9: 'e'
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:26:7: ( '}' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:26:9: '}'
             {
-            match('e'); 
+            match('}'); 
 
             }
 
@@ -381,10 +382,11 @@ public final void mT__28() throws RecognitionException {
         try {
             int _type = T__28;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:27:7: ( ',' )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:27:9: ','
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:27:7: ( ']^T' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:27:9: ']^T'
             {
-            match(','); 
+            match("]^T"); 
+
 
             }
 
@@ -401,10 +403,10 @@ public final void mT__29() throws RecognitionException {
         try {
             int _type = T__29;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:28:7: ( '{' )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:28:9: '{'
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:28:7: ( '.' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:28:9: '.'
             {
-            match('{'); 
+            match('.'); 
 
             }
 
@@ -421,10 +423,10 @@ public final void mT__30() throws RecognitionException {
         try {
             int _type = T__30;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:29:7: ( '}' )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:29:9: '}'
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:29:7: ( 'E' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:29:9: 'E'
             {
-            match('}'); 
+            match('E'); 
 
             }
 
@@ -436,13 +438,33 @@ public final void mT__30() throws RecognitionException {
     }
     // $ANTLR end "T__30"
 
+    // $ANTLR start "T__31"
+    public final void mT__31() throws RecognitionException {
+        try {
+            int _type = T__31;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:30:7: ( 'e' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:30:9: 'e'
+            {
+            match('e'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__31"
+
     // $ANTLR start "RULE_MATH_NAME"
     public final void mRULE_MATH_NAME() throws RecognitionException {
         try {
             int _type = RULE_MATH_NAME;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1295:16: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1295:18: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1691:16: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1691:18: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
             {
             if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
                 input.consume();
@@ -453,7 +475,7 @@ public final void mRULE_MATH_NAME() throws RecognitionException {
                 recover(mse);
                 throw mse;}
 
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1295:42: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1691:42: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
             loop1:
             do {
                 int alt1=2;
@@ -502,10 +524,10 @@ public final void mRULE_ID() throws RecognitionException {
         try {
             int _type = RULE_ID;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1297:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1297:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1693:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1693:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
             {
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1297:11: ( '^' )?
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1693:11: ( '^' )?
             int alt2=2;
             int LA2_0 = input.LA(1);
 
@@ -514,7 +536,7 @@ public final void mRULE_ID() throws RecognitionException {
             }
             switch (alt2) {
                 case 1 :
-                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1297:11: '^'
+                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1693:11: '^'
                     {
                     match('^'); 
 
@@ -532,7 +554,7 @@ public final void mRULE_ID() throws RecognitionException {
                 recover(mse);
                 throw mse;}
 
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1297:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1693:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
             loop3:
             do {
                 int alt3=2;
@@ -581,10 +603,10 @@ public final void mRULE_INT() throws RecognitionException {
         try {
             int _type = RULE_INT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1299:10: ( ( '0' .. '9' )+ )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1299:12: ( '0' .. '9' )+
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1695:10: ( ( '0' .. '9' )+ )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1695:12: ( '0' .. '9' )+
             {
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1299:12: ( '0' .. '9' )+
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1695:12: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -598,7 +620,7 @@ public final void mRULE_INT() throws RecognitionException {
 
                 switch (alt4) {
             	case 1 :
-            	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1299:13: '0' .. '9'
+            	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1695:13: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -630,10 +652,10 @@ public final void mRULE_STRING() throws RecognitionException {
         try {
             int _type = RULE_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
             {
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
             int alt7=2;
             int LA7_0 = input.LA(1);
 
@@ -651,10 +673,10 @@ else if ( (LA7_0=='\'') ) {
             }
             switch (alt7) {
                 case 1 :
-                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
                     {
                     match('\"'); 
-                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:20: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )*
+                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:20: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )*
                     loop5:
                     do {
                         int alt5=3;
@@ -670,7 +692,7 @@ else if ( ((LA5_0>='\u0000' && LA5_0<='!')||(LA5_0>='#' && LA5_0<='[')||(LA5_0>=
 
                         switch (alt5) {
                     	case 1 :
-                    	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:21: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
+                    	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:21: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
                     	    {
                     	    match('\\'); 
                     	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||(input.LA(1)>='t' && input.LA(1)<='u') ) {
@@ -686,7 +708,7 @@ else if ( ((LA5_0>='\u0000' && LA5_0<='!')||(LA5_0>='#' && LA5_0<='[')||(LA5_0>=
                     	    }
                     	    break;
                     	case 2 :
-                    	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:66: ~ ( ( '\\\\' | '\"' ) )
+                    	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:66: ~ ( ( '\\\\' | '\"' ) )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
                     	        input.consume();
@@ -711,10 +733,10 @@ else if ( ((LA5_0>='\u0000' && LA5_0<='!')||(LA5_0>='#' && LA5_0<='[')||(LA5_0>=
                     }
                     break;
                 case 2 :
-                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:86: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:86: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
                     {
                     match('\''); 
-                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:91: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )*
+                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:91: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )*
                     loop6:
                     do {
                         int alt6=3;
@@ -730,7 +752,7 @@ else if ( ((LA6_0>='\u0000' && LA6_0<='&')||(LA6_0>='(' && LA6_0<='[')||(LA6_0>=
 
                         switch (alt6) {
                     	case 1 :
-                    	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:92: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
+                    	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:92: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
                     	    {
                     	    match('\\'); 
                     	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||(input.LA(1)>='t' && input.LA(1)<='u') ) {
@@ -746,7 +768,7 @@ else if ( ((LA6_0>='\u0000' && LA6_0<='&')||(LA6_0>='(' && LA6_0<='[')||(LA6_0>=
                     	    }
                     	    break;
                     	case 2 :
-                    	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1301:137: ~ ( ( '\\\\' | '\\'' ) )
+                    	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1697:137: ~ ( ( '\\\\' | '\\'' ) )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
                     	        input.consume();
@@ -789,12 +811,12 @@ public final void mRULE_ML_COMMENT() throws RecognitionException {
         try {
             int _type = RULE_ML_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1303:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1303:19: '/*' ( options {greedy=false; } : . )* '*/'
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1699:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1699:19: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); 
 
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1303:24: ( options {greedy=false; } : . )*
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1699:24: ( options {greedy=false; } : . )*
             loop8:
             do {
                 int alt8=2;
@@ -819,7 +841,7 @@ else if ( ((LA8_0>='\u0000' && LA8_0<=')')||(LA8_0>='+' && LA8_0<='\uFFFF')) ) {
 
                 switch (alt8) {
             	case 1 :
-            	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1303:52: .
+            	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1699:52: .
             	    {
             	    matchAny(); 
 
@@ -849,12 +871,12 @@ public final void mRULE_SL_COMMENT() throws RecognitionException {
         try {
             int _type = RULE_SL_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1305:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1305:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1701:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1701:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
             {
             match("//"); 
 
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1305:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1701:24: (~ ( ( '\\n' | '\\r' ) ) )*
             loop9:
             do {
                 int alt9=2;
@@ -867,7 +889,7 @@ public final void mRULE_SL_COMMENT() throws RecognitionException {
 
                 switch (alt9) {
             	case 1 :
-            	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1305:24: ~ ( ( '\\n' | '\\r' ) )
+            	    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1701:24: ~ ( ( '\\n' | '\\r' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
             	        input.consume();
@@ -887,7 +909,7 @@ public final void mRULE_SL_COMMENT() throws RecognitionException {
                 }
             } while (true);
 
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1305:40: ( ( '\\r' )? '\\n' )?
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1701:40: ( ( '\\r' )? '\\n' )?
             int alt11=2;
             int LA11_0 = input.LA(1);
 
@@ -896,9 +918,9 @@ public final void mRULE_SL_COMMENT() throws RecognitionException {
             }
             switch (alt11) {
                 case 1 :
-                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1305:41: ( '\\r' )? '\\n'
+                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1701:41: ( '\\r' )? '\\n'
                     {
-                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1305:41: ( '\\r' )?
+                    // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1701:41: ( '\\r' )?
                     int alt10=2;
                     int LA10_0 = input.LA(1);
 
@@ -907,7 +929,7 @@ public final void mRULE_SL_COMMENT() throws RecognitionException {
                     }
                     switch (alt10) {
                         case 1 :
-                            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1305:41: '\\r'
+                            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1701:41: '\\r'
                             {
                             match('\r'); 
 
@@ -939,10 +961,10 @@ public final void mRULE_WS() throws RecognitionException {
         try {
             int _type = RULE_WS;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1307:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1307:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1703:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1703:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             {
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1307:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1703:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             int cnt12=0;
             loop12:
             do {
@@ -996,8 +1018,8 @@ public final void mRULE_ANY_OTHER() throws RecognitionException {
         try {
             int _type = RULE_ANY_OTHER;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1309:16: ( . )
-            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1309:18: .
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1705:16: ( . )
+            // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1705:18: .
             {
             matchAny(); 
 
@@ -1012,8 +1034,8 @@ public final void mRULE_ANY_OTHER() throws RecognitionException {
     // $ANTLR end "RULE_ANY_OTHER"
 
     public void mTokens() throws RecognitionException {
-        // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:8: ( T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | RULE_MATH_NAME | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
-        int alt13=27;
+        // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:8: ( T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | RULE_MATH_NAME | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt13=28;
         alt13 = dfa13.predict(input);
         switch (alt13) {
             case 1 :
@@ -1150,56 +1172,63 @@ public void mTokens() throws RecognitionException {
                 }
                 break;
             case 20 :
-                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:124: RULE_MATH_NAME
+                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:124: T__31
                 {
-                mRULE_MATH_NAME(); 
+                mT__31(); 
 
                 }
                 break;
             case 21 :
-                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:139: RULE_ID
+                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:130: RULE_MATH_NAME
                 {
-                mRULE_ID(); 
+                mRULE_MATH_NAME(); 
 
                 }
                 break;
             case 22 :
-                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:147: RULE_INT
+                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:145: RULE_ID
                 {
-                mRULE_INT(); 
+                mRULE_ID(); 
 
                 }
                 break;
             case 23 :
-                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:156: RULE_STRING
+                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:153: RULE_INT
                 {
-                mRULE_STRING(); 
+                mRULE_INT(); 
 
                 }
                 break;
             case 24 :
-                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:168: RULE_ML_COMMENT
+                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:162: RULE_STRING
                 {
-                mRULE_ML_COMMENT(); 
+                mRULE_STRING(); 
 
                 }
                 break;
             case 25 :
-                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:184: RULE_SL_COMMENT
+                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:174: RULE_ML_COMMENT
                 {
-                mRULE_SL_COMMENT(); 
+                mRULE_ML_COMMENT(); 
 
                 }
                 break;
             case 26 :
-                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:200: RULE_WS
+                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:190: RULE_SL_COMMENT
                 {
-                mRULE_WS(); 
+                mRULE_SL_COMMENT(); 
 
                 }
                 break;
             case 27 :
-                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:208: RULE_ANY_OTHER
+                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:206: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 28 :
+                // ../org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/parser/antlr/internal/InternalMath.g:1:214: RULE_ANY_OTHER
                 {
                 mRULE_ANY_OTHER(); 
 
@@ -1213,49 +1242,50 @@ public void mTokens() throws RecognitionException {
 
     protected DFA13 dfa13 = new DFA13(this);
     static final String DFA13_eotS =
-        "\5\uffff\1\36\2\uffff\1\42\1\uffff\1\45\1\uffff\1\47\1\52\1\53"+
-        "\3\uffff\1\57\1\uffff\2\27\23\uffff\1\57\11\uffff";
+        "\5\uffff\1\36\1\uffff\1\41\1\43\1\44\1\uffff\1\50\4\uffff\1\56"+
+        "\1\57\1\60\1\uffff\2\27\27\uffff\1\60\6\uffff";
     static final String DFA13_eofS =
-        "\63\uffff";
+        "\64\uffff";
     static final String DFA13_minS =
-        "\1\0\4\uffff\1\52\2\uffff\1\41\1\uffff\1\56\1\uffff\1\101\2\60"+
-        "\3\uffff\1\60\1\uffff\2\0\23\uffff\1\60\11\uffff";
+        "\1\0\4\uffff\1\52\1\uffff\1\55\1\41\1\101\1\uffff\1\136\4\uffff"+
+        "\3\60\1\uffff\2\0\27\uffff\1\60\6\uffff";
     static final String DFA13_maxS =
-        "\1\uffff\4\uffff\1\57\2\uffff\1\41\1\uffff\1\56\1\uffff\3\172\3"+
-        "\uffff\1\172\1\uffff\2\uffff\23\uffff\1\172\11\uffff";
+        "\1\uffff\4\uffff\1\57\1\uffff\1\55\1\41\1\172\1\uffff\1\136\4\uffff"+
+        "\3\172\1\uffff\2\uffff\27\uffff\1\172\6\uffff";
     static final String DFA13_acceptS =
-        "\1\uffff\1\1\1\2\1\3\1\4\1\uffff\1\6\1\7\1\uffff\1\11\1\uffff\1"+
-        "\14\3\uffff\1\21\1\22\1\23\1\uffff\1\26\2\uffff\1\32\1\33\1\1\1"+
-        "\2\1\3\1\4\1\30\1\31\1\5\1\6\1\7\1\10\1\12\1\11\1\13\1\16\1\14\1"+
-        "\15\1\25\1\uffff\1\17\1\20\1\21\1\22\1\23\1\24\1\26\1\27\1\32";
+        "\1\uffff\1\1\1\2\1\3\1\4\1\uffff\1\6\3\uffff\1\14\1\uffff\1\16"+
+        "\1\17\1\20\1\22\3\uffff\1\27\2\uffff\1\33\1\34\1\1\1\2\1\3\1\4\1"+
+        "\31\1\32\1\5\1\6\1\7\1\11\1\12\1\10\1\13\1\26\1\14\1\21\1\15\1\16"+
+        "\1\17\1\20\1\22\1\uffff\1\23\1\24\1\25\1\27\1\30\1\33";
     static final String DFA13_specialS =
-        "\1\0\23\uffff\1\1\1\2\35\uffff}>";
+        "\1\2\23\uffff\1\1\1\0\36\uffff}>";
     static final String[] DFA13_transitionS = {
             "\11\27\2\26\2\27\1\26\22\27\1\26\1\27\1\24\2\27\1\6\1\27\1"+
-            "\25\1\7\1\10\1\4\1\2\1\17\1\3\1\12\1\5\12\23\3\27\1\1\3\27\4"+
-            "\22\1\15\25\22\1\11\1\27\1\13\1\14\1\22\1\27\4\22\1\16\25\22"+
-            "\1\20\1\27\1\21\uff82\27",
+            "\25\1\7\1\10\1\4\1\2\1\15\1\3\1\17\1\5\12\23\3\27\1\1\3\27\4"+
+            "\22\1\20\25\22\1\12\1\27\1\13\1\11\1\22\1\27\4\22\1\21\25\22"+
+            "\1\14\1\27\1\16\uff82\27",
             "",
             "",
             "",
             "",
             "\1\34\4\uffff\1\35",
             "",
+            "\1\40",
+            "\1\42",
+            "\32\45\4\uffff\1\45\1\uffff\32\45",
             "",
-            "\1\41",
+            "\1\47",
             "",
-            "\1\44",
             "",
-            "\32\50\4\uffff\1\50\1\uffff\32\50",
-            "\12\51\7\uffff\32\51\4\uffff\1\51\1\uffff\32\51",
-            "\12\51\7\uffff\32\51\4\uffff\1\51\1\uffff\32\51",
             "",
             "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
             "",
-            "\12\51\7\uffff\32\51\4\uffff\1\51\1\uffff\32\51",
+            "\0\62",
+            "\0\62",
             "",
-            "\0\61",
-            "\0\61",
             "",
             "",
             "",
@@ -1275,10 +1305,10 @@ public void mTokens() throws RecognitionException {
             "",
             "",
             "",
-            "\12\51\7\uffff\32\51\4\uffff\1\51\1\uffff\32\51",
             "",
             "",
             "",
+            "\12\55\7\uffff\32\55\4\uffff\1\55\1\uffff\32\55",
             "",
             "",
             "",
@@ -1317,13 +1347,33 @@ public DFA13(BaseRecognizer recognizer) {
             this.transition = DFA13_transition;
         }
         public String getDescription() {
-            return "1:1: Tokens : ( T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | RULE_MATH_NAME | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
+            return "1:1: Tokens : ( T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | RULE_MATH_NAME | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             IntStream input = _input;
         	int _s = s;
             switch ( s ) {
                     case 0 : 
+                        int LA13_21 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA13_21>='\u0000' && LA13_21<='\uFFFF')) ) {s = 50;}
+
+                        else s = 23;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA13_20 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA13_20>='\u0000' && LA13_20<='\uFFFF')) ) {s = 50;}
+
+                        else s = 23;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
                         int LA13_0 = input.LA(1);
 
                         s = -1;
@@ -1343,23 +1393,23 @@ public int specialStateTransition(int s, IntStream _input) throws NoViableAltExc
 
                         else if ( (LA13_0==')') ) {s = 8;}
 
-                        else if ( (LA13_0=='[') ) {s = 9;}
+                        else if ( (LA13_0=='^') ) {s = 9;}
 
-                        else if ( (LA13_0=='.') ) {s = 10;}
+                        else if ( (LA13_0=='[') ) {s = 10;}
 
                         else if ( (LA13_0==']') ) {s = 11;}
 
-                        else if ( (LA13_0=='^') ) {s = 12;}
+                        else if ( (LA13_0=='{') ) {s = 12;}
 
-                        else if ( (LA13_0=='E') ) {s = 13;}
+                        else if ( (LA13_0==',') ) {s = 13;}
 
-                        else if ( (LA13_0=='e') ) {s = 14;}
+                        else if ( (LA13_0=='}') ) {s = 14;}
 
-                        else if ( (LA13_0==',') ) {s = 15;}
+                        else if ( (LA13_0=='.') ) {s = 15;}
 
-                        else if ( (LA13_0=='{') ) {s = 16;}
+                        else if ( (LA13_0=='E') ) {s = 16;}
 
-                        else if ( (LA13_0=='}') ) {s = 17;}
+                        else if ( (LA13_0=='e') ) {s = 17;}
 
                         else if ( ((LA13_0>='A' && LA13_0<='D')||(LA13_0>='F' && LA13_0<='Z')||LA13_0=='_'||(LA13_0>='a' && LA13_0<='d')||(LA13_0>='f' && LA13_0<='z')) ) {s = 18;}
 
@@ -1373,26 +1423,6 @@ public int specialStateTransition(int s, IntStream _input) throws NoViableAltExc
 
                         else if ( ((LA13_0>='\u0000' && LA13_0<='\b')||(LA13_0>='\u000B' && LA13_0<='\f')||(LA13_0>='\u000E' && LA13_0<='\u001F')||LA13_0=='!'||(LA13_0>='#' && LA13_0<='$')||LA13_0=='&'||(LA13_0>=':' && LA13_0<='<')||(LA13_0>='>' && LA13_0<='@')||LA13_0=='\\'||LA13_0=='`'||LA13_0=='|'||(LA13_0>='~' && LA13_0<='\uFFFF')) ) {s = 23;}
 
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA13_20 = input.LA(1);
-
-                        s = -1;
-                        if ( ((LA13_20>='\u0000' && LA13_20<='\uFFFF')) ) {s = 49;}
-
-                        else s = 23;
-
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA13_21 = input.LA(1);
-
-                        s = -1;
-                        if ( ((LA13_21>='\u0000' && LA13_21<='\uFFFF')) ) {s = 49;}
-
-                        else s = 23;
-
                         if ( s>=0 ) return s;
                         break;
             }
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fparser%2Fantlr%2Finternal%2FInternalMathLexer.java
492cc122b8421d3adce64f307a025943c471db83
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fserializer%2FAbstractMathSemanticSequencer.java
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fserializer%2FAbstractMathSemanticSequencer.java?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/serializer/AbstractMathSemanticSequencer.java
import org.eclipse.iee.translator.jmole.math.math.Matrix;
import org.eclipse.iee.translator.jmole.math.math.MatrixAddition;
import org.eclipse.iee.translator.jmole.math.math.MatrixAssignment;
import org.eclipse.iee.translator.jmole.math.math.MatrixElement;
import org.eclipse.iee.translator.jmole.math.math.MatrixFormula;
import org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication;
import org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction;
import org.eclipse.iee.translator.jmole.math.math.MatrixVariable;
import org.eclipse.iee.translator.jmole.math.math.NewMatrix;
import org.eclipse.iee.translator.jmole.math.math.TransposeMatrix;
import org.eclipse.iee.translator.jmole.math.math.VariableAssignment;
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getPrimaryRule() ||
				   context == grammarAccess.getUnaryExpressionRule()) {
					sequence_Addition(context, (Addition) semanticObject); 
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getPrimaryRule() ||
				   context == grammarAccess.getUnaryExpressionRule()) {
					sequence_Multiplication(context, (Division) semanticObject); 
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getPrimaryRule() ||
				   context == grammarAccess.getUnaryExpressionRule()) {
					sequence_Exponent(context, (Exponent) semanticObject); 
					sequence_Function(context, (Expression) semanticObject); 
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getPrimaryRule() ||
				   context == grammarAccess.getUnaryExpressionRule()) {
					sequence_UnaryExpression(context, (Factorial) semanticObject); 
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getPrimaryRule() ||
				   context == grammarAccess.getUnaryExpressionRule()) {
					sequence_Primary(context, (org.eclipse.iee.translator.jmole.math.math.Float) semanticObject); 
					sequence_Formula(context, (Formula) semanticObject); 
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getPrimaryRule() ||
				   context == grammarAccess.getUnaryExpressionRule()) {
					sequence_Primary(context, (Function) semanticObject); 
					sequence_FunctionDefinition(context, (FunctionDefinition) semanticObject); 
			case MathPackage.INVERT:
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getPrimaryRule() ||
				   context == grammarAccess.getUnaryExpressionRule()) {
					sequence_UnaryExpression(context, (Invert) semanticObject); 
			case MathPackage.MATRIX:
				if(context == grammarAccess.getMatrixRule()) {
					sequence_Matrix(context, (Matrix) semanticObject); 
					return; 
				}
				else break;
			case MathPackage.MATRIX_ADDITION:
				if(context == grammarAccess.getMatrixAdditionRule() ||
				   context == grammarAccess.getMatrixAdditionAccess().getMatrixAdditionLeftAction_1_0_1() ||
				   context == grammarAccess.getMatrixAdditionAccess().getMatrixSubtractionLeftAction_1_1_1() ||
				   context == grammarAccess.getMatrixMultiplicationRule() ||
				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_1_1() ||
				   context == grammarAccess.getPrimaryMatrixRule()) {
					sequence_MatrixAddition(context, (MatrixAddition) semanticObject); 
					return; 
				}
				else break;
			case MathPackage.MATRIX_ASSIGNMENT:
				if(context == grammarAccess.getMatrixAssignmentRule()) {
					sequence_MatrixAssignment(context, (MatrixAssignment) semanticObject); 
					return; 
				}
				else break;
			case MathPackage.MATRIX_ELEMENT:
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getPrimaryRule() ||
				   context == grammarAccess.getUnaryExpressionRule()) {
					sequence_Primary(context, (MatrixElement) semanticObject); 
					return; 
				}
				else break;
			case MathPackage.MATRIX_FORMULA:
				if(context == grammarAccess.getMatrixFormulaRule()) {
					sequence_MatrixFormula(context, (MatrixFormula) semanticObject); 
			case MathPackage.MATRIX_MULTIPLICATION:
				if(context == grammarAccess.getMatrixAdditionRule() ||
				   context == grammarAccess.getMatrixAdditionAccess().getMatrixAdditionLeftAction_1_0_1() ||
				   context == grammarAccess.getMatrixAdditionAccess().getMatrixSubtractionLeftAction_1_1_1() ||
				   context == grammarAccess.getMatrixMultiplicationRule() ||
				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_1_1() ||
				   context == grammarAccess.getPrimaryMatrixRule()) {
					sequence_MatrixMultiplication(context, (MatrixMultiplication) semanticObject); 
					sequence_MatrixRow(context, (MatrixRow) semanticObject); 
					return; 
				}
				else break;
			case MathPackage.MATRIX_SUBTRACTION:
				if(context == grammarAccess.getMatrixAdditionRule() ||
				   context == grammarAccess.getMatrixAdditionAccess().getMatrixAdditionLeftAction_1_0_1() ||
				   context == grammarAccess.getMatrixAdditionAccess().getMatrixSubtractionLeftAction_1_1_1() ||
				   context == grammarAccess.getMatrixMultiplicationRule() ||
				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_1_1() ||
				   context == grammarAccess.getPrimaryMatrixRule()) {
					sequence_MatrixAddition(context, (MatrixSubtraction) semanticObject); 
					return; 
				}
				else break;
			case MathPackage.MATRIX_VARIABLE:
				if(context == grammarAccess.getMatrixAdditionRule() ||
				   context == grammarAccess.getMatrixAdditionAccess().getMatrixAdditionLeftAction_1_0_1() ||
				   context == grammarAccess.getMatrixAdditionAccess().getMatrixSubtractionLeftAction_1_1_1() ||
				   context == grammarAccess.getMatrixMultiplicationRule() ||
				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_1_1() ||
				   context == grammarAccess.getPrimaryMatrixRule()) {
					sequence_PrimaryMatrix(context, (MatrixVariable) semanticObject); 
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getPrimaryRule() ||
				   context == grammarAccess.getUnaryExpressionRule()) {
					sequence_Multiplication(context, (Modulo) semanticObject); 
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getPrimaryRule() ||
				   context == grammarAccess.getUnaryExpressionRule()) {
					sequence_Multiplication(context, (Multiplication) semanticObject); 
					return; 
				}
				else break;
			case MathPackage.NEW_MATRIX:
				if(context == grammarAccess.getMatrixAdditionRule() ||
				   context == grammarAccess.getMatrixAdditionAccess().getMatrixAdditionLeftAction_1_0_1() ||
				   context == grammarAccess.getMatrixAdditionAccess().getMatrixSubtractionLeftAction_1_1_1() ||
				   context == grammarAccess.getMatrixMultiplicationRule() ||
				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_1_1() ||
				   context == grammarAccess.getPrimaryMatrixRule()) {
					sequence_PrimaryMatrix(context, (NewMatrix) semanticObject); 
					sequence_Statement(context, (Statement) semanticObject); 
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getPrimaryRule() ||
				   context == grammarAccess.getUnaryExpressionRule()) {
					sequence_Addition(context, (Subtraction) semanticObject); 
					return; 
				}
				else break;
			case MathPackage.TRANSPOSE_MATRIX:
				if(context == grammarAccess.getMatrixAdditionRule() ||
				   context == grammarAccess.getMatrixAdditionAccess().getMatrixAdditionLeftAction_1_0_1() ||
				   context == grammarAccess.getMatrixAdditionAccess().getMatrixSubtractionLeftAction_1_1_1() ||
				   context == grammarAccess.getMatrixMultiplicationRule() ||
				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_1_1() ||
				   context == grammarAccess.getPrimaryMatrixRule()) {
					sequence_PrimaryMatrix(context, (TransposeMatrix) semanticObject); 
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getPrimaryRule() ||
				   context == grammarAccess.getUnaryExpressionRule()) {
					sequence_Primary(context, (Variable) semanticObject); 
					return; 
				}
				else break;
			case MathPackage.VARIABLE_ASSIGNMENT:
				if(context == grammarAccess.getVariableAssignmentRule()) {
					sequence_VariableAssignment(context, (VariableAssignment) semanticObject); 
	protected void sequence_Addition(EObject context, Addition semanticObject) {
	protected void sequence_Addition(EObject context, Subtraction semanticObject) {
	protected void sequence_Exponent(EObject context, Exponent semanticObject) {
	protected void sequence_Formula(EObject context, Formula semanticObject) {
	protected void sequence_FunctionDefinition(EObject context, FunctionDefinition semanticObject) {
	protected void sequence_Function(EObject context, Expression semanticObject) {
	 *     (left=MatrixAddition_MatrixAddition_1_0_1 right=MatrixMultiplication)
	 *    left[1, 1]
	 *    right[1, 1]
	 */
	protected void sequence_MatrixAddition(EObject context, MatrixAddition semanticObject) {
		if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_ADDITION__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_ADDITION__LEFT));
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_ADDITION__RIGHT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_ADDITION__RIGHT));
		}
		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
		feeder.accept(grammarAccess.getMatrixAdditionAccess().getMatrixAdditionLeftAction_1_0_1(), semanticObject.getLeft());
		feeder.accept(grammarAccess.getMatrixAdditionAccess().getRightMatrixMultiplicationParserRuleCall_1_0_2_0(), semanticObject.getRight());
		feeder.finish();
	}
	
	
	/**
	 * Constraint:
	 *     (left=MatrixAddition_MatrixSubtraction_1_1_1 right=MatrixMultiplication)
	 *
	 * Features:
	 *    left[1, 1]
	 *    right[1, 1]
	protected void sequence_MatrixAddition(EObject context, MatrixSubtraction semanticObject) {
		if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_SUBTRACTION__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_SUBTRACTION__LEFT));
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_SUBTRACTION__RIGHT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_SUBTRACTION__RIGHT));
		}
		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
		feeder.accept(grammarAccess.getMatrixAdditionAccess().getMatrixSubtractionLeftAction_1_1_1(), semanticObject.getLeft());
		feeder.accept(grammarAccess.getMatrixAdditionAccess().getRightMatrixMultiplicationParserRuleCall_1_1_2_0(), semanticObject.getRight());
		feeder.finish();
	}
	
	
	/**
	 * Constraint:
	 *     (variable=MATH_NAME value=MatrixFormula)
	 *
	 * Features:
	 *    variable[1, 1]
	 *    value[1, 1]
	 */
	protected void sequence_MatrixAssignment(EObject context, MatrixAssignment semanticObject) {
		if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_ASSIGNMENT__VARIABLE) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_ASSIGNMENT__VARIABLE));
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_ASSIGNMENT__VALUE) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_ASSIGNMENT__VALUE));
		}
		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
		feeder.accept(grammarAccess.getMatrixAssignmentAccess().getVariableMATH_NAMETerminalRuleCall_1_0(), semanticObject.getVariable());
		feeder.accept(grammarAccess.getMatrixAssignmentAccess().getValueMatrixFormulaParserRuleCall_4_0(), semanticObject.getValue());
		feeder.finish();
	}
	
	
	/**
	 * Constraint:
	 *     expression=MatrixAddition
	 *
	 * Features:
	 *    expression[1, 1]
	 */
	protected void sequence_MatrixFormula(EObject context, MatrixFormula semanticObject) {
		if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_FORMULA__EXPRESSION) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_FORMULA__EXPRESSION));
		}
		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
		feeder.accept(grammarAccess.getMatrixFormulaAccess().getExpressionMatrixAdditionParserRuleCall_0(), semanticObject.getExpression());
		feeder.finish();
	}
	
	
	/**
	 * Constraint:
	 *     (
	 *         (left=MatrixMultiplication_MatrixMultiplication_1_0_1 rightMatrix=PrimaryMatrix) | 
	 *         (left=MatrixMultiplication_MatrixMultiplication_1_1_1 rightScalar=Formula)
	 *     )
	 *
	 * Features:
	 *    left[0, 2]
	 *    rightMatrix[0, 1]
	 *         EXCLUDE_IF_UNSET left
	 *         MANDATORY_IF_SET left
	 *         EXCLUDE_IF_SET left
	 *         EXCLUDE_IF_SET rightScalar
	 *    rightScalar[0, 1]
	 *         EXCLUDE_IF_UNSET left
	 *         MANDATORY_IF_SET left
	 *         EXCLUDE_IF_SET left
	 *         EXCLUDE_IF_SET rightMatrix
	 */
	protected void sequence_MatrixMultiplication(EObject context, MatrixMultiplication semanticObject) {
	protected void sequence_MatrixRow(EObject context, MatrixRow semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Constraint:
	 *     (rows+=MatrixRow rows+=MatrixRow*)?
	 *
	 * Features:
	 *    rows[0, *]
	 */
	protected void sequence_Matrix(EObject context, Matrix semanticObject) {
	protected void sequence_Multiplication(EObject context, Division semanticObject) {
	protected void sequence_Multiplication(EObject context, Modulo semanticObject) {
	protected void sequence_Multiplication(EObject context, Multiplication semanticObject) {
	/**
	 * Constraint:
	 *     name=MATH_NAME
	 *
	 * Features:
	 *    name[1, 1]
	 */
	protected void sequence_PrimaryMatrix(EObject context, MatrixVariable semanticObject) {
		if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_VARIABLE__NAME) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_VARIABLE__NAME));
		}
		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
		feeder.accept(grammarAccess.getPrimaryMatrixAccess().getNameMATH_NAMETerminalRuleCall_2_2_0(), semanticObject.getName());
		feeder.finish();
	}
	
	
	/**
	 * Constraint:
	 *     matrix=Matrix
	 *
	 * Features:
	 *    matrix[1, 1]
	 */
	protected void sequence_PrimaryMatrix(EObject context, NewMatrix semanticObject) {
		if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.NEW_MATRIX__MATRIX) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.NEW_MATRIX__MATRIX));
		}
		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
		feeder.accept(grammarAccess.getPrimaryMatrixAccess().getMatrixMatrixParserRuleCall_0_1_0(), semanticObject.getMatrix());
		feeder.finish();
	}
	
	
	/**
	 * Constraint:
	 *     name=MATH_NAME
	 *
	 * Features:
	 *    name[1, 1]
	 */
	protected void sequence_PrimaryMatrix(EObject context, TransposeMatrix semanticObject) {
		if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.TRANSPOSE_MATRIX__NAME) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.TRANSPOSE_MATRIX__NAME));
		}
		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
		feeder.accept(grammarAccess.getPrimaryMatrixAccess().getNameMATH_NAMETerminalRuleCall_1_2_0(), semanticObject.getName());
		feeder.finish();
	}
	
	
	protected void sequence_Primary(EObject context, org.eclipse.iee.translator.jmole.math.math.Float semanticObject) {
	protected void sequence_Primary(EObject context, Function semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
	}
	
	
	/**
	 * Constraint:
	 *     (element=MATH_NAME row=INT column=INT)
	 *
	 * Features:
	 *    element[1, 1]
	 *    row[1, 1]
	 *    column[1, 1]
	 */
	protected void sequence_Primary(EObject context, MatrixElement semanticObject) {
	protected void sequence_Primary(EObject context, Variable semanticObject) {
	 *     (
	 *         functionDefinition=FunctionDefinition | 
	 *         variableAssignment=VariableAssignment | 
	 *         formula=Formula | 
	 *         matrixAssignment=MatrixAssignment | 
	 *         matrixFormula=MatrixFormula
	 *     )
	 *         EXCLUDE_IF_SET variableAssignment
	 *         EXCLUDE_IF_SET matrixAssignment
	 *         EXCLUDE_IF_SET matrixFormula
	 *    variableAssignment[0, 1]
	 *         EXCLUDE_IF_SET matrixAssignment
	 *         EXCLUDE_IF_SET matrixFormula
	 *    formula[0, 1]
	 *         EXCLUDE_IF_SET variableAssignment
	 *         EXCLUDE_IF_SET matrixAssignment
	 *         EXCLUDE_IF_SET matrixFormula
	 *    matrixAssignment[0, 1]
	 *         EXCLUDE_IF_SET functionDefinition
	 *         EXCLUDE_IF_SET variableAssignment
	 *         EXCLUDE_IF_SET matrixFormula
	 *    matrixFormula[0, 1]
	 *         EXCLUDE_IF_SET variableAssignment
	 *         EXCLUDE_IF_SET formula
	 *         EXCLUDE_IF_SET matrixAssignment
	protected void sequence_Statement(EObject context, Statement semanticObject) {
	protected void sequence_UnaryExpression(EObject context, Factorial semanticObject) {
	 *     expression=UnaryExpression
	 *    expression[1, 1]
	protected void sequence_UnaryExpression(EObject context, Invert semanticObject) {
	 *     (variable=MATH_NAME value=Formula)
	 *    variable[1, 1]
	 *    value[1, 1]
	protected void sequence_VariableAssignment(EObject context, VariableAssignment semanticObject) {
		if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.VARIABLE_ASSIGNMENT__VARIABLE) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.VARIABLE_ASSIGNMENT__VARIABLE));
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.VARIABLE_ASSIGNMENT__VALUE) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.VARIABLE_ASSIGNMENT__VALUE));
		}
		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
		feeder.accept(grammarAccess.getVariableAssignmentAccess().getVariableMATH_NAMETerminalRuleCall_0_0(), semanticObject.getVariable());
		feeder.accept(grammarAccess.getVariableAssignmentAccess().getValueFormulaParserRuleCall_2_0(), semanticObject.getValue());
		feeder.finish();
EObject context  Addition semanticObject
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/serializer/AbstractMathSemanticSequencer.java
protected void sequence_Addition(EObject context, Subtraction semanticObject) {
	protected void sequence_Exponent(EObject context, Exponent semanticObject) {
	protected void sequence_Formula(EObject context, Formula semanticObject) {
	protected void sequence_FunctionDefinition(EObject context, FunctionDefinition semanticObject) {
	protected void sequence_Function(EObject context, Expression semanticObject) {
	 *     (left=MatrixAddition_MatrixAddition_1_0_1 right=MatrixMultiplication)
	 *    left[1, 1]
	 *    right[1, 1]
	 */
	protected void sequence_MatrixAddition(EObject context, MatrixAddition semanticObject) {
		if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_ADDITION__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_ADDITION__LEFT));
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_ADDITION__RIGHT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_ADDITION__RIGHT));
void sequence_Addition(EObject context, Addition semanticObject)
EObject context  MatrixSubtraction semanticObject
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/serializer/AbstractMathSemanticSequencer.java
if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_SUBTRACTION__LEFT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_SUBTRACTION__LEFT));
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_SUBTRACTION__RIGHT) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_SUBTRACTION__RIGHT));
void sequence_MatrixAddition(EObject context, MatrixSubtraction semanticObject)
EObject context  MatrixAssignment semanticObject
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/serializer/AbstractMathSemanticSequencer.java
if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_ASSIGNMENT__VARIABLE) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_ASSIGNMENT__VARIABLE));
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_ASSIGNMENT__VALUE) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_ASSIGNMENT__VALUE));
void sequence_MatrixAssignment(EObject context, MatrixAssignment semanticObject)
EObject context  MatrixFormula semanticObject
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/serializer/AbstractMathSemanticSequencer.java
if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_FORMULA__EXPRESSION) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_FORMULA__EXPRESSION));
void sequence_MatrixFormula(EObject context, MatrixFormula semanticObject)
EObject context  MatrixMultiplication semanticObject
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/serializer/AbstractMathSemanticSequencer.java
protected void sequence_MatrixRow(EObject context, MatrixRow semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
void sequence_MatrixMultiplication(EObject context, MatrixMultiplication semanticObject)
EObject context  Matrix semanticObject
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/serializer/AbstractMathSemanticSequencer.java
protected void sequence_Multiplication(EObject context, Division semanticObject) {
	protected void sequence_Multiplication(EObject context, Modulo semanticObject) {
	protected void sequence_Multiplication(EObject context, Multiplication semanticObject) {
	/**
	 * Constraint:
	 *     name=MATH_NAME
	 *
	 * Features:
	 *    name[1, 1]
	 */
	protected void sequence_PrimaryMatrix(EObject context, MatrixVariable semanticObject) {
		if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_VARIABLE__NAME) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_VARIABLE__NAME));
void sequence_Matrix(EObject context, Matrix semanticObject)
EObject context  NewMatrix semanticObject
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/serializer/AbstractMathSemanticSequencer.java
if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.NEW_MATRIX__MATRIX) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.NEW_MATRIX__MATRIX));
void sequence_PrimaryMatrix(EObject context, NewMatrix semanticObject)
EObject context  TransposeMatrix semanticObject
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/serializer/AbstractMathSemanticSequencer.java
if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.TRANSPOSE_MATRIX__NAME) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.TRANSPOSE_MATRIX__NAME));
void sequence_PrimaryMatrix(EObject context, TransposeMatrix semanticObject)
EObject context  org.eclipse.iee.translator.jmole.math.math.Float semanticObject
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/serializer/AbstractMathSemanticSequencer.java
protected void sequence_Primary(EObject context, Function semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
void sequence_Primary(EObject context, org.eclipse.iee.translator.jmole.math.math.Float semanticObject)
EObject context  MatrixElement semanticObject
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/serializer/AbstractMathSemanticSequencer.java
protected void sequence_Primary(EObject context, Variable semanticObject) {
	 *     (
	 *         functionDefinition=FunctionDefinition | 
	 *         variableAssignment=VariableAssignment | 
	 *         formula=Formula | 
	 *         matrixAssignment=MatrixAssignment | 
	 *         matrixFormula=MatrixFormula
	 *     )
	 *         EXCLUDE_IF_SET variableAssignment
	 *         EXCLUDE_IF_SET matrixAssignment
	 *         EXCLUDE_IF_SET matrixFormula
	 *    variableAssignment[0, 1]
	 *         EXCLUDE_IF_SET matrixAssignment
	 *         EXCLUDE_IF_SET matrixFormula
	 *    formula[0, 1]
	 *         EXCLUDE_IF_SET variableAssignment
	 *         EXCLUDE_IF_SET matrixAssignment
	 *         EXCLUDE_IF_SET matrixFormula
	 *    matrixAssignment[0, 1]
	 *         EXCLUDE_IF_SET functionDefinition
	 *         EXCLUDE_IF_SET variableAssignment
	 *         EXCLUDE_IF_SET matrixFormula
	 *    matrixFormula[0, 1]
	 *         EXCLUDE_IF_SET variableAssignment
	 *         EXCLUDE_IF_SET formula
	 *         EXCLUDE_IF_SET matrixAssignment
	protected void sequence_Statement(EObject context, Statement semanticObject) {
	protected void sequence_UnaryExpression(EObject context, Factorial semanticObject) {
	 *     expression=UnaryExpression
	 *    expression[1, 1]
	protected void sequence_UnaryExpression(EObject context, Invert semanticObject) {
	 *     (variable=MATH_NAME value=Formula)
	 *    variable[1, 1]
	 *    value[1, 1]
	protected void sequence_VariableAssignment(EObject context, VariableAssignment semanticObject) {
		if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.VARIABLE_ASSIGNMENT__VARIABLE) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.VARIABLE_ASSIGNMENT__VARIABLE));
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.VARIABLE_ASSIGNMENT__VALUE) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.VARIABLE_ASSIGNMENT__VALUE));
void sequence_Primary(EObject context, MatrixElement semanticObject)
import org.eclipse.iee.translator.jmole.math.math.Assignment;
import org.eclipse.iee.translator.jmole.math.math.Interval;
import org.eclipse.iee.translator.jmole.math.math.MatrixDefinition;
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getUnaryExpressionRule() ||
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getPrimaryRule()) {
					sequence_Addition_Addition(context, (Addition) semanticObject); 
					return; 
				}
				else break;
			case MathPackage.ASSIGNMENT:
				if(context == grammarAccess.getAssignmentRule()) {
					sequence_Assignment_Assignment(context, (Assignment) semanticObject); 
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getUnaryExpressionRule() ||
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getPrimaryRule()) {
					sequence_Multiplication_Division(context, (Division) semanticObject); 
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getUnaryExpressionRule() ||
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getPrimaryRule()) {
					sequence_Exponent_Exponent(context, (Exponent) semanticObject); 
					sequence_Function_Expression(context, (Expression) semanticObject); 
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getUnaryExpressionRule() ||
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getPrimaryRule()) {
					sequence_UnaryExpression_Factorial(context, (Factorial) semanticObject); 
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getUnaryExpressionRule() ||
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getPrimaryRule()) {
					sequence_Primary_Float(context, (org.eclipse.iee.translator.jmole.math.math.Float) semanticObject); 
					sequence_Formula_Formula(context, (Formula) semanticObject); 
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getUnaryExpressionRule() ||
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getPrimaryRule()) {
					sequence_Primary_Function(context, (Function) semanticObject); 
					sequence_FunctionDefinition_FunctionDefinition(context, (FunctionDefinition) semanticObject); 
			case MathPackage.INTERVAL:
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getUnaryExpressionRule() ||
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getPrimaryRule()) {
					sequence_UnaryExpression_Interval(context, (Interval) semanticObject); 
			case MathPackage.INVERT:
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getUnaryExpressionRule() ||
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getPrimaryRule()) {
					sequence_UnaryExpression_Invert(context, (Invert) semanticObject); 
			case MathPackage.MATRIX_DEFINITION:
				if(context == grammarAccess.getMatrixDefinitionRule()) {
					sequence_MatrixDefinition_MatrixDefinition(context, (MatrixDefinition) semanticObject); 
					sequence_MatrixRow_MatrixRow(context, (MatrixRow) semanticObject); 
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getUnaryExpressionRule() ||
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getPrimaryRule()) {
					sequence_Multiplication_Modulo(context, (Modulo) semanticObject); 
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getUnaryExpressionRule() ||
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getPrimaryRule()) {
					sequence_Multiplication_Multiplication(context, (Multiplication) semanticObject); 
					sequence_Statement_Statement(context, (Statement) semanticObject); 
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getUnaryExpressionRule() ||
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getPrimaryRule()) {
					sequence_Addition_Subtraction(context, (Subtraction) semanticObject); 
				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
				   context == grammarAccess.getUnaryExpressionRule() ||
				   context == grammarAccess.getExponentRule() ||
				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
				   context == grammarAccess.getPrimaryRule()) {
					sequence_Primary_Variable(context, (Variable) semanticObject); 
	protected void sequence_Addition_Addition(EObject context, Addition semanticObject) {
	protected void sequence_Addition_Subtraction(EObject context, Subtraction semanticObject) {
	/**
	 * Constraint:
	 *     (variable=MATH_NAME value=Formula)
	 *
	 * Features:
	 *    variable[1, 1]
	 *    value[1, 1]
	 */
	protected void sequence_Assignment_Assignment(EObject context, Assignment semanticObject) {
		if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.ASSIGNMENT__VARIABLE) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.ASSIGNMENT__VARIABLE));
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.ASSIGNMENT__VALUE) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.ASSIGNMENT__VALUE));
		}
		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
		feeder.accept(grammarAccess.getAssignmentAccess().getVariableMATH_NAMETerminalRuleCall_0_0(), semanticObject.getVariable());
		feeder.accept(grammarAccess.getAssignmentAccess().getValueFormulaParserRuleCall_2_0(), semanticObject.getValue());
		feeder.finish();
	}
	
	
	protected void sequence_Exponent_Exponent(EObject context, Exponent semanticObject) {
	protected void sequence_Formula_Formula(EObject context, Formula semanticObject) {
	protected void sequence_FunctionDefinition_FunctionDefinition(EObject context, FunctionDefinition semanticObject) {
	protected void sequence_Function_Expression(EObject context, Expression semanticObject) {
	 *     (name=MATH_NAME (rows+=MatrixRow rows+=MatrixRow*)?)
	 *    name[1, 1]
	 *    rows[0, *]
	protected void sequence_MatrixDefinition_MatrixDefinition(EObject context, MatrixDefinition semanticObject) {
	protected void sequence_MatrixRow_MatrixRow(EObject context, MatrixRow semanticObject) {
	protected void sequence_Multiplication_Division(EObject context, Division semanticObject) {
	protected void sequence_Multiplication_Modulo(EObject context, Modulo semanticObject) {
	protected void sequence_Multiplication_Multiplication(EObject context, Multiplication semanticObject) {
	protected void sequence_Primary_Float(EObject context, org.eclipse.iee.translator.jmole.math.math.Float semanticObject) {
	protected void sequence_Primary_Function(EObject context, Function semanticObject) {
	protected void sequence_Primary_Variable(EObject context, Variable semanticObject) {
	 *     (functionDefinition=FunctionDefinition | matrixDefinition=MatrixDefinition | assignment=Assignment | formula=Formula)
	 *         EXCLUDE_IF_SET matrixDefinition
	 *         EXCLUDE_IF_SET assignment
	 *    matrixDefinition[0, 1]
	 *         EXCLUDE_IF_SET assignment
	 *    assignment[0, 1]
	 *         EXCLUDE_IF_SET matrixDefinition
	 *    formula[0, 1]
	 *         EXCLUDE_IF_SET matrixDefinition
	 *         EXCLUDE_IF_SET assignment
	protected void sequence_Statement_Statement(EObject context, Statement semanticObject) {
	protected void sequence_UnaryExpression_Factorial(EObject context, Factorial semanticObject) {
	 *     ((openingBracket='[' | openingBracket='(') ceil=UnaryExpression floor=UnaryExpression (closingBracket=']' | closingBracket=')'))
	 *    openingBracket[0, 2]
	 *    ceil[1, 1]
	 *    floor[1, 1]
	 *    closingBracket[0, 2]
	protected void sequence_UnaryExpression_Interval(EObject context, Interval semanticObject) {
	 *     expression=UnaryExpression
	 *    expression[1, 1]
	protected void sequence_UnaryExpression_Invert(EObject context, Invert semanticObject) {
		genericSequencer.createSequence(context, semanticObject);
EObject context  Addition semanticObject
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/serializer/AbstractMathSemanticSequencer.java
protected void sequence_Addition_Subtraction(EObject context, Subtraction semanticObject) {
	/**
	 * Constraint:
	 *     (variable=MATH_NAME value=Formula)
	 *
	 * Features:
	 *    variable[1, 1]
	 *    value[1, 1]
	 */
	protected void sequence_Assignment_Assignment(EObject context, Assignment semanticObject) {
		if(errorAcceptor != null) {
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.ASSIGNMENT__VARIABLE) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.ASSIGNMENT__VARIABLE));
			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.ASSIGNMENT__VALUE) == ValueTransient.YES)
				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.ASSIGNMENT__VALUE));
void sequence_Addition_Addition(EObject context, Addition semanticObject)
@@ -4,24 +4,32 @@
 import com.google.inject.Provider;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.iee.translator.jmole.math.math.Addition;
-import org.eclipse.iee.translator.jmole.math.math.Assignment;
 import org.eclipse.iee.translator.jmole.math.math.Division;
 import org.eclipse.iee.translator.jmole.math.math.Exponent;
 import org.eclipse.iee.translator.jmole.math.math.Expression;
 import org.eclipse.iee.translator.jmole.math.math.Factorial;
 import org.eclipse.iee.translator.jmole.math.math.Formula;
 import org.eclipse.iee.translator.jmole.math.math.Function;
 import org.eclipse.iee.translator.jmole.math.math.FunctionDefinition;
-import org.eclipse.iee.translator.jmole.math.math.Interval;
 import org.eclipse.iee.translator.jmole.math.math.Invert;
 import org.eclipse.iee.translator.jmole.math.math.MathPackage;
-import org.eclipse.iee.translator.jmole.math.math.MatrixDefinition;
+import org.eclipse.iee.translator.jmole.math.math.Matrix;
+import org.eclipse.iee.translator.jmole.math.math.MatrixAddition;
+import org.eclipse.iee.translator.jmole.math.math.MatrixAssignment;
+import org.eclipse.iee.translator.jmole.math.math.MatrixElement;
+import org.eclipse.iee.translator.jmole.math.math.MatrixFormula;
+import org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication;
 import org.eclipse.iee.translator.jmole.math.math.MatrixRow;
+import org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction;
+import org.eclipse.iee.translator.jmole.math.math.MatrixVariable;
 import org.eclipse.iee.translator.jmole.math.math.Modulo;
 import org.eclipse.iee.translator.jmole.math.math.Multiplication;
+import org.eclipse.iee.translator.jmole.math.math.NewMatrix;
 import org.eclipse.iee.translator.jmole.math.math.Statement;
 import org.eclipse.iee.translator.jmole.math.math.Subtraction;
+import org.eclipse.iee.translator.jmole.math.math.TransposeMatrix;
 import org.eclipse.iee.translator.jmole.math.math.Variable;
+import org.eclipse.iee.translator.jmole.math.math.VariableAssignment;
 import org.eclipse.iee.translator.jmole.math.services.MathGrammarAccess;
 import org.eclipse.xtext.serializer.acceptor.ISemanticSequenceAcceptor;
 import org.eclipse.xtext.serializer.acceptor.SequenceFeeder;
@@ -66,233 +74,317 @@ public void createSequence(EObject context, EObject semanticObject) {
 				if(context == grammarAccess.getAdditionRule() ||
 				   context == grammarAccess.getAdditionAccess().getAdditionLeftAction_1_0_1() ||
 				   context == grammarAccess.getAdditionAccess().getSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getExponentRule() ||
+				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
 				   context == grammarAccess.getMultiplicationRule() ||
-				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getDivisionLeftAction_1_1_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getModuloLeftAction_1_2_1() ||
-				   context == grammarAccess.getUnaryExpressionRule() ||
-				   context == grammarAccess.getExponentRule() ||
-				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
-				   context == grammarAccess.getPrimaryRule()) {
-					sequence_Addition_Addition(context, (Addition) semanticObject); 
-					return; 
-				}
-				else break;
-			case MathPackage.ASSIGNMENT:
-				if(context == grammarAccess.getAssignmentRule()) {
-					sequence_Assignment_Assignment(context, (Assignment) semanticObject); 
+				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getPrimaryRule() ||
+				   context == grammarAccess.getUnaryExpressionRule()) {
+					sequence_Addition(context, (Addition) semanticObject); 
 					return; 
 				}
 				else break;
 			case MathPackage.DIVISION:
 				if(context == grammarAccess.getAdditionRule() ||
 				   context == grammarAccess.getAdditionAccess().getAdditionLeftAction_1_0_1() ||
 				   context == grammarAccess.getAdditionAccess().getSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getExponentRule() ||
+				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
 				   context == grammarAccess.getMultiplicationRule() ||
-				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getDivisionLeftAction_1_1_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getModuloLeftAction_1_2_1() ||
-				   context == grammarAccess.getUnaryExpressionRule() ||
-				   context == grammarAccess.getExponentRule() ||
-				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
-				   context == grammarAccess.getPrimaryRule()) {
-					sequence_Multiplication_Division(context, (Division) semanticObject); 
+				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getPrimaryRule() ||
+				   context == grammarAccess.getUnaryExpressionRule()) {
+					sequence_Multiplication(context, (Division) semanticObject); 
 					return; 
 				}
 				else break;
 			case MathPackage.EXPONENT:
 				if(context == grammarAccess.getAdditionRule() ||
 				   context == grammarAccess.getAdditionAccess().getAdditionLeftAction_1_0_1() ||
 				   context == grammarAccess.getAdditionAccess().getSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getExponentRule() ||
+				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
 				   context == grammarAccess.getMultiplicationRule() ||
-				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getDivisionLeftAction_1_1_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getModuloLeftAction_1_2_1() ||
-				   context == grammarAccess.getUnaryExpressionRule() ||
-				   context == grammarAccess.getExponentRule() ||
-				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
-				   context == grammarAccess.getPrimaryRule()) {
-					sequence_Exponent_Exponent(context, (Exponent) semanticObject); 
+				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getPrimaryRule() ||
+				   context == grammarAccess.getUnaryExpressionRule()) {
+					sequence_Exponent(context, (Exponent) semanticObject); 
 					return; 
 				}
 				else break;
 			case MathPackage.EXPRESSION:
 				if(context == grammarAccess.getFunctionRule()) {
-					sequence_Function_Expression(context, (Expression) semanticObject); 
+					sequence_Function(context, (Expression) semanticObject); 
 					return; 
 				}
 				else break;
 			case MathPackage.FACTORIAL:
 				if(context == grammarAccess.getAdditionRule() ||
 				   context == grammarAccess.getAdditionAccess().getAdditionLeftAction_1_0_1() ||
 				   context == grammarAccess.getAdditionAccess().getSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getExponentRule() ||
+				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
 				   context == grammarAccess.getMultiplicationRule() ||
-				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getDivisionLeftAction_1_1_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getModuloLeftAction_1_2_1() ||
-				   context == grammarAccess.getUnaryExpressionRule() ||
-				   context == grammarAccess.getExponentRule() ||
-				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
-				   context == grammarAccess.getPrimaryRule()) {
-					sequence_UnaryExpression_Factorial(context, (Factorial) semanticObject); 
+				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getPrimaryRule() ||
+				   context == grammarAccess.getUnaryExpressionRule()) {
+					sequence_UnaryExpression(context, (Factorial) semanticObject); 
 					return; 
 				}
 				else break;
 			case MathPackage.FLOAT:
 				if(context == grammarAccess.getAdditionRule() ||
 				   context == grammarAccess.getAdditionAccess().getAdditionLeftAction_1_0_1() ||
 				   context == grammarAccess.getAdditionAccess().getSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getExponentRule() ||
+				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
 				   context == grammarAccess.getMultiplicationRule() ||
-				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getDivisionLeftAction_1_1_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getModuloLeftAction_1_2_1() ||
-				   context == grammarAccess.getUnaryExpressionRule() ||
-				   context == grammarAccess.getExponentRule() ||
-				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
-				   context == grammarAccess.getPrimaryRule()) {
-					sequence_Primary_Float(context, (org.eclipse.iee.translator.jmole.math.math.Float) semanticObject); 
+				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getPrimaryRule() ||
+				   context == grammarAccess.getUnaryExpressionRule()) {
+					sequence_Primary(context, (org.eclipse.iee.translator.jmole.math.math.Float) semanticObject); 
 					return; 
 				}
 				else break;
 			case MathPackage.FORMULA:
 				if(context == grammarAccess.getFormulaRule()) {
-					sequence_Formula_Formula(context, (Formula) semanticObject); 
+					sequence_Formula(context, (Formula) semanticObject); 
 					return; 
 				}
 				else break;
 			case MathPackage.FUNCTION:
 				if(context == grammarAccess.getAdditionRule() ||
 				   context == grammarAccess.getAdditionAccess().getAdditionLeftAction_1_0_1() ||
 				   context == grammarAccess.getAdditionAccess().getSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getExponentRule() ||
+				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
 				   context == grammarAccess.getMultiplicationRule() ||
-				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getDivisionLeftAction_1_1_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getModuloLeftAction_1_2_1() ||
-				   context == grammarAccess.getUnaryExpressionRule() ||
-				   context == grammarAccess.getExponentRule() ||
-				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
-				   context == grammarAccess.getPrimaryRule()) {
-					sequence_Primary_Function(context, (Function) semanticObject); 
+				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getPrimaryRule() ||
+				   context == grammarAccess.getUnaryExpressionRule()) {
+					sequence_Primary(context, (Function) semanticObject); 
 					return; 
 				}
 				else break;
 			case MathPackage.FUNCTION_DEFINITION:
 				if(context == grammarAccess.getFunctionDefinitionRule()) {
-					sequence_FunctionDefinition_FunctionDefinition(context, (FunctionDefinition) semanticObject); 
+					sequence_FunctionDefinition(context, (FunctionDefinition) semanticObject); 
 					return; 
 				}
 				else break;
-			case MathPackage.INTERVAL:
+			case MathPackage.INVERT:
 				if(context == grammarAccess.getAdditionRule() ||
 				   context == grammarAccess.getAdditionAccess().getAdditionLeftAction_1_0_1() ||
 				   context == grammarAccess.getAdditionAccess().getSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getExponentRule() ||
+				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
 				   context == grammarAccess.getMultiplicationRule() ||
-				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getDivisionLeftAction_1_1_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getModuloLeftAction_1_2_1() ||
-				   context == grammarAccess.getUnaryExpressionRule() ||
-				   context == grammarAccess.getExponentRule() ||
-				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
-				   context == grammarAccess.getPrimaryRule()) {
-					sequence_UnaryExpression_Interval(context, (Interval) semanticObject); 
+				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getPrimaryRule() ||
+				   context == grammarAccess.getUnaryExpressionRule()) {
+					sequence_UnaryExpression(context, (Invert) semanticObject); 
 					return; 
 				}
 				else break;
-			case MathPackage.INVERT:
+			case MathPackage.MATRIX:
+				if(context == grammarAccess.getMatrixRule()) {
+					sequence_Matrix(context, (Matrix) semanticObject); 
+					return; 
+				}
+				else break;
+			case MathPackage.MATRIX_ADDITION:
+				if(context == grammarAccess.getMatrixAdditionRule() ||
+				   context == grammarAccess.getMatrixAdditionAccess().getMatrixAdditionLeftAction_1_0_1() ||
+				   context == grammarAccess.getMatrixAdditionAccess().getMatrixSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getMatrixMultiplicationRule() ||
+				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_1_1() ||
+				   context == grammarAccess.getPrimaryMatrixRule()) {
+					sequence_MatrixAddition(context, (MatrixAddition) semanticObject); 
+					return; 
+				}
+				else break;
+			case MathPackage.MATRIX_ASSIGNMENT:
+				if(context == grammarAccess.getMatrixAssignmentRule()) {
+					sequence_MatrixAssignment(context, (MatrixAssignment) semanticObject); 
+					return; 
+				}
+				else break;
+			case MathPackage.MATRIX_ELEMENT:
 				if(context == grammarAccess.getAdditionRule() ||
 				   context == grammarAccess.getAdditionAccess().getAdditionLeftAction_1_0_1() ||
 				   context == grammarAccess.getAdditionAccess().getSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getExponentRule() ||
+				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
 				   context == grammarAccess.getMultiplicationRule() ||
-				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getDivisionLeftAction_1_1_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getModuloLeftAction_1_2_1() ||
-				   context == grammarAccess.getUnaryExpressionRule() ||
-				   context == grammarAccess.getExponentRule() ||
-				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
-				   context == grammarAccess.getPrimaryRule()) {
-					sequence_UnaryExpression_Invert(context, (Invert) semanticObject); 
+				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getPrimaryRule() ||
+				   context == grammarAccess.getUnaryExpressionRule()) {
+					sequence_Primary(context, (MatrixElement) semanticObject); 
+					return; 
+				}
+				else break;
+			case MathPackage.MATRIX_FORMULA:
+				if(context == grammarAccess.getMatrixFormulaRule()) {
+					sequence_MatrixFormula(context, (MatrixFormula) semanticObject); 
 					return; 
 				}
 				else break;
-			case MathPackage.MATRIX_DEFINITION:
-				if(context == grammarAccess.getMatrixDefinitionRule()) {
-					sequence_MatrixDefinition_MatrixDefinition(context, (MatrixDefinition) semanticObject); 
+			case MathPackage.MATRIX_MULTIPLICATION:
+				if(context == grammarAccess.getMatrixAdditionRule() ||
+				   context == grammarAccess.getMatrixAdditionAccess().getMatrixAdditionLeftAction_1_0_1() ||
+				   context == grammarAccess.getMatrixAdditionAccess().getMatrixSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getMatrixMultiplicationRule() ||
+				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_1_1() ||
+				   context == grammarAccess.getPrimaryMatrixRule()) {
+					sequence_MatrixMultiplication(context, (MatrixMultiplication) semanticObject); 
 					return; 
 				}
 				else break;
 			case MathPackage.MATRIX_ROW:
 				if(context == grammarAccess.getMatrixRowRule()) {
-					sequence_MatrixRow_MatrixRow(context, (MatrixRow) semanticObject); 
+					sequence_MatrixRow(context, (MatrixRow) semanticObject); 
+					return; 
+				}
+				else break;
+			case MathPackage.MATRIX_SUBTRACTION:
+				if(context == grammarAccess.getMatrixAdditionRule() ||
+				   context == grammarAccess.getMatrixAdditionAccess().getMatrixAdditionLeftAction_1_0_1() ||
+				   context == grammarAccess.getMatrixAdditionAccess().getMatrixSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getMatrixMultiplicationRule() ||
+				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_1_1() ||
+				   context == grammarAccess.getPrimaryMatrixRule()) {
+					sequence_MatrixAddition(context, (MatrixSubtraction) semanticObject); 
+					return; 
+				}
+				else break;
+			case MathPackage.MATRIX_VARIABLE:
+				if(context == grammarAccess.getMatrixAdditionRule() ||
+				   context == grammarAccess.getMatrixAdditionAccess().getMatrixAdditionLeftAction_1_0_1() ||
+				   context == grammarAccess.getMatrixAdditionAccess().getMatrixSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getMatrixMultiplicationRule() ||
+				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_1_1() ||
+				   context == grammarAccess.getPrimaryMatrixRule()) {
+					sequence_PrimaryMatrix(context, (MatrixVariable) semanticObject); 
 					return; 
 				}
 				else break;
 			case MathPackage.MODULO:
 				if(context == grammarAccess.getAdditionRule() ||
 				   context == grammarAccess.getAdditionAccess().getAdditionLeftAction_1_0_1() ||
 				   context == grammarAccess.getAdditionAccess().getSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getExponentRule() ||
+				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
 				   context == grammarAccess.getMultiplicationRule() ||
-				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getDivisionLeftAction_1_1_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getModuloLeftAction_1_2_1() ||
-				   context == grammarAccess.getUnaryExpressionRule() ||
-				   context == grammarAccess.getExponentRule() ||
-				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
-				   context == grammarAccess.getPrimaryRule()) {
-					sequence_Multiplication_Modulo(context, (Modulo) semanticObject); 
+				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getPrimaryRule() ||
+				   context == grammarAccess.getUnaryExpressionRule()) {
+					sequence_Multiplication(context, (Modulo) semanticObject); 
 					return; 
 				}
 				else break;
 			case MathPackage.MULTIPLICATION:
 				if(context == grammarAccess.getAdditionRule() ||
 				   context == grammarAccess.getAdditionAccess().getAdditionLeftAction_1_0_1() ||
 				   context == grammarAccess.getAdditionAccess().getSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getExponentRule() ||
+				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
 				   context == grammarAccess.getMultiplicationRule() ||
-				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getDivisionLeftAction_1_1_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getModuloLeftAction_1_2_1() ||
-				   context == grammarAccess.getUnaryExpressionRule() ||
-				   context == grammarAccess.getExponentRule() ||
-				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
-				   context == grammarAccess.getPrimaryRule()) {
-					sequence_Multiplication_Multiplication(context, (Multiplication) semanticObject); 
+				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getPrimaryRule() ||
+				   context == grammarAccess.getUnaryExpressionRule()) {
+					sequence_Multiplication(context, (Multiplication) semanticObject); 
+					return; 
+				}
+				else break;
+			case MathPackage.NEW_MATRIX:
+				if(context == grammarAccess.getMatrixAdditionRule() ||
+				   context == grammarAccess.getMatrixAdditionAccess().getMatrixAdditionLeftAction_1_0_1() ||
+				   context == grammarAccess.getMatrixAdditionAccess().getMatrixSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getMatrixMultiplicationRule() ||
+				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_1_1() ||
+				   context == grammarAccess.getPrimaryMatrixRule()) {
+					sequence_PrimaryMatrix(context, (NewMatrix) semanticObject); 
 					return; 
 				}
 				else break;
 			case MathPackage.STATEMENT:
 				if(context == grammarAccess.getStatementRule()) {
-					sequence_Statement_Statement(context, (Statement) semanticObject); 
+					sequence_Statement(context, (Statement) semanticObject); 
 					return; 
 				}
 				else break;
 			case MathPackage.SUBTRACTION:
 				if(context == grammarAccess.getAdditionRule() ||
 				   context == grammarAccess.getAdditionAccess().getAdditionLeftAction_1_0_1() ||
 				   context == grammarAccess.getAdditionAccess().getSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getExponentRule() ||
+				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
 				   context == grammarAccess.getMultiplicationRule() ||
-				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getDivisionLeftAction_1_1_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getModuloLeftAction_1_2_1() ||
-				   context == grammarAccess.getUnaryExpressionRule() ||
-				   context == grammarAccess.getExponentRule() ||
-				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
-				   context == grammarAccess.getPrimaryRule()) {
-					sequence_Addition_Subtraction(context, (Subtraction) semanticObject); 
+				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getPrimaryRule() ||
+				   context == grammarAccess.getUnaryExpressionRule()) {
+					sequence_Addition(context, (Subtraction) semanticObject); 
+					return; 
+				}
+				else break;
+			case MathPackage.TRANSPOSE_MATRIX:
+				if(context == grammarAccess.getMatrixAdditionRule() ||
+				   context == grammarAccess.getMatrixAdditionAccess().getMatrixAdditionLeftAction_1_0_1() ||
+				   context == grammarAccess.getMatrixAdditionAccess().getMatrixSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getMatrixMultiplicationRule() ||
+				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getMatrixMultiplicationAccess().getMatrixMultiplicationLeftAction_1_1_1() ||
+				   context == grammarAccess.getPrimaryMatrixRule()) {
+					sequence_PrimaryMatrix(context, (TransposeMatrix) semanticObject); 
 					return; 
 				}
 				else break;
 			case MathPackage.VARIABLE:
 				if(context == grammarAccess.getAdditionRule() ||
 				   context == grammarAccess.getAdditionAccess().getAdditionLeftAction_1_0_1() ||
 				   context == grammarAccess.getAdditionAccess().getSubtractionLeftAction_1_1_1() ||
+				   context == grammarAccess.getExponentRule() ||
+				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
 				   context == grammarAccess.getMultiplicationRule() ||
-				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getDivisionLeftAction_1_1_1() ||
 				   context == grammarAccess.getMultiplicationAccess().getModuloLeftAction_1_2_1() ||
-				   context == grammarAccess.getUnaryExpressionRule() ||
-				   context == grammarAccess.getExponentRule() ||
-				   context == grammarAccess.getExponentAccess().getExponentLeftAction_1_0() ||
-				   context == grammarAccess.getPrimaryRule()) {
-					sequence_Primary_Variable(context, (Variable) semanticObject); 
+				   context == grammarAccess.getMultiplicationAccess().getMultiplicationLeftAction_1_0_1() ||
+				   context == grammarAccess.getPrimaryRule() ||
+				   context == grammarAccess.getUnaryExpressionRule()) {
+					sequence_Primary(context, (Variable) semanticObject); 
+					return; 
+				}
+				else break;
+			case MathPackage.VARIABLE_ASSIGNMENT:
+				if(context == grammarAccess.getVariableAssignmentRule()) {
+					sequence_VariableAssignment(context, (VariableAssignment) semanticObject); 
 					return; 
 				}
 				else break;
@@ -308,7 +400,7 @@ public void createSequence(EObject context, EObject semanticObject) {
 	 *    left[1, 1]
 	 *    right[1, 1]
 	 */
-	protected void sequence_Addition_Addition(EObject context, Addition semanticObject) {
+	protected void sequence_Addition(EObject context, Addition semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
 	}
 	
@@ -321,34 +413,11 @@ protected void sequence_Addition_Addition(EObject context, Addition semanticObje
 	 *    left[1, 1]
 	 *    right[1, 1]
 	 */
-	protected void sequence_Addition_Subtraction(EObject context, Subtraction semanticObject) {
+	protected void sequence_Addition(EObject context, Subtraction semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
 	}
 	
 	
-	/**
-	 * Constraint:
-	 *     (variable=MATH_NAME value=Formula)
-	 *
-	 * Features:
-	 *    variable[1, 1]
-	 *    value[1, 1]
-	 */
-	protected void sequence_Assignment_Assignment(EObject context, Assignment semanticObject) {
-		if(errorAcceptor != null) {
-			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.ASSIGNMENT__VARIABLE) == ValueTransient.YES)
-				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.ASSIGNMENT__VARIABLE));
-			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.ASSIGNMENT__VALUE) == ValueTransient.YES)
-				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.ASSIGNMENT__VALUE));
-		}
-		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
-		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
-		feeder.accept(grammarAccess.getAssignmentAccess().getVariableMATH_NAMETerminalRuleCall_0_0(), semanticObject.getVariable());
-		feeder.accept(grammarAccess.getAssignmentAccess().getValueFormulaParserRuleCall_2_0(), semanticObject.getValue());
-		feeder.finish();
-	}
-	
-	
 	/**
 	 * Constraint:
 	 *     (left=Exponent_Exponent_1_0 right=Primary)
@@ -357,7 +426,7 @@ protected void sequence_Assignment_Assignment(EObject context, Assignment semant
 	 *    left[1, 1]
 	 *    right[1, 1]
 	 */
-	protected void sequence_Exponent_Exponent(EObject context, Exponent semanticObject) {
+	protected void sequence_Exponent(EObject context, Exponent semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
 	}
 	
@@ -369,7 +438,7 @@ protected void sequence_Exponent_Exponent(EObject context, Exponent semanticObje
 	 * Features:
 	 *    expression[1, 1]
 	 */
-	protected void sequence_Formula_Formula(EObject context, Formula semanticObject) {
+	protected void sequence_Formula(EObject context, Formula semanticObject) {
 		if(errorAcceptor != null) {
 			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.FORMULA__EXPRESSION) == ValueTransient.YES)
 				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.FORMULA__EXPRESSION));
@@ -389,7 +458,7 @@ protected void sequence_Formula_Formula(EObject context, Formula semanticObject)
 	 *    function[1, 1]
 	 *    formula[1, 1]
 	 */
-	protected void sequence_FunctionDefinition_FunctionDefinition(EObject context, FunctionDefinition semanticObject) {
+	protected void sequence_FunctionDefinition(EObject context, FunctionDefinition semanticObject) {
 		if(errorAcceptor != null) {
 			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.FUNCTION_DEFINITION__FUNCTION) == ValueTransient.YES)
 				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.FUNCTION_DEFINITION__FUNCTION));
@@ -412,20 +481,120 @@ protected void sequence_FunctionDefinition_FunctionDefinition(EObject context, F
 	 *    name[1, 1]
 	 *    parameters[0, *]
 	 */
-	protected void sequence_Function_Expression(EObject context, Expression semanticObject) {
+	protected void sequence_Function(EObject context, Expression semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
 	}
 	
 	
 	/**
 	 * Constraint:
-	 *     (name=MATH_NAME (rows+=MatrixRow rows+=MatrixRow*)?)
+	 *     (left=MatrixAddition_MatrixAddition_1_0_1 right=MatrixMultiplication)
 	 *
 	 * Features:
-	 *    name[1, 1]
-	 *    rows[0, *]
+	 *    left[1, 1]
+	 *    right[1, 1]
+	 */
+	protected void sequence_MatrixAddition(EObject context, MatrixAddition semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_ADDITION__LEFT) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_ADDITION__LEFT));
+			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_ADDITION__RIGHT) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_ADDITION__RIGHT));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getMatrixAdditionAccess().getMatrixAdditionLeftAction_1_0_1(), semanticObject.getLeft());
+		feeder.accept(grammarAccess.getMatrixAdditionAccess().getRightMatrixMultiplicationParserRuleCall_1_0_2_0(), semanticObject.getRight());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (left=MatrixAddition_MatrixSubtraction_1_1_1 right=MatrixMultiplication)
+	 *
+	 * Features:
+	 *    left[1, 1]
+	 *    right[1, 1]
 	 */
-	protected void sequence_MatrixDefinition_MatrixDefinition(EObject context, MatrixDefinition semanticObject) {
+	protected void sequence_MatrixAddition(EObject context, MatrixSubtraction semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_SUBTRACTION__LEFT) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_SUBTRACTION__LEFT));
+			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_SUBTRACTION__RIGHT) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_SUBTRACTION__RIGHT));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getMatrixAdditionAccess().getMatrixSubtractionLeftAction_1_1_1(), semanticObject.getLeft());
+		feeder.accept(grammarAccess.getMatrixAdditionAccess().getRightMatrixMultiplicationParserRuleCall_1_1_2_0(), semanticObject.getRight());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (variable=MATH_NAME value=MatrixFormula)
+	 *
+	 * Features:
+	 *    variable[1, 1]
+	 *    value[1, 1]
+	 */
+	protected void sequence_MatrixAssignment(EObject context, MatrixAssignment semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_ASSIGNMENT__VARIABLE) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_ASSIGNMENT__VARIABLE));
+			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_ASSIGNMENT__VALUE) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_ASSIGNMENT__VALUE));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getMatrixAssignmentAccess().getVariableMATH_NAMETerminalRuleCall_1_0(), semanticObject.getVariable());
+		feeder.accept(grammarAccess.getMatrixAssignmentAccess().getValueMatrixFormulaParserRuleCall_4_0(), semanticObject.getValue());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     expression=MatrixAddition
+	 *
+	 * Features:
+	 *    expression[1, 1]
+	 */
+	protected void sequence_MatrixFormula(EObject context, MatrixFormula semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_FORMULA__EXPRESSION) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_FORMULA__EXPRESSION));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getMatrixFormulaAccess().getExpressionMatrixAdditionParserRuleCall_0(), semanticObject.getExpression());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (
+	 *         (left=MatrixMultiplication_MatrixMultiplication_1_0_1 rightMatrix=PrimaryMatrix) | 
+	 *         (left=MatrixMultiplication_MatrixMultiplication_1_1_1 rightScalar=Formula)
+	 *     )
+	 *
+	 * Features:
+	 *    left[0, 2]
+	 *    rightMatrix[0, 1]
+	 *         EXCLUDE_IF_UNSET left
+	 *         MANDATORY_IF_SET left
+	 *         EXCLUDE_IF_SET left
+	 *         EXCLUDE_IF_SET rightScalar
+	 *    rightScalar[0, 1]
+	 *         EXCLUDE_IF_UNSET left
+	 *         MANDATORY_IF_SET left
+	 *         EXCLUDE_IF_SET left
+	 *         EXCLUDE_IF_SET rightMatrix
+	 */
+	protected void sequence_MatrixMultiplication(EObject context, MatrixMultiplication semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
 	}
 	
@@ -437,7 +606,19 @@ protected void sequence_MatrixDefinition_MatrixDefinition(EObject context, Matri
 	 * Features:
 	 *    elements[0, *]
 	 */
-	protected void sequence_MatrixRow_MatrixRow(EObject context, MatrixRow semanticObject) {
+	protected void sequence_MatrixRow(EObject context, MatrixRow semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (rows+=MatrixRow rows+=MatrixRow*)?
+	 *
+	 * Features:
+	 *    rows[0, *]
+	 */
+	protected void sequence_Matrix(EObject context, Matrix semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
 	}
 	
@@ -450,7 +631,7 @@ protected void sequence_MatrixRow_MatrixRow(EObject context, MatrixRow semanticO
 	 *    left[1, 1]
 	 *    right[1, 1]
 	 */
-	protected void sequence_Multiplication_Division(EObject context, Division semanticObject) {
+	protected void sequence_Multiplication(EObject context, Division semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
 	}
 	
@@ -463,7 +644,7 @@ protected void sequence_Multiplication_Division(EObject context, Division semant
 	 *    left[1, 1]
 	 *    right[1, 1]
 	 */
-	protected void sequence_Multiplication_Modulo(EObject context, Modulo semanticObject) {
+	protected void sequence_Multiplication(EObject context, Modulo semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
 	}
 	
@@ -476,19 +657,76 @@ protected void sequence_Multiplication_Modulo(EObject context, Modulo semanticOb
 	 *    left[1, 1]
 	 *    right[1, 1]
 	 */
-	protected void sequence_Multiplication_Multiplication(EObject context, Multiplication semanticObject) {
+	protected void sequence_Multiplication(EObject context, Multiplication semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
 	}
 	
 	
+	/**
+	 * Constraint:
+	 *     name=MATH_NAME
+	 *
+	 * Features:
+	 *    name[1, 1]
+	 */
+	protected void sequence_PrimaryMatrix(EObject context, MatrixVariable semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.MATRIX_VARIABLE__NAME) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.MATRIX_VARIABLE__NAME));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getPrimaryMatrixAccess().getNameMATH_NAMETerminalRuleCall_2_2_0(), semanticObject.getName());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     matrix=Matrix
+	 *
+	 * Features:
+	 *    matrix[1, 1]
+	 */
+	protected void sequence_PrimaryMatrix(EObject context, NewMatrix semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.NEW_MATRIX__MATRIX) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.NEW_MATRIX__MATRIX));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getPrimaryMatrixAccess().getMatrixMatrixParserRuleCall_0_1_0(), semanticObject.getMatrix());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     name=MATH_NAME
+	 *
+	 * Features:
+	 *    name[1, 1]
+	 */
+	protected void sequence_PrimaryMatrix(EObject context, TransposeMatrix semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.TRANSPOSE_MATRIX__NAME) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.TRANSPOSE_MATRIX__NAME));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getPrimaryMatrixAccess().getNameMATH_NAMETerminalRuleCall_1_2_0(), semanticObject.getName());
+		feeder.finish();
+	}
+	
+	
 	/**
 	 * Constraint:
 	 *     value=Float
 	 *
 	 * Features:
 	 *    value[1, 1]
 	 */
-	protected void sequence_Primary_Float(EObject context, org.eclipse.iee.translator.jmole.math.math.Float semanticObject) {
+	protected void sequence_Primary(EObject context, org.eclipse.iee.translator.jmole.math.math.Float semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
 	}
 	
@@ -500,7 +738,21 @@ protected void sequence_Primary_Float(EObject context, org.eclipse.iee.translato
 	 * Features:
 	 *    function[1, 1]
 	 */
-	protected void sequence_Primary_Function(EObject context, Function semanticObject) {
+	protected void sequence_Primary(EObject context, Function semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (element=MATH_NAME row=INT column=INT)
+	 *
+	 * Features:
+	 *    element[1, 1]
+	 *    row[1, 1]
+	 *    column[1, 1]
+	 */
+	protected void sequence_Primary(EObject context, MatrixElement semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
 	}
 	
@@ -512,34 +764,49 @@ protected void sequence_Primary_Function(EObject context, Function semanticObjec
 	 * Features:
 	 *    name[1, 1]
 	 */
-	protected void sequence_Primary_Variable(EObject context, Variable semanticObject) {
+	protected void sequence_Primary(EObject context, Variable semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
 	}
 	
 	
 	/**
 	 * Constraint:
-	 *     (functionDefinition=FunctionDefinition | matrixDefinition=MatrixDefinition | assignment=Assignment | formula=Formula)
+	 *     (
+	 *         functionDefinition=FunctionDefinition | 
+	 *         variableAssignment=VariableAssignment | 
+	 *         formula=Formula | 
+	 *         matrixAssignment=MatrixAssignment | 
+	 *         matrixFormula=MatrixFormula
+	 *     )
 	 *
 	 * Features:
 	 *    functionDefinition[0, 1]
-	 *         EXCLUDE_IF_SET matrixDefinition
-	 *         EXCLUDE_IF_SET assignment
+	 *         EXCLUDE_IF_SET variableAssignment
 	 *         EXCLUDE_IF_SET formula
-	 *    matrixDefinition[0, 1]
+	 *         EXCLUDE_IF_SET matrixAssignment
+	 *         EXCLUDE_IF_SET matrixFormula
+	 *    variableAssignment[0, 1]
 	 *         EXCLUDE_IF_SET functionDefinition
-	 *         EXCLUDE_IF_SET assignment
 	 *         EXCLUDE_IF_SET formula
-	 *    assignment[0, 1]
+	 *         EXCLUDE_IF_SET matrixAssignment
+	 *         EXCLUDE_IF_SET matrixFormula
+	 *    formula[0, 1]
 	 *         EXCLUDE_IF_SET functionDefinition
-	 *         EXCLUDE_IF_SET matrixDefinition
+	 *         EXCLUDE_IF_SET variableAssignment
+	 *         EXCLUDE_IF_SET matrixAssignment
+	 *         EXCLUDE_IF_SET matrixFormula
+	 *    matrixAssignment[0, 1]
+	 *         EXCLUDE_IF_SET functionDefinition
+	 *         EXCLUDE_IF_SET variableAssignment
 	 *         EXCLUDE_IF_SET formula
-	 *    formula[0, 1]
+	 *         EXCLUDE_IF_SET matrixFormula
+	 *    matrixFormula[0, 1]
 	 *         EXCLUDE_IF_SET functionDefinition
-	 *         EXCLUDE_IF_SET matrixDefinition
-	 *         EXCLUDE_IF_SET assignment
+	 *         EXCLUDE_IF_SET variableAssignment
+	 *         EXCLUDE_IF_SET formula
+	 *         EXCLUDE_IF_SET matrixAssignment
 	 */
-	protected void sequence_Statement_Statement(EObject context, Statement semanticObject) {
+	protected void sequence_Statement(EObject context, Statement semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
 	}
 	
@@ -551,34 +818,42 @@ protected void sequence_Statement_Statement(EObject context, Statement semanticO
 	 * Features:
 	 *    expression[1, 1]
 	 */
-	protected void sequence_UnaryExpression_Factorial(EObject context, Factorial semanticObject) {
+	protected void sequence_UnaryExpression(EObject context, Factorial semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
 	}
 	
 	
 	/**
 	 * Constraint:
-	 *     ((openingBracket='[' | openingBracket='(') ceil=UnaryExpression floor=UnaryExpression (closingBracket=']' | closingBracket=')'))
+	 *     expression=UnaryExpression
 	 *
 	 * Features:
-	 *    openingBracket[0, 2]
-	 *    ceil[1, 1]
-	 *    floor[1, 1]
-	 *    closingBracket[0, 2]
+	 *    expression[1, 1]
 	 */
-	protected void sequence_UnaryExpression_Interval(EObject context, Interval semanticObject) {
+	protected void sequence_UnaryExpression(EObject context, Invert semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
 	}
 	
 	
 	/**
 	 * Constraint:
-	 *     expression=UnaryExpression
+	 *     (variable=MATH_NAME value=Formula)
 	 *
 	 * Features:
-	 *    expression[1, 1]
+	 *    variable[1, 1]
+	 *    value[1, 1]
 	 */
-	protected void sequence_UnaryExpression_Invert(EObject context, Invert semanticObject) {
-		genericSequencer.createSequence(context, semanticObject);
+	protected void sequence_VariableAssignment(EObject context, VariableAssignment semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.VARIABLE_ASSIGNMENT__VARIABLE) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.VARIABLE_ASSIGNMENT__VARIABLE));
+			if(transientValues.isValueTransient(semanticObject, MathPackage.Literals.VARIABLE_ASSIGNMENT__VALUE) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MathPackage.Literals.VARIABLE_ASSIGNMENT__VALUE));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getVariableAssignmentAccess().getVariableMATH_NAMETerminalRuleCall_0_0(), semanticObject.getVariable());
+		feeder.accept(grammarAccess.getVariableAssignmentAccess().getValueFormulaParserRuleCall_2_0(), semanticObject.getValue());
+		feeder.finish();
 	}
 }
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fserializer%2FAbstractMathSemanticSequencer.java
f0e39f6cce0ee6f7c21feb0c6fdaaa1408ec1a36
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fserializer%2FAbstractMathSyntacticSequencer.java
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fserializer%2FAbstractMathSyntacticSequencer.java?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/serializer/AbstractMathSyntacticSequencer.java
import java.util.List;
import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISynNavigable;
	protected AbstractElementAlias match_Matrix_CommaKeyword_1_2_q;
	protected AbstractElementAlias match_PrimaryMatrix_LeftParenthesisKeyword_3_0_a;
	protected AbstractElementAlias match_PrimaryMatrix_LeftParenthesisKeyword_3_0_p;
	protected AbstractElementAlias match_Primary_LeftParenthesisKeyword_4_0_a;
	protected AbstractElementAlias match_Primary_LeftParenthesisKeyword_4_0_p;
		match_Matrix_CommaKeyword_1_2_q = new TokenAlias(true, false, grammarAccess.getMatrixAccess().getCommaKeyword_1_2());
		match_PrimaryMatrix_LeftParenthesisKeyword_3_0_a = new TokenAlias(true, true, grammarAccess.getPrimaryMatrixAccess().getLeftParenthesisKeyword_3_0());
		match_PrimaryMatrix_LeftParenthesisKeyword_3_0_p = new TokenAlias(false, true, grammarAccess.getPrimaryMatrixAccess().getLeftParenthesisKeyword_3_0());
		match_Primary_LeftParenthesisKeyword_4_0_a = new TokenAlias(true, true, grammarAccess.getPrimaryAccess().getLeftParenthesisKeyword_4_0());
		match_Primary_LeftParenthesisKeyword_4_0_p = new TokenAlias(false, true, grammarAccess.getPrimaryAccess().getLeftParenthesisKeyword_4_0());
	protected String getUnassignedRuleCallToken(EObject semanticObject, RuleCall ruleCall, INode node) {
		if (transition.getAmbiguousSyntaxes().isEmpty()) return;
		List<INode> transitionNodes = collectNodes(fromNode, toNode);
		for (AbstractElementAlias syntax : transition.getAmbiguousSyntaxes()) {
			List<INode> syntaxNodes = getNodesFor(transitionNodes, syntax);
			if(match_Function_CommaKeyword_2_2_q.equals(syntax))
				emit_Function_CommaKeyword_2_2_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if(match_MatrixRow_CommaKeyword_1_2_q.equals(syntax))
				emit_MatrixRow_CommaKeyword_1_2_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if(match_Matrix_CommaKeyword_1_2_q.equals(syntax))
				emit_Matrix_CommaKeyword_1_2_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if(match_PrimaryMatrix_LeftParenthesisKeyword_3_0_a.equals(syntax))
				emit_PrimaryMatrix_LeftParenthesisKeyword_3_0_a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if(match_PrimaryMatrix_LeftParenthesisKeyword_3_0_p.equals(syntax))
				emit_PrimaryMatrix_LeftParenthesisKeyword_3_0_p(semanticObject, getLastNavigableState(), syntaxNodes);
			else if(match_Primary_LeftParenthesisKeyword_4_0_a.equals(syntax))
				emit_Primary_LeftParenthesisKeyword_4_0_a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if(match_Primary_LeftParenthesisKeyword_4_0_p.equals(syntax))
				emit_Primary_LeftParenthesisKeyword_4_0_p(semanticObject, getLastNavigableState(), syntaxNodes);
			else acceptNodes(getLastNavigableState(), syntaxNodes);
		}
	protected void emit_Function_CommaKeyword_2_2_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	protected void emit_MatrixRow_CommaKeyword_1_2_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	protected void emit_Matrix_CommaKeyword_1_2_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	protected void emit_PrimaryMatrix_LeftParenthesisKeyword_3_0_a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	protected void emit_PrimaryMatrix_LeftParenthesisKeyword_3_0_p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}
	
	/**
	 * Syntax:
	 *     '('*
	 */
	protected void emit_Primary_LeftParenthesisKeyword_4_0_a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	}
	
	/**
	 * Syntax:
	 *     '('+
	 */
	protected void emit_Primary_LeftParenthesisKeyword_4_0_p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
EObject semanticObject  RuleCall ruleCall  INode node
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/serializer/AbstractMathSyntacticSequencer.java
if (transition.getAmbiguousSyntaxes().isEmpty()) return;
		List<INode> transitionNodes = collectNodes(fromNode, toNode);
		for (AbstractElementAlias syntax : transition.getAmbiguousSyntaxes()) {
			List<INode> syntaxNodes = getNodesFor(transitionNodes, syntax);
			if(match_Function_CommaKeyword_2_2_q.equals(syntax))
				emit_Function_CommaKeyword_2_2_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if(match_MatrixRow_CommaKeyword_1_2_q.equals(syntax))
				emit_MatrixRow_CommaKeyword_1_2_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if(match_Matrix_CommaKeyword_1_2_q.equals(syntax))
				emit_Matrix_CommaKeyword_1_2_q(semanticObject, getLastNavigableState(), syntaxNodes);
			else if(match_PrimaryMatrix_LeftParenthesisKeyword_3_0_a.equals(syntax))
				emit_PrimaryMatrix_LeftParenthesisKeyword_3_0_a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if(match_PrimaryMatrix_LeftParenthesisKeyword_3_0_p.equals(syntax))
				emit_PrimaryMatrix_LeftParenthesisKeyword_3_0_p(semanticObject, getLastNavigableState(), syntaxNodes);
			else if(match_Primary_LeftParenthesisKeyword_4_0_a.equals(syntax))
				emit_Primary_LeftParenthesisKeyword_4_0_a(semanticObject, getLastNavigableState(), syntaxNodes);
			else if(match_Primary_LeftParenthesisKeyword_4_0_p.equals(syntax))
				emit_Primary_LeftParenthesisKeyword_4_0_p(semanticObject, getLastNavigableState(), syntaxNodes);
			else acceptNodes(getLastNavigableState(), syntaxNodes);
String getUnassignedRuleCallToken(EObject semanticObject, RuleCall ruleCall, INode node)
EObject semanticObject  ISynNavigable transition  List<INode> nodes
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/serializer/AbstractMathSyntacticSequencer.java
acceptNodes(transition, nodes);
	protected void emit_MatrixRow_CommaKeyword_1_2_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	protected void emit_Matrix_CommaKeyword_1_2_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	protected void emit_PrimaryMatrix_LeftParenthesisKeyword_3_0_a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
	protected void emit_PrimaryMatrix_LeftParenthesisKeyword_3_0_p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
		acceptNodes(transition, nodes);
void emit_Function_CommaKeyword_2_2_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes)
EObject semanticObject  ISynNavigable transition  List<INode> nodes
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/serializer/AbstractMathSyntacticSequencer.java
acceptNodes(transition, nodes);
void emit_Primary_LeftParenthesisKeyword_4_0_a(EObject semanticObject, ISynNavigable transition, List<INode> nodes)
	protected AbstractElementAlias match_MatrixDefinition_CommaKeyword_3_2_q;
	protected AbstractElementAlias match_Primary_LeftParenthesisKeyword_3_0_a;
	protected AbstractElementAlias match_Primary_LeftParenthesisKeyword_3_0_p;
		match_MatrixDefinition_CommaKeyword_3_2_q = new TokenAlias(true, false, grammarAccess.getMatrixDefinitionAccess().getCommaKeyword_3_2());
		match_Primary_LeftParenthesisKeyword_3_0_a = new TokenAlias(true, true, grammarAccess.getPrimaryAccess().getLeftParenthesisKeyword_3_0());
		match_Primary_LeftParenthesisKeyword_3_0_p = new TokenAlias(false, true, grammarAccess.getPrimaryAccess().getLeftParenthesisKeyword_3_0());
	protected String getUnassignedRuleCallToken(RuleCall ruleCall, INode node) {
		if (!transition.isSyntacticallyAmbiguous())
			return;
		if(match_Function_CommaKeyword_2_2_q.equals(transition.getAmbiguousSyntax()))
			emit_Function_CommaKeyword_2_2_q(semanticObject, transition, fromNode, toNode);
		else if(match_MatrixDefinition_CommaKeyword_3_2_q.equals(transition.getAmbiguousSyntax()))
			emit_MatrixDefinition_CommaKeyword_3_2_q(semanticObject, transition, fromNode, toNode);
		else if(match_MatrixRow_CommaKeyword_1_2_q.equals(transition.getAmbiguousSyntax()))
			emit_MatrixRow_CommaKeyword_1_2_q(semanticObject, transition, fromNode, toNode);
		else if(match_Primary_LeftParenthesisKeyword_3_0_a.equals(transition.getAmbiguousSyntax()))
			emit_Primary_LeftParenthesisKeyword_3_0_a(semanticObject, transition, fromNode, toNode);
		else if(match_Primary_LeftParenthesisKeyword_3_0_p.equals(transition.getAmbiguousSyntax()))
			emit_Primary_LeftParenthesisKeyword_3_0_p(semanticObject, transition, fromNode, toNode);
		else acceptNodes(transition, fromNode, toNode);
	protected void emit_Function_CommaKeyword_2_2_q(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
		acceptNodes(transition, fromNode, toNode);
	protected void emit_MatrixDefinition_CommaKeyword_3_2_q(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
		acceptNodes(transition, fromNode, toNode);
	protected void emit_MatrixRow_CommaKeyword_1_2_q(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
		acceptNodes(transition, fromNode, toNode);
	protected void emit_Primary_LeftParenthesisKeyword_3_0_a(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
		acceptNodes(transition, fromNode, toNode);
	protected void emit_Primary_LeftParenthesisKeyword_3_0_p(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
		acceptNodes(transition, fromNode, toNode);
@@ -1,13 +1,15 @@
 package org.eclipse.iee.translator.jmole.math.serializer;
 
 import com.google.inject.Inject;
+import java.util.List;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.iee.translator.jmole.math.services.MathGrammarAccess;
 import org.eclipse.xtext.IGrammarAccess;
 import org.eclipse.xtext.RuleCall;
 import org.eclipse.xtext.nodemodel.INode;
 import org.eclipse.xtext.serializer.analysis.GrammarAlias.AbstractElementAlias;
 import org.eclipse.xtext.serializer.analysis.GrammarAlias.TokenAlias;
+import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISynNavigable;
 import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISynTransition;
 import org.eclipse.xtext.serializer.sequencer.AbstractSyntacticSequencer;
 
@@ -16,82 +18,109 @@ public class AbstractMathSyntacticSequencer extends AbstractSyntacticSequencer {
 
 	protected MathGrammarAccess grammarAccess;
 	protected AbstractElementAlias match_Function_CommaKeyword_2_2_q;
-	protected AbstractElementAlias match_MatrixDefinition_CommaKeyword_3_2_q;
 	protected AbstractElementAlias match_MatrixRow_CommaKeyword_1_2_q;
-	protected AbstractElementAlias match_Primary_LeftParenthesisKeyword_3_0_a;
-	protected AbstractElementAlias match_Primary_LeftParenthesisKeyword_3_0_p;
+	protected AbstractElementAlias match_Matrix_CommaKeyword_1_2_q;
+	protected AbstractElementAlias match_PrimaryMatrix_LeftParenthesisKeyword_3_0_a;
+	protected AbstractElementAlias match_PrimaryMatrix_LeftParenthesisKeyword_3_0_p;
+	protected AbstractElementAlias match_Primary_LeftParenthesisKeyword_4_0_a;
+	protected AbstractElementAlias match_Primary_LeftParenthesisKeyword_4_0_p;
 	
 	@Inject
 	protected void init(IGrammarAccess access) {
 		grammarAccess = (MathGrammarAccess) access;
 		match_Function_CommaKeyword_2_2_q = new TokenAlias(true, false, grammarAccess.getFunctionAccess().getCommaKeyword_2_2());
-		match_MatrixDefinition_CommaKeyword_3_2_q = new TokenAlias(true, false, grammarAccess.getMatrixDefinitionAccess().getCommaKeyword_3_2());
 		match_MatrixRow_CommaKeyword_1_2_q = new TokenAlias(true, false, grammarAccess.getMatrixRowAccess().getCommaKeyword_1_2());
-		match_Primary_LeftParenthesisKeyword_3_0_a = new TokenAlias(true, true, grammarAccess.getPrimaryAccess().getLeftParenthesisKeyword_3_0());
-		match_Primary_LeftParenthesisKeyword_3_0_p = new TokenAlias(false, true, grammarAccess.getPrimaryAccess().getLeftParenthesisKeyword_3_0());
+		match_Matrix_CommaKeyword_1_2_q = new TokenAlias(true, false, grammarAccess.getMatrixAccess().getCommaKeyword_1_2());
+		match_PrimaryMatrix_LeftParenthesisKeyword_3_0_a = new TokenAlias(true, true, grammarAccess.getPrimaryMatrixAccess().getLeftParenthesisKeyword_3_0());
+		match_PrimaryMatrix_LeftParenthesisKeyword_3_0_p = new TokenAlias(false, true, grammarAccess.getPrimaryMatrixAccess().getLeftParenthesisKeyword_3_0());
+		match_Primary_LeftParenthesisKeyword_4_0_a = new TokenAlias(true, true, grammarAccess.getPrimaryAccess().getLeftParenthesisKeyword_4_0());
+		match_Primary_LeftParenthesisKeyword_4_0_p = new TokenAlias(false, true, grammarAccess.getPrimaryAccess().getLeftParenthesisKeyword_4_0());
 	}
 	
 	@Override
-	protected String getUnassignedRuleCallToken(RuleCall ruleCall, INode node) {
+	protected String getUnassignedRuleCallToken(EObject semanticObject, RuleCall ruleCall, INode node) {
 		return "";
 	}
 	
 	
 	@Override
 	protected void emitUnassignedTokens(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
-		if (!transition.isSyntacticallyAmbiguous())
-			return;
-		if(match_Function_CommaKeyword_2_2_q.equals(transition.getAmbiguousSyntax()))
-			emit_Function_CommaKeyword_2_2_q(semanticObject, transition, fromNode, toNode);
-		else if(match_MatrixDefinition_CommaKeyword_3_2_q.equals(transition.getAmbiguousSyntax()))
-			emit_MatrixDefinition_CommaKeyword_3_2_q(semanticObject, transition, fromNode, toNode);
-		else if(match_MatrixRow_CommaKeyword_1_2_q.equals(transition.getAmbiguousSyntax()))
-			emit_MatrixRow_CommaKeyword_1_2_q(semanticObject, transition, fromNode, toNode);
-		else if(match_Primary_LeftParenthesisKeyword_3_0_a.equals(transition.getAmbiguousSyntax()))
-			emit_Primary_LeftParenthesisKeyword_3_0_a(semanticObject, transition, fromNode, toNode);
-		else if(match_Primary_LeftParenthesisKeyword_3_0_p.equals(transition.getAmbiguousSyntax()))
-			emit_Primary_LeftParenthesisKeyword_3_0_p(semanticObject, transition, fromNode, toNode);
-		else acceptNodes(transition, fromNode, toNode);
+		if (transition.getAmbiguousSyntaxes().isEmpty()) return;
+		List<INode> transitionNodes = collectNodes(fromNode, toNode);
+		for (AbstractElementAlias syntax : transition.getAmbiguousSyntaxes()) {
+			List<INode> syntaxNodes = getNodesFor(transitionNodes, syntax);
+			if(match_Function_CommaKeyword_2_2_q.equals(syntax))
+				emit_Function_CommaKeyword_2_2_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_MatrixRow_CommaKeyword_1_2_q.equals(syntax))
+				emit_MatrixRow_CommaKeyword_1_2_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_Matrix_CommaKeyword_1_2_q.equals(syntax))
+				emit_Matrix_CommaKeyword_1_2_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_PrimaryMatrix_LeftParenthesisKeyword_3_0_a.equals(syntax))
+				emit_PrimaryMatrix_LeftParenthesisKeyword_3_0_a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_PrimaryMatrix_LeftParenthesisKeyword_3_0_p.equals(syntax))
+				emit_PrimaryMatrix_LeftParenthesisKeyword_3_0_p(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_Primary_LeftParenthesisKeyword_4_0_a.equals(syntax))
+				emit_Primary_LeftParenthesisKeyword_4_0_a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_Primary_LeftParenthesisKeyword_4_0_p.equals(syntax))
+				emit_Primary_LeftParenthesisKeyword_4_0_p(semanticObject, getLastNavigableState(), syntaxNodes);
+			else acceptNodes(getLastNavigableState(), syntaxNodes);
+		}
 	}
 
 	/**
 	 * Syntax:
 	 *     ','?
 	 */
-	protected void emit_Function_CommaKeyword_2_2_q(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
-		acceptNodes(transition, fromNode, toNode);
+	protected void emit_Function_CommaKeyword_2_2_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
 	}
 	
 	/**
 	 * Syntax:
 	 *     ','?
 	 */
-	protected void emit_MatrixDefinition_CommaKeyword_3_2_q(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
-		acceptNodes(transition, fromNode, toNode);
+	protected void emit_MatrixRow_CommaKeyword_1_2_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
 	}
 	
 	/**
 	 * Syntax:
 	 *     ','?
 	 */
-	protected void emit_MatrixRow_CommaKeyword_1_2_q(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
-		acceptNodes(transition, fromNode, toNode);
+	protected void emit_Matrix_CommaKeyword_1_2_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
 	}
 	
 	/**
 	 * Syntax:
 	 *     '('*
 	 */
-	protected void emit_Primary_LeftParenthesisKeyword_3_0_a(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
-		acceptNodes(transition, fromNode, toNode);
+	protected void emit_PrimaryMatrix_LeftParenthesisKeyword_3_0_a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
 	}
 	
 	/**
 	 * Syntax:
 	 *     '('+
 	 */
-	protected void emit_Primary_LeftParenthesisKeyword_3_0_p(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
-		acceptNodes(transition, fromNode, toNode);
+	protected void emit_PrimaryMatrix_LeftParenthesisKeyword_3_0_p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     '('*
+	 */
+	protected void emit_Primary_LeftParenthesisKeyword_4_0_a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     '('+
+	 */
+	protected void emit_Primary_LeftParenthesisKeyword_4_0_p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
 	}
 	
 }
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fserializer%2FAbstractMathSyntacticSequencer.java
c1ec1ad39d3431d46cabf52d79548e1ab87506c5
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fservices%2FMathGrammarAccess.java
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fservices%2FMathGrammarAccess.java?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
		private final Assignment cVariableAssignmentAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
		private final RuleCall cVariableAssignmentVariableAssignmentParserRuleCall_1_0 = (RuleCall)cVariableAssignmentAssignment_1.eContents().get(0);
		private final Assignment cFormulaAssignment_2 = (Assignment)cAlternatives.eContents().get(2);
		private final RuleCall cFormulaFormulaParserRuleCall_2_0 = (RuleCall)cFormulaAssignment_2.eContents().get(0);
		private final Assignment cMatrixAssignmentAssignment_3 = (Assignment)cAlternatives.eContents().get(3);
		private final RuleCall cMatrixAssignmentMatrixAssignmentParserRuleCall_3_0 = (RuleCall)cMatrixAssignmentAssignment_3.eContents().get(0);
		private final Assignment cMatrixFormulaAssignment_4 = (Assignment)cAlternatives.eContents().get(4);
		private final RuleCall cMatrixFormulaMatrixFormulaParserRuleCall_4_0 = (RuleCall)cMatrixFormulaAssignment_4.eContents().get(0);
		//	functionDefinition=FunctionDefinition | variableAssignment=VariableAssignment | formula=Formula |
		//	matrixAssignment=MatrixAssignment | matrixFormula=MatrixFormula;
		//functionDefinition=FunctionDefinition | variableAssignment=VariableAssignment | formula=Formula |
		//matrixAssignment=MatrixAssignment | matrixFormula=MatrixFormula
		//variableAssignment=VariableAssignment
		public Assignment getVariableAssignmentAssignment_1() { return cVariableAssignmentAssignment_1; }
		//VariableAssignment
		public RuleCall getVariableAssignmentVariableAssignmentParserRuleCall_1_0() { return cVariableAssignmentVariableAssignmentParserRuleCall_1_0; }
		public Assignment getFormulaAssignment_2() { return cFormulaAssignment_2; }
		public RuleCall getFormulaFormulaParserRuleCall_2_0() { return cFormulaFormulaParserRuleCall_2_0; }

		//matrixAssignment=MatrixAssignment
		public Assignment getMatrixAssignmentAssignment_3() { return cMatrixAssignmentAssignment_3; }

		//MatrixAssignment
		public RuleCall getMatrixAssignmentMatrixAssignmentParserRuleCall_3_0() { return cMatrixAssignmentMatrixAssignmentParserRuleCall_3_0; }

		//matrixFormula=MatrixFormula
		public Assignment getMatrixFormulaAssignment_4() { return cMatrixFormulaAssignment_4; }

		//MatrixFormula
		public RuleCall getMatrixFormulaMatrixFormulaParserRuleCall_4_0() { return cMatrixFormulaMatrixFormulaParserRuleCall_4_0; }
	public class VariableAssignmentElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "VariableAssignment");
		//VariableAssignment:
		private final Keyword cLeftParenthesisHyphenMinusKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_1_3 = (Keyword)cGroup_1.eContents().get(3);
		//	Exponent | "(-" {Invert} expression=UnaryExpression ")" | "(" {Factorial} expression=UnaryExpression ")!";
		//Exponent | "(-" {Invert} expression=UnaryExpression ")" | "(" {Factorial} expression=UnaryExpression ")!"
		//"(-" {Invert} expression=UnaryExpression ")"
		//"(-"
		public Keyword getLeftParenthesisHyphenMinusKeyword_1_0() { return cLeftParenthesisHyphenMinusKeyword_1_0; }
		//")"
		public Keyword getRightParenthesisKeyword_1_3() { return cRightParenthesisKeyword_1_3; }

		private final Action cMatrixElementAction_2_0 = (Action)cGroup_2.eContents().get(0);
		private final Assignment cElementAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cElementMATH_NAMETerminalRuleCall_2_1_0 = (RuleCall)cElementAssignment_2_1.eContents().get(0);
		private final Keyword cLeftSquareBracketKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
		private final Assignment cRowAssignment_2_3 = (Assignment)cGroup_2.eContents().get(3);
		private final RuleCall cRowINTTerminalRuleCall_2_3_0 = (RuleCall)cRowAssignment_2_3.eContents().get(0);
		private final Keyword cRightSquareBracketKeyword_2_4 = (Keyword)cGroup_2.eContents().get(4);
		private final Keyword cLeftSquareBracketKeyword_2_5 = (Keyword)cGroup_2.eContents().get(5);
		private final Assignment cColumnAssignment_2_6 = (Assignment)cGroup_2.eContents().get(6);
		private final RuleCall cColumnINTTerminalRuleCall_2_6_0 = (RuleCall)cColumnAssignment_2_6.eContents().get(0);
		private final Keyword cRightSquareBracketKeyword_2_7 = (Keyword)cGroup_2.eContents().get(7);
		private final Action cFunctionAction_3_0 = (Action)cGroup_3.eContents().get(0);
		private final Assignment cFunctionAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
		private final RuleCall cFunctionFunctionParserRuleCall_3_1_0 = (RuleCall)cFunctionAssignment_3_1.eContents().get(0);
		private final Group cGroup_4 = (Group)cAlternatives.eContents().get(4);
		private final Keyword cLeftParenthesisKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
		private final RuleCall cAdditionParserRuleCall_4_1 = (RuleCall)cGroup_4.eContents().get(1);
		private final Keyword cRightParenthesisKeyword_4_2 = (Keyword)cGroup_4.eContents().get(2);
		//	{Variable} name=MATH_NAME | {Float} value=Float | {MatrixElement} element=MATH_NAME "[" row=INT "]" "[" column=INT "]"
		//	| {Function} function=Function | "(" Addition ")";
		//{Variable} name=MATH_NAME | {Float} value=Float | {MatrixElement} element=MATH_NAME "[" row=INT "]" "[" column=INT "]" |
		//{Function} function=Function | "(" Addition ")"
		//{MatrixElement} element=MATH_NAME "[" row=INT "]" "[" column=INT "]"
		//{MatrixElement}
		public Action getMatrixElementAction_2_0() { return cMatrixElementAction_2_0; }

		//element=MATH_NAME
		public Assignment getElementAssignment_2_1() { return cElementAssignment_2_1; }

		//MATH_NAME
		public RuleCall getElementMATH_NAMETerminalRuleCall_2_1_0() { return cElementMATH_NAMETerminalRuleCall_2_1_0; }

		//"["
		public Keyword getLeftSquareBracketKeyword_2_2() { return cLeftSquareBracketKeyword_2_2; }

		//row=INT
		public Assignment getRowAssignment_2_3() { return cRowAssignment_2_3; }

		//INT
		public RuleCall getRowINTTerminalRuleCall_2_3_0() { return cRowINTTerminalRuleCall_2_3_0; }

		//"]"
		public Keyword getRightSquareBracketKeyword_2_4() { return cRightSquareBracketKeyword_2_4; }

		//"["
		public Keyword getLeftSquareBracketKeyword_2_5() { return cLeftSquareBracketKeyword_2_5; }

		//column=INT
		public Assignment getColumnAssignment_2_6() { return cColumnAssignment_2_6; }

		//INT
		public RuleCall getColumnINTTerminalRuleCall_2_6_0() { return cColumnINTTerminalRuleCall_2_6_0; }

		//"]"
		public Keyword getRightSquareBracketKeyword_2_7() { return cRightSquareBracketKeyword_2_7; }

		//{Function} function=Function
		public Group getGroup_3() { return cGroup_3; }

		public Action getFunctionAction_3_0() { return cFunctionAction_3_0; }
		public Assignment getFunctionAssignment_3_1() { return cFunctionAssignment_3_1; }
		public RuleCall getFunctionFunctionParserRuleCall_3_1_0() { return cFunctionFunctionParserRuleCall_3_1_0; }
		public Group getGroup_4() { return cGroup_4; }

		//"("
		public Keyword getLeftParenthesisKeyword_4_0() { return cLeftParenthesisKeyword_4_0; }

		//Addition
		public RuleCall getAdditionParserRuleCall_4_1() { return cAdditionParserRuleCall_4_1; }

		//")"
		public Keyword getRightParenthesisKeyword_4_2() { return cRightParenthesisKeyword_4_2; }
	}

	public class MatrixElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Matrix");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLeftCurlyBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Assignment cRowsAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
		private final RuleCall cRowsMatrixRowParserRuleCall_1_0_0 = (RuleCall)cRowsAssignment_1_0.eContents().get(0);
		private final Group cGroup_1_1 = (Group)cGroup_1.eContents().get(1);
		private final Keyword cCommaKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
		private final Assignment cRowsAssignment_1_1_1 = (Assignment)cGroup_1_1.eContents().get(1);
		private final RuleCall cRowsMatrixRowParserRuleCall_1_1_1_0 = (RuleCall)cRowsAssignment_1_1_1.eContents().get(0);
		private final Keyword cCommaKeyword_1_2 = (Keyword)cGroup_1.eContents().get(2);
		private final Keyword cRightCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		
		//Matrix:
		//	"{" (rows+=MatrixRow ("," rows+=MatrixRow)* ","?)? "}";
		public ParserRule getRule() { return rule; }

		//"{" (rows+=MatrixRow ("," rows+=MatrixRow)* ","?)? "}"
		public Group getGroup() { return cGroup; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_0() { return cLeftCurlyBracketKeyword_0; }

		//(rows+=MatrixRow ("," rows+=MatrixRow)* ","?)?
		public Group getGroup_1() { return cGroup_1; }

		//rows+=MatrixRow
		public Assignment getRowsAssignment_1_0() { return cRowsAssignment_1_0; }

		//MatrixRow
		public RuleCall getRowsMatrixRowParserRuleCall_1_0_0() { return cRowsMatrixRowParserRuleCall_1_0_0; }

		//("," rows+=MatrixRow)*
		public Group getGroup_1_1() { return cGroup_1_1; }

		//","
		public Keyword getCommaKeyword_1_1_0() { return cCommaKeyword_1_1_0; }

		//rows+=MatrixRow
		public Assignment getRowsAssignment_1_1_1() { return cRowsAssignment_1_1_1; }

		//MatrixRow
		public RuleCall getRowsMatrixRowParserRuleCall_1_1_1_0() { return cRowsMatrixRowParserRuleCall_1_1_1_0; }

		//","?
		public Keyword getCommaKeyword_1_2() { return cCommaKeyword_1_2; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_2() { return cRightCurlyBracketKeyword_2; }
	}

	public class MatrixRowElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MatrixRow");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLeftCurlyBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Assignment cElementsAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
		private final RuleCall cElementsFloatParserRuleCall_1_0_0 = (RuleCall)cElementsAssignment_1_0.eContents().get(0);
		private final Group cGroup_1_1 = (Group)cGroup_1.eContents().get(1);
		private final Keyword cCommaKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
		private final Assignment cElementsAssignment_1_1_1 = (Assignment)cGroup_1_1.eContents().get(1);
		private final RuleCall cElementsFloatParserRuleCall_1_1_1_0 = (RuleCall)cElementsAssignment_1_1_1.eContents().get(0);
		private final Keyword cCommaKeyword_1_2 = (Keyword)cGroup_1.eContents().get(2);
		private final Keyword cRightCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		
		//MatrixRow:
		//	"{" (elements+=Float ("," elements+=Float)* ","?)? "}";
		public ParserRule getRule() { return rule; }

		//"{" (elements+=Float ("," elements+=Float)* ","?)? "}"
		public Group getGroup() { return cGroup; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_0() { return cLeftCurlyBracketKeyword_0; }

		//(elements+=Float ("," elements+=Float)* ","?)?
		public Group getGroup_1() { return cGroup_1; }

		//elements+=Float
		public Assignment getElementsAssignment_1_0() { return cElementsAssignment_1_0; }

		//Float
		public RuleCall getElementsFloatParserRuleCall_1_0_0() { return cElementsFloatParserRuleCall_1_0_0; }

		//("," elements+=Float)*
		public Group getGroup_1_1() { return cGroup_1_1; }

		//","
		public Keyword getCommaKeyword_1_1_0() { return cCommaKeyword_1_1_0; }

		//elements+=Float
		public Assignment getElementsAssignment_1_1_1() { return cElementsAssignment_1_1_1; }

		//Float
		public RuleCall getElementsFloatParserRuleCall_1_1_1_0() { return cElementsFloatParserRuleCall_1_1_1_0; }

		//","?
		public Keyword getCommaKeyword_1_2() { return cCommaKeyword_1_2; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_2() { return cRightCurlyBracketKeyword_2; }
	}

	public class MatrixAssignmentElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MatrixAssignment");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLeftSquareBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Assignment cVariableAssignment_1 = (Assignment)cGroup.eContents().get(1);
		private final RuleCall cVariableMATH_NAMETerminalRuleCall_1_0 = (RuleCall)cVariableAssignment_1.eContents().get(0);
		private final Keyword cRightSquareBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Keyword cEqualsSignKeyword_3 = (Keyword)cGroup.eContents().get(3);
		private final Assignment cValueAssignment_4 = (Assignment)cGroup.eContents().get(4);
		private final RuleCall cValueMatrixFormulaParserRuleCall_4_0 = (RuleCall)cValueAssignment_4.eContents().get(0);
		
		//MatrixAssignment:
		//	"[" variable=MATH_NAME "]" "=" value=MatrixFormula;
		public ParserRule getRule() { return rule; }

		//"[" variable=MATH_NAME "]" "=" value=MatrixFormula
		public Group getGroup() { return cGroup; }

		//"["
		public Keyword getLeftSquareBracketKeyword_0() { return cLeftSquareBracketKeyword_0; }

		//variable=MATH_NAME
		public Assignment getVariableAssignment_1() { return cVariableAssignment_1; }

		//MATH_NAME
		public RuleCall getVariableMATH_NAMETerminalRuleCall_1_0() { return cVariableMATH_NAMETerminalRuleCall_1_0; }

		//"]"
		public Keyword getRightSquareBracketKeyword_2() { return cRightSquareBracketKeyword_2; }

		//"="
		public Keyword getEqualsSignKeyword_3() { return cEqualsSignKeyword_3; }

		//value=MatrixFormula
		public Assignment getValueAssignment_4() { return cValueAssignment_4; }

		//MatrixFormula
		public RuleCall getValueMatrixFormulaParserRuleCall_4_0() { return cValueMatrixFormulaParserRuleCall_4_0; }
	}

	public class MatrixFormulaElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MatrixFormula");
		private final Assignment cExpressionAssignment = (Assignment)rule.eContents().get(1);
		private final RuleCall cExpressionMatrixAdditionParserRuleCall_0 = (RuleCall)cExpressionAssignment.eContents().get(0);
		
		//MatrixFormula:
		//	expression=MatrixAddition;
		public ParserRule getRule() { return rule; }

		//expression=MatrixAddition
		public Assignment getExpressionAssignment() { return cExpressionAssignment; }

		//MatrixAddition
		public RuleCall getExpressionMatrixAdditionParserRuleCall_0() { return cExpressionMatrixAdditionParserRuleCall_0; }
	}

	public class MatrixAdditionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MatrixAddition");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cMatrixMultiplicationParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
		private final Keyword cPlusSignKeyword_1_0_0 = (Keyword)cGroup_1_0.eContents().get(0);
		private final Action cMatrixAdditionLeftAction_1_0_1 = (Action)cGroup_1_0.eContents().get(1);
		private final Assignment cRightAssignment_1_0_2 = (Assignment)cGroup_1_0.eContents().get(2);
		private final RuleCall cRightMatrixMultiplicationParserRuleCall_1_0_2_0 = (RuleCall)cRightAssignment_1_0_2.eContents().get(0);
		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
		private final Keyword cHyphenMinusKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
		private final Action cMatrixSubtractionLeftAction_1_1_1 = (Action)cGroup_1_1.eContents().get(1);
		private final Assignment cRightAssignment_1_1_2 = (Assignment)cGroup_1_1.eContents().get(2);
		private final RuleCall cRightMatrixMultiplicationParserRuleCall_1_1_2_0 = (RuleCall)cRightAssignment_1_1_2.eContents().get(0);
		
		//MatrixAddition returns MatrixExpression:
		//	MatrixMultiplication ("+" {MatrixAddition.left=current} right=MatrixMultiplication | "-"
		//	{MatrixSubtraction.left=current} right=MatrixMultiplication)*;
		public ParserRule getRule() { return rule; }

		//MatrixMultiplication ("+" {MatrixAddition.left=current} right=MatrixMultiplication | "-"
		//{MatrixSubtraction.left=current} right=MatrixMultiplication)*
		public Group getGroup() { return cGroup; }

		//MatrixMultiplication
		public RuleCall getMatrixMultiplicationParserRuleCall_0() { return cMatrixMultiplicationParserRuleCall_0; }

		//("+" {MatrixAddition.left=current} right=MatrixMultiplication | "-" {MatrixSubtraction.left=current}
		//right=MatrixMultiplication)*
		public Alternatives getAlternatives_1() { return cAlternatives_1; }

		//"+" {MatrixAddition.left=current} right=MatrixMultiplication
		public Group getGroup_1_0() { return cGroup_1_0; }

		//"+"
		public Keyword getPlusSignKeyword_1_0_0() { return cPlusSignKeyword_1_0_0; }

		//{MatrixAddition.left=current}
		public Action getMatrixAdditionLeftAction_1_0_1() { return cMatrixAdditionLeftAction_1_0_1; }

		//right=MatrixMultiplication
		public Assignment getRightAssignment_1_0_2() { return cRightAssignment_1_0_2; }

		//MatrixMultiplication
		public RuleCall getRightMatrixMultiplicationParserRuleCall_1_0_2_0() { return cRightMatrixMultiplicationParserRuleCall_1_0_2_0; }

		//"-" {MatrixSubtraction.left=current} right=MatrixMultiplication
		public Group getGroup_1_1() { return cGroup_1_1; }

		//"-"
		public Keyword getHyphenMinusKeyword_1_1_0() { return cHyphenMinusKeyword_1_1_0; }

		//{MatrixSubtraction.left=current}
		public Action getMatrixSubtractionLeftAction_1_1_1() { return cMatrixSubtractionLeftAction_1_1_1; }

		//right=MatrixMultiplication
		public Assignment getRightAssignment_1_1_2() { return cRightAssignment_1_1_2; }

		//MatrixMultiplication
		public RuleCall getRightMatrixMultiplicationParserRuleCall_1_1_2_0() { return cRightMatrixMultiplicationParserRuleCall_1_1_2_0; }
	}

	public class MatrixMultiplicationElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MatrixMultiplication");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final RuleCall cPrimaryMatrixParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
		private final Keyword cAsteriskKeyword_1_0_0 = (Keyword)cGroup_1_0.eContents().get(0);
		private final Action cMatrixMultiplicationLeftAction_1_0_1 = (Action)cGroup_1_0.eContents().get(1);
		private final Assignment cRightMatrixAssignment_1_0_2 = (Assignment)cGroup_1_0.eContents().get(2);
		private final RuleCall cRightMatrixPrimaryMatrixParserRuleCall_1_0_2_0 = (RuleCall)cRightMatrixAssignment_1_0_2.eContents().get(0);
		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
		private final Keyword cAsteriskKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
		private final Action cMatrixMultiplicationLeftAction_1_1_1 = (Action)cGroup_1_1.eContents().get(1);
		private final Assignment cRightScalarAssignment_1_1_2 = (Assignment)cGroup_1_1.eContents().get(2);
		private final RuleCall cRightScalarFormulaParserRuleCall_1_1_2_0 = (RuleCall)cRightScalarAssignment_1_1_2.eContents().get(0);
		
		//MatrixMultiplication returns MatrixExpression:
		//	PrimaryMatrix ("*" {MatrixMultiplication.left=current} rightMatrix=PrimaryMatrix | "*"
		//	{MatrixMultiplication.left=current} rightScalar=Formula)*;
		public ParserRule getRule() { return rule; }

		//PrimaryMatrix ("*" {MatrixMultiplication.left=current} rightMatrix=PrimaryMatrix | "*"
		//{MatrixMultiplication.left=current} rightScalar=Formula)*
		public Group getGroup() { return cGroup; }

		//PrimaryMatrix
		public RuleCall getPrimaryMatrixParserRuleCall_0() { return cPrimaryMatrixParserRuleCall_0; }

		//("*" {MatrixMultiplication.left=current} rightMatrix=PrimaryMatrix | "*" {MatrixMultiplication.left=current}
		//rightScalar=Formula)*
		public Alternatives getAlternatives_1() { return cAlternatives_1; }

		//"*" {MatrixMultiplication.left=current} rightMatrix=PrimaryMatrix
		public Group getGroup_1_0() { return cGroup_1_0; }

		//"*"
		public Keyword getAsteriskKeyword_1_0_0() { return cAsteriskKeyword_1_0_0; }

		//{MatrixMultiplication.left=current}
		public Action getMatrixMultiplicationLeftAction_1_0_1() { return cMatrixMultiplicationLeftAction_1_0_1; }

		//rightMatrix=PrimaryMatrix
		public Assignment getRightMatrixAssignment_1_0_2() { return cRightMatrixAssignment_1_0_2; }

		//PrimaryMatrix
		public RuleCall getRightMatrixPrimaryMatrixParserRuleCall_1_0_2_0() { return cRightMatrixPrimaryMatrixParserRuleCall_1_0_2_0; }

		//"*" {MatrixMultiplication.left=current} rightScalar=Formula
		public Group getGroup_1_1() { return cGroup_1_1; }

		//"*"
		public Keyword getAsteriskKeyword_1_1_0() { return cAsteriskKeyword_1_1_0; }

		//{MatrixMultiplication.left=current}
		public Action getMatrixMultiplicationLeftAction_1_1_1() { return cMatrixMultiplicationLeftAction_1_1_1; }

		//rightScalar=Formula
		public Assignment getRightScalarAssignment_1_1_2() { return cRightScalarAssignment_1_1_2; }

		//Formula
		public RuleCall getRightScalarFormulaParserRuleCall_1_1_2_0() { return cRightScalarFormulaParserRuleCall_1_1_2_0; }
	}

	public class PrimaryMatrixElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "PrimaryMatrix");
		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
		private final Action cNewMatrixAction_0_0 = (Action)cGroup_0.eContents().get(0);
		private final Assignment cMatrixAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
		private final RuleCall cMatrixMatrixParserRuleCall_0_1_0 = (RuleCall)cMatrixAssignment_0_1.eContents().get(0);
		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
		private final Action cTransposeMatrixAction_1_0 = (Action)cGroup_1.eContents().get(0);
		private final Keyword cLeftSquareBracketKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
		private final Assignment cNameAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
		private final RuleCall cNameMATH_NAMETerminalRuleCall_1_2_0 = (RuleCall)cNameAssignment_1_2.eContents().get(0);
		private final Keyword cTKeyword_1_3 = (Keyword)cGroup_1.eContents().get(3);
		private final Group cGroup_2 = (Group)cAlternatives.eContents().get(2);
		private final Action cMatrixVariableAction_2_0 = (Action)cGroup_2.eContents().get(0);
		private final Keyword cLeftSquareBracketKeyword_2_1 = (Keyword)cGroup_2.eContents().get(1);
		private final Assignment cNameAssignment_2_2 = (Assignment)cGroup_2.eContents().get(2);
		private final RuleCall cNameMATH_NAMETerminalRuleCall_2_2_0 = (RuleCall)cNameAssignment_2_2.eContents().get(0);
		private final Keyword cRightSquareBracketKeyword_2_3 = (Keyword)cGroup_2.eContents().get(3);
		private final Group cGroup_3 = (Group)cAlternatives.eContents().get(3);
		private final Keyword cLeftParenthesisKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final RuleCall cMatrixAdditionParserRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
		private final Keyword cRightParenthesisKeyword_3_2 = (Keyword)cGroup_3.eContents().get(2);
		
		//PrimaryMatrix returns MatrixExpression:
		//	{NewMatrix} matrix=Matrix | {TransposeMatrix} "[" name=MATH_NAME "]^T" | {MatrixVariable} "[" name=MATH_NAME "]" | "("
		//	MatrixAddition ")";
		public ParserRule getRule() { return rule; }

		//{NewMatrix} matrix=Matrix | {TransposeMatrix} "[" name=MATH_NAME "]^T" | {MatrixVariable} "[" name=MATH_NAME "]" | "("
		//MatrixAddition ")"
		public Alternatives getAlternatives() { return cAlternatives; }

		//{NewMatrix} matrix=Matrix
		public Group getGroup_0() { return cGroup_0; }

		//{NewMatrix}
		public Action getNewMatrixAction_0_0() { return cNewMatrixAction_0_0; }

		//matrix=Matrix
		public Assignment getMatrixAssignment_0_1() { return cMatrixAssignment_0_1; }

		//Matrix
		public RuleCall getMatrixMatrixParserRuleCall_0_1_0() { return cMatrixMatrixParserRuleCall_0_1_0; }

		//{TransposeMatrix} "[" name=MATH_NAME "]^T"
		public Group getGroup_1() { return cGroup_1; }

		//{TransposeMatrix}
		public Action getTransposeMatrixAction_1_0() { return cTransposeMatrixAction_1_0; }

		//"["
		public Keyword getLeftSquareBracketKeyword_1_1() { return cLeftSquareBracketKeyword_1_1; }

		//name=MATH_NAME
		public Assignment getNameAssignment_1_2() { return cNameAssignment_1_2; }

		//MATH_NAME
		public RuleCall getNameMATH_NAMETerminalRuleCall_1_2_0() { return cNameMATH_NAMETerminalRuleCall_1_2_0; }

		//"]^T"
		public Keyword getTKeyword_1_3() { return cTKeyword_1_3; }

		//{MatrixVariable} "[" name=MATH_NAME "]"
		public Group getGroup_2() { return cGroup_2; }

		//{MatrixVariable}
		public Action getMatrixVariableAction_2_0() { return cMatrixVariableAction_2_0; }

		//"["
		public Keyword getLeftSquareBracketKeyword_2_1() { return cLeftSquareBracketKeyword_2_1; }

		//name=MATH_NAME
		public Assignment getNameAssignment_2_2() { return cNameAssignment_2_2; }

		//MATH_NAME
		public RuleCall getNameMATH_NAMETerminalRuleCall_2_2_0() { return cNameMATH_NAMETerminalRuleCall_2_2_0; }

		//"]"
		public Keyword getRightSquareBracketKeyword_2_3() { return cRightSquareBracketKeyword_2_3; }

		//"(" MatrixAddition ")"
		//MatrixAddition
		public RuleCall getMatrixAdditionParserRuleCall_3_1() { return cMatrixAdditionParserRuleCall_3_1; }
	private VariableAssignmentElements pVariableAssignment;
	private MatrixElements pMatrix;
	private MatrixRowElements pMatrixRow;
	private MatrixAssignmentElements pMatrixAssignment;
	private MatrixFormulaElements pMatrixFormula;
	private MatrixAdditionElements pMatrixAddition;
	private MatrixMultiplicationElements pMatrixMultiplication;
	private PrimaryMatrixElements pPrimaryMatrix;
	//	functionDefinition=FunctionDefinition | variableAssignment=VariableAssignment | formula=Formula |
	//	matrixAssignment=MatrixAssignment | matrixFormula=MatrixFormula;
	//VariableAssignment:
	public VariableAssignmentElements getVariableAssignmentAccess() {
		return (pVariableAssignment != null) ? pVariableAssignment : (pVariableAssignment = new VariableAssignmentElements());
	public ParserRule getVariableAssignmentRule() {
		return getVariableAssignmentAccess().getRule();
	//	Exponent | "(-" {Invert} expression=UnaryExpression ")" | "(" {Factorial} expression=UnaryExpression ")!";
	//	{Variable} name=MATH_NAME | {Float} value=Float | {MatrixElement} element=MATH_NAME "[" row=INT "]" "[" column=INT "]"
	//	| {Function} function=Function | "(" Addition ")";
	//Matrix:
	//	"{" (rows+=MatrixRow ("," rows+=MatrixRow)* ","?)? "}";
	public MatrixElements getMatrixAccess() {
		return (pMatrix != null) ? pMatrix : (pMatrix = new MatrixElements());
	}
	
	public ParserRule getMatrixRule() {
		return getMatrixAccess().getRule();
	}

	//MatrixRow:
	//	"{" (elements+=Float ("," elements+=Float)* ","?)? "}";
	public MatrixRowElements getMatrixRowAccess() {
		return (pMatrixRow != null) ? pMatrixRow : (pMatrixRow = new MatrixRowElements());
	}
	
	public ParserRule getMatrixRowRule() {
		return getMatrixRowAccess().getRule();
	}

	//MatrixAssignment:
	//	"[" variable=MATH_NAME "]" "=" value=MatrixFormula;
	public MatrixAssignmentElements getMatrixAssignmentAccess() {
		return (pMatrixAssignment != null) ? pMatrixAssignment : (pMatrixAssignment = new MatrixAssignmentElements());
	}
	
	public ParserRule getMatrixAssignmentRule() {
		return getMatrixAssignmentAccess().getRule();
	}

	//MatrixFormula:
	//	expression=MatrixAddition;
	public MatrixFormulaElements getMatrixFormulaAccess() {
		return (pMatrixFormula != null) ? pMatrixFormula : (pMatrixFormula = new MatrixFormulaElements());
	}
	
	public ParserRule getMatrixFormulaRule() {
		return getMatrixFormulaAccess().getRule();
	}

	//MatrixAddition returns MatrixExpression:
	//	MatrixMultiplication ("+" {MatrixAddition.left=current} right=MatrixMultiplication | "-"
	//	{MatrixSubtraction.left=current} right=MatrixMultiplication)*;
	public MatrixAdditionElements getMatrixAdditionAccess() {
		return (pMatrixAddition != null) ? pMatrixAddition : (pMatrixAddition = new MatrixAdditionElements());
	}
	
	public ParserRule getMatrixAdditionRule() {
		return getMatrixAdditionAccess().getRule();
	}

	//MatrixMultiplication returns MatrixExpression:
	//	PrimaryMatrix ("*" {MatrixMultiplication.left=current} rightMatrix=PrimaryMatrix | "*"
	//	{MatrixMultiplication.left=current} rightScalar=Formula)*;
	public MatrixMultiplicationElements getMatrixMultiplicationAccess() {
		return (pMatrixMultiplication != null) ? pMatrixMultiplication : (pMatrixMultiplication = new MatrixMultiplicationElements());
	}
	
	public ParserRule getMatrixMultiplicationRule() {
		return getMatrixMultiplicationAccess().getRule();
	}

	//PrimaryMatrix returns MatrixExpression:
	//	{NewMatrix} matrix=Matrix | {TransposeMatrix} "[" name=MATH_NAME "]^T" | {MatrixVariable} "[" name=MATH_NAME "]" | "("
	//	MatrixAddition ")";
	public PrimaryMatrixElements getPrimaryMatrixAccess() {
		return (pPrimaryMatrix != null) ? pPrimaryMatrix : (pPrimaryMatrix = new PrimaryMatrixElements());
	}
	
	public ParserRule getPrimaryMatrixRule() {
		return getPrimaryMatrixAccess().getRule();
	}

org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cVariableAssignmentAssignment_1;
Assignment getVariableAssignmentAssignment_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cVariableAssignmentVariableAssignmentParserRuleCall_1_0;
RuleCall getVariableAssignmentVariableAssignmentParserRuleCall_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cFormulaAssignment_2;
Assignment getFormulaAssignment_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cFormulaFormulaParserRuleCall_2_0;
RuleCall getFormulaFormulaParserRuleCall_2_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cMatrixAssignmentAssignment_3;
Assignment getMatrixAssignmentAssignment_3()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cMatrixAssignmentMatrixAssignmentParserRuleCall_3_0;
RuleCall getMatrixAssignmentMatrixAssignmentParserRuleCall_3_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cMatrixFormulaAssignment_4;
Assignment getMatrixFormulaAssignment_4()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cMatrixFormulaMatrixFormulaParserRuleCall_4_0;
RuleCall getMatrixFormulaMatrixFormulaParserRuleCall_4_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cLeftParenthesisHyphenMinusKeyword_1_0;
Keyword getLeftParenthesisHyphenMinusKeyword_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightParenthesisKeyword_1_3;
Keyword getRightParenthesisKeyword_1_3()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cMatrixElementAction_2_0;
Action getMatrixElementAction_2_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cElementAssignment_2_1;
Assignment getElementAssignment_2_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cElementMATH_NAMETerminalRuleCall_2_1_0;
RuleCall getElementMATH_NAMETerminalRuleCall_2_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cLeftSquareBracketKeyword_2_2;
Keyword getLeftSquareBracketKeyword_2_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRowAssignment_2_3;
Assignment getRowAssignment_2_3()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRowINTTerminalRuleCall_2_3_0;
RuleCall getRowINTTerminalRuleCall_2_3_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightSquareBracketKeyword_2_4;
Keyword getRightSquareBracketKeyword_2_4()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cLeftSquareBracketKeyword_2_5;
Keyword getLeftSquareBracketKeyword_2_5()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cColumnAssignment_2_6;
Assignment getColumnAssignment_2_6()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cColumnINTTerminalRuleCall_2_6_0;
RuleCall getColumnINTTerminalRuleCall_2_6_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightSquareBracketKeyword_2_7;
Keyword getRightSquareBracketKeyword_2_7()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_3;
Group getGroup_3()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cFunctionAction_3_0;
Action getFunctionAction_3_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cFunctionAssignment_3_1;
Assignment getFunctionAssignment_3_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cFunctionFunctionParserRuleCall_3_1_0;
RuleCall getFunctionFunctionParserRuleCall_3_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_4;
Group getGroup_4()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cLeftParenthesisKeyword_4_0;
Keyword getLeftParenthesisKeyword_4_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cAdditionParserRuleCall_4_1;
RuleCall getAdditionParserRuleCall_4_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightParenthesisKeyword_4_2;
Keyword getRightParenthesisKeyword_4_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return rule;
ParserRule getRule()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup;
Group getGroup()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cLeftCurlyBracketKeyword_0;
Keyword getLeftCurlyBracketKeyword_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_1;
Group getGroup_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRowsAssignment_1_0;
Assignment getRowsAssignment_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRowsMatrixRowParserRuleCall_1_0_0;
RuleCall getRowsMatrixRowParserRuleCall_1_0_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_1_1;
Group getGroup_1_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cCommaKeyword_1_1_0;
Keyword getCommaKeyword_1_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRowsAssignment_1_1_1;
Assignment getRowsAssignment_1_1_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRowsMatrixRowParserRuleCall_1_1_1_0;
RuleCall getRowsMatrixRowParserRuleCall_1_1_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cCommaKeyword_1_2;
Keyword getCommaKeyword_1_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightCurlyBracketKeyword_2;
Keyword getRightCurlyBracketKeyword_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return rule;
ParserRule getRule()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup;
Group getGroup()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cLeftCurlyBracketKeyword_0;
Keyword getLeftCurlyBracketKeyword_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_1;
Group getGroup_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cElementsAssignment_1_0;
Assignment getElementsAssignment_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cElementsFloatParserRuleCall_1_0_0;
RuleCall getElementsFloatParserRuleCall_1_0_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_1_1;
Group getGroup_1_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cCommaKeyword_1_1_0;
Keyword getCommaKeyword_1_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cElementsAssignment_1_1_1;
Assignment getElementsAssignment_1_1_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cElementsFloatParserRuleCall_1_1_1_0;
RuleCall getElementsFloatParserRuleCall_1_1_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cCommaKeyword_1_2;
Keyword getCommaKeyword_1_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightCurlyBracketKeyword_2;
Keyword getRightCurlyBracketKeyword_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return rule;
ParserRule getRule()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup;
Group getGroup()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cLeftSquareBracketKeyword_0;
Keyword getLeftSquareBracketKeyword_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cVariableAssignment_1;
Assignment getVariableAssignment_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cVariableMATH_NAMETerminalRuleCall_1_0;
RuleCall getVariableMATH_NAMETerminalRuleCall_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightSquareBracketKeyword_2;
Keyword getRightSquareBracketKeyword_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cEqualsSignKeyword_3;
Keyword getEqualsSignKeyword_3()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cValueAssignment_4;
Assignment getValueAssignment_4()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cValueMatrixFormulaParserRuleCall_4_0;
RuleCall getValueMatrixFormulaParserRuleCall_4_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return rule;
ParserRule getRule()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cExpressionAssignment;
Assignment getExpressionAssignment()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cExpressionMatrixAdditionParserRuleCall_0;
RuleCall getExpressionMatrixAdditionParserRuleCall_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return rule;
ParserRule getRule()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup;
Group getGroup()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cMatrixMultiplicationParserRuleCall_0;
RuleCall getMatrixMultiplicationParserRuleCall_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cAlternatives_1;
Alternatives getAlternatives_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_1_0;
Group getGroup_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cPlusSignKeyword_1_0_0;
Keyword getPlusSignKeyword_1_0_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cMatrixAdditionLeftAction_1_0_1;
Action getMatrixAdditionLeftAction_1_0_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightAssignment_1_0_2;
Assignment getRightAssignment_1_0_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightMatrixMultiplicationParserRuleCall_1_0_2_0;
RuleCall getRightMatrixMultiplicationParserRuleCall_1_0_2_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_1_1;
Group getGroup_1_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cHyphenMinusKeyword_1_1_0;
Keyword getHyphenMinusKeyword_1_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cMatrixSubtractionLeftAction_1_1_1;
Action getMatrixSubtractionLeftAction_1_1_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightAssignment_1_1_2;
Assignment getRightAssignment_1_1_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightMatrixMultiplicationParserRuleCall_1_1_2_0;
RuleCall getRightMatrixMultiplicationParserRuleCall_1_1_2_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return rule;
ParserRule getRule()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup;
Group getGroup()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cPrimaryMatrixParserRuleCall_0;
RuleCall getPrimaryMatrixParserRuleCall_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cAlternatives_1;
Alternatives getAlternatives_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_1_0;
Group getGroup_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cAsteriskKeyword_1_0_0;
Keyword getAsteriskKeyword_1_0_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cMatrixMultiplicationLeftAction_1_0_1;
Action getMatrixMultiplicationLeftAction_1_0_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightMatrixAssignment_1_0_2;
Assignment getRightMatrixAssignment_1_0_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightMatrixPrimaryMatrixParserRuleCall_1_0_2_0;
RuleCall getRightMatrixPrimaryMatrixParserRuleCall_1_0_2_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_1_1;
Group getGroup_1_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cAsteriskKeyword_1_1_0;
Keyword getAsteriskKeyword_1_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cMatrixMultiplicationLeftAction_1_1_1;
Action getMatrixMultiplicationLeftAction_1_1_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightScalarAssignment_1_1_2;
Assignment getRightScalarAssignment_1_1_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightScalarFormulaParserRuleCall_1_1_2_0;
RuleCall getRightScalarFormulaParserRuleCall_1_1_2_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return rule;
ParserRule getRule()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cAlternatives;
Alternatives getAlternatives()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_0;
Group getGroup_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cNewMatrixAction_0_0;
Action getNewMatrixAction_0_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cMatrixAssignment_0_1;
Assignment getMatrixAssignment_0_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cMatrixMatrixParserRuleCall_0_1_0;
RuleCall getMatrixMatrixParserRuleCall_0_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_1;
Group getGroup_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cTransposeMatrixAction_1_0;
Action getTransposeMatrixAction_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cLeftSquareBracketKeyword_1_1;
Keyword getLeftSquareBracketKeyword_1_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cNameAssignment_1_2;
Assignment getNameAssignment_1_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cNameMATH_NAMETerminalRuleCall_1_2_0;
RuleCall getNameMATH_NAMETerminalRuleCall_1_2_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cTKeyword_1_3;
Keyword getTKeyword_1_3()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_2;
Group getGroup_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cMatrixVariableAction_2_0;
Action getMatrixVariableAction_2_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cLeftSquareBracketKeyword_2_1;
Keyword getLeftSquareBracketKeyword_2_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cNameAssignment_2_2;
Assignment getNameAssignment_2_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cNameMATH_NAMETerminalRuleCall_2_2_0;
RuleCall getNameMATH_NAMETerminalRuleCall_2_2_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightSquareBracketKeyword_2_3;
Keyword getRightSquareBracketKeyword_2_3()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cMatrixAdditionParserRuleCall_3_1;
RuleCall getMatrixAdditionParserRuleCall_3_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return (pVariableAssignment != null) ? pVariableAssignment : (pVariableAssignment = new VariableAssignmentElements());
	public ParserRule getVariableAssignmentRule() {
		return getVariableAssignmentAccess().getRule();
	//	Exponent | "(-" {Invert
VariableAssignmentElements getVariableAssignmentAccess()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return (pMatrix != null) ? pMatrix : (pMatrix = new MatrixElements());
MatrixElements getMatrixAccess()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return getMatrixAccess().getRule();
ParserRule getMatrixRule()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return (pMatrixRow != null) ? pMatrixRow : (pMatrixRow = new MatrixRowElements());
MatrixRowElements getMatrixRowAccess()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return getMatrixRowAccess().getRule();
ParserRule getMatrixRowRule()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return (pMatrixAssignment != null) ? pMatrixAssignment : (pMatrixAssignment = new MatrixAssignmentElements());
MatrixAssignmentElements getMatrixAssignmentAccess()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return getMatrixAssignmentAccess().getRule();
ParserRule getMatrixAssignmentRule()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return (pMatrixFormula != null) ? pMatrixFormula : (pMatrixFormula = new MatrixFormulaElements());
MatrixFormulaElements getMatrixFormulaAccess()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return getMatrixFormulaAccess().getRule();
ParserRule getMatrixFormulaRule()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return (pMatrixAddition != null) ? pMatrixAddition : (pMatrixAddition = new MatrixAdditionElements());
MatrixAdditionElements getMatrixAdditionAccess()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return getMatrixAdditionAccess().getRule();
ParserRule getMatrixAdditionRule()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return (pMatrixMultiplication != null) ? pMatrixMultiplication : (pMatrixMultiplication = new MatrixMultiplicationElements());
MatrixMultiplicationElements getMatrixMultiplicationAccess()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return getMatrixMultiplicationAccess().getRule();
ParserRule getMatrixMultiplicationRule()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return (pPrimaryMatrix != null) ? pPrimaryMatrix : (pPrimaryMatrix = new PrimaryMatrixElements());
PrimaryMatrixElements getPrimaryMatrixAccess()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return getPrimaryMatrixAccess().getRule();
ParserRule getPrimaryMatrixRule()
		private final Assignment cMatrixDefinitionAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
		private final RuleCall cMatrixDefinitionMatrixDefinitionParserRuleCall_1_0 = (RuleCall)cMatrixDefinitionAssignment_1.eContents().get(0);
		private final Assignment cAssignmentAssignment_2 = (Assignment)cAlternatives.eContents().get(2);
		private final RuleCall cAssignmentAssignmentParserRuleCall_2_0 = (RuleCall)cAssignmentAssignment_2.eContents().get(0);
		private final Assignment cFormulaAssignment_3 = (Assignment)cAlternatives.eContents().get(3);
		private final RuleCall cFormulaFormulaParserRuleCall_3_0 = (RuleCall)cFormulaAssignment_3.eContents().get(0);
		//	functionDefinition=FunctionDefinition | matrixDefinition=MatrixDefinition | assignment=Assignment | formula=Formula;
		//functionDefinition=FunctionDefinition | matrixDefinition=MatrixDefinition | assignment=Assignment | formula=Formula
		//matrixDefinition=MatrixDefinition
		public Assignment getMatrixDefinitionAssignment_1() { return cMatrixDefinitionAssignment_1; }

		//MatrixDefinition
		public RuleCall getMatrixDefinitionMatrixDefinitionParserRuleCall_1_0() { return cMatrixDefinitionMatrixDefinitionParserRuleCall_1_0; }
		//assignment=Assignment
		public Assignment getAssignmentAssignment_2() { return cAssignmentAssignment_2; }

		//Assignment
		public RuleCall getAssignmentAssignmentParserRuleCall_2_0() { return cAssignmentAssignmentParserRuleCall_2_0; }
		public Assignment getFormulaAssignment_3() { return cFormulaAssignment_3; }
		public RuleCall getFormulaFormulaParserRuleCall_3_0() { return cFormulaFormulaParserRuleCall_3_0; }
	public class AssignmentElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Assignment");
		//Assignment:
		//
		//
		private final Keyword cHyphenMinusKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
		private final Group cGroup_3 = (Group)cAlternatives.eContents().get(3);
		private final Action cIntervalAction_3_0 = (Action)cGroup_3.eContents().get(0);
		private final Assignment cOpeningBracketAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
		private final Alternatives cOpeningBracketAlternatives_3_1_0 = (Alternatives)cOpeningBracketAssignment_3_1.eContents().get(0);
		private final Keyword cOpeningBracketLeftSquareBracketKeyword_3_1_0_0 = (Keyword)cOpeningBracketAlternatives_3_1_0.eContents().get(0);
		private final Keyword cOpeningBracketLeftParenthesisKeyword_3_1_0_1 = (Keyword)cOpeningBracketAlternatives_3_1_0.eContents().get(1);
		private final Keyword cLeftParenthesisKeyword_3_2 = (Keyword)cGroup_3.eContents().get(2);
		private final Assignment cCeilAssignment_3_3 = (Assignment)cGroup_3.eContents().get(3);
		private final RuleCall cCeilUnaryExpressionParserRuleCall_3_3_0 = (RuleCall)cCeilAssignment_3_3.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_3_4 = (Keyword)cGroup_3.eContents().get(4);
		private final Keyword cFullStopFullStopKeyword_3_5 = (Keyword)cGroup_3.eContents().get(5);
		private final Keyword cLeftParenthesisKeyword_3_6 = (Keyword)cGroup_3.eContents().get(6);
		private final Assignment cFloorAssignment_3_7 = (Assignment)cGroup_3.eContents().get(7);
		private final RuleCall cFloorUnaryExpressionParserRuleCall_3_7_0 = (RuleCall)cFloorAssignment_3_7.eContents().get(0);
		private final Keyword cRightParenthesisKeyword_3_8 = (Keyword)cGroup_3.eContents().get(8);
		private final Assignment cClosingBracketAssignment_3_9 = (Assignment)cGroup_3.eContents().get(9);
		private final Alternatives cClosingBracketAlternatives_3_9_0 = (Alternatives)cClosingBracketAssignment_3_9.eContents().get(0);
		private final Keyword cClosingBracketRightSquareBracketKeyword_3_9_0_0 = (Keyword)cClosingBracketAlternatives_3_9_0.eContents().get(0);
		private final Keyword cClosingBracketRightParenthesisKeyword_3_9_0_1 = (Keyword)cClosingBracketAlternatives_3_9_0.eContents().get(1);
		//
		//	Exponent | "-" {Invert} expression=UnaryExpression | "(" {Factorial} expression=UnaryExpression ")!" | {Interval}
		//	openingBracket=("[" | "(") "(" ceil=UnaryExpression ")" ".." "(" floor=UnaryExpression ")" closingBracket=("]" | ")");
		//Exponent | "-" {Invert} expression=UnaryExpression | "(" {Factorial} expression=UnaryExpression ")!" | {Interval}
		//openingBracket=("[" | "(") "(" ceil=UnaryExpression ")" ".." "(" floor=UnaryExpression ")" closingBracket=("]" | ")")
		//"-" {Invert} expression=UnaryExpression
		//"-"
		public Keyword getHyphenMinusKeyword_1_0() { return cHyphenMinusKeyword_1_0; }

		//{Interval} openingBracket=("[" | "(") "(" ceil=UnaryExpression ")" ".." "(" floor=UnaryExpression ")"
		//closingBracket=("]" | ")")
		public Group getGroup_3() { return cGroup_3; }

		//{Interval}
		public Action getIntervalAction_3_0() { return cIntervalAction_3_0; }

		//openingBracket=("[" | "(")
		public Assignment getOpeningBracketAssignment_3_1() { return cOpeningBracketAssignment_3_1; }

		//"[" | "("
		public Alternatives getOpeningBracketAlternatives_3_1_0() { return cOpeningBracketAlternatives_3_1_0; }

		//"["
		public Keyword getOpeningBracketLeftSquareBracketKeyword_3_1_0_0() { return cOpeningBracketLeftSquareBracketKeyword_3_1_0_0; }

		//"("
		public Keyword getOpeningBracketLeftParenthesisKeyword_3_1_0_1() { return cOpeningBracketLeftParenthesisKeyword_3_1_0_1; }

		//"("
		public Keyword getLeftParenthesisKeyword_3_2() { return cLeftParenthesisKeyword_3_2; }

		//ceil=UnaryExpression
		public Assignment getCeilAssignment_3_3() { return cCeilAssignment_3_3; }

		//UnaryExpression
		public RuleCall getCeilUnaryExpressionParserRuleCall_3_3_0() { return cCeilUnaryExpressionParserRuleCall_3_3_0; }

		//")"
		public Keyword getRightParenthesisKeyword_3_4() { return cRightParenthesisKeyword_3_4; }

		//".."
		public Keyword getFullStopFullStopKeyword_3_5() { return cFullStopFullStopKeyword_3_5; }

		//"("
		public Keyword getLeftParenthesisKeyword_3_6() { return cLeftParenthesisKeyword_3_6; }

		//floor=UnaryExpression
		public Assignment getFloorAssignment_3_7() { return cFloorAssignment_3_7; }

		//UnaryExpression
		public RuleCall getFloorUnaryExpressionParserRuleCall_3_7_0() { return cFloorUnaryExpressionParserRuleCall_3_7_0; }

		//")"
		public Keyword getRightParenthesisKeyword_3_8() { return cRightParenthesisKeyword_3_8; }

		//closingBracket=("]" | ")")
		public Assignment getClosingBracketAssignment_3_9() { return cClosingBracketAssignment_3_9; }

		//"]" | ")"
		public Alternatives getClosingBracketAlternatives_3_9_0() { return cClosingBracketAlternatives_3_9_0; }

		//"]"
		public Keyword getClosingBracketRightSquareBracketKeyword_3_9_0_0() { return cClosingBracketRightSquareBracketKeyword_3_9_0_0; }

		//")"
		public Keyword getClosingBracketRightParenthesisKeyword_3_9_0_1() { return cClosingBracketRightParenthesisKeyword_3_9_0_1; }
		//
		private final Action cFunctionAction_2_0 = (Action)cGroup_2.eContents().get(0);
		private final Assignment cFunctionAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
		private final RuleCall cFunctionFunctionParserRuleCall_2_1_0 = (RuleCall)cFunctionAssignment_2_1.eContents().get(0);
		private final Keyword cLeftParenthesisKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
		private final RuleCall cAdditionParserRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
		private final Keyword cRightParenthesisKeyword_3_2 = (Keyword)cGroup_3.eContents().get(2);
		//	{Variable} name=MATH_NAME | {Float} value=Float | {Function} function=Function | "(" Addition ")";
		//{Variable} name=MATH_NAME | {Float} value=Float | {Function} function=Function | "(" Addition ")"
		//{Function} function=Function
		public Action getFunctionAction_2_0() { return cFunctionAction_2_0; }
		public Assignment getFunctionAssignment_2_1() { return cFunctionAssignment_2_1; }
		public RuleCall getFunctionFunctionParserRuleCall_2_1_0() { return cFunctionFunctionParserRuleCall_2_1_0; }
		//Addition
		public RuleCall getAdditionParserRuleCall_3_1() { return cAdditionParserRuleCall_3_1; }

	public class MatrixDefinitionElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MatrixDefinition");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
		private final RuleCall cNameMATH_NAMETerminalRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
		private final Keyword cEqualsSignKeyword_1 = (Keyword)cGroup.eContents().get(1);
		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
		private final Assignment cRowsAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
		private final RuleCall cRowsMatrixRowParserRuleCall_3_0_0 = (RuleCall)cRowsAssignment_3_0.eContents().get(0);
		private final Group cGroup_3_1 = (Group)cGroup_3.eContents().get(1);
		private final Keyword cCommaKeyword_3_1_0 = (Keyword)cGroup_3_1.eContents().get(0);
		private final Assignment cRowsAssignment_3_1_1 = (Assignment)cGroup_3_1.eContents().get(1);
		private final RuleCall cRowsMatrixRowParserRuleCall_3_1_1_0 = (RuleCall)cRowsAssignment_3_1_1.eContents().get(0);
		private final Keyword cCommaKeyword_3_2 = (Keyword)cGroup_3.eContents().get(2);
		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
		
		//MatrixDefinition:
		//	name=MATH_NAME "=" "{" (rows+=MatrixRow ("," rows+=MatrixRow)* ","?)? "}";
		public ParserRule getRule() { return rule; }

		//name=MATH_NAME "=" "{" (rows+=MatrixRow ("," rows+=MatrixRow)* ","?)? "}"
		public Group getGroup() { return cGroup; }

		//name=MATH_NAME
		public Assignment getNameAssignment_0() { return cNameAssignment_0; }

		//MATH_NAME
		public RuleCall getNameMATH_NAMETerminalRuleCall_0_0() { return cNameMATH_NAMETerminalRuleCall_0_0; }

		//"="
		public Keyword getEqualsSignKeyword_1() { return cEqualsSignKeyword_1; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }

		//(rows+=MatrixRow ("," rows+=MatrixRow)* ","?)?
		public Group getGroup_3() { return cGroup_3; }

		//rows+=MatrixRow
		public Assignment getRowsAssignment_3_0() { return cRowsAssignment_3_0; }

		//MatrixRow
		public RuleCall getRowsMatrixRowParserRuleCall_3_0_0() { return cRowsMatrixRowParserRuleCall_3_0_0; }

		//("," rows+=MatrixRow)*
		public Group getGroup_3_1() { return cGroup_3_1; }

		//","
		public Keyword getCommaKeyword_3_1_0() { return cCommaKeyword_3_1_0; }

		//rows+=MatrixRow
		public Assignment getRowsAssignment_3_1_1() { return cRowsAssignment_3_1_1; }

		//MatrixRow
		public RuleCall getRowsMatrixRowParserRuleCall_3_1_1_0() { return cRowsMatrixRowParserRuleCall_3_1_1_0; }

		//","?
		public Keyword getCommaKeyword_3_2() { return cCommaKeyword_3_2; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; }
	}

	public class MatrixRowElements extends AbstractParserRuleElementFinder {
		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MatrixRow");
		private final Group cGroup = (Group)rule.eContents().get(1);
		private final Keyword cLeftCurlyBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
		private final Assignment cElementsAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
		private final RuleCall cElementsFloatParserRuleCall_1_0_0 = (RuleCall)cElementsAssignment_1_0.eContents().get(0);
		private final Group cGroup_1_1 = (Group)cGroup_1.eContents().get(1);
		private final Keyword cCommaKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
		private final Assignment cElementsAssignment_1_1_1 = (Assignment)cGroup_1_1.eContents().get(1);
		private final RuleCall cElementsFloatParserRuleCall_1_1_1_0 = (RuleCall)cElementsAssignment_1_1_1.eContents().get(0);
		private final Keyword cCommaKeyword_1_2 = (Keyword)cGroup_1.eContents().get(2);
		private final Keyword cRightCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
		
		//MatrixRow:
		//	"{" (elements+=Float ("," elements+=Float)* ","?)? "}";
		public ParserRule getRule() { return rule; }

		//"{" (elements+=Float ("," elements+=Float)* ","?)? "}"
		public Group getGroup() { return cGroup; }

		//"{"
		public Keyword getLeftCurlyBracketKeyword_0() { return cLeftCurlyBracketKeyword_0; }

		//(elements+=Float ("," elements+=Float)* ","?)?
		public Group getGroup_1() { return cGroup_1; }

		//elements+=Float
		public Assignment getElementsAssignment_1_0() { return cElementsAssignment_1_0; }

		//Float
		public RuleCall getElementsFloatParserRuleCall_1_0_0() { return cElementsFloatParserRuleCall_1_0_0; }

		//("," elements+=Float)*
		public Group getGroup_1_1() { return cGroup_1_1; }

		//","
		public Keyword getCommaKeyword_1_1_0() { return cCommaKeyword_1_1_0; }

		//elements+=Float
		public Assignment getElementsAssignment_1_1_1() { return cElementsAssignment_1_1_1; }

		//Float
		public RuleCall getElementsFloatParserRuleCall_1_1_1_0() { return cElementsFloatParserRuleCall_1_1_1_0; }

		//","?
		public Keyword getCommaKeyword_1_2() { return cCommaKeyword_1_2; }

		//"}"
		public Keyword getRightCurlyBracketKeyword_2() { return cRightCurlyBracketKeyword_2; }
	}
	private AssignmentElements pAssignment;
	private MatrixDefinitionElements pMatrixDefinition;
	private MatrixRowElements pMatrixRow;
	//	functionDefinition=FunctionDefinition | matrixDefinition=MatrixDefinition | assignment=Assignment | formula=Formula;
	//Assignment:
	public AssignmentElements getAssignmentAccess() {
		return (pAssignment != null) ? pAssignment : (pAssignment = new AssignmentElements());
	public ParserRule getAssignmentRule() {
		return getAssignmentAccess().getRule();
	//
	//
	//
	//	Exponent | "-" {Invert} expression=UnaryExpression | "(" {Factorial} expression=UnaryExpression ")!" | {Interval}
	//	openingBracket=("[" | "(") "(" ceil=UnaryExpression ")" ".." "(" floor=UnaryExpression ")" closingBracket=("]" | ")");
	//
	//	{Variable} name=MATH_NAME | {Float} value=Float | {Function} function=Function | "(" Addition ")";
	//MatrixDefinition:
	//	name=MATH_NAME "=" "{" (rows+=MatrixRow ("," rows+=MatrixRow)* ","?)? "}";
	public MatrixDefinitionElements getMatrixDefinitionAccess() {
		return (pMatrixDefinition != null) ? pMatrixDefinition : (pMatrixDefinition = new MatrixDefinitionElements());
	}
	
	public ParserRule getMatrixDefinitionRule() {
		return getMatrixDefinitionAccess().getRule();
	}

	//MatrixRow:
	//	"{" (elements+=Float ("," elements+=Float)* ","?)? "}";
	public MatrixRowElements getMatrixRowAccess() {
		return (pMatrixRow != null) ? pMatrixRow : (pMatrixRow = new MatrixRowElements());
	}
	
	public ParserRule getMatrixRowRule() {
		return getMatrixRowAccess().getRule();
	}

org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cMatrixDefinitionAssignment_1;
Assignment getMatrixDefinitionAssignment_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cMatrixDefinitionMatrixDefinitionParserRuleCall_1_0;
RuleCall getMatrixDefinitionMatrixDefinitionParserRuleCall_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cAssignmentAssignment_2;
Assignment getAssignmentAssignment_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cAssignmentAssignmentParserRuleCall_2_0;
RuleCall getAssignmentAssignmentParserRuleCall_2_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cFormulaAssignment_3;
Assignment getFormulaAssignment_3()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cFormulaFormulaParserRuleCall_3_0;
RuleCall getFormulaFormulaParserRuleCall_3_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cHyphenMinusKeyword_1_0;
Keyword getHyphenMinusKeyword_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_3;
Group getGroup_3()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cIntervalAction_3_0;
Action getIntervalAction_3_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cOpeningBracketAssignment_3_1;
Assignment getOpeningBracketAssignment_3_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cOpeningBracketAlternatives_3_1_0;
Alternatives getOpeningBracketAlternatives_3_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cOpeningBracketLeftSquareBracketKeyword_3_1_0_0;
Keyword getOpeningBracketLeftSquareBracketKeyword_3_1_0_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cOpeningBracketLeftParenthesisKeyword_3_1_0_1;
Keyword getOpeningBracketLeftParenthesisKeyword_3_1_0_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cLeftParenthesisKeyword_3_2;
Keyword getLeftParenthesisKeyword_3_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cCeilAssignment_3_3;
Assignment getCeilAssignment_3_3()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cCeilUnaryExpressionParserRuleCall_3_3_0;
RuleCall getCeilUnaryExpressionParserRuleCall_3_3_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightParenthesisKeyword_3_4;
Keyword getRightParenthesisKeyword_3_4()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cFullStopFullStopKeyword_3_5;
Keyword getFullStopFullStopKeyword_3_5()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cLeftParenthesisKeyword_3_6;
Keyword getLeftParenthesisKeyword_3_6()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cFloorAssignment_3_7;
Assignment getFloorAssignment_3_7()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cFloorUnaryExpressionParserRuleCall_3_7_0;
RuleCall getFloorUnaryExpressionParserRuleCall_3_7_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightParenthesisKeyword_3_8;
Keyword getRightParenthesisKeyword_3_8()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cClosingBracketAssignment_3_9;
Assignment getClosingBracketAssignment_3_9()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cClosingBracketAlternatives_3_9_0;
Alternatives getClosingBracketAlternatives_3_9_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cClosingBracketRightSquareBracketKeyword_3_9_0_0;
Keyword getClosingBracketRightSquareBracketKeyword_3_9_0_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cClosingBracketRightParenthesisKeyword_3_9_0_1;
Keyword getClosingBracketRightParenthesisKeyword_3_9_0_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cFunctionAction_2_0;
Action getFunctionAction_2_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cFunctionAssignment_2_1;
Assignment getFunctionAssignment_2_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cFunctionFunctionParserRuleCall_2_1_0;
RuleCall getFunctionFunctionParserRuleCall_2_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cAdditionParserRuleCall_3_1;
RuleCall getAdditionParserRuleCall_3_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return rule;
ParserRule getRule()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup;
Group getGroup()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cNameAssignment_0;
Assignment getNameAssignment_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cNameMATH_NAMETerminalRuleCall_0_0;
RuleCall getNameMATH_NAMETerminalRuleCall_0_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cEqualsSignKeyword_1;
Keyword getEqualsSignKeyword_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cLeftCurlyBracketKeyword_2;
Keyword getLeftCurlyBracketKeyword_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_3;
Group getGroup_3()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRowsAssignment_3_0;
Assignment getRowsAssignment_3_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRowsMatrixRowParserRuleCall_3_0_0;
RuleCall getRowsMatrixRowParserRuleCall_3_0_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_3_1;
Group getGroup_3_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cCommaKeyword_3_1_0;
Keyword getCommaKeyword_3_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRowsAssignment_3_1_1;
Assignment getRowsAssignment_3_1_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRowsMatrixRowParserRuleCall_3_1_1_0;
RuleCall getRowsMatrixRowParserRuleCall_3_1_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cCommaKeyword_3_2;
Keyword getCommaKeyword_3_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightCurlyBracketKeyword_4;
Keyword getRightCurlyBracketKeyword_4()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return rule;
ParserRule getRule()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup;
Group getGroup()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cLeftCurlyBracketKeyword_0;
Keyword getLeftCurlyBracketKeyword_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_1;
Group getGroup_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cElementsAssignment_1_0;
Assignment getElementsAssignment_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cElementsFloatParserRuleCall_1_0_0;
RuleCall getElementsFloatParserRuleCall_1_0_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cGroup_1_1;
Group getGroup_1_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cCommaKeyword_1_1_0;
Keyword getCommaKeyword_1_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cElementsAssignment_1_1_1;
Assignment getElementsAssignment_1_1_1()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cElementsFloatParserRuleCall_1_1_1_0;
RuleCall getElementsFloatParserRuleCall_1_1_1_0()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cCommaKeyword_1_2;
Keyword getCommaKeyword_1_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return cRightCurlyBracketKeyword_2;
Keyword getRightCurlyBracketKeyword_2()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return (pAssignment != null) ? pAssignment : (pAssignment = new AssignmentElements());
	public ParserRule getAssignmentRule() {
		return getAssignmentAccess().getRule();
	//
	//
	//
	//	Exponent | "-" {Invert
AssignmentElements getAssignmentAccess()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return (pMatrixDefinition != null) ? pMatrixDefinition : (pMatrixDefinition = new MatrixDefinitionElements());
MatrixDefinitionElements getMatrixDefinitionAccess()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return getMatrixDefinitionAccess().getRule();
ParserRule getMatrixDefinitionRule()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return (pMatrixRow != null) ? pMatrixRow : (pMatrixRow = new MatrixRowElements());
MatrixRowElements getMatrixRowAccess()
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src-gen/org/eclipse/iee/translator/jmole/math/services/MathGrammarAccess.java
return getMatrixRowAccess().getRule();
ParserRule getMatrixRowRule()
@@ -22,18 +22,22 @@ public class StatementElements extends AbstractParserRuleElementFinder {
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final Assignment cFunctionDefinitionAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
 		private final RuleCall cFunctionDefinitionFunctionDefinitionParserRuleCall_0_0 = (RuleCall)cFunctionDefinitionAssignment_0.eContents().get(0);
-		private final Assignment cMatrixDefinitionAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
-		private final RuleCall cMatrixDefinitionMatrixDefinitionParserRuleCall_1_0 = (RuleCall)cMatrixDefinitionAssignment_1.eContents().get(0);
-		private final Assignment cAssignmentAssignment_2 = (Assignment)cAlternatives.eContents().get(2);
-		private final RuleCall cAssignmentAssignmentParserRuleCall_2_0 = (RuleCall)cAssignmentAssignment_2.eContents().get(0);
-		private final Assignment cFormulaAssignment_3 = (Assignment)cAlternatives.eContents().get(3);
-		private final RuleCall cFormulaFormulaParserRuleCall_3_0 = (RuleCall)cFormulaAssignment_3.eContents().get(0);
+		private final Assignment cVariableAssignmentAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
+		private final RuleCall cVariableAssignmentVariableAssignmentParserRuleCall_1_0 = (RuleCall)cVariableAssignmentAssignment_1.eContents().get(0);
+		private final Assignment cFormulaAssignment_2 = (Assignment)cAlternatives.eContents().get(2);
+		private final RuleCall cFormulaFormulaParserRuleCall_2_0 = (RuleCall)cFormulaAssignment_2.eContents().get(0);
+		private final Assignment cMatrixAssignmentAssignment_3 = (Assignment)cAlternatives.eContents().get(3);
+		private final RuleCall cMatrixAssignmentMatrixAssignmentParserRuleCall_3_0 = (RuleCall)cMatrixAssignmentAssignment_3.eContents().get(0);
+		private final Assignment cMatrixFormulaAssignment_4 = (Assignment)cAlternatives.eContents().get(4);
+		private final RuleCall cMatrixFormulaMatrixFormulaParserRuleCall_4_0 = (RuleCall)cMatrixFormulaAssignment_4.eContents().get(0);
 		
 		//Statement:
-		//	functionDefinition=FunctionDefinition | matrixDefinition=MatrixDefinition | assignment=Assignment | formula=Formula;
+		//	functionDefinition=FunctionDefinition | variableAssignment=VariableAssignment | formula=Formula |
+		//	matrixAssignment=MatrixAssignment | matrixFormula=MatrixFormula;
 		public ParserRule getRule() { return rule; }
 
-		//functionDefinition=FunctionDefinition | matrixDefinition=MatrixDefinition | assignment=Assignment | formula=Formula
+		//functionDefinition=FunctionDefinition | variableAssignment=VariableAssignment | formula=Formula |
+		//matrixAssignment=MatrixAssignment | matrixFormula=MatrixFormula
 		public Alternatives getAlternatives() { return cAlternatives; }
 
 		//functionDefinition=FunctionDefinition
@@ -42,35 +46,41 @@ public class StatementElements extends AbstractParserRuleElementFinder {
 		//FunctionDefinition
 		public RuleCall getFunctionDefinitionFunctionDefinitionParserRuleCall_0_0() { return cFunctionDefinitionFunctionDefinitionParserRuleCall_0_0; }
 
-		//matrixDefinition=MatrixDefinition
-		public Assignment getMatrixDefinitionAssignment_1() { return cMatrixDefinitionAssignment_1; }
-
-		//MatrixDefinition
-		public RuleCall getMatrixDefinitionMatrixDefinitionParserRuleCall_1_0() { return cMatrixDefinitionMatrixDefinitionParserRuleCall_1_0; }
+		//variableAssignment=VariableAssignment
+		public Assignment getVariableAssignmentAssignment_1() { return cVariableAssignmentAssignment_1; }
 
-		//assignment=Assignment
-		public Assignment getAssignmentAssignment_2() { return cAssignmentAssignment_2; }
-
-		//Assignment
-		public RuleCall getAssignmentAssignmentParserRuleCall_2_0() { return cAssignmentAssignmentParserRuleCall_2_0; }
+		//VariableAssignment
+		public RuleCall getVariableAssignmentVariableAssignmentParserRuleCall_1_0() { return cVariableAssignmentVariableAssignmentParserRuleCall_1_0; }
 
 		//formula=Formula
-		public Assignment getFormulaAssignment_3() { return cFormulaAssignment_3; }
+		public Assignment getFormulaAssignment_2() { return cFormulaAssignment_2; }
 
 		//Formula
-		public RuleCall getFormulaFormulaParserRuleCall_3_0() { return cFormulaFormulaParserRuleCall_3_0; }
+		public RuleCall getFormulaFormulaParserRuleCall_2_0() { return cFormulaFormulaParserRuleCall_2_0; }
+
+		//matrixAssignment=MatrixAssignment
+		public Assignment getMatrixAssignmentAssignment_3() { return cMatrixAssignmentAssignment_3; }
+
+		//MatrixAssignment
+		public RuleCall getMatrixAssignmentMatrixAssignmentParserRuleCall_3_0() { return cMatrixAssignmentMatrixAssignmentParserRuleCall_3_0; }
+
+		//matrixFormula=MatrixFormula
+		public Assignment getMatrixFormulaAssignment_4() { return cMatrixFormulaAssignment_4; }
+
+		//MatrixFormula
+		public RuleCall getMatrixFormulaMatrixFormulaParserRuleCall_4_0() { return cMatrixFormulaMatrixFormulaParserRuleCall_4_0; }
 	}
 
-	public class AssignmentElements extends AbstractParserRuleElementFinder {
-		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Assignment");
+	public class VariableAssignmentElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "VariableAssignment");
 		private final Group cGroup = (Group)rule.eContents().get(1);
 		private final Assignment cVariableAssignment_0 = (Assignment)cGroup.eContents().get(0);
 		private final RuleCall cVariableMATH_NAMETerminalRuleCall_0_0 = (RuleCall)cVariableAssignment_0.eContents().get(0);
 		private final Keyword cEqualsSignKeyword_1 = (Keyword)cGroup.eContents().get(1);
 		private final Assignment cValueAssignment_2 = (Assignment)cGroup.eContents().get(2);
 		private final RuleCall cValueFormulaParserRuleCall_2_0 = (RuleCall)cValueAssignment_2.eContents().get(0);
 		
-		//Assignment:
+		//VariableAssignment:
 		//	variable=MATH_NAME "=" value=Formula;
 		public ParserRule getRule() { return rule; }
 
@@ -126,7 +136,6 @@ public class AdditionElements extends AbstractParserRuleElementFinder {
 		private final RuleCall cRightMultiplicationParserRuleCall_1_1_2_0 = (RuleCall)cRightAssignment_1_1_2.eContents().get(0);
 		
 		//// addition/subtraction: left associative, priority 0
-		//
 		//Addition returns Expression:
 		//	Multiplication ("+" {Addition.left=current} right=Multiplication | "-" {Subtraction.left=current}
 		//	right=Multiplication)*;
@@ -194,7 +203,6 @@ public class MultiplicationElements extends AbstractParserRuleElementFinder {
 		private final RuleCall cRightUnaryExpressionParserRuleCall_1_2_2_0 = (RuleCall)cRightAssignment_1_2_2.eContents().get(0);
 		
 		//// multiplication/division, left associative, priority 1
-		//
 		//Multiplication returns Expression:
 		//	UnaryExpression ("*" {Multiplication.left=current} right=UnaryExpression | "/" {Division.left=current}
 		//	right=UnaryExpression | "%" {Modulo.left=current} right=UnaryExpression)*;
@@ -262,55 +270,34 @@ public class UnaryExpressionElements extends AbstractParserRuleElementFinder {
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final RuleCall cExponentParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
 		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
-		private final Keyword cHyphenMinusKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final Keyword cLeftParenthesisHyphenMinusKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
 		private final Action cInvertAction_1_1 = (Action)cGroup_1.eContents().get(1);
 		private final Assignment cExpressionAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
 		private final RuleCall cExpressionUnaryExpressionParserRuleCall_1_2_0 = (RuleCall)cExpressionAssignment_1_2.eContents().get(0);
+		private final Keyword cRightParenthesisKeyword_1_3 = (Keyword)cGroup_1.eContents().get(3);
 		private final Group cGroup_2 = (Group)cAlternatives.eContents().get(2);
 		private final Keyword cLeftParenthesisKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
 		private final Action cFactorialAction_2_1 = (Action)cGroup_2.eContents().get(1);
 		private final Assignment cExpressionAssignment_2_2 = (Assignment)cGroup_2.eContents().get(2);
 		private final RuleCall cExpressionUnaryExpressionParserRuleCall_2_2_0 = (RuleCall)cExpressionAssignment_2_2.eContents().get(0);
 		private final Keyword cRightParenthesisExclamationMarkKeyword_2_3 = (Keyword)cGroup_2.eContents().get(3);
-		private final Group cGroup_3 = (Group)cAlternatives.eContents().get(3);
-		private final Action cIntervalAction_3_0 = (Action)cGroup_3.eContents().get(0);
-		private final Assignment cOpeningBracketAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
-		private final Alternatives cOpeningBracketAlternatives_3_1_0 = (Alternatives)cOpeningBracketAssignment_3_1.eContents().get(0);
-		private final Keyword cOpeningBracketLeftSquareBracketKeyword_3_1_0_0 = (Keyword)cOpeningBracketAlternatives_3_1_0.eContents().get(0);
-		private final Keyword cOpeningBracketLeftParenthesisKeyword_3_1_0_1 = (Keyword)cOpeningBracketAlternatives_3_1_0.eContents().get(1);
-		private final Keyword cLeftParenthesisKeyword_3_2 = (Keyword)cGroup_3.eContents().get(2);
-		private final Assignment cCeilAssignment_3_3 = (Assignment)cGroup_3.eContents().get(3);
-		private final RuleCall cCeilUnaryExpressionParserRuleCall_3_3_0 = (RuleCall)cCeilAssignment_3_3.eContents().get(0);
-		private final Keyword cRightParenthesisKeyword_3_4 = (Keyword)cGroup_3.eContents().get(4);
-		private final Keyword cFullStopFullStopKeyword_3_5 = (Keyword)cGroup_3.eContents().get(5);
-		private final Keyword cLeftParenthesisKeyword_3_6 = (Keyword)cGroup_3.eContents().get(6);
-		private final Assignment cFloorAssignment_3_7 = (Assignment)cGroup_3.eContents().get(7);
-		private final RuleCall cFloorUnaryExpressionParserRuleCall_3_7_0 = (RuleCall)cFloorAssignment_3_7.eContents().get(0);
-		private final Keyword cRightParenthesisKeyword_3_8 = (Keyword)cGroup_3.eContents().get(8);
-		private final Assignment cClosingBracketAssignment_3_9 = (Assignment)cGroup_3.eContents().get(9);
-		private final Alternatives cClosingBracketAlternatives_3_9_0 = (Alternatives)cClosingBracketAssignment_3_9.eContents().get(0);
-		private final Keyword cClosingBracketRightSquareBracketKeyword_3_9_0_0 = (Keyword)cClosingBracketAlternatives_3_9_0.eContents().get(0);
-		private final Keyword cClosingBracketRightParenthesisKeyword_3_9_0_1 = (Keyword)cClosingBracketAlternatives_3_9_0.eContents().get(1);
 		
 		//// Unary operators: right associative, priority 2
-		//
 		//UnaryExpression returns Expression:
-		//	Exponent | "-" {Invert} expression=UnaryExpression | "(" {Factorial} expression=UnaryExpression ")!" | {Interval}
-		//	openingBracket=("[" | "(") "(" ceil=UnaryExpression ")" ".." "(" floor=UnaryExpression ")" closingBracket=("]" | ")");
+		//	Exponent | "(-" {Invert} expression=UnaryExpression ")" | "(" {Factorial} expression=UnaryExpression ")!";
 		public ParserRule getRule() { return rule; }
 
-		//Exponent | "-" {Invert} expression=UnaryExpression | "(" {Factorial} expression=UnaryExpression ")!" | {Interval}
-		//openingBracket=("[" | "(") "(" ceil=UnaryExpression ")" ".." "(" floor=UnaryExpression ")" closingBracket=("]" | ")")
+		//Exponent | "(-" {Invert} expression=UnaryExpression ")" | "(" {Factorial} expression=UnaryExpression ")!"
 		public Alternatives getAlternatives() { return cAlternatives; }
 
 		//Exponent
 		public RuleCall getExponentParserRuleCall_0() { return cExponentParserRuleCall_0; }
 
-		//"-" {Invert} expression=UnaryExpression
+		//"(-" {Invert} expression=UnaryExpression ")"
 		public Group getGroup_1() { return cGroup_1; }
 
-		//"-"
-		public Keyword getHyphenMinusKeyword_1_0() { return cHyphenMinusKeyword_1_0; }
+		//"(-"
+		public Keyword getLeftParenthesisHyphenMinusKeyword_1_0() { return cLeftParenthesisHyphenMinusKeyword_1_0; }
 
 		//{Invert}
 		public Action getInvertAction_1_1() { return cInvertAction_1_1; }
@@ -321,6 +308,9 @@ public class UnaryExpressionElements extends AbstractParserRuleElementFinder {
 		//UnaryExpression
 		public RuleCall getExpressionUnaryExpressionParserRuleCall_1_2_0() { return cExpressionUnaryExpressionParserRuleCall_1_2_0; }
 
+		//")"
+		public Keyword getRightParenthesisKeyword_1_3() { return cRightParenthesisKeyword_1_3; }
+
 		//"(" {Factorial} expression=UnaryExpression ")!"
 		public Group getGroup_2() { return cGroup_2; }
 
@@ -338,64 +328,6 @@ public class UnaryExpressionElements extends AbstractParserRuleElementFinder {
 
 		//")!"
 		public Keyword getRightParenthesisExclamationMarkKeyword_2_3() { return cRightParenthesisExclamationMarkKeyword_2_3; }
-
-		//{Interval} openingBracket=("[" | "(") "(" ceil=UnaryExpression ")" ".." "(" floor=UnaryExpression ")"
-		//closingBracket=("]" | ")")
-		public Group getGroup_3() { return cGroup_3; }
-
-		//{Interval}
-		public Action getIntervalAction_3_0() { return cIntervalAction_3_0; }
-
-		//openingBracket=("[" | "(")
-		public Assignment getOpeningBracketAssignment_3_1() { return cOpeningBracketAssignment_3_1; }
-
-		//"[" | "("
-		public Alternatives getOpeningBracketAlternatives_3_1_0() { return cOpeningBracketAlternatives_3_1_0; }
-
-		//"["
-		public Keyword getOpeningBracketLeftSquareBracketKeyword_3_1_0_0() { return cOpeningBracketLeftSquareBracketKeyword_3_1_0_0; }
-
-		//"("
-		public Keyword getOpeningBracketLeftParenthesisKeyword_3_1_0_1() { return cOpeningBracketLeftParenthesisKeyword_3_1_0_1; }
-
-		//"("
-		public Keyword getLeftParenthesisKeyword_3_2() { return cLeftParenthesisKeyword_3_2; }
-
-		//ceil=UnaryExpression
-		public Assignment getCeilAssignment_3_3() { return cCeilAssignment_3_3; }
-
-		//UnaryExpression
-		public RuleCall getCeilUnaryExpressionParserRuleCall_3_3_0() { return cCeilUnaryExpressionParserRuleCall_3_3_0; }
-
-		//")"
-		public Keyword getRightParenthesisKeyword_3_4() { return cRightParenthesisKeyword_3_4; }
-
-		//".."
-		public Keyword getFullStopFullStopKeyword_3_5() { return cFullStopFullStopKeyword_3_5; }
-
-		//"("
-		public Keyword getLeftParenthesisKeyword_3_6() { return cLeftParenthesisKeyword_3_6; }
-
-		//floor=UnaryExpression
-		public Assignment getFloorAssignment_3_7() { return cFloorAssignment_3_7; }
-
-		//UnaryExpression
-		public RuleCall getFloorUnaryExpressionParserRuleCall_3_7_0() { return cFloorUnaryExpressionParserRuleCall_3_7_0; }
-
-		//")"
-		public Keyword getRightParenthesisKeyword_3_8() { return cRightParenthesisKeyword_3_8; }
-
-		//closingBracket=("]" | ")")
-		public Assignment getClosingBracketAssignment_3_9() { return cClosingBracketAssignment_3_9; }
-
-		//"]" | ")"
-		public Alternatives getClosingBracketAlternatives_3_9_0() { return cClosingBracketAlternatives_3_9_0; }
-
-		//"]"
-		public Keyword getClosingBracketRightSquareBracketKeyword_3_9_0_0() { return cClosingBracketRightSquareBracketKeyword_3_9_0_0; }
-
-		//")"
-		public Keyword getClosingBracketRightParenthesisKeyword_3_9_0_1() { return cClosingBracketRightParenthesisKeyword_3_9_0_1; }
 	}
 
 	public class ExponentElements extends AbstractParserRuleElementFinder {
@@ -409,7 +341,6 @@ public class ExponentElements extends AbstractParserRuleElementFinder {
 		private final RuleCall cRightPrimaryParserRuleCall_1_2_0 = (RuleCall)cRightAssignment_1_2.eContents().get(0);
 		
 		//// exponentiation: right associative, priority 3
-		//
 		//Exponent returns Expression:
 		//	Primary ({Exponent.left=current} "^" right=Primary)?;
 		public ParserRule getRule() { return rule; }
@@ -448,19 +379,33 @@ public class PrimaryElements extends AbstractParserRuleElementFinder {
 		private final Assignment cValueAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
 		private final RuleCall cValueFloatParserRuleCall_1_1_0 = (RuleCall)cValueAssignment_1_1.eContents().get(0);
 		private final Group cGroup_2 = (Group)cAlternatives.eContents().get(2);
-		private final Action cFunctionAction_2_0 = (Action)cGroup_2.eContents().get(0);
-		private final Assignment cFunctionAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
-		private final RuleCall cFunctionFunctionParserRuleCall_2_1_0 = (RuleCall)cFunctionAssignment_2_1.eContents().get(0);
+		private final Action cMatrixElementAction_2_0 = (Action)cGroup_2.eContents().get(0);
+		private final Assignment cElementAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
+		private final RuleCall cElementMATH_NAMETerminalRuleCall_2_1_0 = (RuleCall)cElementAssignment_2_1.eContents().get(0);
+		private final Keyword cLeftSquareBracketKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
+		private final Assignment cRowAssignment_2_3 = (Assignment)cGroup_2.eContents().get(3);
+		private final RuleCall cRowINTTerminalRuleCall_2_3_0 = (RuleCall)cRowAssignment_2_3.eContents().get(0);
+		private final Keyword cRightSquareBracketKeyword_2_4 = (Keyword)cGroup_2.eContents().get(4);
+		private final Keyword cLeftSquareBracketKeyword_2_5 = (Keyword)cGroup_2.eContents().get(5);
+		private final Assignment cColumnAssignment_2_6 = (Assignment)cGroup_2.eContents().get(6);
+		private final RuleCall cColumnINTTerminalRuleCall_2_6_0 = (RuleCall)cColumnAssignment_2_6.eContents().get(0);
+		private final Keyword cRightSquareBracketKeyword_2_7 = (Keyword)cGroup_2.eContents().get(7);
 		private final Group cGroup_3 = (Group)cAlternatives.eContents().get(3);
-		private final Keyword cLeftParenthesisKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
-		private final RuleCall cAdditionParserRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
-		private final Keyword cRightParenthesisKeyword_3_2 = (Keyword)cGroup_3.eContents().get(2);
+		private final Action cFunctionAction_3_0 = (Action)cGroup_3.eContents().get(0);
+		private final Assignment cFunctionAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
+		private final RuleCall cFunctionFunctionParserRuleCall_3_1_0 = (RuleCall)cFunctionAssignment_3_1.eContents().get(0);
+		private final Group cGroup_4 = (Group)cAlternatives.eContents().get(4);
+		private final Keyword cLeftParenthesisKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
+		private final RuleCall cAdditionParserRuleCall_4_1 = (RuleCall)cGroup_4.eContents().get(1);
+		private final Keyword cRightParenthesisKeyword_4_2 = (Keyword)cGroup_4.eContents().get(2);
 		
 		//Primary returns Expression:
-		//	{Variable} name=MATH_NAME | {Float} value=Float | {Function} function=Function | "(" Addition ")";
+		//	{Variable} name=MATH_NAME | {Float} value=Float | {MatrixElement} element=MATH_NAME "[" row=INT "]" "[" column=INT "]"
+		//	| {Function} function=Function | "(" Addition ")";
 		public ParserRule getRule() { return rule; }
 
-		//{Variable} name=MATH_NAME | {Float} value=Float | {Function} function=Function | "(" Addition ")"
+		//{Variable} name=MATH_NAME | {Float} value=Float | {MatrixElement} element=MATH_NAME "[" row=INT "]" "[" column=INT "]" |
+		//{Function} function=Function | "(" Addition ")"
 		public Alternatives getAlternatives() { return cAlternatives; }
 
 		//{Variable} name=MATH_NAME
@@ -487,26 +432,442 @@ public class PrimaryElements extends AbstractParserRuleElementFinder {
 		//Float
 		public RuleCall getValueFloatParserRuleCall_1_1_0() { return cValueFloatParserRuleCall_1_1_0; }
 
-		//{Function} function=Function
+		//{MatrixElement} element=MATH_NAME "[" row=INT "]" "[" column=INT "]"
 		public Group getGroup_2() { return cGroup_2; }
 
+		//{MatrixElement}
+		public Action getMatrixElementAction_2_0() { return cMatrixElementAction_2_0; }
+
+		//element=MATH_NAME
+		public Assignment getElementAssignment_2_1() { return cElementAssignment_2_1; }
+
+		//MATH_NAME
+		public RuleCall getElementMATH_NAMETerminalRuleCall_2_1_0() { return cElementMATH_NAMETerminalRuleCall_2_1_0; }
+
+		//"["
+		public Keyword getLeftSquareBracketKeyword_2_2() { return cLeftSquareBracketKeyword_2_2; }
+
+		//row=INT
+		public Assignment getRowAssignment_2_3() { return cRowAssignment_2_3; }
+
+		//INT
+		public RuleCall getRowINTTerminalRuleCall_2_3_0() { return cRowINTTerminalRuleCall_2_3_0; }
+
+		//"]"
+		public Keyword getRightSquareBracketKeyword_2_4() { return cRightSquareBracketKeyword_2_4; }
+
+		//"["
+		public Keyword getLeftSquareBracketKeyword_2_5() { return cLeftSquareBracketKeyword_2_5; }
+
+		//column=INT
+		public Assignment getColumnAssignment_2_6() { return cColumnAssignment_2_6; }
+
+		//INT
+		public RuleCall getColumnINTTerminalRuleCall_2_6_0() { return cColumnINTTerminalRuleCall_2_6_0; }
+
+		//"]"
+		public Keyword getRightSquareBracketKeyword_2_7() { return cRightSquareBracketKeyword_2_7; }
+
+		//{Function} function=Function
+		public Group getGroup_3() { return cGroup_3; }
+
 		//{Function}
-		public Action getFunctionAction_2_0() { return cFunctionAction_2_0; }
+		public Action getFunctionAction_3_0() { return cFunctionAction_3_0; }
 
 		//function=Function
-		public Assignment getFunctionAssignment_2_1() { return cFunctionAssignment_2_1; }
+		public Assignment getFunctionAssignment_3_1() { return cFunctionAssignment_3_1; }
 
 		//Function
-		public RuleCall getFunctionFunctionParserRuleCall_2_1_0() { return cFunctionFunctionParserRuleCall_2_1_0; }
+		public RuleCall getFunctionFunctionParserRuleCall_3_1_0() { return cFunctionFunctionParserRuleCall_3_1_0; }
 
 		//"(" Addition ")"
+		public Group getGroup_4() { return cGroup_4; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_4_0() { return cLeftParenthesisKeyword_4_0; }
+
+		//Addition
+		public RuleCall getAdditionParserRuleCall_4_1() { return cAdditionParserRuleCall_4_1; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_4_2() { return cRightParenthesisKeyword_4_2; }
+	}
+
+	public class MatrixElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Matrix");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cLeftCurlyBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Assignment cRowsAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
+		private final RuleCall cRowsMatrixRowParserRuleCall_1_0_0 = (RuleCall)cRowsAssignment_1_0.eContents().get(0);
+		private final Group cGroup_1_1 = (Group)cGroup_1.eContents().get(1);
+		private final Keyword cCommaKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
+		private final Assignment cRowsAssignment_1_1_1 = (Assignment)cGroup_1_1.eContents().get(1);
+		private final RuleCall cRowsMatrixRowParserRuleCall_1_1_1_0 = (RuleCall)cRowsAssignment_1_1_1.eContents().get(0);
+		private final Keyword cCommaKeyword_1_2 = (Keyword)cGroup_1.eContents().get(2);
+		private final Keyword cRightCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		
+		//Matrix:
+		//	"{" (rows+=MatrixRow ("," rows+=MatrixRow)* ","?)? "}";
+		public ParserRule getRule() { return rule; }
+
+		//"{" (rows+=MatrixRow ("," rows+=MatrixRow)* ","?)? "}"
+		public Group getGroup() { return cGroup; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_0() { return cLeftCurlyBracketKeyword_0; }
+
+		//(rows+=MatrixRow ("," rows+=MatrixRow)* ","?)?
+		public Group getGroup_1() { return cGroup_1; }
+
+		//rows+=MatrixRow
+		public Assignment getRowsAssignment_1_0() { return cRowsAssignment_1_0; }
+
+		//MatrixRow
+		public RuleCall getRowsMatrixRowParserRuleCall_1_0_0() { return cRowsMatrixRowParserRuleCall_1_0_0; }
+
+		//("," rows+=MatrixRow)*
+		public Group getGroup_1_1() { return cGroup_1_1; }
+
+		//","
+		public Keyword getCommaKeyword_1_1_0() { return cCommaKeyword_1_1_0; }
+
+		//rows+=MatrixRow
+		public Assignment getRowsAssignment_1_1_1() { return cRowsAssignment_1_1_1; }
+
+		//MatrixRow
+		public RuleCall getRowsMatrixRowParserRuleCall_1_1_1_0() { return cRowsMatrixRowParserRuleCall_1_1_1_0; }
+
+		//","?
+		public Keyword getCommaKeyword_1_2() { return cCommaKeyword_1_2; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_2() { return cRightCurlyBracketKeyword_2; }
+	}
+
+	public class MatrixRowElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MatrixRow");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cLeftCurlyBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Assignment cElementsAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
+		private final RuleCall cElementsFloatParserRuleCall_1_0_0 = (RuleCall)cElementsAssignment_1_0.eContents().get(0);
+		private final Group cGroup_1_1 = (Group)cGroup_1.eContents().get(1);
+		private final Keyword cCommaKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
+		private final Assignment cElementsAssignment_1_1_1 = (Assignment)cGroup_1_1.eContents().get(1);
+		private final RuleCall cElementsFloatParserRuleCall_1_1_1_0 = (RuleCall)cElementsAssignment_1_1_1.eContents().get(0);
+		private final Keyword cCommaKeyword_1_2 = (Keyword)cGroup_1.eContents().get(2);
+		private final Keyword cRightCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		
+		//MatrixRow:
+		//	"{" (elements+=Float ("," elements+=Float)* ","?)? "}";
+		public ParserRule getRule() { return rule; }
+
+		//"{" (elements+=Float ("," elements+=Float)* ","?)? "}"
+		public Group getGroup() { return cGroup; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_0() { return cLeftCurlyBracketKeyword_0; }
+
+		//(elements+=Float ("," elements+=Float)* ","?)?
+		public Group getGroup_1() { return cGroup_1; }
+
+		//elements+=Float
+		public Assignment getElementsAssignment_1_0() { return cElementsAssignment_1_0; }
+
+		//Float
+		public RuleCall getElementsFloatParserRuleCall_1_0_0() { return cElementsFloatParserRuleCall_1_0_0; }
+
+		//("," elements+=Float)*
+		public Group getGroup_1_1() { return cGroup_1_1; }
+
+		//","
+		public Keyword getCommaKeyword_1_1_0() { return cCommaKeyword_1_1_0; }
+
+		//elements+=Float
+		public Assignment getElementsAssignment_1_1_1() { return cElementsAssignment_1_1_1; }
+
+		//Float
+		public RuleCall getElementsFloatParserRuleCall_1_1_1_0() { return cElementsFloatParserRuleCall_1_1_1_0; }
+
+		//","?
+		public Keyword getCommaKeyword_1_2() { return cCommaKeyword_1_2; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_2() { return cRightCurlyBracketKeyword_2; }
+	}
+
+	public class MatrixAssignmentElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MatrixAssignment");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cLeftSquareBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cVariableAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cVariableMATH_NAMETerminalRuleCall_1_0 = (RuleCall)cVariableAssignment_1.eContents().get(0);
+		private final Keyword cRightSquareBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Keyword cEqualsSignKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Assignment cValueAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final RuleCall cValueMatrixFormulaParserRuleCall_4_0 = (RuleCall)cValueAssignment_4.eContents().get(0);
+		
+		//MatrixAssignment:
+		//	"[" variable=MATH_NAME "]" "=" value=MatrixFormula;
+		public ParserRule getRule() { return rule; }
+
+		//"[" variable=MATH_NAME "]" "=" value=MatrixFormula
+		public Group getGroup() { return cGroup; }
+
+		//"["
+		public Keyword getLeftSquareBracketKeyword_0() { return cLeftSquareBracketKeyword_0; }
+
+		//variable=MATH_NAME
+		public Assignment getVariableAssignment_1() { return cVariableAssignment_1; }
+
+		//MATH_NAME
+		public RuleCall getVariableMATH_NAMETerminalRuleCall_1_0() { return cVariableMATH_NAMETerminalRuleCall_1_0; }
+
+		//"]"
+		public Keyword getRightSquareBracketKeyword_2() { return cRightSquareBracketKeyword_2; }
+
+		//"="
+		public Keyword getEqualsSignKeyword_3() { return cEqualsSignKeyword_3; }
+
+		//value=MatrixFormula
+		public Assignment getValueAssignment_4() { return cValueAssignment_4; }
+
+		//MatrixFormula
+		public RuleCall getValueMatrixFormulaParserRuleCall_4_0() { return cValueMatrixFormulaParserRuleCall_4_0; }
+	}
+
+	public class MatrixFormulaElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MatrixFormula");
+		private final Assignment cExpressionAssignment = (Assignment)rule.eContents().get(1);
+		private final RuleCall cExpressionMatrixAdditionParserRuleCall_0 = (RuleCall)cExpressionAssignment.eContents().get(0);
+		
+		//MatrixFormula:
+		//	expression=MatrixAddition;
+		public ParserRule getRule() { return rule; }
+
+		//expression=MatrixAddition
+		public Assignment getExpressionAssignment() { return cExpressionAssignment; }
+
+		//MatrixAddition
+		public RuleCall getExpressionMatrixAdditionParserRuleCall_0() { return cExpressionMatrixAdditionParserRuleCall_0; }
+	}
+
+	public class MatrixAdditionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MatrixAddition");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cMatrixMultiplicationParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
+		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
+		private final Keyword cPlusSignKeyword_1_0_0 = (Keyword)cGroup_1_0.eContents().get(0);
+		private final Action cMatrixAdditionLeftAction_1_0_1 = (Action)cGroup_1_0.eContents().get(1);
+		private final Assignment cRightAssignment_1_0_2 = (Assignment)cGroup_1_0.eContents().get(2);
+		private final RuleCall cRightMatrixMultiplicationParserRuleCall_1_0_2_0 = (RuleCall)cRightAssignment_1_0_2.eContents().get(0);
+		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
+		private final Keyword cHyphenMinusKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
+		private final Action cMatrixSubtractionLeftAction_1_1_1 = (Action)cGroup_1_1.eContents().get(1);
+		private final Assignment cRightAssignment_1_1_2 = (Assignment)cGroup_1_1.eContents().get(2);
+		private final RuleCall cRightMatrixMultiplicationParserRuleCall_1_1_2_0 = (RuleCall)cRightAssignment_1_1_2.eContents().get(0);
+		
+		//MatrixAddition returns MatrixExpression:
+		//	MatrixMultiplication ("+" {MatrixAddition.left=current} right=MatrixMultiplication | "-"
+		//	{MatrixSubtraction.left=current} right=MatrixMultiplication)*;
+		public ParserRule getRule() { return rule; }
+
+		//MatrixMultiplication ("+" {MatrixAddition.left=current} right=MatrixMultiplication | "-"
+		//{MatrixSubtraction.left=current} right=MatrixMultiplication)*
+		public Group getGroup() { return cGroup; }
+
+		//MatrixMultiplication
+		public RuleCall getMatrixMultiplicationParserRuleCall_0() { return cMatrixMultiplicationParserRuleCall_0; }
+
+		//("+" {MatrixAddition.left=current} right=MatrixMultiplication | "-" {MatrixSubtraction.left=current}
+		//right=MatrixMultiplication)*
+		public Alternatives getAlternatives_1() { return cAlternatives_1; }
+
+		//"+" {MatrixAddition.left=current} right=MatrixMultiplication
+		public Group getGroup_1_0() { return cGroup_1_0; }
+
+		//"+"
+		public Keyword getPlusSignKeyword_1_0_0() { return cPlusSignKeyword_1_0_0; }
+
+		//{MatrixAddition.left=current}
+		public Action getMatrixAdditionLeftAction_1_0_1() { return cMatrixAdditionLeftAction_1_0_1; }
+
+		//right=MatrixMultiplication
+		public Assignment getRightAssignment_1_0_2() { return cRightAssignment_1_0_2; }
+
+		//MatrixMultiplication
+		public RuleCall getRightMatrixMultiplicationParserRuleCall_1_0_2_0() { return cRightMatrixMultiplicationParserRuleCall_1_0_2_0; }
+
+		//"-" {MatrixSubtraction.left=current} right=MatrixMultiplication
+		public Group getGroup_1_1() { return cGroup_1_1; }
+
+		//"-"
+		public Keyword getHyphenMinusKeyword_1_1_0() { return cHyphenMinusKeyword_1_1_0; }
+
+		//{MatrixSubtraction.left=current}
+		public Action getMatrixSubtractionLeftAction_1_1_1() { return cMatrixSubtractionLeftAction_1_1_1; }
+
+		//right=MatrixMultiplication
+		public Assignment getRightAssignment_1_1_2() { return cRightAssignment_1_1_2; }
+
+		//MatrixMultiplication
+		public RuleCall getRightMatrixMultiplicationParserRuleCall_1_1_2_0() { return cRightMatrixMultiplicationParserRuleCall_1_1_2_0; }
+	}
+
+	public class MatrixMultiplicationElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MatrixMultiplication");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final RuleCall cPrimaryMatrixParserRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
+		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
+		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
+		private final Keyword cAsteriskKeyword_1_0_0 = (Keyword)cGroup_1_0.eContents().get(0);
+		private final Action cMatrixMultiplicationLeftAction_1_0_1 = (Action)cGroup_1_0.eContents().get(1);
+		private final Assignment cRightMatrixAssignment_1_0_2 = (Assignment)cGroup_1_0.eContents().get(2);
+		private final RuleCall cRightMatrixPrimaryMatrixParserRuleCall_1_0_2_0 = (RuleCall)cRightMatrixAssignment_1_0_2.eContents().get(0);
+		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
+		private final Keyword cAsteriskKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
+		private final Action cMatrixMultiplicationLeftAction_1_1_1 = (Action)cGroup_1_1.eContents().get(1);
+		private final Assignment cRightScalarAssignment_1_1_2 = (Assignment)cGroup_1_1.eContents().get(2);
+		private final RuleCall cRightScalarFormulaParserRuleCall_1_1_2_0 = (RuleCall)cRightScalarAssignment_1_1_2.eContents().get(0);
+		
+		//MatrixMultiplication returns MatrixExpression:
+		//	PrimaryMatrix ("*" {MatrixMultiplication.left=current} rightMatrix=PrimaryMatrix | "*"
+		//	{MatrixMultiplication.left=current} rightScalar=Formula)*;
+		public ParserRule getRule() { return rule; }
+
+		//PrimaryMatrix ("*" {MatrixMultiplication.left=current} rightMatrix=PrimaryMatrix | "*"
+		//{MatrixMultiplication.left=current} rightScalar=Formula)*
+		public Group getGroup() { return cGroup; }
+
+		//PrimaryMatrix
+		public RuleCall getPrimaryMatrixParserRuleCall_0() { return cPrimaryMatrixParserRuleCall_0; }
+
+		//("*" {MatrixMultiplication.left=current} rightMatrix=PrimaryMatrix | "*" {MatrixMultiplication.left=current}
+		//rightScalar=Formula)*
+		public Alternatives getAlternatives_1() { return cAlternatives_1; }
+
+		//"*" {MatrixMultiplication.left=current} rightMatrix=PrimaryMatrix
+		public Group getGroup_1_0() { return cGroup_1_0; }
+
+		//"*"
+		public Keyword getAsteriskKeyword_1_0_0() { return cAsteriskKeyword_1_0_0; }
+
+		//{MatrixMultiplication.left=current}
+		public Action getMatrixMultiplicationLeftAction_1_0_1() { return cMatrixMultiplicationLeftAction_1_0_1; }
+
+		//rightMatrix=PrimaryMatrix
+		public Assignment getRightMatrixAssignment_1_0_2() { return cRightMatrixAssignment_1_0_2; }
+
+		//PrimaryMatrix
+		public RuleCall getRightMatrixPrimaryMatrixParserRuleCall_1_0_2_0() { return cRightMatrixPrimaryMatrixParserRuleCall_1_0_2_0; }
+
+		//"*" {MatrixMultiplication.left=current} rightScalar=Formula
+		public Group getGroup_1_1() { return cGroup_1_1; }
+
+		//"*"
+		public Keyword getAsteriskKeyword_1_1_0() { return cAsteriskKeyword_1_1_0; }
+
+		//{MatrixMultiplication.left=current}
+		public Action getMatrixMultiplicationLeftAction_1_1_1() { return cMatrixMultiplicationLeftAction_1_1_1; }
+
+		//rightScalar=Formula
+		public Assignment getRightScalarAssignment_1_1_2() { return cRightScalarAssignment_1_1_2; }
+
+		//Formula
+		public RuleCall getRightScalarFormulaParserRuleCall_1_1_2_0() { return cRightScalarFormulaParserRuleCall_1_1_2_0; }
+	}
+
+	public class PrimaryMatrixElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "PrimaryMatrix");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
+		private final Action cNewMatrixAction_0_0 = (Action)cGroup_0.eContents().get(0);
+		private final Assignment cMatrixAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
+		private final RuleCall cMatrixMatrixParserRuleCall_0_1_0 = (RuleCall)cMatrixAssignment_0_1.eContents().get(0);
+		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
+		private final Action cTransposeMatrixAction_1_0 = (Action)cGroup_1.eContents().get(0);
+		private final Keyword cLeftSquareBracketKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
+		private final Assignment cNameAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
+		private final RuleCall cNameMATH_NAMETerminalRuleCall_1_2_0 = (RuleCall)cNameAssignment_1_2.eContents().get(0);
+		private final Keyword cTKeyword_1_3 = (Keyword)cGroup_1.eContents().get(3);
+		private final Group cGroup_2 = (Group)cAlternatives.eContents().get(2);
+		private final Action cMatrixVariableAction_2_0 = (Action)cGroup_2.eContents().get(0);
+		private final Keyword cLeftSquareBracketKeyword_2_1 = (Keyword)cGroup_2.eContents().get(1);
+		private final Assignment cNameAssignment_2_2 = (Assignment)cGroup_2.eContents().get(2);
+		private final RuleCall cNameMATH_NAMETerminalRuleCall_2_2_0 = (RuleCall)cNameAssignment_2_2.eContents().get(0);
+		private final Keyword cRightSquareBracketKeyword_2_3 = (Keyword)cGroup_2.eContents().get(3);
+		private final Group cGroup_3 = (Group)cAlternatives.eContents().get(3);
+		private final Keyword cLeftParenthesisKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
+		private final RuleCall cMatrixAdditionParserRuleCall_3_1 = (RuleCall)cGroup_3.eContents().get(1);
+		private final Keyword cRightParenthesisKeyword_3_2 = (Keyword)cGroup_3.eContents().get(2);
+		
+		//PrimaryMatrix returns MatrixExpression:
+		//	{NewMatrix} matrix=Matrix | {TransposeMatrix} "[" name=MATH_NAME "]^T" | {MatrixVariable} "[" name=MATH_NAME "]" | "("
+		//	MatrixAddition ")";
+		public ParserRule getRule() { return rule; }
+
+		//{NewMatrix} matrix=Matrix | {TransposeMatrix} "[" name=MATH_NAME "]^T" | {MatrixVariable} "[" name=MATH_NAME "]" | "("
+		//MatrixAddition ")"
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//{NewMatrix} matrix=Matrix
+		public Group getGroup_0() { return cGroup_0; }
+
+		//{NewMatrix}
+		public Action getNewMatrixAction_0_0() { return cNewMatrixAction_0_0; }
+
+		//matrix=Matrix
+		public Assignment getMatrixAssignment_0_1() { return cMatrixAssignment_0_1; }
+
+		//Matrix
+		public RuleCall getMatrixMatrixParserRuleCall_0_1_0() { return cMatrixMatrixParserRuleCall_0_1_0; }
+
+		//{TransposeMatrix} "[" name=MATH_NAME "]^T"
+		public Group getGroup_1() { return cGroup_1; }
+
+		//{TransposeMatrix}
+		public Action getTransposeMatrixAction_1_0() { return cTransposeMatrixAction_1_0; }
+
+		//"["
+		public Keyword getLeftSquareBracketKeyword_1_1() { return cLeftSquareBracketKeyword_1_1; }
+
+		//name=MATH_NAME
+		public Assignment getNameAssignment_1_2() { return cNameAssignment_1_2; }
+
+		//MATH_NAME
+		public RuleCall getNameMATH_NAMETerminalRuleCall_1_2_0() { return cNameMATH_NAMETerminalRuleCall_1_2_0; }
+
+		//"]^T"
+		public Keyword getTKeyword_1_3() { return cTKeyword_1_3; }
+
+		//{MatrixVariable} "[" name=MATH_NAME "]"
+		public Group getGroup_2() { return cGroup_2; }
+
+		//{MatrixVariable}
+		public Action getMatrixVariableAction_2_0() { return cMatrixVariableAction_2_0; }
+
+		//"["
+		public Keyword getLeftSquareBracketKeyword_2_1() { return cLeftSquareBracketKeyword_2_1; }
+
+		//name=MATH_NAME
+		public Assignment getNameAssignment_2_2() { return cNameAssignment_2_2; }
+
+		//MATH_NAME
+		public RuleCall getNameMATH_NAMETerminalRuleCall_2_2_0() { return cNameMATH_NAMETerminalRuleCall_2_2_0; }
+
+		//"]"
+		public Keyword getRightSquareBracketKeyword_2_3() { return cRightSquareBracketKeyword_2_3; }
+
+		//"(" MatrixAddition ")"
 		public Group getGroup_3() { return cGroup_3; }
 
 		//"("
 		public Keyword getLeftParenthesisKeyword_3_0() { return cLeftParenthesisKeyword_3_0; }
 
-		//Addition
-		public RuleCall getAdditionParserRuleCall_3_1() { return cAdditionParserRuleCall_3_1; }
+		//MatrixAddition
+		public RuleCall getMatrixAdditionParserRuleCall_3_1() { return cMatrixAdditionParserRuleCall_3_1; }
 
 		//")"
 		public Keyword getRightParenthesisKeyword_3_2() { return cRightParenthesisKeyword_3_2; }
@@ -655,137 +1016,26 @@ public class FunctionDefinitionElements extends AbstractParserRuleElementFinder
 		//Formula
 		public RuleCall getFormulaFormulaParserRuleCall_2_0() { return cFormulaFormulaParserRuleCall_2_0; }
 	}
-
-	public class MatrixDefinitionElements extends AbstractParserRuleElementFinder {
-		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MatrixDefinition");
-		private final Group cGroup = (Group)rule.eContents().get(1);
-		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
-		private final RuleCall cNameMATH_NAMETerminalRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
-		private final Keyword cEqualsSignKeyword_1 = (Keyword)cGroup.eContents().get(1);
-		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
-		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
-		private final Assignment cRowsAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
-		private final RuleCall cRowsMatrixRowParserRuleCall_3_0_0 = (RuleCall)cRowsAssignment_3_0.eContents().get(0);
-		private final Group cGroup_3_1 = (Group)cGroup_3.eContents().get(1);
-		private final Keyword cCommaKeyword_3_1_0 = (Keyword)cGroup_3_1.eContents().get(0);
-		private final Assignment cRowsAssignment_3_1_1 = (Assignment)cGroup_3_1.eContents().get(1);
-		private final RuleCall cRowsMatrixRowParserRuleCall_3_1_1_0 = (RuleCall)cRowsAssignment_3_1_1.eContents().get(0);
-		private final Keyword cCommaKeyword_3_2 = (Keyword)cGroup_3.eContents().get(2);
-		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
-		
-		//MatrixDefinition:
-		//	name=MATH_NAME "=" "{" (rows+=MatrixRow ("," rows+=MatrixRow)* ","?)? "}";
-		public ParserRule getRule() { return rule; }
-
-		//name=MATH_NAME "=" "{" (rows+=MatrixRow ("," rows+=MatrixRow)* ","?)? "}"
-		public Group getGroup() { return cGroup; }
-
-		//name=MATH_NAME
-		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
-
-		//MATH_NAME
-		public RuleCall getNameMATH_NAMETerminalRuleCall_0_0() { return cNameMATH_NAMETerminalRuleCall_0_0; }
-
-		//"="
-		public Keyword getEqualsSignKeyword_1() { return cEqualsSignKeyword_1; }
-
-		//"{"
-		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
-
-		//(rows+=MatrixRow ("," rows+=MatrixRow)* ","?)?
-		public Group getGroup_3() { return cGroup_3; }
-
-		//rows+=MatrixRow
-		public Assignment getRowsAssignment_3_0() { return cRowsAssignment_3_0; }
-
-		//MatrixRow
-		public RuleCall getRowsMatrixRowParserRuleCall_3_0_0() { return cRowsMatrixRowParserRuleCall_3_0_0; }
-
-		//("," rows+=MatrixRow)*
-		public Group getGroup_3_1() { return cGroup_3_1; }
-
-		//","
-		public Keyword getCommaKeyword_3_1_0() { return cCommaKeyword_3_1_0; }
-
-		//rows+=MatrixRow
-		public Assignment getRowsAssignment_3_1_1() { return cRowsAssignment_3_1_1; }
-
-		//MatrixRow
-		public RuleCall getRowsMatrixRowParserRuleCall_3_1_1_0() { return cRowsMatrixRowParserRuleCall_3_1_1_0; }
-
-		//","?
-		public Keyword getCommaKeyword_3_2() { return cCommaKeyword_3_2; }
-
-		//"}"
-		public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; }
-	}
-
-	public class MatrixRowElements extends AbstractParserRuleElementFinder {
-		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MatrixRow");
-		private final Group cGroup = (Group)rule.eContents().get(1);
-		private final Keyword cLeftCurlyBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
-		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
-		private final Assignment cElementsAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
-		private final RuleCall cElementsFloatParserRuleCall_1_0_0 = (RuleCall)cElementsAssignment_1_0.eContents().get(0);
-		private final Group cGroup_1_1 = (Group)cGroup_1.eContents().get(1);
-		private final Keyword cCommaKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
-		private final Assignment cElementsAssignment_1_1_1 = (Assignment)cGroup_1_1.eContents().get(1);
-		private final RuleCall cElementsFloatParserRuleCall_1_1_1_0 = (RuleCall)cElementsAssignment_1_1_1.eContents().get(0);
-		private final Keyword cCommaKeyword_1_2 = (Keyword)cGroup_1.eContents().get(2);
-		private final Keyword cRightCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
-		
-		//MatrixRow:
-		//	"{" (elements+=Float ("," elements+=Float)* ","?)? "}";
-		public ParserRule getRule() { return rule; }
-
-		//"{" (elements+=Float ("," elements+=Float)* ","?)? "}"
-		public Group getGroup() { return cGroup; }
-
-		//"{"
-		public Keyword getLeftCurlyBracketKeyword_0() { return cLeftCurlyBracketKeyword_0; }
-
-		//(elements+=Float ("," elements+=Float)* ","?)?
-		public Group getGroup_1() { return cGroup_1; }
-
-		//elements+=Float
-		public Assignment getElementsAssignment_1_0() { return cElementsAssignment_1_0; }
-
-		//Float
-		public RuleCall getElementsFloatParserRuleCall_1_0_0() { return cElementsFloatParserRuleCall_1_0_0; }
-
-		//("," elements+=Float)*
-		public Group getGroup_1_1() { return cGroup_1_1; }
-
-		//","
-		public Keyword getCommaKeyword_1_1_0() { return cCommaKeyword_1_1_0; }
-
-		//elements+=Float
-		public Assignment getElementsAssignment_1_1_1() { return cElementsAssignment_1_1_1; }
-
-		//Float
-		public RuleCall getElementsFloatParserRuleCall_1_1_1_0() { return cElementsFloatParserRuleCall_1_1_1_0; }
-
-		//","?
-		public Keyword getCommaKeyword_1_2() { return cCommaKeyword_1_2; }
-
-		//"}"
-		public Keyword getRightCurlyBracketKeyword_2() { return cRightCurlyBracketKeyword_2; }
-	}
 	
 	
 	private StatementElements pStatement;
-	private AssignmentElements pAssignment;
+	private VariableAssignmentElements pVariableAssignment;
 	private FormulaElements pFormula;
 	private AdditionElements pAddition;
 	private MultiplicationElements pMultiplication;
 	private UnaryExpressionElements pUnaryExpression;
 	private ExponentElements pExponent;
 	private PrimaryElements pPrimary;
+	private MatrixElements pMatrix;
+	private MatrixRowElements pMatrixRow;
+	private MatrixAssignmentElements pMatrixAssignment;
+	private MatrixFormulaElements pMatrixFormula;
+	private MatrixAdditionElements pMatrixAddition;
+	private MatrixMultiplicationElements pMatrixMultiplication;
+	private PrimaryMatrixElements pPrimaryMatrix;
 	private FloatElements pFloat;
 	private FunctionElements pFunction;
 	private FunctionDefinitionElements pFunctionDefinition;
-	private MatrixDefinitionElements pMatrixDefinition;
-	private MatrixRowElements pMatrixRow;
 	private TerminalRule tMATH_NAME;
 	
 	private final GrammarProvider grammarProvider;
@@ -810,7 +1060,8 @@ public TerminalsGrammarAccess getTerminalsGrammarAccess() {
 
 	
 	//Statement:
-	//	functionDefinition=FunctionDefinition | matrixDefinition=MatrixDefinition | assignment=Assignment | formula=Formula;
+	//	functionDefinition=FunctionDefinition | variableAssignment=VariableAssignment | formula=Formula |
+	//	matrixAssignment=MatrixAssignment | matrixFormula=MatrixFormula;
 	public StatementElements getStatementAccess() {
 		return (pStatement != null) ? pStatement : (pStatement = new StatementElements());
 	}
@@ -819,14 +1070,14 @@ public ParserRule getStatementRule() {
 		return getStatementAccess().getRule();
 	}
 
-	//Assignment:
+	//VariableAssignment:
 	//	variable=MATH_NAME "=" value=Formula;
-	public AssignmentElements getAssignmentAccess() {
-		return (pAssignment != null) ? pAssignment : (pAssignment = new AssignmentElements());
+	public VariableAssignmentElements getVariableAssignmentAccess() {
+		return (pVariableAssignment != null) ? pVariableAssignment : (pVariableAssignment = new VariableAssignmentElements());
 	}
 	
-	public ParserRule getAssignmentRule() {
-		return getAssignmentAccess().getRule();
+	public ParserRule getVariableAssignmentRule() {
+		return getVariableAssignmentAccess().getRule();
 	}
 
 	//Formula:
@@ -840,7 +1091,6 @@ public ParserRule getFormulaRule() {
 	}
 
 	//// addition/subtraction: left associative, priority 0
-	//
 	//Addition returns Expression:
 	//	Multiplication ("+" {Addition.left=current} right=Multiplication | "-" {Subtraction.left=current}
 	//	right=Multiplication)*;
@@ -853,7 +1103,6 @@ public ParserRule getAdditionRule() {
 	}
 
 	//// multiplication/division, left associative, priority 1
-	//
 	//Multiplication returns Expression:
 	//	UnaryExpression ("*" {Multiplication.left=current} right=UnaryExpression | "/" {Division.left=current}
 	//	right=UnaryExpression | "%" {Modulo.left=current} right=UnaryExpression)*;
@@ -866,10 +1115,8 @@ public ParserRule getMultiplicationRule() {
 	}
 
 	//// Unary operators: right associative, priority 2
-	//
 	//UnaryExpression returns Expression:
-	//	Exponent | "-" {Invert} expression=UnaryExpression | "(" {Factorial} expression=UnaryExpression ")!" | {Interval}
-	//	openingBracket=("[" | "(") "(" ceil=UnaryExpression ")" ".." "(" floor=UnaryExpression ")" closingBracket=("]" | ")");
+	//	Exponent | "(-" {Invert} expression=UnaryExpression ")" | "(" {Factorial} expression=UnaryExpression ")!";
 	public UnaryExpressionElements getUnaryExpressionAccess() {
 		return (pUnaryExpression != null) ? pUnaryExpression : (pUnaryExpression = new UnaryExpressionElements());
 	}
@@ -879,7 +1126,6 @@ public ParserRule getUnaryExpressionRule() {
 	}
 
 	//// exponentiation: right associative, priority 3
-	//
 	//Exponent returns Expression:
 	//	Primary ({Exponent.left=current} "^" right=Primary)?;
 	public ExponentElements getExponentAccess() {
@@ -891,7 +1137,8 @@ public ParserRule getExponentRule() {
 	}
 
 	//Primary returns Expression:
-	//	{Variable} name=MATH_NAME | {Float} value=Float | {Function} function=Function | "(" Addition ")";
+	//	{Variable} name=MATH_NAME | {Float} value=Float | {MatrixElement} element=MATH_NAME "[" row=INT "]" "[" column=INT "]"
+	//	| {Function} function=Function | "(" Addition ")";
 	public PrimaryElements getPrimaryAccess() {
 		return (pPrimary != null) ? pPrimary : (pPrimary = new PrimaryElements());
 	}
@@ -900,6 +1147,79 @@ public ParserRule getPrimaryRule() {
 		return getPrimaryAccess().getRule();
 	}
 
+	//Matrix:
+	//	"{" (rows+=MatrixRow ("," rows+=MatrixRow)* ","?)? "}";
+	public MatrixElements getMatrixAccess() {
+		return (pMatrix != null) ? pMatrix : (pMatrix = new MatrixElements());
+	}
+	
+	public ParserRule getMatrixRule() {
+		return getMatrixAccess().getRule();
+	}
+
+	//MatrixRow:
+	//	"{" (elements+=Float ("," elements+=Float)* ","?)? "}";
+	public MatrixRowElements getMatrixRowAccess() {
+		return (pMatrixRow != null) ? pMatrixRow : (pMatrixRow = new MatrixRowElements());
+	}
+	
+	public ParserRule getMatrixRowRule() {
+		return getMatrixRowAccess().getRule();
+	}
+
+	//MatrixAssignment:
+	//	"[" variable=MATH_NAME "]" "=" value=MatrixFormula;
+	public MatrixAssignmentElements getMatrixAssignmentAccess() {
+		return (pMatrixAssignment != null) ? pMatrixAssignment : (pMatrixAssignment = new MatrixAssignmentElements());
+	}
+	
+	public ParserRule getMatrixAssignmentRule() {
+		return getMatrixAssignmentAccess().getRule();
+	}
+
+	//MatrixFormula:
+	//	expression=MatrixAddition;
+	public MatrixFormulaElements getMatrixFormulaAccess() {
+		return (pMatrixFormula != null) ? pMatrixFormula : (pMatrixFormula = new MatrixFormulaElements());
+	}
+	
+	public ParserRule getMatrixFormulaRule() {
+		return getMatrixFormulaAccess().getRule();
+	}
+
+	//MatrixAddition returns MatrixExpression:
+	//	MatrixMultiplication ("+" {MatrixAddition.left=current} right=MatrixMultiplication | "-"
+	//	{MatrixSubtraction.left=current} right=MatrixMultiplication)*;
+	public MatrixAdditionElements getMatrixAdditionAccess() {
+		return (pMatrixAddition != null) ? pMatrixAddition : (pMatrixAddition = new MatrixAdditionElements());
+	}
+	
+	public ParserRule getMatrixAdditionRule() {
+		return getMatrixAdditionAccess().getRule();
+	}
+
+	//MatrixMultiplication returns MatrixExpression:
+	//	PrimaryMatrix ("*" {MatrixMultiplication.left=current} rightMatrix=PrimaryMatrix | "*"
+	//	{MatrixMultiplication.left=current} rightScalar=Formula)*;
+	public MatrixMultiplicationElements getMatrixMultiplicationAccess() {
+		return (pMatrixMultiplication != null) ? pMatrixMultiplication : (pMatrixMultiplication = new MatrixMultiplicationElements());
+	}
+	
+	public ParserRule getMatrixMultiplicationRule() {
+		return getMatrixMultiplicationAccess().getRule();
+	}
+
+	//PrimaryMatrix returns MatrixExpression:
+	//	{NewMatrix} matrix=Matrix | {TransposeMatrix} "[" name=MATH_NAME "]^T" | {MatrixVariable} "[" name=MATH_NAME "]" | "("
+	//	MatrixAddition ")";
+	public PrimaryMatrixElements getPrimaryMatrixAccess() {
+		return (pPrimaryMatrix != null) ? pPrimaryMatrix : (pPrimaryMatrix = new PrimaryMatrixElements());
+	}
+	
+	public ParserRule getPrimaryMatrixRule() {
+		return getPrimaryMatrixAccess().getRule();
+	}
+
 	//Float:
 	//	INT+ ("." INT+ (("E" | "e") "-"? INT+)?)?;
 	public FloatElements getFloatAccess() {
@@ -930,26 +1250,6 @@ public ParserRule getFunctionDefinitionRule() {
 		return getFunctionDefinitionAccess().getRule();
 	}
 
-	//MatrixDefinition:
-	//	name=MATH_NAME "=" "{" (rows+=MatrixRow ("," rows+=MatrixRow)* ","?)? "}";
-	public MatrixDefinitionElements getMatrixDefinitionAccess() {
-		return (pMatrixDefinition != null) ? pMatrixDefinition : (pMatrixDefinition = new MatrixDefinitionElements());
-	}
-	
-	public ParserRule getMatrixDefinitionRule() {
-		return getMatrixDefinitionAccess().getRule();
-	}
-
-	//MatrixRow:
-	//	"{" (elements+=Float ("," elements+=Float)* ","?)? "}";
-	public MatrixRowElements getMatrixRowAccess() {
-		return (pMatrixRow != null) ? pMatrixRow : (pMatrixRow = new MatrixRowElements());
-	}
-	
-	public ParserRule getMatrixRowRule() {
-		return getMatrixRowAccess().getRule();
-	}
-
 	//terminal MATH_NAME:
 	//	("a".."z" | "A".."Z" | "_") ("a".."z" | "A".."Z" | "_" | "0".."9")*;
 	public TerminalRule getMATH_NAMERule() {
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fservices%2FMathGrammarAccess.java
c8333ec3a6d218265850cd9a7a9e028c5e840a12
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.xtext
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.xtext?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src/org/eclipse/iee/translator/jmole/math/Math.xtext
	variableAssignment=VariableAssignment |
	formula=Formula |
	matrixAssignment=MatrixAssignment |
	matrixFormula=MatrixFormula;
VariableAssignment:
	'(-' {Invert} expression=UnaryExpression')' |
	'(' {Factorial} expression=UnaryExpression ')!';
	
	{MatrixElement} element=MATH_NAME '[' row=INT ']' '[' column=INT ']' | 
Matrix:
	'{' (rows+=MatrixRow (',' rows+=MatrixRow)* ','?)? '}';
	
MatrixRow:
	'{' (elements+=Float (',' elements+=Float)* ','?)? '}';

MatrixAssignment:
	'[' variable=MATH_NAME ']' '=' value=MatrixFormula;

MatrixFormula:
	expression=MatrixAddition;

MatrixAddition returns MatrixExpression:
	MatrixMultiplication ('+' {MatrixAddition.left=current} right=MatrixMultiplication | '-' {MatrixSubtraction.left=current}
	right=MatrixMultiplication)*;
	
MatrixMultiplication returns MatrixExpression:
	PrimaryMatrix ('*' {MatrixMultiplication.left=current} rightMatrix=PrimaryMatrix |
				   '*' {MatrixMultiplication.left=current} rightScalar=Formula
	)*;
	
PrimaryMatrix returns MatrixExpression:
	{NewMatrix} matrix=Matrix |
	{TransposeMatrix} '[' name=MATH_NAME ']^T'|
	{MatrixVariable} '[' name=MATH_NAME ']' |
	'(' MatrixAddition ')';

	name=MATH_NAME '(' (parameters+=Formula (',' parameters+=Formula)* ','?)? ')';
	
	matrixDefinition=MatrixDefinition |
	assignment=Assignment |
	formula=Formula;
Assignment:
	('-' {Invert} expression=UnaryExpression) |
	'(' {Factorial} expression=UnaryExpression ')!'|
	{Interval} openingBracket=('['|'(') '('ceil=UnaryExpression')' '..' '('floor=UnaryExpression')' closingBracket=(']'|')');

	(name=MATH_NAME) '(' (parameters+=Formula (',' parameters+=Formula)* ','?)? ')';

MatrixDefinition:
	(name=MATH_NAME) '=' '{' (rows+=MatrixRow (',' rows+=MatrixRow)* ','?)? '}';

MatrixRow:
	'{' (elements+=Float (',' elements+=Float)* ','?)? '}';

@@ -5,11 +5,12 @@ generate math "http://www.eclipse.org/iee/translator/jmole/math/Math"
 
 Statement:
 	functionDefinition=FunctionDefinition |
-	matrixDefinition=MatrixDefinition |
-	assignment=Assignment |
-	formula=Formula;
+	variableAssignment=VariableAssignment |
+	formula=Formula |
+	matrixAssignment=MatrixAssignment |
+	matrixFormula=MatrixFormula;
 
-Assignment:
+VariableAssignment:
 	variable=MATH_NAME '=' value=Formula;
 
 Formula:
@@ -28,34 +29,55 @@ Multiplication returns Expression:
 	// Unary operators: right associative, priority 2
 UnaryExpression returns Expression:
 	Exponent |
-	('-' {Invert} expression=UnaryExpression) |
-	'(' {Factorial} expression=UnaryExpression ')!'|
-	{Interval} openingBracket=('['|'(') '('ceil=UnaryExpression')' '..' '('floor=UnaryExpression')' closingBracket=(']'|')');
-
+	'(-' {Invert} expression=UnaryExpression')' |
+	'(' {Factorial} expression=UnaryExpression ')!';
+	
 	// exponentiation: right associative, priority 3
 Exponent returns Expression:
 	Primary ({Exponent.left=current} '^' right=Primary)?;
 
 Primary returns Expression:
 	{Variable} name=MATH_NAME |
 	{Float} value=Float |
+	{MatrixElement} element=MATH_NAME '[' row=INT ']' '[' column=INT ']' | 
 	{Function} function=Function |
 	'(' Addition ')';
 
+Matrix:
+	'{' (rows+=MatrixRow (',' rows+=MatrixRow)* ','?)? '}';
+	
+MatrixRow:
+	'{' (elements+=Float (',' elements+=Float)* ','?)? '}';
+
+MatrixAssignment:
+	'[' variable=MATH_NAME ']' '=' value=MatrixFormula;
+
+MatrixFormula:
+	expression=MatrixAddition;
+
+MatrixAddition returns MatrixExpression:
+	MatrixMultiplication ('+' {MatrixAddition.left=current} right=MatrixMultiplication | '-' {MatrixSubtraction.left=current}
+	right=MatrixMultiplication)*;
+	
+MatrixMultiplication returns MatrixExpression:
+	PrimaryMatrix ('*' {MatrixMultiplication.left=current} rightMatrix=PrimaryMatrix |
+				   '*' {MatrixMultiplication.left=current} rightScalar=Formula
+	)*;
+	
+PrimaryMatrix returns MatrixExpression:
+	{NewMatrix} matrix=Matrix |
+	{TransposeMatrix} '[' name=MATH_NAME ']^T'|
+	{MatrixVariable} '[' name=MATH_NAME ']' |
+	'(' MatrixAddition ')';
+
 Float:
 	INT+ ('.' INT+ (('E' | 'e') ('-')? (INT)+)?)?;
 
 Function returns Expression:
-	(name=MATH_NAME) '(' (parameters+=Formula (',' parameters+=Formula)* ','?)? ')';
+	name=MATH_NAME '(' (parameters+=Formula (',' parameters+=Formula)* ','?)? ')';
 
 FunctionDefinition:
 	function=Function '=' formula=Formula;
-
-MatrixDefinition:
-	(name=MATH_NAME) '=' '{' (rows+=MatrixRow (',' rows+=MatrixRow)* ','?)? '}';
-
-MatrixRow:
-	'{' (elements+=Float (',' elements+=Float)* ','?)? '}';
-
+	
 terminal MATH_NAME returns ecore::EString:
 	('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*;
\ No newline at end of file
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2FMath.xtext
4c5ef668d0e8f6e1552f90fcba741b594f14c7a5
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fgenerator%2FMathGenerator.xtend
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fgenerator%2FMathGenerator.xtend?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src/org/eclipse/iee/translator/jmole/math/generator/MathGenerator.xtend
	'''	
		�IF s.variableAssignment != null��compileVariableAssignment(s.variableAssignment)�;�ENDIF�
		�IF s.matrixAssignment != null��compileMatrixAssignment(s.matrixAssignment)�;�ENDIF�
		�IF s.matrixFormula != null��compileMatrixFormula(s.matrixFormula)�;�ENDIF�
	def compileVariableAssignment(VariableAssignment a)
	def compileMatrixFormula(MatrixFormula f) 
		�compileMatrixExpression(f.expression)�
	def compileMatrixAssignment(MatrixAssignment a)
	{
	 '''
	 	�a.variable� = �compileMatrixFormula(a.value)�
	 '''
	}
	
	
	//Expressions
		
	def dispatch compileExpression(MatrixElement e) '''
		�e.element�.get(�e.row�,�e.column�)'''	
		
		Math.pow((�compileExpression(op.left)�),(�compileExpression(op.right)�))'''
	
	//Matrix Expressions
	def dispatch compileMatrixExpression(MatrixVariable n) '''
		�n.name�'''
		
	def dispatch compileMatrixExpression(NewMatrix m) '''
		new Matrix(new double[][]
		{
		�var j = 0�
		�FOR row:m.matrix.rows�
		 �IF row != null�
		 {
		 	�var i = 0�
	 		�FOR element:row.elements�
			 �IF element != null�
			 	�element�
			 �ENDIF�
			 �IF (i = i + 1) != row.elements.size()�,�ENDIF�
			�ENDFOR�
		 }
		 �ENDIF�
		 �IF (j = j + 1) != m.matrix.rows.size()�,�ENDIF�
		�ENDFOR�
		})'''	
	
	def dispatch compileMatrixExpression(TransposeMatrix n) '''
		�n.name�.transpose()'''		
		
	def dispatch compileMatrixExpression(MatrixAddition op) '''
		�compileMatrixExpression(op.left)�.plus(�compileMatrixExpression(op.right)�)'''
	
	def dispatch compileMatrixExpression(MatrixSubtraction op) '''
		�compileMatrixExpression(op.left)�.minus(�compileMatrixExpression(op.right)�)'''
	
	def dispatch compileMatrixExpression(MatrixMultiplication op) '''
		�IF op.rightMatrix != null��compileMatrixExpression(op.left)�.times(�compileMatrixExpression(op.rightMatrix)�)�ENDIF�
		�IF op.rightScalar != null��compileMatrixExpression(op.left)�.times(�compileFormula(op.rightScalar)�)�ENDIF�'''
	 	
MatrixAssignment a
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/src/org/eclipse/iee/translator/jmole/math/generator/MathGenerator.xtend
'''
	 	�a.variable� = �compileMatrixFormula(a.value)�
	 '''
def compileMatrixAssignment(MatrixAssignment a)
	'''
		�IF s.matrixDefinition != null��compileMatrixDefinition(s.matrixDefinition)�;�ENDIF�
		�IF s.assignment != null��compileAssignment(s.assignment)�;�ENDIF�
		
	def compileAssignment(Assignment a)
	def compileMatrixDefinition(MatrixDefinition m) 
		Matrix �m.name� = new Matrix(new double[][]
		{
		�var j = 0�
		�FOR row:m.rows�
		 �IF row != null�
		 {
		 	�var i = 0�
	 		�FOR element:row.elements�
			 �IF element != null�
			 	�element�
			 �ENDIF�
			 �IF (i = i + 1) != row.elements.size()�,�ENDIF�
			�ENDFOR�
		 }
		 �ENDIF�
		 �IF (j = j + 1) != m.rows.size()�,�ENDIF�
		�ENDFOR�
		})
			
	def dispatch compileExpression(Interval op) '''
	�IF op.ceil != null && op.floor != null��op.openingBracket�(�compileExpression(op.ceil)�)..(�compileExpression(op.floor)�)�op.closingBracket��ENDIF�'''  
	
		(�compileExpression(op.left)�) ^ (�compileExpression(op.right)�)'''
@@ -31,12 +31,12 @@ class MathGenerator implements IGenerator {
 	
 	def compileStatement(Statement s)
 	{
-	'''
+	'''	
 		�IF s.functionDefinition != null��compileFunctionDefinition(s.functionDefinition)��ENDIF�
-		�IF s.matrixDefinition != null��compileMatrixDefinition(s.matrixDefinition)�;�ENDIF�
-		�IF s.assignment != null��compileAssignment(s.assignment)�;�ENDIF�
+		�IF s.variableAssignment != null��compileVariableAssignment(s.variableAssignment)�;�ENDIF�
+		�IF s.matrixAssignment != null��compileMatrixAssignment(s.matrixAssignment)�;�ENDIF�
 		�IF s.formula != null��compileFormula(s.formula)�;�ENDIF�
-		
+		�IF s.matrixFormula != null��compileMatrixFormula(s.matrixFormula)�;�ENDIF�
 	'''
 	}
 	
@@ -52,7 +52,7 @@ class MathGenerator implements IGenerator {
 	'''
 	}
 	
-	def compileAssignment(Assignment a)
+	def compileVariableAssignment(VariableAssignment a)
 	{
 	 '''
 	 	�a.variable� = �compileFormula(a.value)�
@@ -66,44 +66,39 @@ class MathGenerator implements IGenerator {
 	'''
 	}
 	
-	def compileMatrixDefinition(MatrixDefinition m) 
+	def compileMatrixFormula(MatrixFormula f) 
 	{
 	'''
-		Matrix �m.name� = new Matrix(new double[][]
-		{
-		�var j = 0�
-		�FOR row:m.rows�
-		 �IF row != null�
-		 {
-		 	�var i = 0�
-	 		�FOR element:row.elements�
-			 �IF element != null�
-			 	�element�
-			 �ENDIF�
-			 �IF (i = i + 1) != row.elements.size()�,�ENDIF�
-			�ENDFOR�
-		 }
-		 �ENDIF�
-		 �IF (j = j + 1) != m.rows.size()�,�ENDIF�
-		�ENDFOR�
-		})
+		�compileMatrixExpression(f.expression)�
 	'''
 	}
 	
+	def compileMatrixAssignment(MatrixAssignment a)
+	{
+	 '''
+	 	�a.variable� = �compileMatrixFormula(a.value)�
+	 '''
+	}
+	
 	def compileFunction(Function f) '''
 		�f.function.name�
 		(�FOR param:f.function.parameters�
 		 �IF param != null��compileFormula(param)��ENDIF�
 		 �IF f.function.parameters.last() != param�,�ENDIF�
 		�ENDFOR�)
 	'''
-			
+	
+	//Expressions
+		
 	def dispatch compileExpression(Variable n) '''
 		�n.name�'''
 		
 	def dispatch compileExpression(Float n) '''
 		�n.value�'''
 		
+	def dispatch compileExpression(MatrixElement e) '''
+		�e.element�.get(�e.row�,�e.column�)'''	
+		
 	def dispatch compileExpression(Function f) '''
 		�compileFunction(f)�'''
 	
@@ -128,9 +123,44 @@ class MathGenerator implements IGenerator {
 	def dispatch compileExpression(Factorial op) '''
 	�IF op.expression != null� (�compileExpression(op.expression)�)! �ENDIF�'''  
 	
-	def dispatch compileExpression(Interval op) '''
-	�IF op.ceil != null && op.floor != null��op.openingBracket�(�compileExpression(op.ceil)�)..(�compileExpression(op.floor)�)�op.closingBracket��ENDIF�'''  
-	
 	def dispatch compileExpression(Exponent op) '''
-		(�compileExpression(op.left)�) ^ (�compileExpression(op.right)�)'''
+		Math.pow((�compileExpression(op.left)�),(�compileExpression(op.right)�))'''
+	
+	//Matrix Expressions
+	def dispatch compileMatrixExpression(MatrixVariable n) '''
+		�n.name�'''
+		
+	def dispatch compileMatrixExpression(NewMatrix m) '''
+		new Matrix(new double[][]
+		{
+		�var j = 0�
+		�FOR row:m.matrix.rows�
+		 �IF row != null�
+		 {
+		 	�var i = 0�
+	 		�FOR element:row.elements�
+			 �IF element != null�
+			 	�element�
+			 �ENDIF�
+			 �IF (i = i + 1) != row.elements.size()�,�ENDIF�
+			�ENDFOR�
+		 }
+		 �ENDIF�
+		 �IF (j = j + 1) != m.matrix.rows.size()�,�ENDIF�
+		�ENDFOR�
+		})'''	
+	
+	def dispatch compileMatrixExpression(TransposeMatrix n) '''
+		�n.name�.transpose()'''		
+		
+	def dispatch compileMatrixExpression(MatrixAddition op) '''
+		�compileMatrixExpression(op.left)�.plus(�compileMatrixExpression(op.right)�)'''
+	
+	def dispatch compileMatrixExpression(MatrixSubtraction op) '''
+		�compileMatrixExpression(op.left)�.minus(�compileMatrixExpression(op.right)�)'''
+	
+	def dispatch compileMatrixExpression(MatrixMultiplication op) '''
+		�IF op.rightMatrix != null��compileMatrixExpression(op.left)�.times(�compileMatrixExpression(op.rightMatrix)�)�ENDIF�
+		�IF op.rightScalar != null��compileMatrixExpression(op.left)�.times(�compileFormula(op.rightScalar)�)�ENDIF�'''
+	 	
 }
\ No newline at end of file
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fsrc%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fgenerator%2FMathGenerator.xtend
42b4feb50acad2bc2ffe491b1bada89a4fd14fa5
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fxtend-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fgenerator%2FMathGenerator.java
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fxtend-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fgenerator%2FMathGenerator.java?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/xtend-gen/org/eclipse/iee/translator/jmole/math/generator/MathGenerator.java
import org.eclipse.iee.translator.jmole.math.math.Matrix;
import org.eclipse.iee.translator.jmole.math.math.MatrixAddition;
import org.eclipse.iee.translator.jmole.math.math.MatrixAssignment;
import org.eclipse.iee.translator.jmole.math.math.MatrixElement;
import org.eclipse.iee.translator.jmole.math.math.MatrixExpression;
import org.eclipse.iee.translator.jmole.math.math.MatrixFormula;
import org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication;
import org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction;
import org.eclipse.iee.translator.jmole.math.math.MatrixVariable;
import org.eclipse.iee.translator.jmole.math.math.NewMatrix;
import org.eclipse.iee.translator.jmole.math.math.TransposeMatrix;
import org.eclipse.iee.translator.jmole.math.math.VariableAssignment;
      VariableAssignment _variableAssignment = s.getVariableAssignment();
      boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(_variableAssignment, null);
        VariableAssignment _variableAssignment_1 = s.getVariableAssignment();
        StringConcatenation _compileVariableAssignment = this.compileVariableAssignment(_variableAssignment_1);
        _builder.append(_compileVariableAssignment, "");
      MatrixAssignment _matrixAssignment = s.getMatrixAssignment();
      boolean _operator_notEquals_2 = ObjectExtensions.operator_notEquals(_matrixAssignment, null);
        MatrixAssignment _matrixAssignment_1 = s.getMatrixAssignment();
        StringConcatenation _compileMatrixAssignment = this.compileMatrixAssignment(_matrixAssignment_1);
        _builder.append(_compileMatrixAssignment, "");
    {
      MatrixFormula _matrixFormula = s.getMatrixFormula();
      boolean _operator_notEquals_4 = ObjectExtensions.operator_notEquals(_matrixFormula, null);
      if (_operator_notEquals_4) {
        MatrixFormula _matrixFormula_1 = s.getMatrixFormula();
        StringConcatenation _compileMatrixFormula = this.compileMatrixFormula(_matrixFormula_1);
        _builder.append(_compileMatrixFormula, "");
        _builder.append(";");
      }
    }
    _builder.newLineIfNotEmpty();
      for(final Formula param : _parameters) {
  public StringConcatenation compileVariableAssignment(final VariableAssignment a) {
  public StringConcatenation compileMatrixFormula(final MatrixFormula f) {
    MatrixExpression _expression = f.getExpression();
    StringConcatenation _compileMatrixExpression = this.compileMatrixExpression(_expression);
    _builder.append(_compileMatrixExpression, "");
    return _builder;
  }
  
  public StringConcatenation compileMatrixAssignment(final MatrixAssignment a) {
    StringConcatenation _builder = new StringConcatenation();
    String _variable = a.getVariable();
    _builder.append(_variable, "");
    _builder.append(" = ");
    MatrixFormula _value = a.getValue();
    StringConcatenation _compileMatrixFormula = this.compileMatrixFormula(_value);
    _builder.append(_compileMatrixFormula, "");
      for(final Formula param : _parameters) {
  protected StringConcatenation _compileExpression(final MatrixElement e) {
    StringConcatenation _builder = new StringConcatenation();
    String _element = e.getElement();
    _builder.append(_element, "");
    _builder.append(".get(");
    int _row = e.getRow();
    _builder.append(_row, "");
    _builder.append(",");
    int _column = e.getColumn();
    _builder.append(_column, "");
    _builder.append(")");
    return _builder;
  }
  
    _builder.append("Math.pow((");
    _builder.append("),(");
    _builder.append("))");
    return _builder;
  }
  
  protected StringConcatenation _compileMatrixExpression(final MatrixVariable n) {
    StringConcatenation _builder = new StringConcatenation();
    String _name = n.getName();
    _builder.append(_name, "");
    return _builder;
  }
  
  protected StringConcatenation _compileMatrixExpression(final NewMatrix m) {
    StringConcatenation _builder = new StringConcatenation();
    _builder.append("new Matrix(new double[][]");
    _builder.newLine();
    _builder.append("{");
    _builder.newLine();
    int j = 0;
    _builder.newLineIfNotEmpty();
    {
      Matrix _matrix = m.getMatrix();
      EList<MatrixRow> _rows = _matrix.getRows();
      for(final MatrixRow row : _rows) {
        {
          boolean _operator_notEquals = ObjectExtensions.operator_notEquals(row, null);
          if (_operator_notEquals) {
            _builder.append("{");
            _builder.newLine();
            _builder.append("\t");
            int i = 0;
            _builder.newLineIfNotEmpty();
            {
              EList<String> _elements = row.getElements();
              for(final String element : _elements) {
                {
                  boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(element, null);
                  if (_operator_notEquals_1) {
                    _builder.append(element, "");
                    _builder.newLineIfNotEmpty();
                  }
                }
                {
                  int _operator_plus = IntegerExtensions.operator_plus(((Integer)i), ((Integer)1));
                  int _i = i = _operator_plus;
                  EList<String> _elements_1 = row.getElements();
                  int _size = _elements_1.size();
                  boolean _operator_notEquals_2 = ObjectExtensions.operator_notEquals(((Integer)_i), ((Integer)_size));
                  if (_operator_notEquals_2) {
                    _builder.append(",");
                  }
                }
                _builder.newLineIfNotEmpty();
              }
            }
            _builder.append("}");
            _builder.newLine();
          }
        }
        {
          int _operator_plus_1 = IntegerExtensions.operator_plus(((Integer)j), ((Integer)1));
          int _j = j = _operator_plus_1;
          Matrix _matrix_1 = m.getMatrix();
          EList<MatrixRow> _rows_1 = _matrix_1.getRows();
          int _size_1 = _rows_1.size();
          boolean _operator_notEquals_3 = ObjectExtensions.operator_notEquals(((Integer)_j), ((Integer)_size_1));
          if (_operator_notEquals_3) {
            _builder.append(",");
          }
        }
        _builder.newLineIfNotEmpty();
      }
    }
    _builder.append("})");
    return _builder;
  }
  
  protected StringConcatenation _compileMatrixExpression(final TransposeMatrix n) {
    StringConcatenation _builder = new StringConcatenation();
    String _name = n.getName();
    _builder.append(_name, "");
    _builder.append(".transpose()");
    return _builder;
  }
  
  protected StringConcatenation _compileMatrixExpression(final MatrixAddition op) {
    StringConcatenation _builder = new StringConcatenation();
    MatrixExpression _left = op.getLeft();
    StringConcatenation _compileMatrixExpression = this.compileMatrixExpression(_left);
    _builder.append(_compileMatrixExpression, "");
    _builder.append(".plus(");
    MatrixExpression _right = op.getRight();
    StringConcatenation _compileMatrixExpression_1 = this.compileMatrixExpression(_right);
    _builder.append(_compileMatrixExpression_1, "");
    _builder.append(")");
    return _builder;
  }
  
  protected StringConcatenation _compileMatrixExpression(final MatrixSubtraction op) {
    StringConcatenation _builder = new StringConcatenation();
    MatrixExpression _left = op.getLeft();
    StringConcatenation _compileMatrixExpression = this.compileMatrixExpression(_left);
    _builder.append(_compileMatrixExpression, "");
    _builder.append(".minus(");
    MatrixExpression _right = op.getRight();
    StringConcatenation _compileMatrixExpression_1 = this.compileMatrixExpression(_right);
    _builder.append(_compileMatrixExpression_1, "");
  protected StringConcatenation _compileMatrixExpression(final MatrixMultiplication op) {
    StringConcatenation _builder = new StringConcatenation();
    {
      MatrixExpression _rightMatrix = op.getRightMatrix();
      boolean _operator_notEquals = ObjectExtensions.operator_notEquals(_rightMatrix, null);
      if (_operator_notEquals) {
        MatrixExpression _left = op.getLeft();
        StringConcatenation _compileMatrixExpression = this.compileMatrixExpression(_left);
        _builder.append(_compileMatrixExpression, "");
        _builder.append(".times(");
        MatrixExpression _rightMatrix_1 = op.getRightMatrix();
        StringConcatenation _compileMatrixExpression_1 = this.compileMatrixExpression(_rightMatrix_1);
        _builder.append(_compileMatrixExpression_1, "");
        _builder.append(")");
      }
    }
    _builder.newLineIfNotEmpty();
    {
      Formula _rightScalar = op.getRightScalar();
      boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(_rightScalar, null);
      if (_operator_notEquals_1) {
        MatrixExpression _left_1 = op.getLeft();
        StringConcatenation _compileMatrixExpression_2 = this.compileMatrixExpression(_left_1);
        _builder.append(_compileMatrixExpression_2, "");
        _builder.append(".times(");
        Formula _rightScalar_1 = op.getRightScalar();
        StringConcatenation _compileFormula = this.compileFormula(_rightScalar_1);
        _builder.append(_compileFormula, "");
        _builder.append(")");
      }
    }
    return _builder;
  }
  
    } else if ((op instanceof MatrixElement)) {
      return _compileExpression((MatrixElement)op);
  
  public StringConcatenation compileMatrixExpression(final MatrixExpression op) {
    if ((op instanceof MatrixAddition)) {
      return _compileMatrixExpression((MatrixAddition)op);
    } else if ((op instanceof MatrixMultiplication)) {
      return _compileMatrixExpression((MatrixMultiplication)op);
    } else if ((op instanceof MatrixSubtraction)) {
      return _compileMatrixExpression((MatrixSubtraction)op);
    } else if ((op instanceof MatrixVariable)) {
      return _compileMatrixExpression((MatrixVariable)op);
    } else if ((op instanceof NewMatrix)) {
      return _compileMatrixExpression((NewMatrix)op);
    } else if ((op instanceof TransposeMatrix)) {
      return _compileMatrixExpression((TransposeMatrix)op);
    } else {
      throw new IllegalArgumentException("Unhandled parameter types: " +
        java.util.Arrays.<Object>asList(op).toString());
    }
  }
final VariableAssignment a
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/xtend-gen/org/eclipse/iee/translator/jmole/math/generator/MathGenerator.java
public StringConcatenation compileMatrixFormula(final MatrixFormula f) {
    MatrixExpression _expression = f.getExpression();
    StringConcatenation _compileMatrixExpression = this.compileMatrixExpression(_expression);
    _builder.append(_compileMatrixExpression, "");
    return _builder;
StringConcatenation compileVariableAssignment(final VariableAssignment a)
final MatrixAssignment a
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/xtend-gen/org/eclipse/iee/translator/jmole/math/generator/MathGenerator.java
StringConcatenation _builder = new StringConcatenation();
    String _variable = a.getVariable();
    _builder.append(_variable, "");
    _builder.append(" = ");
    MatrixFormula _value = a.getValue();
    StringConcatenation _compileMatrixFormula = this.compileMatrixFormula(_value);
    _builder.append(_compileMatrixFormula, "");
      for(final Formula param : _parameters) {
  protected StringConcatenation _compileExpression(final MatrixElement e) {
    StringConcatenation _builder = new StringConcatenation();
    String _element = e.getElement();
    _builder.append(_element, "");
    _builder.append(".get(");
    int _row = e.getRow();
    _builder.append(_row, "");
    _builder.append(",");
    int _column = e.getColumn();
    _builder.append(_column, "");
    _builder.append(")");
    return _builder;
StringConcatenation compileMatrixAssignment(final MatrixAssignment a)
final MatrixVariable n
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/xtend-gen/org/eclipse/iee/translator/jmole/math/generator/MathGenerator.java
StringConcatenation _builder = new StringConcatenation();
    String _name = n.getName();
    _builder.append(_name, "");
    return _builder;
StringConcatenation _compileMatrixExpression(final MatrixVariable n)
final NewMatrix m
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/xtend-gen/org/eclipse/iee/translator/jmole/math/generator/MathGenerator.java
StringConcatenation _builder = new StringConcatenation();
    _builder.append("new Matrix(new double[][]");
    _builder.newLine();
    _builder.append("{");
    _builder.newLine();
    int j = 0;
    _builder.newLineIfNotEmpty();
    {
      Matrix _matrix = m.getMatrix();
      EList<MatrixRow> _rows = _matrix.getRows();
      for(final MatrixRow row : _rows) {
        {
          boolean _operator_notEquals = ObjectExtensions.operator_notEquals(row, null);
          if (_operator_notEquals) {
            _builder.append("{");
            _builder.newLine();
            _builder.append("\t");
            int i = 0;
            _builder.newLineIfNotEmpty();
            {
              EList<String> _elements = row.getElements();
              for(final String element : _elements) {
                {
                  boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(element, null);
                  if (_operator_notEquals_1) {
                    _builder.append(element, "");
                    _builder.newLineIfNotEmpty();
StringConcatenation _compileMatrixExpression(final NewMatrix m)
final TransposeMatrix n
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/xtend-gen/org/eclipse/iee/translator/jmole/math/generator/MathGenerator.java
StringConcatenation _builder = new StringConcatenation();
    String _name = n.getName();
    _builder.append(_name, "");
    _builder.append(".transpose()");
    return _builder;
StringConcatenation _compileMatrixExpression(final TransposeMatrix n)
final MatrixAddition op
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/xtend-gen/org/eclipse/iee/translator/jmole/math/generator/MathGenerator.java
StringConcatenation _builder = new StringConcatenation();
    MatrixExpression _left = op.getLeft();
    StringConcatenation _compileMatrixExpression = this.compileMatrixExpression(_left);
    _builder.append(_compileMatrixExpression, "");
    _builder.append(".plus(");
    MatrixExpression _right = op.getRight();
    StringConcatenation _compileMatrixExpression_1 = this.compileMatrixExpression(_right);
    _builder.append(_compileMatrixExpression_1, "");
    _builder.append(")");
    return _builder;
StringConcatenation _compileMatrixExpression(final MatrixAddition op)
final MatrixSubtraction op
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/xtend-gen/org/eclipse/iee/translator/jmole/math/generator/MathGenerator.java
StringConcatenation _builder = new StringConcatenation();
    MatrixExpression _left = op.getLeft();
    StringConcatenation _compileMatrixExpression = this.compileMatrixExpression(_left);
    _builder.append(_compileMatrixExpression, "");
    _builder.append(".minus(");
    MatrixExpression _right = op.getRight();
    StringConcatenation _compileMatrixExpression_1 = this.compileMatrixExpression(_right);
    _builder.append(_compileMatrixExpression_1, "");
  protected StringConcatenation _compileMatrixExpression(final MatrixMultiplication op) {
    StringConcatenation _builder = new StringConcatenation();
    {
      MatrixExpression _rightMatrix = op.getRightMatrix();
      boolean _operator_notEquals = ObjectExtensions.operator_notEquals(_rightMatrix, null);
      if (_operator_notEquals) {
        MatrixExpression _left = op.getLeft();
        StringConcatenation _compileMatrixExpression = this.compileMatrixExpression(_left);
        _builder.append(_compileMatrixExpression, "");
        _builder.append(".times(");
        MatrixExpression _rightMatrix_1 = op.getRightMatrix();
        StringConcatenation _compileMatrixExpression_1 = this.compileMatrixExpression(_rightMatrix_1);
        _builder.append(_compileMatrixExpression_1, "");
        _builder.append(")");
StringConcatenation _compileMatrixExpression(final MatrixSubtraction op)
final MatrixExpression op
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/xtend-gen/org/eclipse/iee/translator/jmole/math/generator/MathGenerator.java
if ((op instanceof MatrixAddition)) {
      return _compileMatrixExpression((MatrixAddition)op);
StringConcatenation compileMatrixExpression(final MatrixExpression op)
import org.eclipse.iee.translator.jmole.math.math.Assignment;
import org.eclipse.iee.translator.jmole.math.math.Interval;
import org.eclipse.iee.translator.jmole.math.math.MatrixDefinition;
import org.eclipse.xtext.xbase.lib.BooleanExtensions;
      MatrixDefinition _matrixDefinition = s.getMatrixDefinition();
      boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(_matrixDefinition, null);
        MatrixDefinition _matrixDefinition_1 = s.getMatrixDefinition();
        StringConcatenation _compileMatrixDefinition = this.compileMatrixDefinition(_matrixDefinition_1);
        _builder.append(_compileMatrixDefinition, "");
      Assignment _assignment = s.getAssignment();
      boolean _operator_notEquals_2 = ObjectExtensions.operator_notEquals(_assignment, null);
        Assignment _assignment_1 = s.getAssignment();
        StringConcatenation _compileAssignment = this.compileAssignment(_assignment_1);
        _builder.append(_compileAssignment, "");
    _builder.newLine();
      for(Formula param : _parameters) {
  public StringConcatenation compileAssignment(final Assignment a) {
  public StringConcatenation compileMatrixDefinition(final MatrixDefinition m) {
    _builder.append("Matrix ");
    String _name = m.getName();
    _builder.append(_name, "");
    _builder.append(" = new Matrix(new double[][]");
    _builder.append("{");
    _builder.newLine();
    int j = 0;
    {
      EList<MatrixRow> _rows = m.getRows();
      for(MatrixRow row : _rows) {
        {
          boolean _operator_notEquals = ObjectExtensions.operator_notEquals(row, null);
          if (_operator_notEquals) {
            _builder.append("{");
            _builder.newLine();
            _builder.append("\t");
            int i = 0;
            _builder.newLineIfNotEmpty();
            {
              EList<String> _elements = row.getElements();
              for(String element : _elements) {
                {
                  boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(element, null);
                  if (_operator_notEquals_1) {
                    _builder.append(element, "");
                    _builder.newLineIfNotEmpty();
                  }
                }
                {
                  int _operator_plus = IntegerExtensions.operator_plus(((Integer)i), ((Integer)1));
                  int _i = i = _operator_plus;
                  EList<String> _elements_1 = row.getElements();
                  int _size = _elements_1.size();
                  boolean _operator_notEquals_2 = ObjectExtensions.operator_notEquals(((Integer)_i), ((Integer)_size));
                  if (_operator_notEquals_2) {
                    _builder.append(",");
                  }
                }
                _builder.newLineIfNotEmpty();
              }
            }
            _builder.append("}");
            _builder.newLine();
          }
        }
        {
          int _operator_plus_1 = IntegerExtensions.operator_plus(((Integer)j), ((Integer)1));
          int _j = j = _operator_plus_1;
          EList<MatrixRow> _rows_1 = m.getRows();
          int _size_1 = _rows_1.size();
          boolean _operator_notEquals_3 = ObjectExtensions.operator_notEquals(((Integer)_j), ((Integer)_size_1));
          if (_operator_notEquals_3) {
            _builder.append(",");
          }
        }
        _builder.newLineIfNotEmpty();
      }
    }
    _builder.append("})");
    _builder.newLine();
      for(Formula param : _parameters) {
  protected StringConcatenation _compileExpression(final Interval op) {
    StringConcatenation _builder = new StringConcatenation();
    {
      boolean _operator_and = false;
      Expression _ceil = op.getCeil();
      boolean _operator_notEquals = ObjectExtensions.operator_notEquals(_ceil, null);
      if (!_operator_notEquals) {
        _operator_and = false;
      } else {
        Expression _floor = op.getFloor();
        boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(_floor, null);
        _operator_and = BooleanExtensions.operator_and(_operator_notEquals, _operator_notEquals_1);
      }
      if (_operator_and) {
        String _openingBracket = op.getOpeningBracket();
        _builder.append(_openingBracket, "");
        _builder.append("(");
        Expression _ceil_1 = op.getCeil();
        StringConcatenation _compileExpression = this.compileExpression(_ceil_1);
        _builder.append(_compileExpression, "");
        _builder.append(")..(");
        Expression _floor_1 = op.getFloor();
        StringConcatenation _compileExpression_1 = this.compileExpression(_floor_1);
        _builder.append(_compileExpression_1, "");
        _builder.append(")");
        String _closingBracket = op.getClosingBracket();
        _builder.append(_closingBracket, "");
      }
    }
    return _builder;
  }
  
    _builder.append("(");
    _builder.append(") ^ (");
    } else if ((op instanceof Interval)) {
      return _compileExpression((Interval)op);
final Assignment a
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/xtend-gen/org/eclipse/iee/translator/jmole/math/generator/MathGenerator.java
public StringConcatenation compileMatrixDefinition(final MatrixDefinition m) {
    _builder.append("Matrix ");
    String _name = m.getName();
    _builder.append(_name, "");
    _builder.append(" = new Matrix(new double[][]");
    _builder.append("{");
    _builder.newLine();
    int j = 0;
    {
      EList<MatrixRow> _rows = m.getRows();
      for(MatrixRow row : _rows) {
        {
          boolean _operator_notEquals = ObjectExtensions.operator_notEquals(row, null);
          if (_operator_notEquals) {
            _builder.append("{");
            _builder.newLine();
            _builder.append("\t");
            int i = 0;
            _builder.newLineIfNotEmpty();
            {
              EList<String> _elements = row.getElements();
              for(String element : _elements) {
                {
                  boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(element, null);
                  if (_operator_notEquals_1) {
                    _builder.append(element, "");
                    _builder.newLineIfNotEmpty();
StringConcatenation compileAssignment(final Assignment a)
final Interval op
org.eclipse.iee.translator.Jmole/org.eclipse.iee.translator.jmole.math/xtend-gen/org/eclipse/iee/translator/jmole/math/generator/MathGenerator.java
StringConcatenation _builder = new StringConcatenation();
    {
      boolean _operator_and = false;
      Expression _ceil = op.getCeil();
      boolean _operator_notEquals = ObjectExtensions.operator_notEquals(_ceil, null);
      if (!_operator_notEquals) {
        _operator_and = false;
StringConcatenation _compileExpression(final Interval op)
@@ -4,7 +4,6 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.iee.translator.jmole.math.math.Addition;
-import org.eclipse.iee.translator.jmole.math.math.Assignment;
 import org.eclipse.iee.translator.jmole.math.math.Division;
 import org.eclipse.iee.translator.jmole.math.math.Exponent;
 import org.eclipse.iee.translator.jmole.math.math.Expression;
@@ -13,18 +12,27 @@
 import org.eclipse.iee.translator.jmole.math.math.Formula;
 import org.eclipse.iee.translator.jmole.math.math.Function;
 import org.eclipse.iee.translator.jmole.math.math.FunctionDefinition;
-import org.eclipse.iee.translator.jmole.math.math.Interval;
 import org.eclipse.iee.translator.jmole.math.math.Invert;
-import org.eclipse.iee.translator.jmole.math.math.MatrixDefinition;
+import org.eclipse.iee.translator.jmole.math.math.Matrix;
+import org.eclipse.iee.translator.jmole.math.math.MatrixAddition;
+import org.eclipse.iee.translator.jmole.math.math.MatrixAssignment;
+import org.eclipse.iee.translator.jmole.math.math.MatrixElement;
+import org.eclipse.iee.translator.jmole.math.math.MatrixExpression;
+import org.eclipse.iee.translator.jmole.math.math.MatrixFormula;
+import org.eclipse.iee.translator.jmole.math.math.MatrixMultiplication;
 import org.eclipse.iee.translator.jmole.math.math.MatrixRow;
+import org.eclipse.iee.translator.jmole.math.math.MatrixSubtraction;
+import org.eclipse.iee.translator.jmole.math.math.MatrixVariable;
 import org.eclipse.iee.translator.jmole.math.math.Modulo;
 import org.eclipse.iee.translator.jmole.math.math.Multiplication;
+import org.eclipse.iee.translator.jmole.math.math.NewMatrix;
 import org.eclipse.iee.translator.jmole.math.math.Statement;
 import org.eclipse.iee.translator.jmole.math.math.Subtraction;
+import org.eclipse.iee.translator.jmole.math.math.TransposeMatrix;
 import org.eclipse.iee.translator.jmole.math.math.Variable;
+import org.eclipse.iee.translator.jmole.math.math.VariableAssignment;
 import org.eclipse.xtext.generator.IFileSystemAccess;
 import org.eclipse.xtext.generator.IGenerator;
-import org.eclipse.xtext.xbase.lib.BooleanExtensions;
 import org.eclipse.xtext.xbase.lib.IntegerExtensions;
 import org.eclipse.xtext.xbase.lib.IterableExtensions;
 import org.eclipse.xtext.xbase.lib.ObjectExtensions;
@@ -66,23 +74,23 @@ public StringConcatenation compileStatement(final Statement s) {
     }
     _builder.newLineIfNotEmpty();
     {
-      MatrixDefinition _matrixDefinition = s.getMatrixDefinition();
-      boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(_matrixDefinition, null);
+      VariableAssignment _variableAssignment = s.getVariableAssignment();
+      boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(_variableAssignment, null);
       if (_operator_notEquals_1) {
-        MatrixDefinition _matrixDefinition_1 = s.getMatrixDefinition();
-        StringConcatenation _compileMatrixDefinition = this.compileMatrixDefinition(_matrixDefinition_1);
-        _builder.append(_compileMatrixDefinition, "");
+        VariableAssignment _variableAssignment_1 = s.getVariableAssignment();
+        StringConcatenation _compileVariableAssignment = this.compileVariableAssignment(_variableAssignment_1);
+        _builder.append(_compileVariableAssignment, "");
         _builder.append(";");
       }
     }
     _builder.newLineIfNotEmpty();
     {
-      Assignment _assignment = s.getAssignment();
-      boolean _operator_notEquals_2 = ObjectExtensions.operator_notEquals(_assignment, null);
+      MatrixAssignment _matrixAssignment = s.getMatrixAssignment();
+      boolean _operator_notEquals_2 = ObjectExtensions.operator_notEquals(_matrixAssignment, null);
       if (_operator_notEquals_2) {
-        Assignment _assignment_1 = s.getAssignment();
-        StringConcatenation _compileAssignment = this.compileAssignment(_assignment_1);
-        _builder.append(_compileAssignment, "");
+        MatrixAssignment _matrixAssignment_1 = s.getMatrixAssignment();
+        StringConcatenation _compileMatrixAssignment = this.compileMatrixAssignment(_matrixAssignment_1);
+        _builder.append(_compileMatrixAssignment, "");
         _builder.append(";");
       }
     }
@@ -98,7 +106,17 @@ public StringConcatenation compileStatement(final Statement s) {
       }
     }
     _builder.newLineIfNotEmpty();
-    _builder.newLine();
+    {
+      MatrixFormula _matrixFormula = s.getMatrixFormula();
+      boolean _operator_notEquals_4 = ObjectExtensions.operator_notEquals(_matrixFormula, null);
+      if (_operator_notEquals_4) {
+        MatrixFormula _matrixFormula_1 = s.getMatrixFormula();
+        StringConcatenation _compileMatrixFormula = this.compileMatrixFormula(_matrixFormula_1);
+        _builder.append(_compileMatrixFormula, "");
+        _builder.append(";");
+      }
+    }
+    _builder.newLineIfNotEmpty();
     return _builder;
   }
   
@@ -113,7 +131,7 @@ public StringConcatenation compileFunctionDefinition(final FunctionDefinition fu
     {
       Expression _function_1 = funcDef.getFunction();
       EList<Formula> _parameters = _function_1.getParameters();
-      for(Formula param : _parameters) {
+      for(final Formula param : _parameters) {
         {
           boolean _operator_notEquals = ObjectExtensions.operator_notEquals(param, null);
           if (_operator_notEquals) {
@@ -155,7 +173,7 @@ public StringConcatenation compileFunctionDefinition(final FunctionDefinition fu
     return _builder;
   }
   
-  public StringConcatenation compileAssignment(final Assignment a) {
+  public StringConcatenation compileVariableAssignment(final VariableAssignment a) {
     StringConcatenation _builder = new StringConcatenation();
     String _variable = a.getVariable();
     _builder.append(_variable, "");
@@ -176,70 +194,24 @@ public StringConcatenation compileFormula(final Formula f) {
     return _builder;
   }
   
-  public StringConcatenation compileMatrixDefinition(final MatrixDefinition m) {
+  public StringConcatenation compileMatrixFormula(final MatrixFormula f) {
     StringConcatenation _builder = new StringConcatenation();
-    _builder.append("Matrix ");
-    String _name = m.getName();
-    _builder.append(_name, "");
-    _builder.append(" = new Matrix(new double[][]");
+    MatrixExpression _expression = f.getExpression();
+    StringConcatenation _compileMatrixExpression = this.compileMatrixExpression(_expression);
+    _builder.append(_compileMatrixExpression, "");
     _builder.newLineIfNotEmpty();
-    _builder.append("{");
-    _builder.newLine();
-    int j = 0;
+    return _builder;
+  }
+  
+  public StringConcatenation compileMatrixAssignment(final MatrixAssignment a) {
+    StringConcatenation _builder = new StringConcatenation();
+    String _variable = a.getVariable();
+    _builder.append(_variable, "");
+    _builder.append(" = ");
+    MatrixFormula _value = a.getValue();
+    StringConcatenation _compileMatrixFormula = this.compileMatrixFormula(_value);
+    _builder.append(_compileMatrixFormula, "");
     _builder.newLineIfNotEmpty();
-    {
-      EList<MatrixRow> _rows = m.getRows();
-      for(MatrixRow row : _rows) {
-        {
-          boolean _operator_notEquals = ObjectExtensions.operator_notEquals(row, null);
-          if (_operator_notEquals) {
-            _builder.append("{");
-            _builder.newLine();
-            _builder.append("\t");
-            int i = 0;
-            _builder.newLineIfNotEmpty();
-            {
-              EList<String> _elements = row.getElements();
-              for(String element : _elements) {
-                {
-                  boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(element, null);
-                  if (_operator_notEquals_1) {
-                    _builder.append(element, "");
-                    _builder.newLineIfNotEmpty();
-                  }
-                }
-                {
-                  int _operator_plus = IntegerExtensions.operator_plus(((Integer)i), ((Integer)1));
-                  int _i = i = _operator_plus;
-                  EList<String> _elements_1 = row.getElements();
-                  int _size = _elements_1.size();
-                  boolean _operator_notEquals_2 = ObjectExtensions.operator_notEquals(((Integer)_i), ((Integer)_size));
-                  if (_operator_notEquals_2) {
-                    _builder.append(",");
-                  }
-                }
-                _builder.newLineIfNotEmpty();
-              }
-            }
-            _builder.append("}");
-            _builder.newLine();
-          }
-        }
-        {
-          int _operator_plus_1 = IntegerExtensions.operator_plus(((Integer)j), ((Integer)1));
-          int _j = j = _operator_plus_1;
-          EList<MatrixRow> _rows_1 = m.getRows();
-          int _size_1 = _rows_1.size();
-          boolean _operator_notEquals_3 = ObjectExtensions.operator_notEquals(((Integer)_j), ((Integer)_size_1));
-          if (_operator_notEquals_3) {
-            _builder.append(",");
-          }
-        }
-        _builder.newLineIfNotEmpty();
-      }
-    }
-    _builder.append("})");
-    _builder.newLine();
     return _builder;
   }
   
@@ -253,7 +225,7 @@ public StringConcatenation compileFunction(final Function f) {
     {
       Expression _function_1 = f.getFunction();
       EList<Formula> _parameters = _function_1.getParameters();
-      for(Formula param : _parameters) {
+      for(final Formula param : _parameters) {
         _builder.newLineIfNotEmpty();
         {
           boolean _operator_notEquals = ObjectExtensions.operator_notEquals(param, null);
@@ -295,6 +267,20 @@ protected StringConcatenation _compileExpression(final Float n) {
     return _builder;
   }
   
+  protected StringConcatenation _compileExpression(final MatrixElement e) {
+    StringConcatenation _builder = new StringConcatenation();
+    String _element = e.getElement();
+    _builder.append(_element, "");
+    _builder.append(".get(");
+    int _row = e.getRow();
+    _builder.append(_row, "");
+    _builder.append(",");
+    int _column = e.getColumn();
+    _builder.append(_column, "");
+    _builder.append(")");
+    return _builder;
+  }
+  
   protected StringConcatenation _compileExpression(final Function f) {
     StringConcatenation _builder = new StringConcatenation();
     StringConcatenation _compileFunction = this.compileFunction(f);
@@ -404,52 +390,160 @@ protected StringConcatenation _compileExpression(final Factorial op) {
     return _builder;
   }
   
-  protected StringConcatenation _compileExpression(final Interval op) {
-    StringConcatenation _builder = new StringConcatenation();
-    {
-      boolean _operator_and = false;
-      Expression _ceil = op.getCeil();
-      boolean _operator_notEquals = ObjectExtensions.operator_notEquals(_ceil, null);
-      if (!_operator_notEquals) {
-        _operator_and = false;
-      } else {
-        Expression _floor = op.getFloor();
-        boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(_floor, null);
-        _operator_and = BooleanExtensions.operator_and(_operator_notEquals, _operator_notEquals_1);
-      }
-      if (_operator_and) {
-        String _openingBracket = op.getOpeningBracket();
-        _builder.append(_openingBracket, "");
-        _builder.append("(");
-        Expression _ceil_1 = op.getCeil();
-        StringConcatenation _compileExpression = this.compileExpression(_ceil_1);
-        _builder.append(_compileExpression, "");
-        _builder.append(")..(");
-        Expression _floor_1 = op.getFloor();
-        StringConcatenation _compileExpression_1 = this.compileExpression(_floor_1);
-        _builder.append(_compileExpression_1, "");
-        _builder.append(")");
-        String _closingBracket = op.getClosingBracket();
-        _builder.append(_closingBracket, "");
-      }
-    }
-    return _builder;
-  }
-  
   protected StringConcatenation _compileExpression(final Exponent op) {
     StringConcatenation _builder = new StringConcatenation();
-    _builder.append("(");
+    _builder.append("Math.pow((");
     Expression _left = op.getLeft();
     StringConcatenation _compileExpression = this.compileExpression(_left);
     _builder.append(_compileExpression, "");
-    _builder.append(") ^ (");
+    _builder.append("),(");
     Expression _right = op.getRight();
     StringConcatenation _compileExpression_1 = this.compileExpression(_right);
     _builder.append(_compileExpression_1, "");
+    _builder.append("))");
+    return _builder;
+  }
+  
+  protected StringConcatenation _compileMatrixExpression(final MatrixVariable n) {
+    StringConcatenation _builder = new StringConcatenation();
+    String _name = n.getName();
+    _builder.append(_name, "");
+    return _builder;
+  }
+  
+  protected StringConcatenation _compileMatrixExpression(final NewMatrix m) {
+    StringConcatenation _builder = new StringConcatenation();
+    _builder.append("new Matrix(new double[][]");
+    _builder.newLine();
+    _builder.append("{");
+    _builder.newLine();
+    int j = 0;
+    _builder.newLineIfNotEmpty();
+    {
+      Matrix _matrix = m.getMatrix();
+      EList<MatrixRow> _rows = _matrix.getRows();
+      for(final MatrixRow row : _rows) {
+        {
+          boolean _operator_notEquals = ObjectExtensions.operator_notEquals(row, null);
+          if (_operator_notEquals) {
+            _builder.append("{");
+            _builder.newLine();
+            _builder.append("\t");
+            int i = 0;
+            _builder.newLineIfNotEmpty();
+            {
+              EList<String> _elements = row.getElements();
+              for(final String element : _elements) {
+                {
+                  boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(element, null);
+                  if (_operator_notEquals_1) {
+                    _builder.append(element, "");
+                    _builder.newLineIfNotEmpty();
+                  }
+                }
+                {
+                  int _operator_plus = IntegerExtensions.operator_plus(((Integer)i), ((Integer)1));
+                  int _i = i = _operator_plus;
+                  EList<String> _elements_1 = row.getElements();
+                  int _size = _elements_1.size();
+                  boolean _operator_notEquals_2 = ObjectExtensions.operator_notEquals(((Integer)_i), ((Integer)_size));
+                  if (_operator_notEquals_2) {
+                    _builder.append(",");
+                  }
+                }
+                _builder.newLineIfNotEmpty();
+              }
+            }
+            _builder.append("}");
+            _builder.newLine();
+          }
+        }
+        {
+          int _operator_plus_1 = IntegerExtensions.operator_plus(((Integer)j), ((Integer)1));
+          int _j = j = _operator_plus_1;
+          Matrix _matrix_1 = m.getMatrix();
+          EList<MatrixRow> _rows_1 = _matrix_1.getRows();
+          int _size_1 = _rows_1.size();
+          boolean _operator_notEquals_3 = ObjectExtensions.operator_notEquals(((Integer)_j), ((Integer)_size_1));
+          if (_operator_notEquals_3) {
+            _builder.append(",");
+          }
+        }
+        _builder.newLineIfNotEmpty();
+      }
+    }
+    _builder.append("})");
+    return _builder;
+  }
+  
+  protected StringConcatenation _compileMatrixExpression(final TransposeMatrix n) {
+    StringConcatenation _builder = new StringConcatenation();
+    String _name = n.getName();
+    _builder.append(_name, "");
+    _builder.append(".transpose()");
+    return _builder;
+  }
+  
+  protected StringConcatenation _compileMatrixExpression(final MatrixAddition op) {
+    StringConcatenation _builder = new StringConcatenation();
+    MatrixExpression _left = op.getLeft();
+    StringConcatenation _compileMatrixExpression = this.compileMatrixExpression(_left);
+    _builder.append(_compileMatrixExpression, "");
+    _builder.append(".plus(");
+    MatrixExpression _right = op.getRight();
+    StringConcatenation _compileMatrixExpression_1 = this.compileMatrixExpression(_right);
+    _builder.append(_compileMatrixExpression_1, "");
+    _builder.append(")");
+    return _builder;
+  }
+  
+  protected StringConcatenation _compileMatrixExpression(final MatrixSubtraction op) {
+    StringConcatenation _builder = new StringConcatenation();
+    MatrixExpression _left = op.getLeft();
+    StringConcatenation _compileMatrixExpression = this.compileMatrixExpression(_left);
+    _builder.append(_compileMatrixExpression, "");
+    _builder.append(".minus(");
+    MatrixExpression _right = op.getRight();
+    StringConcatenation _compileMatrixExpression_1 = this.compileMatrixExpression(_right);
+    _builder.append(_compileMatrixExpression_1, "");
     _builder.append(")");
     return _builder;
   }
   
+  protected StringConcatenation _compileMatrixExpression(final MatrixMultiplication op) {
+    StringConcatenation _builder = new StringConcatenation();
+    {
+      MatrixExpression _rightMatrix = op.getRightMatrix();
+      boolean _operator_notEquals = ObjectExtensions.operator_notEquals(_rightMatrix, null);
+      if (_operator_notEquals) {
+        MatrixExpression _left = op.getLeft();
+        StringConcatenation _compileMatrixExpression = this.compileMatrixExpression(_left);
+        _builder.append(_compileMatrixExpression, "");
+        _builder.append(".times(");
+        MatrixExpression _rightMatrix_1 = op.getRightMatrix();
+        StringConcatenation _compileMatrixExpression_1 = this.compileMatrixExpression(_rightMatrix_1);
+        _builder.append(_compileMatrixExpression_1, "");
+        _builder.append(")");
+      }
+    }
+    _builder.newLineIfNotEmpty();
+    {
+      Formula _rightScalar = op.getRightScalar();
+      boolean _operator_notEquals_1 = ObjectExtensions.operator_notEquals(_rightScalar, null);
+      if (_operator_notEquals_1) {
+        MatrixExpression _left_1 = op.getLeft();
+        StringConcatenation _compileMatrixExpression_2 = this.compileMatrixExpression(_left_1);
+        _builder.append(_compileMatrixExpression_2, "");
+        _builder.append(".times(");
+        Formula _rightScalar_1 = op.getRightScalar();
+        StringConcatenation _compileFormula = this.compileFormula(_rightScalar_1);
+        _builder.append(_compileFormula, "");
+        _builder.append(")");
+      }
+    }
+    return _builder;
+  }
+  
   public StringConcatenation compileExpression(final Expression op) {
     if ((op instanceof Addition)) {
       return _compileExpression((Addition)op);
@@ -463,10 +557,10 @@ public StringConcatenation compileExpression(final Expression op) {
       return _compileExpression((Float)op);
     } else if ((op instanceof Function)) {
       return _compileExpression((Function)op);
-    } else if ((op instanceof Interval)) {
-      return _compileExpression((Interval)op);
     } else if ((op instanceof Invert)) {
       return _compileExpression((Invert)op);
+    } else if ((op instanceof MatrixElement)) {
+      return _compileExpression((MatrixElement)op);
     } else if ((op instanceof Modulo)) {
       return _compileExpression((Modulo)op);
     } else if ((op instanceof Multiplication)) {
@@ -480,4 +574,23 @@ public StringConcatenation compileExpression(final Expression op) {
         java.util.Arrays.<Object>asList(op).toString());
     }
   }
+  
+  public StringConcatenation compileMatrixExpression(final MatrixExpression op) {
+    if ((op instanceof MatrixAddition)) {
+      return _compileMatrixExpression((MatrixAddition)op);
+    } else if ((op instanceof MatrixMultiplication)) {
+      return _compileMatrixExpression((MatrixMultiplication)op);
+    } else if ((op instanceof MatrixSubtraction)) {
+      return _compileMatrixExpression((MatrixSubtraction)op);
+    } else if ((op instanceof MatrixVariable)) {
+      return _compileMatrixExpression((MatrixVariable)op);
+    } else if ((op instanceof NewMatrix)) {
+      return _compileMatrixExpression((NewMatrix)op);
+    } else if ((op instanceof TransposeMatrix)) {
+      return _compileMatrixExpression((TransposeMatrix)op);
+    } else {
+      throw new IllegalArgumentException("Unhandled parameter types: " +
+        java.util.Arrays.<Object>asList(op).toString());
+    }
+  }
 }
\ No newline at end of file
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.Jmole%2Forg.eclipse.iee.translator.jmole.math%2Fxtend-gen%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fjmole%2Fmath%2Fgenerator%2FMathGenerator.java
e77cb4a6813eff16177db86e7e0cf705838977ba
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.TeXmole%2Forg.eclipse.iee.translator.molex.mex%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fmolex%2Fmex%2FMex.ecore
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.TeXmole%2Forg.eclipse.iee.translator.molex.mex%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fmolex%2Fmex%2FMex.ecore?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.TeXmole/org.eclipse.iee.translator.molex.mex/bin/org/eclipse/iee/translator/molex/mex/Mex.ecore
    <eStructuralFeatures xsi:type="ecore:EReference" name="variableAssignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//VariableAssignment"
    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixAssignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixAssignment"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixFormula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixFormula"
        containment="true"/>
  <eClassifiers xsi:type="ecore:EClass" name="VariableAssignment">
    <eStructuralFeatures xsi:type="ecore:EReference" name="addition" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression"
        containment="true"/>
  <eClassifiers xsi:type="ecore:EClass" name="Matrix">
  <eClassifiers xsi:type="ecore:EClass" name="MatrixAssignment">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixFormula"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixFormula">
    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="addition" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="FunctionDefinition">
    <eStructuralFeatures xsi:type="ecore:EReference" name="function" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="formula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Formula"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixElement" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="row" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="column" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="InBrackets" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="inBrackets" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixAddition" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixSubtraction" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixMultiplication" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="rightMatrix" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="rightScalar" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Formula"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="NewMatrix" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="matrix" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Matrix"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="TransposeMatrix" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixVariable" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixInBrackets" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression">
    <eStructuralFeatures xsi:type="ecore:EReference" name="inBrackets" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
        containment="true"/>
  </eClassifiers>
    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixDefinition" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixDefinition"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="assignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Assignment"
  <eClassifiers xsi:type="ecore:EClass" name="Assignment">
  <eClassifiers xsi:type="ecore:EClass" name="FunctionDefinition">
    <eStructuralFeatures xsi:type="ecore:EReference" name="function" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="formula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Formula"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MatrixDefinition">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  <eClassifiers xsi:type="ecore:EClass" name="Interval" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="openingBracket" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="ceil" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="floor" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="closingBracket" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  </eClassifiers>
@@ -6,14 +6,16 @@
   <eClassifiers xsi:type="ecore:EClass" name="Statement">
     <eStructuralFeatures xsi:type="ecore:EReference" name="functionDefinition" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//FunctionDefinition"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixDefinition" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixDefinition"
-        containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="assignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Assignment"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="variableAssignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//VariableAssignment"
         containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="formula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Formula"
         containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixAssignment" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixAssignment"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="matrixFormula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixFormula"
+        containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Assignment">
+  <eClassifiers xsi:type="ecore:EClass" name="VariableAssignment">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="variable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Formula"
         containment="true"/>
@@ -23,26 +25,40 @@
         containment="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="addition" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression"
+        containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" upperBound="-1"
         eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Formula"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="FunctionDefinition">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="function" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression"
-        containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="formula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Formula"
-        containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="MatrixDefinition">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Matrix">
     <eStructuralFeatures xsi:type="ecore:EReference" name="rows" upperBound="-1" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixRow"
         containment="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="MatrixRow">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="elements" unique="false"
         upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixAssignment">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="variable" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="value" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixFormula"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixFormula">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="addition" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="FunctionDefinition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="function" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="formula" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Formula"
+        containment="true"/>
+  </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Addition" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression">
     <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression"
         containment="true"/>
@@ -81,14 +97,6 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="expression" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression"
         containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Interval" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="openingBracket" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="ceil" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression"
-        containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="floor" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression"
-        containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="closingBracket" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-  </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Exponent" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression">
     <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression"
         containment="true"/>
@@ -103,4 +111,47 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="function" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression"
         containment="true"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixElement" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="row" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="column" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="InBrackets" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="inBrackets" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixAddition" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixSubtraction" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixMultiplication" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="rightMatrix" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="rightScalar" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Formula"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NewMatrix" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="matrix" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Matrix"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TransposeMatrix" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixVariable" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MatrixInBrackets" eSuperTypes="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="inBrackets" eType="ecore:EClass platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression"
+        containment="true"/>
+  </eClassifiers>
 </ecore:EPackage>
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.TeXmole%2Forg.eclipse.iee.translator.molex.mex%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fmolex%2Fmex%2FMex.ecore
3711c7cad95460171e5f8ff35069c3617b50277e
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.TeXmole%2Forg.eclipse.iee.translator.molex.mex%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fmolex%2Fmex%2FMex.genmodel
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.TeXmole%2Forg.eclipse.iee.translator.molex.mex%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fmolex%2Fmex%2FMex.genmodel?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.TeXmole/org.eclipse.iee.translator.molex.mex/bin/org/eclipse/iee/translator/molex/mex/Mex.genmodel
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Statement/variableAssignment"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Statement/matrixAssignment"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Statement/matrixFormula"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//VariableAssignment">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//VariableAssignment/variable"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//VariableAssignment/value"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression/addition"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Matrix">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Matrix/rows"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixAssignment">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixAssignment/variable"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixAssignment/value"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixFormula">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixFormula/expression"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression/addition"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//FunctionDefinition">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//FunctionDefinition/function"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//FunctionDefinition/formula"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixElement">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixElement/element"/>
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixElement/row"/>
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixElement/column"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//InBrackets">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//InBrackets/inBrackets"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixAddition">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixAddition/left"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixAddition/right"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixSubtraction">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixSubtraction/left"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixSubtraction/right"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixMultiplication">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixMultiplication/left"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixMultiplication/rightMatrix"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixMultiplication/rightScalar"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//NewMatrix">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//NewMatrix/matrix"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//TransposeMatrix">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//TransposeMatrix/name"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixVariable">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixVariable/name"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixInBrackets">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixInBrackets/inBrackets"/>
    </genClasses>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Statement/matrixDefinition"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Statement/assignment"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Assignment">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Assignment/variable"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Assignment/value"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//FunctionDefinition">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//FunctionDefinition/function"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//FunctionDefinition/formula"/>
    </genClasses>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixDefinition">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixDefinition/name"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixDefinition/rows"/>
    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Interval">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Interval/openingBracket"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Interval/ceil"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Interval/floor"/>
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Interval/closingBracket"/>
    </genClasses>
@@ -11,32 +11,43 @@
       ecorePackage="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#/">
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Statement">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Statement/functionDefinition"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Statement/matrixDefinition"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Statement/assignment"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Statement/variableAssignment"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Statement/formula"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Statement/matrixAssignment"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Statement/matrixFormula"/>
     </genClasses>
-    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Assignment">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Assignment/variable"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Assignment/value"/>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//VariableAssignment">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//VariableAssignment/variable"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//VariableAssignment/value"/>
     </genClasses>
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Formula">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Formula/expression"/>
     </genClasses>
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression/addition"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression/name"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Expression/parameters"/>
     </genClasses>
-    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//FunctionDefinition">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//FunctionDefinition/function"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//FunctionDefinition/formula"/>
-    </genClasses>
-    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixDefinition">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixDefinition/name"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixDefinition/rows"/>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Matrix">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Matrix/rows"/>
     </genClasses>
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixRow">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixRow/elements"/>
     </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixAssignment">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixAssignment/variable"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixAssignment/value"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixFormula">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixFormula/expression"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixExpression/addition"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//FunctionDefinition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//FunctionDefinition/function"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//FunctionDefinition/formula"/>
+    </genClasses>
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Addition">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Addition/left"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Addition/right"/>
@@ -63,12 +74,6 @@
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Factorial">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Factorial/expression"/>
     </genClasses>
-    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Interval">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Interval/openingBracket"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Interval/ceil"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Interval/floor"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Interval/closingBracket"/>
-    </genClasses>
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Exponent">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Exponent/left"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Exponent/right"/>
@@ -80,5 +85,38 @@
     <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Function">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//Function/function"/>
     </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixElement">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixElement/element"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixElement/row"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixElement/column"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//InBrackets">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//InBrackets/inBrackets"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixAddition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixAddition/left"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixAddition/right"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixSubtraction">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixSubtraction/left"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixSubtraction/right"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixMultiplication">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixMultiplication/left"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixMultiplication/rightMatrix"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixMultiplication/rightScalar"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//NewMatrix">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//NewMatrix/matrix"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//TransposeMatrix">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//TransposeMatrix/name"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixVariable">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixVariable/name"/>
+    </genClasses>
+    <genClasses ecoreClass="platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixInBrackets">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference platform:/resource/org.eclipse.iee.translator.molex.mex/src-gen/org/eclipse/iee/translator/molex/mex/Mex.ecore#//MatrixInBrackets/inBrackets"/>
+    </genClasses>
   </genPackages>
 </genmodel:GenModel>
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.TeXmole%2Forg.eclipse.iee.translator.molex.mex%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fmolex%2Fmex%2FMex.genmodel
e7e32f3ac7ddad3abe1c73597d8453cf3968abe2
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.TeXmole%2Forg.eclipse.iee.translator.molex.mex%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fmolex%2Fmex%2FMex.xmi
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.TeXmole%2Forg.eclipse.iee.translator.molex.mex%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fmolex%2Fmex%2FMex.xmi?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.TeXmole/org.eclipse.iee.translator.molex.mex/bin/org/eclipse/iee/translator/molex/mex/Mex.xmi
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.19"/>
        <elements xsi:type="xtext:Assignment" feature="variableAssignment" operator="=">
        <elements xsi:type="xtext:Assignment" feature="matrixAssignment" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
        </elements>
        <elements xsi:type="xtext:Assignment" feature="matrixFormula" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
        </elements>
    <rules xsi:type="xtext:ParserRule" name="VariableAssignment">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//VariableAssignment"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="AdditionInBrackets">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//Expression"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Keyword" value="("/>
        <elements xsi:type="xtext:Assignment" feature="addition" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
        </elements>
        <elements xsi:type="xtext:Keyword" value=")"/>
        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.7"/>
          <elements xsi:type="xtext:Keyword" value="(-"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
          <elements xsi:type="xtext:Keyword" value=")"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.17"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
          </elements>
        </elements>
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixElement"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Assignment" feature="element" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value="["/>
          <elements xsi:type="xtext:Assignment" feature="row" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value="]"/>
          <elements xsi:type="xtext:Keyword" value="["/>
          <elements xsi:type="xtext:Assignment" feature="column" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value="]"/>
        </elements>
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//InBrackets"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Assignment" feature="inBrackets" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
          </elements>
        </elements>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="Matrix">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//Matrix"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Keyword" value="{"/>
        <elements xsi:type="xtext:Group" cardinality="?">
          <elements xsi:type="xtext:Assignment" feature="rows" operator="+=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
          </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="/0/@rules.10"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="}"/>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixRow">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixRow"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Keyword" value="{"/>
        <elements xsi:type="xtext:Group" cardinality="?">
          <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.17"/>
          </elements>
          <elements xsi:type="xtext:Group" cardinality="*">
            <elements xsi:type="xtext:Keyword" value=","/>
            <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.17"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="}"/>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixAssignment">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixAssignment"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Keyword" value="["/>
        <elements xsi:type="xtext:Assignment" feature="variable" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="]"/>
        <elements xsi:type="xtext:Keyword" value="="/>
        <elements xsi:type="xtext:Assignment" feature="value" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
        </elements>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixFormula">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixFormula"/>
      </type>
      <alternatives xsi:type="xtext:Assignment" feature="expression" operator="=">
        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixAdditionInBrackets">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixExpression"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Keyword" value="("/>
        <elements xsi:type="xtext:Assignment" feature="addition" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
        </elements>
        <elements xsi:type="xtext:Keyword" value=")"/>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixAddition">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixExpression"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
        <elements xsi:type="xtext:Alternatives" cardinality="*">
          <elements xsi:type="xtext:Group">
            <elements xsi:type="xtext:Keyword" value="+"/>
            <elements xsi:type="xtext:Action" feature="left" operator="=">
              <type metamodel="/0/@metamodelDeclarations.1">
                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixAddition"/>
              </type>
            </elements>
            <elements xsi:type="xtext:Assignment" feature="right" operator="=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Group">
            <elements xsi:type="xtext:Keyword" value="-"/>
            <elements xsi:type="xtext:Action" feature="left" operator="=">
              <type metamodel="/0/@metamodelDeclarations.1">
                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixSubtraction"/>
              </type>
            </elements>
            <elements xsi:type="xtext:Assignment" feature="right" operator="=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
            </elements>
          </elements>
        </elements>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixMultiplication">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixExpression"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.16"/>
        <elements xsi:type="xtext:Alternatives" cardinality="*">
          <elements xsi:type="xtext:Group">
            <elements xsi:type="xtext:Keyword" value="*"/>
            <elements xsi:type="xtext:Action" feature="left" operator="=">
              <type metamodel="/0/@metamodelDeclarations.1">
                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixMultiplication"/>
              </type>
            </elements>
            <elements xsi:type="xtext:Assignment" feature="rightMatrix" operator="=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.16"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Group">
            <elements xsi:type="xtext:Keyword" value="*"/>
            <elements xsi:type="xtext:Action" feature="left" operator="=">
              <type metamodel="/0/@metamodelDeclarations.1">
                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixMultiplication"/>
              </type>
            </elements>
            <elements xsi:type="xtext:Assignment" feature="rightScalar" operator="=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
            </elements>
          </elements>
        </elements>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="PrimaryMatrix">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixExpression"/>
      </type>
      <alternatives xsi:type="xtext:Alternatives">
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//NewMatrix"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Assignment" feature="matrix" operator="=">
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//TransposeMatrix"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Keyword" value="["/>
          <elements xsi:type="xtext:Assignment" feature="name" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value="]^T"/>
        </elements>
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixVariable"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Keyword" value="["/>
          <elements xsi:type="xtext:Assignment" feature="name" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value="]"/>
        </elements>
          <elements xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixInBrackets"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Assignment" feature="inBrackets" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
          </elements>
        </elements>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
        <elements xsi:type="xtext:Assignment" feature="matrixDefinition" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
        </elements>
        <elements xsi:type="xtext:Assignment" feature="assignment" operator="=">
    <rules xsi:type="xtext:ParserRule" name="Assignment">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//Assignment"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
          <elements xsi:type="xtext:Keyword" value="-"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
        <elements xsi:type="xtext:Group">
          <elements xsi:type="xtext:Action">
            <type metamodel="/0/@metamodelDeclarations.1">
              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//Interval"/>
            </type>
          </elements>
          <elements xsi:type="xtext:Assignment" feature="openingBracket" operator="=">
            <terminal xsi:type="xtext:Alternatives">
              <elements xsi:type="xtext:Keyword" value="["/>
              <elements xsi:type="xtext:Keyword" value="("/>
            </terminal>
          </elements>
          <elements xsi:type="xtext:Keyword" value="("/>
          <elements xsi:type="xtext:Assignment" feature="ceil" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value=")"/>
          <elements xsi:type="xtext:Keyword" value=".."/>
          <elements xsi:type="xtext:Keyword" value="("/>
          <elements xsi:type="xtext:Assignment" feature="floor" operator="=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
          </elements>
          <elements xsi:type="xtext:Keyword" value=")"/>
          <elements xsi:type="xtext:Assignment" feature="closingBracket" operator="=">
            <terminal xsi:type="xtext:Alternatives">
              <elements xsi:type="xtext:Keyword" value="]"/>
              <elements xsi:type="xtext:Keyword" value=")"/>
            </terminal>
          </elements>
        </elements>
        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.7"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.7"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
          <elements xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
    <rules xsi:type="xtext:ParserRule" name="MatrixDefinition">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixDefinition"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="="/>
        <elements xsi:type="xtext:Keyword" value="{"/>
        <elements xsi:type="xtext:Group" cardinality="?">
          <elements xsi:type="xtext:Assignment" feature="rows" operator="+=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
          </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="/0/@rules.12"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="}"/>
      </alternatives>
    </rules>
    <rules xsi:type="xtext:ParserRule" name="MatrixRow">
      <type metamodel="/0/@metamodelDeclarations.1">
        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixRow"/>
      </type>
      <alternatives xsi:type="xtext:Group">
        <elements xsi:type="xtext:Keyword" value="{"/>
        <elements xsi:type="xtext:Group" cardinality="?">
          <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
          </elements>
          <elements xsi:type="xtext:Group" cardinality="*">
            <elements xsi:type="xtext:Keyword" value=","/>
            <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
            </elements>
          </elements>
          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
        </elements>
        <elements xsi:type="xtext:Keyword" value="}"/>
      </alternatives>
    </rules>
@@ -13,26 +13,29 @@
       </type>
       <alternatives xsi:type="xtext:Alternatives">
         <elements xsi:type="xtext:Assignment" feature="functionDefinition" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.19"/>
         </elements>
-        <elements xsi:type="xtext:Assignment" feature="matrixDefinition" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
-        </elements>
-        <elements xsi:type="xtext:Assignment" feature="assignment" operator="=">
+        <elements xsi:type="xtext:Assignment" feature="variableAssignment" operator="=">
           <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.1"/>
         </elements>
         <elements xsi:type="xtext:Assignment" feature="formula" operator="=">
           <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
         </elements>
+        <elements xsi:type="xtext:Assignment" feature="matrixAssignment" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
+        </elements>
+        <elements xsi:type="xtext:Assignment" feature="matrixFormula" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
+        </elements>
       </alternatives>
     </rules>
-    <rules xsi:type="xtext:ParserRule" name="Assignment">
+    <rules xsi:type="xtext:ParserRule" name="VariableAssignment">
       <type metamodel="/0/@metamodelDeclarations.1">
-        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//Assignment"/>
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//VariableAssignment"/>
       </type>
       <alternatives xsi:type="xtext:Group">
         <elements xsi:type="xtext:Assignment" feature="variable" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
         </elements>
         <elements xsi:type="xtext:Keyword" value="="/>
         <elements xsi:type="xtext:Assignment" feature="value" operator="=">
@@ -45,15 +48,27 @@
         <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//Formula"/>
       </type>
       <alternatives xsi:type="xtext:Assignment" feature="expression" operator="=">
-        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="AdditionInBrackets">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//Expression"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="("/>
+        <elements xsi:type="xtext:Assignment" feature="addition" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value=")"/>
       </alternatives>
     </rules>
     <rules xsi:type="xtext:ParserRule" name="Addition">
       <type metamodel="/0/@metamodelDeclarations.1">
         <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//Expression"/>
       </type>
       <alternatives xsi:type="xtext:Group">
-        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
         <elements xsi:type="xtext:Alternatives" cardinality="*">
           <elements xsi:type="xtext:Group">
             <elements xsi:type="xtext:Keyword" value="+"/>
@@ -63,7 +78,7 @@
               </type>
             </elements>
             <elements xsi:type="xtext:Assignment" feature="right" operator="=">
-              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
             </elements>
           </elements>
           <elements xsi:type="xtext:Group">
@@ -74,7 +89,7 @@
               </type>
             </elements>
             <elements xsi:type="xtext:Assignment" feature="right" operator="=">
-              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
             </elements>
           </elements>
         </elements>
@@ -85,7 +100,7 @@
         <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//Expression"/>
       </type>
       <alternatives xsi:type="xtext:Group">
-        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
         <elements xsi:type="xtext:Alternatives" cardinality="*">
           <elements xsi:type="xtext:Group">
             <elements xsi:type="xtext:Keyword" value="*"/>
@@ -95,7 +110,7 @@
               </type>
             </elements>
             <elements xsi:type="xtext:Assignment" feature="right" operator="=">
-              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
             </elements>
           </elements>
           <elements xsi:type="xtext:Group">
@@ -106,7 +121,7 @@
               </type>
             </elements>
             <elements xsi:type="xtext:Assignment" feature="right" operator="=">
-              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
             </elements>
           </elements>
           <elements xsi:type="xtext:Group">
@@ -117,7 +132,7 @@
               </type>
             </elements>
             <elements xsi:type="xtext:Assignment" feature="right" operator="=">
-              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
             </elements>
           </elements>
         </elements>
@@ -128,17 +143,18 @@
         <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//Expression"/>
       </type>
       <alternatives xsi:type="xtext:Alternatives">
-        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.7"/>
         <elements xsi:type="xtext:Group">
-          <elements xsi:type="xtext:Keyword" value="-"/>
+          <elements xsi:type="xtext:Keyword" value="(-"/>
           <elements xsi:type="xtext:Action">
             <type metamodel="/0/@metamodelDeclarations.1">
               <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//Invert"/>
             </type>
           </elements>
           <elements xsi:type="xtext:Assignment" feature="expression" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
           </elements>
+          <elements xsi:type="xtext:Keyword" value=")"/>
         </elements>
         <elements xsi:type="xtext:Group">
           <elements xsi:type="xtext:Keyword" value="("/>
@@ -148,48 +164,18 @@
             </type>
           </elements>
           <elements xsi:type="xtext:Assignment" feature="expression" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
           </elements>
           <elements xsi:type="xtext:Keyword" value=")!"/>
         </elements>
-        <elements xsi:type="xtext:Group">
-          <elements xsi:type="xtext:Action">
-            <type metamodel="/0/@metamodelDeclarations.1">
-              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//Interval"/>
-            </type>
-          </elements>
-          <elements xsi:type="xtext:Assignment" feature="openingBracket" operator="=">
-            <terminal xsi:type="xtext:Alternatives">
-              <elements xsi:type="xtext:Keyword" value="["/>
-              <elements xsi:type="xtext:Keyword" value="("/>
-            </terminal>
-          </elements>
-          <elements xsi:type="xtext:Keyword" value="("/>
-          <elements xsi:type="xtext:Assignment" feature="ceil" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
-          </elements>
-          <elements xsi:type="xtext:Keyword" value=")"/>
-          <elements xsi:type="xtext:Keyword" value=".."/>
-          <elements xsi:type="xtext:Keyword" value="("/>
-          <elements xsi:type="xtext:Assignment" feature="floor" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
-          </elements>
-          <elements xsi:type="xtext:Keyword" value=")"/>
-          <elements xsi:type="xtext:Assignment" feature="closingBracket" operator="=">
-            <terminal xsi:type="xtext:Alternatives">
-              <elements xsi:type="xtext:Keyword" value="]"/>
-              <elements xsi:type="xtext:Keyword" value=")"/>
-            </terminal>
-          </elements>
-        </elements>
       </alternatives>
     </rules>
     <rules xsi:type="xtext:ParserRule" name="Exponent">
       <type metamodel="/0/@metamodelDeclarations.1">
         <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//Expression"/>
       </type>
       <alternatives xsi:type="xtext:Group">
-        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.7"/>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
         <elements xsi:type="xtext:Group" cardinality="?">
           <elements xsi:type="xtext:Action" feature="left" operator="=">
             <type metamodel="/0/@metamodelDeclarations.1">
@@ -198,7 +184,7 @@
           </elements>
           <elements xsi:type="xtext:Keyword" value="^"/>
           <elements xsi:type="xtext:Assignment" feature="right" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.7"/>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
           </elements>
         </elements>
       </alternatives>
@@ -215,7 +201,7 @@
             </type>
           </elements>
           <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
           </elements>
         </elements>
         <elements xsi:type="xtext:Group">
@@ -225,7 +211,7 @@
             </type>
           </elements>
           <elements xsi:type="xtext:Assignment" feature="value" operator="=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.17"/>
           </elements>
         </elements>
         <elements xsi:type="xtext:Group">
@@ -235,14 +221,237 @@
             </type>
           </elements>
           <elements xsi:type="xtext:Assignment" feature="function" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
+          </elements>
+        </elements>
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Action">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixElement"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Assignment" feature="element" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="["/>
+          <elements xsi:type="xtext:Assignment" feature="row" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="]"/>
+          <elements xsi:type="xtext:Keyword" value="["/>
+          <elements xsi:type="xtext:Assignment" feature="column" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/1/@rules.1"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="]"/>
+        </elements>
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Action">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//InBrackets"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Assignment" feature="inBrackets" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+          </elements>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Matrix">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//Matrix"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Assignment" feature="rows" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
+          </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="/0/@rules.10"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="MatrixRow">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixRow"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.17"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.17"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="MatrixAssignment">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixAssignment"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="["/>
+        <elements xsi:type="xtext:Assignment" feature="variable" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="]"/>
+        <elements xsi:type="xtext:Keyword" value="="/>
+        <elements xsi:type="xtext:Assignment" feature="value" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="MatrixFormula">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixFormula"/>
+      </type>
+      <alternatives xsi:type="xtext:Assignment" feature="expression" operator="=">
+        <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="MatrixAdditionInBrackets">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixExpression"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="("/>
+        <elements xsi:type="xtext:Assignment" feature="addition" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value=")"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="MatrixAddition">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixExpression"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
+        <elements xsi:type="xtext:Alternatives" cardinality="*">
+          <elements xsi:type="xtext:Group">
+            <elements xsi:type="xtext:Keyword" value="+"/>
+            <elements xsi:type="xtext:Action" feature="left" operator="=">
+              <type metamodel="/0/@metamodelDeclarations.1">
+                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixAddition"/>
+              </type>
+            </elements>
+            <elements xsi:type="xtext:Assignment" feature="right" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Group">
+            <elements xsi:type="xtext:Keyword" value="-"/>
+            <elements xsi:type="xtext:Action" feature="left" operator="=">
+              <type metamodel="/0/@metamodelDeclarations.1">
+                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixSubtraction"/>
+              </type>
+            </elements>
+            <elements xsi:type="xtext:Assignment" feature="right" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
+            </elements>
+          </elements>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="MatrixMultiplication">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixExpression"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.16"/>
+        <elements xsi:type="xtext:Alternatives" cardinality="*">
+          <elements xsi:type="xtext:Group">
+            <elements xsi:type="xtext:Keyword" value="*"/>
+            <elements xsi:type="xtext:Action" feature="left" operator="=">
+              <type metamodel="/0/@metamodelDeclarations.1">
+                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixMultiplication"/>
+              </type>
+            </elements>
+            <elements xsi:type="xtext:Assignment" feature="rightMatrix" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.16"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Group">
+            <elements xsi:type="xtext:Keyword" value="*"/>
+            <elements xsi:type="xtext:Action" feature="left" operator="=">
+              <type metamodel="/0/@metamodelDeclarations.1">
+                <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixMultiplication"/>
+              </type>
+            </elements>
+            <elements xsi:type="xtext:Assignment" feature="rightScalar" operator="=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
+            </elements>
+          </elements>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="PrimaryMatrix">
+      <type metamodel="/0/@metamodelDeclarations.1">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixExpression"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Action">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//NewMatrix"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Assignment" feature="matrix" operator="=">
             <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
           </elements>
         </elements>
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Action">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//TransposeMatrix"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="["/>
+          <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="]^T"/>
+        </elements>
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Action">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixVariable"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="["/>
+          <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="]"/>
+        </elements>
         <elements xsi:type="xtext:Group">
           <elements xsi:type="xtext:Keyword" value="("/>
-          <elements xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+          <elements xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
           <elements xsi:type="xtext:Keyword" value=")"/>
         </elements>
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Action">
+            <type metamodel="/0/@metamodelDeclarations.1">
+              <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixInBrackets"/>
+            </type>
+          </elements>
+          <elements xsi:type="xtext:Assignment" feature="inBrackets" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+          </elements>
+        </elements>
       </alternatives>
     </rules>
     <rules xsi:type="xtext:ParserRule" name="Float">
@@ -271,7 +480,7 @@
       </type>
       <alternatives xsi:type="xtext:Group">
         <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
         </elements>
         <elements xsi:type="xtext:Keyword" value="("/>
         <elements xsi:type="xtext:Group" cardinality="?">
@@ -295,60 +504,14 @@
       </type>
       <alternatives xsi:type="xtext:Group">
         <elements xsi:type="xtext:Assignment" feature="function" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
         </elements>
         <elements xsi:type="xtext:Keyword" value="="/>
         <elements xsi:type="xtext:Assignment" feature="formula" operator="=">
           <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
         </elements>
       </alternatives>
     </rules>
-    <rules xsi:type="xtext:ParserRule" name="MatrixDefinition">
-      <type metamodel="/0/@metamodelDeclarations.1">
-        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixDefinition"/>
-      </type>
-      <alternatives xsi:type="xtext:Group">
-        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
-        </elements>
-        <elements xsi:type="xtext:Keyword" value="="/>
-        <elements xsi:type="xtext:Keyword" value="{"/>
-        <elements xsi:type="xtext:Group" cardinality="?">
-          <elements xsi:type="xtext:Assignment" feature="rows" operator="+=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
-          </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="/0/@rules.12"/>
-            </elements>
-          </elements>
-          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
-        </elements>
-        <elements xsi:type="xtext:Keyword" value="}"/>
-      </alternatives>
-    </rules>
-    <rules xsi:type="xtext:ParserRule" name="MatrixRow">
-      <type metamodel="/0/@metamodelDeclarations.1">
-        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/iee/translator/molex/mex/Mex#//MatrixRow"/>
-      </type>
-      <alternatives xsi:type="xtext:Group">
-        <elements xsi:type="xtext:Keyword" value="{"/>
-        <elements xsi:type="xtext:Group" cardinality="?">
-          <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
-          </elements>
-          <elements xsi:type="xtext:Group" cardinality="*">
-            <elements xsi:type="xtext:Keyword" value=","/>
-            <elements xsi:type="xtext:Assignment" feature="elements" operator="+=">
-              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
-            </elements>
-          </elements>
-          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
-        </elements>
-        <elements xsi:type="xtext:Keyword" value="}"/>
-      </alternatives>
-    </rules>
     <rules xsi:type="xtext:TerminalRule" name="MATH_NAME">
       <type metamodel="/0/@metamodelDeclarations.0">
         <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.TeXmole%2Forg.eclipse.iee.translator.molex.mex%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fmolex%2Fmex%2FMex.xmi
f64d40be02be8ac836eb013d75282630c9775db1
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.TeXmole%2Forg.eclipse.iee.translator.molex.mex%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fmolex%2Fmex%2FMex.xtext
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.TeXmole%2Forg.eclipse.iee.translator.molex.mex%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fmolex%2Fmex%2FMex.xtext?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.TeXmole/org.eclipse.iee.translator.molex.mex/bin/org/eclipse/iee/translator/molex/mex/Mex.xtext
	variableAssignment=VariableAssignment |
	formula=Formula |
	matrixAssignment=MatrixAssignment |
	matrixFormula=MatrixFormula;
VariableAssignment:
AdditionInBrackets returns Expression:
	'(' addition=Addition ')'
;
	'(-' {Invert} expression=UnaryExpression')' |
	'(' {Factorial} expression=UnaryExpression ')!';
	
	{MatrixElement} element=MATH_NAME '[' row=INT ']' '[' column=INT ']' | 
	{InBrackets} inBrackets=AdditionInBrackets;

Matrix:
	'{' (rows+=MatrixRow (',' rows+=MatrixRow)* ','?)? '}';
	
MatrixRow:
	'{' (elements+=Float (',' elements+=Float)* ','?)? '}';

MatrixAssignment:
	'[' variable=MATH_NAME ']' '=' value=MatrixFormula;

MatrixFormula:
	expression=MatrixAddition;

MatrixAdditionInBrackets returns MatrixExpression:
	'(' addition=MatrixAddition ')'
;

MatrixAddition returns MatrixExpression:
	MatrixMultiplication ('+' {MatrixAddition.left=current} right=MatrixMultiplication | '-' {MatrixSubtraction.left=current}
	right=MatrixMultiplication)*;
	
MatrixMultiplication returns MatrixExpression:
	PrimaryMatrix ('*' {MatrixMultiplication.left=current} rightMatrix=PrimaryMatrix |
				   '*' {MatrixMultiplication.left=current} rightScalar=Formula
	)*;
	
PrimaryMatrix returns MatrixExpression:
	{NewMatrix} matrix=Matrix |
	{TransposeMatrix} '[' name=MATH_NAME ']^T'|
	{MatrixVariable} '[' name=MATH_NAME ']' |
	'(' MatrixAddition ')' |
	{MatrixInBrackets} inBrackets=MatrixAdditionInBrackets;
	name=MATH_NAME '(' (parameters+=Formula (',' parameters+=Formula)* ','?)? ')';
	
	('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*;
	matrixDefinition=MatrixDefinition |
	assignment=Assignment |
	formula=Formula;
Assignment:
	('-' {Invert} expression=UnaryExpression) |
	'(' {Factorial} expression=UnaryExpression ')!'|
	{Interval} openingBracket=('['|'(') '('ceil=UnaryExpression')' '..' '('floor=UnaryExpression')' closingBracket=(']'|')');

	'(' Addition ')';
	(name=MATH_NAME) '(' (parameters+=Formula (',' parameters+=Formula)* ','?)? ')';

MatrixDefinition:
	(name=MATH_NAME) '=' '{' (rows+=MatrixRow (',' rows+=MatrixRow)* ','?)? '}';

MatrixRow:
	'{' (elements+=Float (',' elements+=Float)* ','?)? '}';

	('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*;
@@ -5,16 +5,20 @@ generate mex "http://www.eclipse.org/iee/translator/molex/mex/Mex"
 
 Statement:
 	functionDefinition=FunctionDefinition |
-	matrixDefinition=MatrixDefinition |
-	assignment=Assignment |
-	formula=Formula;
+	variableAssignment=VariableAssignment |
+	formula=Formula |
+	matrixAssignment=MatrixAssignment |
+	matrixFormula=MatrixFormula;
 
-Assignment:
+VariableAssignment:
 	variable=MATH_NAME '=' value=Formula;
 
 Formula:
 	expression=(Addition);
 
+AdditionInBrackets returns Expression:
+	'(' addition=Addition ')'
+;
 	// addition/subtraction: left associative, priority 0
 Addition returns Expression:
 	Multiplication ('+' {Addition.left=current} right=Multiplication | '-' {Subtraction.left=current}
@@ -28,10 +32,9 @@ Multiplication returns Expression:
 	// Unary operators: right associative, priority 2
 UnaryExpression returns Expression:
 	Exponent |
-	('-' {Invert} expression=UnaryExpression) |
-	'(' {Factorial} expression=UnaryExpression ')!'|
-	{Interval} openingBracket=('['|'(') '('ceil=UnaryExpression')' '..' '('floor=UnaryExpression')' closingBracket=(']'|')');
-
+	'(-' {Invert} expression=UnaryExpression')' |
+	'(' {Factorial} expression=UnaryExpression ')!';
+	
 	// exponentiation: right associative, priority 3
 Exponent returns Expression:
 	Primary ({Exponent.left=current} '^' right=Primary)?;
@@ -40,22 +43,49 @@ Primary returns Expression:
 	{Variable} name=MATH_NAME |
 	{Float} value=Float |
 	{Function} function=Function |
-	'(' Addition ')';
+	{MatrixElement} element=MATH_NAME '[' row=INT ']' '[' column=INT ']' | 
+	{InBrackets} inBrackets=AdditionInBrackets;
+
+Matrix:
+	'{' (rows+=MatrixRow (',' rows+=MatrixRow)* ','?)? '}';
+	
+MatrixRow:
+	'{' (elements+=Float (',' elements+=Float)* ','?)? '}';
+
+MatrixAssignment:
+	'[' variable=MATH_NAME ']' '=' value=MatrixFormula;
+
+MatrixFormula:
+	expression=MatrixAddition;
+
+MatrixAdditionInBrackets returns MatrixExpression:
+	'(' addition=MatrixAddition ')'
+;
+
+MatrixAddition returns MatrixExpression:
+	MatrixMultiplication ('+' {MatrixAddition.left=current} right=MatrixMultiplication | '-' {MatrixSubtraction.left=current}
+	right=MatrixMultiplication)*;
+	
+MatrixMultiplication returns MatrixExpression:
+	PrimaryMatrix ('*' {MatrixMultiplication.left=current} rightMatrix=PrimaryMatrix |
+				   '*' {MatrixMultiplication.left=current} rightScalar=Formula
+	)*;
+	
+PrimaryMatrix returns MatrixExpression:
+	{NewMatrix} matrix=Matrix |
+	{TransposeMatrix} '[' name=MATH_NAME ']^T'|
+	{MatrixVariable} '[' name=MATH_NAME ']' |
+	'(' MatrixAddition ')' |
+	{MatrixInBrackets} inBrackets=MatrixAdditionInBrackets;
 
 Float:
 	INT+ ('.' INT+ (('E' | 'e') ('-')? (INT)+)?)?;
 
 Function returns Expression:
-	(name=MATH_NAME) '(' (parameters+=Formula (',' parameters+=Formula)* ','?)? ')';
+	name=MATH_NAME '(' (parameters+=Formula (',' parameters+=Formula)* ','?)? ')';
 
 FunctionDefinition:
 	function=Function '=' formula=Formula;
-
-MatrixDefinition:
-	(name=MATH_NAME) '=' '{' (rows+=MatrixRow (',' rows+=MatrixRow)* ','?)? '}';
-
-MatrixRow:
-	'{' (elements+=Float (',' elements+=Float)* ','?)? '}';
-
+	
 terminal MATH_NAME returns ecore::EString:
-	('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*;
+	('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*;
\ No newline at end of file
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.TeXmole%2Forg.eclipse.iee.translator.molex.mex%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fmolex%2Fmex%2FMex.xtext
b3bd748d17b20d16d5fbcc39cfb3605b41621bb7
modified
https://github.com/iee/iee/blob/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.TeXmole%2Forg.eclipse.iee.translator.molex.mex%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fmolex%2Fmex%2Fgenerator%2FMexGenerator.xtend
https://api.github.com/repos/iee/iee/contents/org.eclipse.iee.translator.TeXmole%2Forg.eclipse.iee.translator.molex.mex%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fmolex%2Fmex%2Fgenerator%2FMexGenerator.xtend?ref=0f04d91efdf50447d8e84e926ef98d7462103dc0
org.eclipse.iee.translator.TeXmole/org.eclipse.iee.translator.molex.mex/bin/org/eclipse/iee/translator/molex/mex/generator/MexGenerator.xtend
		�IF s.variableAssignment != null��compileVariableAssignment(s.variableAssignment)��ENDIF�
		�IF s.matrixAssignment != null��compileMatrixAssignment(s.matrixAssignment)��ENDIF�
		�IF s.matrixFormula != null��compileMatrixFormula(s.matrixFormula)��ENDIF�
		�IF funcDef.function.name == "alpha" || funcDef.function.name == "beta" || funcDef.function.name == "gamma" ||
		    funcDef.function.name == "delta" || funcDef.function.name == "epsilon" || funcDef.function.name == "varepsilon" ||
		    funcDef.function.name == "zeta" || funcDef.function.name == "eta" || funcDef.function.name == "theta" ||
		    funcDef.function.name == "vartheta" || funcDef.function.name == "gamma" || funcDef.function.name == "kappa" ||
			funcDef.function.name == "lambda" || funcDef.function.name == "mu" || funcDef.function.name == "nu" || 
			funcDef.function.name == "xi" || funcDef.function.name == "pi" || funcDef.function.name == "varpi" || 
			funcDef.function.name == "rho" || funcDef.function.name == "varrho" || funcDef.function.name == "sigma" ||
			funcDef.function.name == "varsigma" || funcDef.function.name == "tau" || funcDef.function.name == "upsilon" ||
			funcDef.function.name == "phi" || funcDef.function.name == "varphi" || funcDef.function.name == "chi" || 
			funcDef.function.name == "psi" || funcDef.function.name == "omega" || funcDef.function.name == "Gamma" ||
			funcDef.function.name == "Delta" || funcDef.function.name == "Theta" || funcDef.function.name == "Lambda" ||
			funcDef.function.name == "Xi" || funcDef.function.name == "Pi" || funcDef.function.name == "Sigma" || 
			funcDef.function.name == "Upsilon" || funcDef.function.name == "Phi" || funcDef.function.name == "Psi" || 
			funcDef.function.name == "Omega"�
			\
		�ENDIF�
	def compileVariableAssignment(VariableAssignment a)
	 	�IF a.variable == "alpha" || a.variable == "beta" || a.variable == "gamma" ||
		    a.variable == "delta" || a.variable == "epsilon" || a.variable == "varepsilon" ||
		    a.variable == "zeta" || a.variable == "eta" || a.variable == "theta" ||
		    a.variable == "vartheta" || a.variable == "gamma" || a.variable == "kappa" ||
			a.variable == "lambda" || a.variable == "mu" || a.variable == "nu" || 
			a.variable == "xi" || a.variable == "pi" || a.variable == "varpi" || 
			a.variable == "rho" || a.variable == "varrho" || a.variable == "sigma" ||
			a.variable == "varsigma" || a.variable == "tau" || a.variable == "upsilon" ||
			a.variable == "phi" || a.variable == "varphi" || a.variable == "chi" || 
			a.variable == "psi" || a.variable == "omega" || a.variable == "Gamma" ||
			a.variable == "Delta" || a.variable == "Theta" || a.variable == "Lambda" ||
			a.variable == "Xi" || a.variable == "Pi" || a.variable == "Sigma" || 
			a.variable == "Upsilon" || a.variable == "Phi" || a.variable == "Psi" || 
			a.variable == "Omega"�
			\
		�ENDIF�
	def compileMatrixFormula(MatrixFormula f) 
		�compileMatrixExpression(f.expression)�
	def compileMatrixAssignment(MatrixAssignment a)
	{
	 '''
	 	�IF a.variable == "alpha" || a.variable == "beta" || a.variable == "gamma" ||
		    a.variable == "delta" || a.variable == "epsilon" || a.variable == "varepsilon" ||
		    a.variable == "zeta" || a.variable == "eta" || a.variable == "theta" ||
		    a.variable == "vartheta" || a.variable == "gamma" || a.variable == "kappa" ||
			a.variable == "lambda" || a.variable == "mu" || a.variable == "nu" || 
			a.variable == "xi" || a.variable == "pi" || a.variable == "varpi" || 
			a.variable == "rho" || a.variable == "varrho" || a.variable == "sigma" ||
			a.variable == "varsigma" || a.variable == "tau" || a.variable == "upsilon" ||
			a.variable == "phi" || a.variable == "varphi" || a.variable == "chi" || 
			a.variable == "psi" || a.variable == "omega" || a.variable == "Gamma" ||
			a.variable == "Delta" || a.variable == "Theta" || a.variable == "Lambda" ||
			a.variable == "Xi" || a.variable == "Pi" || a.variable == "Sigma" || 
			a.variable == "Upsilon" || a.variable == "Phi" || a.variable == "Psi" || 
			a.variable == "Omega"�
			\
		�ENDIF�
	 	�a.variable� = �compileMatrixFormula(a.value)�
	 '''
	}
	
		�IF f.function.name == "alpha" || f.function.name == "beta" || f.function.name == "gamma" ||
		    f.function.name == "delta" || f.function.name == "epsilon" || f.function.name == "varepsilon" ||
		    f.function.name == "zeta" || f.function.name == "eta" || f.function.name == "theta" ||
		    f.function.name == "vartheta" || f.function.name == "gamma" || f.function.name == "kappa" ||
			f.function.name == "lambda" || f.function.name == "mu" || f.function.name == "nu" || 
			f.function.name == "xi" || f.function.name == "pi" || f.function.name == "varpi" || 
			f.function.name == "rho" || f.function.name == "varrho" || f.function.name == "sigma" ||
			f.function.name == "varsigma" || f.function.name == "tau" || f.function.name == "upsilon" ||
			f.function.name == "phi" || f.function.name == "varphi" || f.function.name == "chi" || 
			f.function.name == "psi" || f.function.name == "omega" || f.function.name == "Gamma" ||
			f.function.name == "Delta" || f.function.name == "Theta" || f.function.name == "Lambda" ||
			f.function.name == "Xi" || f.function.name == "Pi" || f.function.name == "Sigma" || 
			f.function.name == "Upsilon" || f.function.name == "Phi" || f.function.name == "Psi" || 
			f.function.name == "Omega"�
			\
		�ENDIF�
		\\�f.function.name�
	
	//Expression
		
		�IF n.name == "alpha" || n.name == "beta" || n.name == "gamma" ||
		    n.name == "delta" || n.name == "epsilon" || n.name == "varepsilon" ||
		    n.name == "zeta" || n.name == "eta" || n.name == "theta" ||
		    n.name == "vartheta" || n.name == "gamma" || n.name == "kappa" ||
			n.name == "lambda" || n.name == "mu" || n.name == "nu" || 
			n.name == "xi" || n.name == "pi" || n.name == "varpi" || 
			n.name == "rho" || n.name == "varrho" || n.name == "sigma" ||
			n.name == "varsigma" || n.name == "tau" || n.name == "upsilon" ||
			n.name == "phi" || n.name == "varphi" || n.name == "chi" || 
			n.name == "psi" || n.name == "omega" || n.name == "Gamma" ||
			n.name == "Delta" || n.name == "Theta" || n.name == "Lambda" ||
			n.name == "Xi" || n.name == "Pi" || n.name == "Sigma" || 
			n.name == "Upsilon" || n.name == "Phi" || n.name == "Psi" || 
			n.name == "Omega"�
			\
		�ENDIF�
	def dispatch compileExpression(MatrixElement e) '''
		�IF e.element == "alpha" || e.element == "beta" || e.element == "gamma" ||
		    e.element == "delta" || e.element == "epsilon" || e.element == "varepsilon" ||
		    e.element == "zeta" || e.element == "eta" || e.element == "theta" ||
		    e.element == "vartheta" || e.element == "gamma" || e.element == "kappa" ||
			e.element == "lambda" || e.element == "mu" || e.element == "nu" || 
			e.element == "xi" || e.element == "pi" || e.element == "varpi" || 
			e.element == "rho" || e.element == "varrho" || e.element == "sigma" ||
			e.element == "varsigma" || e.element == "tau" || e.element == "upsilon" ||
			e.element == "phi" || e.element == "varphi" || e.element == "chi" || 
			e.element == "psi" || e.element == "omega" || e.element == "Gamma" ||
			e.element == "Delta" || e.element == "Theta" || e.element == "Lambda" ||
			e.element == "Xi" || e.element == "Pi" || e.element == "Sigma" || 
			e.element == "Upsilon" || e.element == "Phi" || e.element == "Psi" || 
			e.element == "Omega"�
			\
		�ENDIF�
		�e.element�_{�e.row�,�e.column�}'''
		
	def dispatch compileExpression(InBrackets op) '''
		(�compileExpression(op.inBrackets.addition)�)'''
	
		\frac{�compileExpression(op.left)�}{�compileExpression(op.right)�}'''
	�IF op.expression != null� (-�compileExpression(op.expression)�) �ENDIF�''' 
		
	
	//Matrix Expressions
	def dispatch compileMatrixExpression(MatrixVariable n) '''
		�n.name�'''	
	
	def dispatch compileMatrixExpression(NewMatrix m) '''
		$$\left(\begin{array}{
		�FOR row:m.matrix.rows�
			c
		�ENDFOR�	
		}
		�var j = 0�
		�FOR row:m.matrix.rows�
		 �IF row != null�
		 	�var i = 0�
	 		�FOR element:row.elements�
			 �IF element != null�
			 	�element�
			 �ENDIF�
			 �IF (i = i + 1) != row.elements.size()�&�ENDIF�
			�ENDFOR�
		 �ENDIF�
		 �IF (j = j + 1) != m.matrix.rows.size()�\\�ENDIF�
		�ENDFOR�
		\end{array}\right)$$
		'''	
		
	def dispatch compileMatrixExpression(TransposeMatrix n) '''
		�n.name�^T'''	
		
	def dispatch compileMatrixExpression(MatrixInBrackets op) '''
		(�compileMatrixExpression(op.inBrackets.addition)�)'''	
		
	def dispatch compileMatrixExpression(MatrixAddition op) '''
		�compileMatrixExpression(op.left)�+�compileMatrixExpression(op.right)�'''
	
	def dispatch compileMatrixExpression(MatrixSubtraction op) '''
		�compileMatrixExpression(op.left)�-�compileMatrixExpression(op.right)�'''
	
	def dispatch compileMatrixExpression(MatrixMultiplication op) '''
		�IF op.rightMatrix != null��compileMatrixExpression(op.left)�*�compileMatrixExpression(op.rightMatrix)��ENDIF�
		�IF op.rightScalar != null��compileMatrixExpression(op.left)�*�compileFormula(op.rightScalar)��ENDIF�'''
		
	
MatrixAssignment a
org.eclipse.iee.translator.TeXmole/org.eclipse.iee.translator.molex.mex/bin/org/eclipse/iee/translator/molex/mex/generator/MexGenerator.xtend
'''
	 	�IF a.variable == "alpha" || a.variable == "beta" || a.variable == "gamma" ||
		    a.variable == "delta" || a.variable == "epsilon" || a.variable == "varepsilon" ||
		    a.variable == "zeta" || a.variable == "eta" || a.variable == "theta" ||
		    a.variable == "vartheta" || a.variable == "gamma" || a.variable == "kappa" ||
			a.variable == "lambda" || a.variable == "mu" || a.variable == "nu" || 
			a.variable == "xi" || a.variable == "pi" || a.variable == "varpi" || 
			a.variable == "rho" || a.variable == "varrho" || a.variable == "sigma" ||
			a.variable == "varsigma" || a.variable == "tau" || a.variable == "upsilon" ||
			a.variable == "phi" || a.variable == "varphi" || a.variable == "chi" || 
			a.variable == "psi" || a.variable == "omega" || a.variable == "Gamma" ||
			a.variable == "Delta" || a.variable == "Theta" || a.variable == "Lambda" ||
			a.variable == "Xi" || a.variable == "Pi" || a.variable == "Sigma" || 
			a.variable == "Upsilon" || a.variable == "Phi" || a.variable == "Psi" || 
			a.variable == "Omega"�
			\
		�ENDIF�
	 	�a.variable� = �compileMatrixFormula(a.value)�
	 '''
def compileMatrixAssignment(MatrixAssignment a)
		�IF s.matrixDefinition != null��compileMatrixDefinition(s.matrixDefinition)��ENDIF�
		�IF s.assignment != null��compileAssignment(s.assignment)��ENDIF�
		
	def compileAssignment(Assignment a)
	def compileMatrixDefinition(MatrixDefinition m) 
		�m.name�=
		$$\left(\begin{array}{
		�FOR row:m.rows�
			c
		�ENDFOR�	
		}
		�var j = 0�
		�FOR row:m.rows�
		 �IF row != null�
		 	�var i = 0�
	 		�FOR element:row.elements�
			 �IF element != null�
			 	�element�
			 �ENDIF�
			 �IF (i = i + 1) != row.elements.size()�&�ENDIF�
			�ENDFOR�
		 �ENDIF�
		 �IF (j = j + 1) != m.rows.size()�\\�ENDIF�
		�ENDFOR�
		\end{array}\right)$$
		\\�f.function.name.toLowerCase()�
			
		\\frac{�compileExpression(op.left)�}{�compileExpression(op.right)�}'''
	�IF op.expression != null� (-(�compileExpression(op.expression)�)) �ENDIF�''' 
	
	def dispatch compileExpression(Interval op) '''
	�IF op.ceil != null && op.floor != null��op.openingBracket�(�compileExpression(op.ceil)�)..(�compileExpression(op.floor)�)�op.closingBracket��ENDIF�'''  
	
@@ -33,16 +33,32 @@ class MexGenerator implements IGenerator {
 	{
 	'''
 		�IF s.functionDefinition != null��compileFunctionDefinition(s.functionDefinition)��ENDIF�
-		�IF s.matrixDefinition != null��compileMatrixDefinition(s.matrixDefinition)��ENDIF�
-		�IF s.assignment != null��compileAssignment(s.assignment)��ENDIF�
 		�IF s.formula != null��compileFormula(s.formula)��ENDIF�
-		
+		�IF s.variableAssignment != null��compileVariableAssignment(s.variableAssignment)��ENDIF�
+		�IF s.matrixAssignment != null��compileMatrixAssignment(s.matrixAssignment)��ENDIF�
+		�IF s.matrixFormula != null��compileMatrixFormula(s.matrixFormula)��ENDIF�
 	'''
 	}
 	
 	def compileFunctionDefinition(FunctionDefinition funcDef)
 	{
 	'''
+		�IF funcDef.function.name == "alpha" || funcDef.function.name == "beta" || funcDef.function.name == "gamma" ||
+		    funcDef.function.name == "delta" || funcDef.function.name == "epsilon" || funcDef.function.name == "varepsilon" ||
+		    funcDef.function.name == "zeta" || funcDef.function.name == "eta" || funcDef.function.name == "theta" ||
+		    funcDef.function.name == "vartheta" || funcDef.function.name == "gamma" || funcDef.function.name == "kappa" ||
+			funcDef.function.name == "lambda" || funcDef.function.name == "mu" || funcDef.function.name == "nu" || 
+			funcDef.function.name == "xi" || funcDef.function.name == "pi" || funcDef.function.name == "varpi" || 
+			funcDef.function.name == "rho" || funcDef.function.name == "varrho" || funcDef.function.name == "sigma" ||
+			funcDef.function.name == "varsigma" || funcDef.function.name == "tau" || funcDef.function.name == "upsilon" ||
+			funcDef.function.name == "phi" || funcDef.function.name == "varphi" || funcDef.function.name == "chi" || 
+			funcDef.function.name == "psi" || funcDef.function.name == "omega" || funcDef.function.name == "Gamma" ||
+			funcDef.function.name == "Delta" || funcDef.function.name == "Theta" || funcDef.function.name == "Lambda" ||
+			funcDef.function.name == "Xi" || funcDef.function.name == "Pi" || funcDef.function.name == "Sigma" || 
+			funcDef.function.name == "Upsilon" || funcDef.function.name == "Phi" || funcDef.function.name == "Psi" || 
+			funcDef.function.name == "Omega"�
+			\
+		�ENDIF�
 		�funcDef.function.name� ( 
 		�FOR param:funcDef.function.parameters�
 		 �IF param != null��compileFormula(param)��ENDIF�
@@ -52,9 +68,25 @@ class MexGenerator implements IGenerator {
 	'''
 	}
 	
-	def compileAssignment(Assignment a)
+	def compileVariableAssignment(VariableAssignment a)
 	{
 	 '''
+	 	�IF a.variable == "alpha" || a.variable == "beta" || a.variable == "gamma" ||
+		    a.variable == "delta" || a.variable == "epsilon" || a.variable == "varepsilon" ||
+		    a.variable == "zeta" || a.variable == "eta" || a.variable == "theta" ||
+		    a.variable == "vartheta" || a.variable == "gamma" || a.variable == "kappa" ||
+			a.variable == "lambda" || a.variable == "mu" || a.variable == "nu" || 
+			a.variable == "xi" || a.variable == "pi" || a.variable == "varpi" || 
+			a.variable == "rho" || a.variable == "varrho" || a.variable == "sigma" ||
+			a.variable == "varsigma" || a.variable == "tau" || a.variable == "upsilon" ||
+			a.variable == "phi" || a.variable == "varphi" || a.variable == "chi" || 
+			a.variable == "psi" || a.variable == "omega" || a.variable == "Gamma" ||
+			a.variable == "Delta" || a.variable == "Theta" || a.variable == "Lambda" ||
+			a.variable == "Xi" || a.variable == "Pi" || a.variable == "Sigma" || 
+			a.variable == "Upsilon" || a.variable == "Phi" || a.variable == "Psi" || 
+			a.variable == "Omega"�
+			\
+		�ENDIF�
 	 	�a.variable� = �compileFormula(a.value)�
 	 '''
 	}
@@ -66,50 +98,110 @@ class MexGenerator implements IGenerator {
 	'''
 	}
 	
-	def compileMatrixDefinition(MatrixDefinition m) 
+	def compileMatrixFormula(MatrixFormula f) 
 	{
 	'''
-		�m.name�=
-		$$\left(\begin{array}{
-		�FOR row:m.rows�
-			c
-		�ENDFOR�	
-		}
-		�var j = 0�
-		�FOR row:m.rows�
-		 �IF row != null�
-		 	�var i = 0�
-	 		�FOR element:row.elements�
-			 �IF element != null�
-			 	�element�
-			 �ENDIF�
-			 �IF (i = i + 1) != row.elements.size()�&�ENDIF�
-			�ENDFOR�
-		 �ENDIF�
-		 �IF (j = j + 1) != m.rows.size()�\\�ENDIF�
-		�ENDFOR�
-		\end{array}\right)$$
+		�compileMatrixExpression(f.expression)�
 	'''
 	}
 	
+	def compileMatrixAssignment(MatrixAssignment a)
+	{
+	 '''
+	 	�IF a.variable == "alpha" || a.variable == "beta" || a.variable == "gamma" ||
+		    a.variable == "delta" || a.variable == "epsilon" || a.variable == "varepsilon" ||
+		    a.variable == "zeta" || a.variable == "eta" || a.variable == "theta" ||
+		    a.variable == "vartheta" || a.variable == "gamma" || a.variable == "kappa" ||
+			a.variable == "lambda" || a.variable == "mu" || a.variable == "nu" || 
+			a.variable == "xi" || a.variable == "pi" || a.variable == "varpi" || 
+			a.variable == "rho" || a.variable == "varrho" || a.variable == "sigma" ||
+			a.variable == "varsigma" || a.variable == "tau" || a.variable == "upsilon" ||
+			a.variable == "phi" || a.variable == "varphi" || a.variable == "chi" || 
+			a.variable == "psi" || a.variable == "omega" || a.variable == "Gamma" ||
+			a.variable == "Delta" || a.variable == "Theta" || a.variable == "Lambda" ||
+			a.variable == "Xi" || a.variable == "Pi" || a.variable == "Sigma" || 
+			a.variable == "Upsilon" || a.variable == "Phi" || a.variable == "Psi" || 
+			a.variable == "Omega"�
+			\
+		�ENDIF�
+	 	�a.variable� = �compileMatrixFormula(a.value)�
+	 '''
+	}
+	
 	/*TODO: add function check */
 	def compileFunction(Function f) '''
-		\\�f.function.name.toLowerCase()�
+		�IF f.function.name == "alpha" || f.function.name == "beta" || f.function.name == "gamma" ||
+		    f.function.name == "delta" || f.function.name == "epsilon" || f.function.name == "varepsilon" ||
+		    f.function.name == "zeta" || f.function.name == "eta" || f.function.name == "theta" ||
+		    f.function.name == "vartheta" || f.function.name == "gamma" || f.function.name == "kappa" ||
+			f.function.name == "lambda" || f.function.name == "mu" || f.function.name == "nu" || 
+			f.function.name == "xi" || f.function.name == "pi" || f.function.name == "varpi" || 
+			f.function.name == "rho" || f.function.name == "varrho" || f.function.name == "sigma" ||
+			f.function.name == "varsigma" || f.function.name == "tau" || f.function.name == "upsilon" ||
+			f.function.name == "phi" || f.function.name == "varphi" || f.function.name == "chi" || 
+			f.function.name == "psi" || f.function.name == "omega" || f.function.name == "Gamma" ||
+			f.function.name == "Delta" || f.function.name == "Theta" || f.function.name == "Lambda" ||
+			f.function.name == "Xi" || f.function.name == "Pi" || f.function.name == "Sigma" || 
+			f.function.name == "Upsilon" || f.function.name == "Phi" || f.function.name == "Psi" || 
+			f.function.name == "Omega"�
+			\
+		�ENDIF�
+		\\�f.function.name�
 		(�FOR param:f.function.parameters�
 		 �IF param != null��compileFormula(param)��ENDIF�
 		 �IF f.function.parameters.last() != param�,�ENDIF�
 		�ENDFOR�)
 	'''
-			
+	
+	//Expression
+		
 	def dispatch compileExpression(Variable n) '''
+		�IF n.name == "alpha" || n.name == "beta" || n.name == "gamma" ||
+		    n.name == "delta" || n.name == "epsilon" || n.name == "varepsilon" ||
+		    n.name == "zeta" || n.name == "eta" || n.name == "theta" ||
+		    n.name == "vartheta" || n.name == "gamma" || n.name == "kappa" ||
+			n.name == "lambda" || n.name == "mu" || n.name == "nu" || 
+			n.name == "xi" || n.name == "pi" || n.name == "varpi" || 
+			n.name == "rho" || n.name == "varrho" || n.name == "sigma" ||
+			n.name == "varsigma" || n.name == "tau" || n.name == "upsilon" ||
+			n.name == "phi" || n.name == "varphi" || n.name == "chi" || 
+			n.name == "psi" || n.name == "omega" || n.name == "Gamma" ||
+			n.name == "Delta" || n.name == "Theta" || n.name == "Lambda" ||
+			n.name == "Xi" || n.name == "Pi" || n.name == "Sigma" || 
+			n.name == "Upsilon" || n.name == "Phi" || n.name == "Psi" || 
+			n.name == "Omega"�
+			\
+		�ENDIF�
 		�n.name�'''
 		
 	def dispatch compileExpression(Float n) '''
 		�n.value�'''
 		
+	def dispatch compileExpression(MatrixElement e) '''
+		�IF e.element == "alpha" || e.element == "beta" || e.element == "gamma" ||
+		    e.element == "delta" || e.element == "epsilon" || e.element == "varepsilon" ||
+		    e.element == "zeta" || e.element == "eta" || e.element == "theta" ||
+		    e.element == "vartheta" || e.element == "gamma" || e.element == "kappa" ||
+			e.element == "lambda" || e.element == "mu" || e.element == "nu" || 
+			e.element == "xi" || e.element == "pi" || e.element == "varpi" || 
+			e.element == "rho" || e.element == "varrho" || e.element == "sigma" ||
+			e.element == "varsigma" || e.element == "tau" || e.element == "upsilon" ||
+			e.element == "phi" || e.element == "varphi" || e.element == "chi" || 
+			e.element == "psi" || e.element == "omega" || e.element == "Gamma" ||
+			e.element == "Delta" || e.element == "Theta" || e.element == "Lambda" ||
+			e.element == "Xi" || e.element == "Pi" || e.element == "Sigma" || 
+			e.element == "Upsilon" || e.element == "Phi" || e.element == "Psi" || 
+			e.element == "Omega"�
+			\
+		�ENDIF�
+		�e.element�_{�e.row�,�e.column�}'''
+		
 	def dispatch compileExpression(Function f) '''
 		�compileFunction(f)�'''
 	
+	def dispatch compileExpression(InBrackets op) '''
+		(�compileExpression(op.inBrackets.addition)�)'''
+	
 	def dispatch compileExpression(Addition op) '''
 		�compileExpression(op.left)�+�compileExpression(op.right)�'''
 	
@@ -120,20 +212,61 @@ class MexGenerator implements IGenerator {
 		�compileExpression(op.left)�*�compileExpression(op.right)�'''
 	
 	def dispatch compileExpression(Division op) '''
-		\\frac{�compileExpression(op.left)�}{�compileExpression(op.right)�}'''
+		\frac{�compileExpression(op.left)�}{�compileExpression(op.right)�}'''
 	
 	def dispatch compileExpression(Modulo op) '''
 		�compileExpression(op.left)� \mod �compileExpression(op.right)�'''
 	
 	def dispatch compileExpression(Invert op) '''
-	�IF op.expression != null� (-(�compileExpression(op.expression)�)) �ENDIF�''' 
+	�IF op.expression != null� (-�compileExpression(op.expression)�) �ENDIF�''' 
 	
 	def dispatch compileExpression(Factorial op) '''
 	�IF op.expression != null� �compileExpression(op.expression)�! �ENDIF�'''  
-	
-	def dispatch compileExpression(Interval op) '''
-	�IF op.ceil != null && op.floor != null��op.openingBracket�(�compileExpression(op.ceil)�)..(�compileExpression(op.floor)�)�op.closingBracket��ENDIF�'''  
-	
+		
 	def dispatch compileExpression(Exponent op) '''
 		�compileExpression(op.left)�^�compileExpression(op.right)�'''
+	
+	//Matrix Expressions
+	def dispatch compileMatrixExpression(MatrixVariable n) '''
+		�n.name�'''	
+	
+	def dispatch compileMatrixExpression(NewMatrix m) '''
+		$$\left(\begin{array}{
+		�FOR row:m.matrix.rows�
+			c
+		�ENDFOR�	
+		}
+		�var j = 0�
+		�FOR row:m.matrix.rows�
+		 �IF row != null�
+		 	�var i = 0�
+	 		�FOR element:row.elements�
+			 �IF element != null�
+			 	�element�
+			 �ENDIF�
+			 �IF (i = i + 1) != row.elements.size()�&�ENDIF�
+			�ENDFOR�
+		 �ENDIF�
+		 �IF (j = j + 1) != m.matrix.rows.size()�\\�ENDIF�
+		�ENDFOR�
+		\end{array}\right)$$
+		'''	
+		
+	def dispatch compileMatrixExpression(TransposeMatrix n) '''
+		�n.name�^T'''	
+		
+	def dispatch compileMatrixExpression(MatrixInBrackets op) '''
+		(�compileMatrixExpression(op.inBrackets.addition)�)'''	
+		
+	def dispatch compileMatrixExpression(MatrixAddition op) '''
+		�compileMatrixExpression(op.left)�+�compileMatrixExpression(op.right)�'''
+	
+	def dispatch compileMatrixExpression(MatrixSubtraction op) '''
+		�compileMatrixExpression(op.left)�-�compileMatrixExpression(op.right)�'''
+	
+	def dispatch compileMatrixExpression(MatrixMultiplication op) '''
+		�IF op.rightMatrix != null��compileMatrixExpression(op.left)�*�compileMatrixExpression(op.rightMatrix)��ENDIF�
+		�IF op.rightScalar != null��compileMatrixExpression(op.left)�*�compileFormula(op.rightScalar)��ENDIF�'''
+		
+	
 }
https://github.com/iee/iee/raw/0f04d91efdf50447d8e84e926ef98d7462103dc0/org.eclipse.iee.translator.TeXmole%2Forg.eclipse.iee.translator.molex.mex%2Fbin%2Forg%2Feclipse%2Fiee%2Ftranslator%2Fmolex%2Fmex%2Fgenerator%2FMexGenerator.xtend
27abb150947405a2c5839b410fa78b222499c71b
modified
iee$iee
return cAdditionParserRuleCall_4_1;
RuleCall
RuleCall getAdditionParserRuleCall_4_1()
return cAdditionParserRuleCall_3_1;
RuleCall
RuleCall getAdditionParserRuleCall_3_1()
iee$iee
return (pVariableAssignment != null) ? pVariableAssignment : (pVariableAssignment = new VariableAssignmentElements());
	public ParserRule getVariableAssignmentRule() {
		return getVariableAssignmentAccess().getRule();
	//	Exponent | "(-" {Invert
VariableAssignmentElements
VariableAssignmentElements getVariableAssignmentAccess()
return (pAssignment != null) ? pAssignment : (pAssignment = new AssignmentElements());
	public ParserRule getAssignmentRule() {
		return getAssignmentAccess().getRule();
	//
	//
	//
	//	Exponent | "-" {Invert
AssignmentElements
AssignmentElements getAssignmentAccess()
iee$iee
return (pVariableAssignment != null) ? pVariableAssignment : (pVariableAssignment = new VariableAssignmentElements());
	public ParserRule getVariableAssignmentRule() {
		return getVariableAssignmentAccess().getRule();
	//	Exponent | "(-" {Invert
VariableAssignmentElements
VariableAssignmentElements getVariableAssignmentAccess()
return (pAssignment != null) ? pAssignment : (pAssignment = new AssignmentElements());
	public ParserRule getAssignmentRule() {
		return getAssignmentAccess().getRule();
	//
	//
	//
	//	Exponent | "-" {Invert
AssignmentElements
AssignmentElements getAssignmentAccess()
iee$iee
return cVariableAssignmentVariableAssignmentParserRuleCall_1_0;
RuleCall
RuleCall getVariableAssignmentVariableAssignmentParserRuleCall_1_0()
return cAssignmentAssignmentParserRuleCall_2_0;
RuleCall
RuleCall getAssignmentAssignmentParserRuleCall_2_0()
iee$iee
return cVariableAssignmentVariableAssignmentParserRuleCall_1_0;
RuleCall
RuleCall getVariableAssignmentVariableAssignmentParserRuleCall_1_0()
return cAssignmentAssignmentParserRuleCall_2_0;
RuleCall
RuleCall getAssignmentAssignmentParserRuleCall_2_0()
iee$iee
return cVariableAssignmentAssignment_1;
Assignment
Assignment getVariableAssignmentAssignment_1()
return cAssignmentAssignment_2;
Assignment
Assignment getAssignmentAssignment_2()
iee$iee
return cVariableAssignmentAssignment_1;
Assignment
Assignment getVariableAssignmentAssignment_1()
return cAssignmentAssignment_2;
Assignment
Assignment getAssignmentAssignment_2()
iee$iee
return cFormulaAssignment_2;
Assignment
Assignment getFormulaAssignment_2()
return cFormulaAssignment_3;
Assignment
Assignment getFormulaAssignment_3()
iee$iee
return cFormulaAssignment_2;
Assignment
Assignment getFormulaAssignment_2()
return cFormulaAssignment_3;
Assignment
Assignment getFormulaAssignment_3()
iee$iee
return cFormulaFormulaParserRuleCall_2_0;
RuleCall
RuleCall getFormulaFormulaParserRuleCall_2_0()
return cFormulaFormulaParserRuleCall_3_0;
RuleCall
RuleCall getFormulaFormulaParserRuleCall_3_0()
iee$iee
return cFormulaFormulaParserRuleCall_2_0;
RuleCall
RuleCall getFormulaFormulaParserRuleCall_2_0()
return cFormulaFormulaParserRuleCall_3_0;
RuleCall
RuleCall getFormulaFormulaParserRuleCall_3_0()
iee$iee
return cFunctionAction_3_0;
Action
Action getFunctionAction_3_0()
return cFunctionAction_2_0;
Action
Action getFunctionAction_2_0()
iee$iee
return cFunctionAssignment_3_1;
Assignment
Assignment getFunctionAssignment_3_1()
return cFunctionAssignment_2_1;
Assignment
Assignment getFunctionAssignment_2_1()
iee$iee
return cFunctionFunctionParserRuleCall_3_1_0;
RuleCall
RuleCall getFunctionFunctionParserRuleCall_3_1_0()
return cFunctionFunctionParserRuleCall_2_1_0;
RuleCall
RuleCall getFunctionFunctionParserRuleCall_2_1_0()
iee$iee
return cLeftParenthesisHyphenMinusKeyword_1_0;
Keyword
Keyword getLeftParenthesisHyphenMinusKeyword_1_0()
return cLeftParenthesisKeyword_3_2;
Keyword
Keyword getLeftParenthesisKeyword_3_2()
iee$iee
return cLeftParenthesisHyphenMinusKeyword_1_0;
Keyword
Keyword getLeftParenthesisHyphenMinusKeyword_1_0()
return cLeftParenthesisKeyword_3_2;
Keyword
Keyword getLeftParenthesisKeyword_3_2()
iee$iee
return (pMatrixAssignment != null) ? pMatrixAssignment : (pMatrixAssignment = new MatrixAssignmentElements());
MatrixAssignmentElements
MatrixAssignmentElements getMatrixAssignmentAccess()
return (pMatrixDefinition != null) ? pMatrixDefinition : (pMatrixDefinition = new MatrixDefinitionElements());
MatrixDefinitionElements
MatrixDefinitionElements getMatrixDefinitionAccess()
iee$iee
return (pMatrixFormula != null) ? pMatrixFormula : (pMatrixFormula = new MatrixFormulaElements());
MatrixFormulaElements
MatrixFormulaElements getMatrixFormulaAccess()
return (pMatrixDefinition != null) ? pMatrixDefinition : (pMatrixDefinition = new MatrixDefinitionElements());
MatrixDefinitionElements
MatrixDefinitionElements getMatrixDefinitionAccess()
iee$iee
return cMatrixAssignmentAssignment_3;
Assignment
Assignment getMatrixAssignmentAssignment_3()
return cMatrixDefinitionAssignment_1;
Assignment
Assignment getMatrixDefinitionAssignment_1()
iee$iee
return cMatrixAssignmentAssignment_3;
Assignment
Assignment getMatrixAssignmentAssignment_3()
return cMatrixDefinitionAssignment_1;
Assignment
Assignment getMatrixDefinitionAssignment_1()
iee$iee
return cMatrixAssignmentMatrixAssignmentParserRuleCall_3_0;
RuleCall
RuleCall getMatrixAssignmentMatrixAssignmentParserRuleCall_3_0()
return cMatrixDefinitionMatrixDefinitionParserRuleCall_1_0;
RuleCall
RuleCall getMatrixDefinitionMatrixDefinitionParserRuleCall_1_0()
iee$iee
return cMatrixAssignmentMatrixAssignmentParserRuleCall_3_0;
RuleCall
RuleCall getMatrixAssignmentMatrixAssignmentParserRuleCall_3_0()
return cMatrixDefinitionMatrixDefinitionParserRuleCall_1_0;
RuleCall
RuleCall getMatrixDefinitionMatrixDefinitionParserRuleCall_1_0()
iee$iee
return getMatrixAdditionAccess().getRule();
ParserRule
ParserRule getMatrixAdditionRule()
return getMatrixDefinitionAccess().getRule();
ParserRule
ParserRule getMatrixDefinitionRule()
iee$iee
return getMatrixAdditionAccess().getRule();
ParserRule
ParserRule getMatrixAdditionRule()
return getMatrixDefinitionAccess().getRule();
ParserRule
ParserRule getMatrixDefinitionRule()
iee$iee
return cRightParenthesisKeyword_1_3;
Keyword
Keyword getRightParenthesisKeyword_1_3()
return cRightParenthesisKeyword_3_4;
Keyword
Keyword getRightParenthesisKeyword_3_4()
iee$iee
return cRightParenthesisKeyword_1_3;
Keyword
Keyword getRightParenthesisKeyword_1_3()
return cRightParenthesisKeyword_3_4;
Keyword
Keyword getRightParenthesisKeyword_3_4()