Represents each token in the expression
コード例 #1
0
ファイル: RPNParser.cs プロジェクト: 2ty/race3d
        public bool MoveNext()
        {
            if( m_nIdx >= m_strarrTokens.Length )
                return false;

            m_Token = new Token( m_strarrTokens[m_nIdx]);
            m_nIdx++;
            return true;
        }
コード例 #2
0
 public void AddToken(Token token)
 {
     m_Tokens.Add(token); // Add tokens in order of precedence
 }
コード例 #3
0
        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;
        }