public bool MoveNext() { if( m_nIdx >= m_strarrTokens.Length ) return false; m_Token = new Token( m_strarrTokens[m_nIdx]); m_nIdx++; return true; }
public void AddToken(Token token) { m_Tokens.Add(token); // Add tokens in order of precedence }
private static SemanticToken OperatorToOpcode(Token token) { var t = new SemanticToken() { TokenType = token.TokenType, OperationType = token.OperationType }; switch (t.TokenType) { case TokenType.Add: t.Precedence = 6; t.OperatorAssociativity = OperatorAssociativity.Left; break; case TokenType.Subtract: t.Precedence = 6; t.OperatorAssociativity = OperatorAssociativity.Left; break; case TokenType.Multiply: t.Precedence = 7; t.OperatorAssociativity = OperatorAssociativity.Left; break; case TokenType.Divide: t.Precedence = 7; t.OperatorAssociativity = OperatorAssociativity.Left; break; case TokenType.PowerOf: t.Precedence = 7; t.OperatorAssociativity = OperatorAssociativity.Right; break; case TokenType.UnaryMinus: t.Precedence = 8; t.OperatorAssociativity = OperatorAssociativity.Right; break; case TokenType.Negation: t.Precedence = 8; t.OperatorAssociativity = OperatorAssociativity.Right; break; case TokenType.Modulo: t.Precedence = 7; t.OperatorAssociativity = OperatorAssociativity.Left; break; case TokenType.GreaterThan: t.Precedence = 5; t.OperatorAssociativity = OperatorAssociativity.Left; break; case TokenType.GreaterThanOrEqualTo: t.Precedence = 5; t.OperatorAssociativity = OperatorAssociativity.Left; break; case TokenType.LessThan: t.Precedence = 5; t.OperatorAssociativity = OperatorAssociativity.Left; break; case TokenType.LessThanOrEqualTo: t.Precedence = 5; t.OperatorAssociativity = OperatorAssociativity.Left; break; case TokenType.Equal: t.Precedence = 4; t.OperatorAssociativity = OperatorAssociativity.Left; break; case TokenType.NotEqual: t.Precedence = 4; t.OperatorAssociativity = OperatorAssociativity.Left; break; case TokenType.LogicalAnd: t.Precedence = 3; t.OperatorAssociativity = OperatorAssociativity.Left; break; case TokenType.LogicalOr: t.Precedence = 2; t.OperatorAssociativity = OperatorAssociativity.Left; break; default: throw new ExpressionParserException(String.Format("Unknown operator{0}", t)); break; } return t; }