/// <summary> /// Process the term2 rule. /// </summary> /// <remarks> /// /// term2 ::= '*' factor term2 | /// '/' factor term2 | /// {empty} /// /// </remarks> /// <returns>Parsed node.</returns> protected virtual EvalNode ParseTerm2() { if (Tokeniser.Next(TokenType.Multiply)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.Multiply, ParseFactor(), Language); EvalNode term2 = ParseTerm2(); if (term2 != null) { term2.Prepend(op); } return(op); } if (Tokeniser.Next(TokenType.Divide)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.Divide, ParseFactor(), Language); EvalNode term2 = ParseTerm2(); if (term2 != null) { term2.Prepend(op); } return(op); } return(null); }
/// <summary> /// Parse the 'expression2' rule. /// </summary> /// <remarks> /// /// expression2 ::= '+' term expression2 | /// '-' term expression2 | /// {empty} /// /// </remarks> /// <returns>Parsed node.</returns> protected virtual EvalNode ParseExpression2() { if (Tokeniser.Next(TokenType.Plus)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.Add, ParseTerm(), Language); EvalNode expr2 = ParseExpression2(); if (expr2 != null) { expr2.Prepend(op); } return(op); } if (Tokeniser.Next(TokenType.Minus)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.Subtract, ParseTerm(), Language); EvalNode expr2 = ParseExpression2(); if (expr2 != null) { expr2.Prepend(op); } return(op); } return(null); }
/// <summary> /// Process the term2 rule. /// </summary> /// <remarks> /// /// term2 ::= '*' factor term2 | /// '/' factor term2 | /// {empty} /// /// </remarks> /// <returns>Parsed node.</returns> protected virtual EvalNode ParseTerm2() { if (Tokeniser.Next(TokenType.Multiply)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.Multiply, ParseFactor(), Language); EvalNode term2 = ParseTerm2(); if (term2 != null) term2.Prepend(op); return op; } if (Tokeniser.Next(TokenType.Divide)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.Divide, ParseFactor(), Language); EvalNode term2 = ParseTerm2(); if (term2 != null) term2.Prepend(op); return op; } return null; }
/// <summary> /// Parse the 'expression2' rule. /// </summary> /// <remarks> /// /// expression2 ::= '+' term expression2 | /// '-' term expression2 | /// {empty} /// /// </remarks> /// <returns>Parsed node.</returns> protected virtual EvalNode ParseExpression2() { if (Tokeniser.Next(TokenType.Plus)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.Add, ParseTerm(), Language); EvalNode expr2 = ParseExpression2(); if (expr2 != null) expr2.Prepend(op); return op; } if (Tokeniser.Next(TokenType.Minus)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.Subtract, ParseTerm(), Language); EvalNode expr2 = ParseExpression2(); if (expr2 != null) expr2.Prepend(op); return op; } return null; }
/// <summary> /// Parse the 'equality2' rule. /// </summary> /// <remarks> /// /// equality2 ::= '==' relational equality2 | /// '!=' relational equality2 | /// {empty} /// /// </remarks> /// <returns>Parsed node.</returns> protected virtual EvalNode ParseEquality2() { if (Tokeniser.Next(TokenType.DoubleEqual)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.Equal, ParseRelational(), Language); EvalNode equality2 = ParseEquality2(); if (equality2 != null) equality2.Prepend(op); return op; } if (Tokeniser.Next(TokenType.NotEqual)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.NotEqual, ParseRelational(), Language); EvalNode equality2 = ParseEquality2(); if (equality2 != null) equality2.Prepend(op); return op; } return null; }
/// <summary> /// Process the 'addsub2VB' rule. /// </summary> /// <remarks> /// /// addsub2VB ::= '+' modVB addsub2VB | /// '-' modVB addsub2VB | /// {empty} /// /// </remarks> /// <returns>Parsed node.</returns> protected virtual EvalNode ParseAddSub2VB() { if (Tokeniser.Next(TokenType.Plus)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.Add, ParseModVB(), Language); EvalNode addsub2 = ParseAddSub2VB(); if (addsub2 != null) addsub2.Prepend(op); return op; } if (Tokeniser.Next(TokenType.Minus)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.Subtract, ParseModVB(), Language); EvalNode addsub2 = ParseAddSub2VB(); if (addsub2 != null) addsub2.Prepend(op); return op; } return null; }
/// <summary> /// Process the 'term2' rule. /// </summary> /// <remarks> /// /// term2 ::= '*' factor term2 | /// '/' factor term2 | /// '%' factor term2 | /// {empty} /// /// </remarks> /// <returns>Parsed node.</returns> protected override EvalNode ParseTerm2() { if (Tokeniser.Next(TokenType.Remainder)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.Remainder, ParseFactor(), Language); EvalNode term2 = ParseTerm2(); if (term2 != null) term2.Prepend(op); return op; } // Base handles '*' and '/' return base.ParseTerm2(); }
/// <summary> /// Parse the 'relational2VB' rule. /// </summary> /// <remarks> /// /// relational2VB ::= '<' shiftVB relational2VB | /// '>' shiftVB relational2VB | /// '<=' shiftVB relational2VB | /// '>=' shiftVB relational2VB | /// '=' shiftVB relational2VB | /// '<>' shiftVB relational2VB | /// {empty} /// /// </remarks> /// <returns>Parsed node.</returns> protected virtual EvalNode ParseRelational2VB() { if (Tokeniser.Next(TokenType.LessThan)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.LessThan, ParseShiftVB(), Language); EvalNode relate2 = ParseRelational2VB(); if (relate2 != null) relate2.Prepend(op); return op; } if (Tokeniser.Next(TokenType.GreaterThan)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.GreaterThan, ParseShiftVB(), Language); EvalNode relate2 = ParseRelational2VB(); if (relate2 != null) relate2.Prepend(op); return op; } if (Tokeniser.Next(TokenType.LessThanEqual)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.LessThanEqual, ParseShiftVB(), Language); EvalNode relate2 = ParseRelational2VB(); if (relate2 != null) relate2.Prepend(op); return op; } if (Tokeniser.Next(TokenType.GreaterThanEqual)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.GreaterThanEqual, ParseShiftVB(), Language); EvalNode relate2 = ParseRelational2VB(); if (relate2 != null) relate2.Prepend(op); return op; } if (Tokeniser.Next(TokenType.Equal)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.Equal, ParseShiftVB(), Language); EvalNode relate2 = ParseRelational2VB(); if (relate2 != null) relate2.Prepend(op); return op; } if (Tokeniser.Next(TokenType.LessGreater)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.NotEqual, ParseShiftVB(), Language); EvalNode relate2 = ParseRelational2VB(); if (relate2 != null) relate2.Prepend(op); return op; } return null; }
/// <summary> /// Process the 'mod2VB' rule. /// </summary> /// <remarks> /// /// mod2VB ::= 'Mod' intdivVB mod2VB | /// {empty} /// /// </remarks> /// <returns>Parsed node.</returns> protected virtual EvalNode ParseMod2VB() { if (Tokeniser.Next(TokenType.KeywordMod)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.Remainder, ParseIntDivVB(), Language); EvalNode mod2 = ParseMod2VB(); if (mod2 != null) mod2.Prepend(op); return op; } return null; }
/// <summary> /// Parse the 'logicalXor2VB' rule. /// </summary> /// <remarks> /// /// logicalXor2VB ::= 'Xor' logicalOrVB logicalXor2VB | /// {empty} /// /// </remarks> /// <returns>Parsed node.</returns> protected virtual EvalNode ParseLogicalXor2VB() { if (Tokeniser.Next(TokenType.KeywordXor)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.LogicalXor, ParseLogicalOrVB(), Language); EvalNode xor2 = ParseLogicalXor2VB(); if (xor2 != null) xor2.Prepend(op); return op; } return null; }
/// <summary> /// Parse the 'logicalOr2VB' rule. /// </summary> /// <remarks> /// /// logicalOr2VB ::= 'Or' logicalAndVB logicalOr2VB | /// 'OrElse' logicalAndVB logicalOr2VB | /// {empty} /// /// </remarks> /// <returns>Parsed node.</returns> protected virtual EvalNode ParseLogicalOr2VB() { if (Tokeniser.Next(TokenType.KeywordOr)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.LogicalOr, ParseLogicalAndVB(), Language); EvalNode or2 = ParseLogicalOr2VB(); if (or2 != null) or2.Prepend(op); return op; } if (Tokeniser.Next(TokenType.KeywordOrElse)) { EvalNode op = new EvalNodeCondLogicOp(EvalNodeCondLogicOp.CompareOp.Or, ParseLogicalAndVB(), Language); EvalNode or2 = ParseLogicalOr2VB(); if (or2 != null) or2.Prepend(op); return op; } return null; }
/// <summary> /// Parse the 'logicalOr2' rule. /// </summary> /// <remarks> /// /// logicalOr2 ::= '|' logicalXor logicalOr2 | /// {empty} /// /// </remarks> /// <returns>Parsed node.</returns> protected virtual EvalNode ParseLogicalOr2() { if (Tokeniser.Next(TokenType.Or)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.LogicalOr, ParseLogicalXor(), Language); EvalNode or2 = ParseLogicalOr2(); if (or2 != null) or2.Prepend(op); return op; } return null; }
/// <summary> /// Parse the 'logicalAnd2VB' rule. /// </summary> /// <remarks> /// /// logicalAnd2VB ::= 'And' logicalNotVB logicalAnd2VB | /// 'AndAlso' logicalNotVB logicalAnd2VB | /// {empty} /// /// </remarks> /// <returns>Parsed node.</returns> protected virtual EvalNode ParseLogicalAnd2VB() { if (Tokeniser.Next(TokenType.KeywordAnd)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.LogicalAnd, ParseLogicalNotVB(), Language); EvalNode and2 = ParseLogicalAnd2VB(); if (and2 != null) and2.Prepend(op); return op; } if (Tokeniser.Next(TokenType.KeywordAndAlso)) { EvalNode op = new EvalNodeCondLogicOp(EvalNodeCondLogicOp.CompareOp.And, ParseLogicalNotVB(), Language); EvalNode and2 = ParseLogicalAnd2VB(); if (and2 != null) and2.Prepend(op); return op; } return null; }
/// <summary> /// Parse the 'logicalAnd2' rule. /// </summary> /// <remarks> /// /// logicalAnd2 ::= '&' equality logicalAnd2 | /// {empty} /// /// </remarks> /// <returns>Parsed node.</returns> protected virtual EvalNode ParseLogicalAnd2() { if (Tokeniser.Next(TokenType.And)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.LogicalAnd, ParseEquality(), Language); EvalNode and2 = ParseLogicalAnd2(); if (and2 != null) and2.Prepend(op); return op; } return null; }
/// <summary> /// Process the 'intdiv2VB' rule. /// </summary> /// <remarks> /// /// intdiv2VB ::= '\' termVB intdiv2VB | /// {empty} /// /// </remarks> /// <returns>Parsed node.</returns> protected virtual EvalNode ParseIntDiv2VB() { if (Tokeniser.Next(TokenType.BackSlash)) { EvalNode op = new EvalNodeBinaryOp(EvalNodeBinaryOp.BinaryOp.IntegerDivide, ParseTermVB(), Language); EvalNode intdiv2 = ParseIntDiv2VB(); if (intdiv2 != null) intdiv2.Prepend(op); return op; } return null; }