Пример #1
0
 //含参构造函数
 public Token(Common.TokenType type, string lexeme, double value, Common.FuncPtr func)
 {
     Type   = type;
     Lexeme = lexeme;
     Value  = value;
     Func   = func;
 }
Пример #2
0
        //生成语法树的一个节点
        static ExprNode MakeExprNode(Common.TokenType opcode, params Object[] exprNodes)
        {
            ExprNode exprPtr = new ExprNode {
                OpCode = opcode
            };

            switch (opcode)
            {
            case Common.TokenType.ConstId:
                exprPtr.CaseConst = (double)exprNodes[0];
                break;

            case Common.TokenType.T:
                exprPtr.CaseParmPtr = Common.Change;
                break;

            case Common.TokenType.Func:
                exprPtr.MathFuncPtr = (Common.FuncPtr)exprNodes[0];
                exprPtr.Child       = (ExprNode)exprNodes[1];
                break;

            default:
                exprPtr.Left  = (ExprNode)exprNodes[0];
                exprPtr.Right = (ExprNode)exprNodes[1];
                break;
            }

            return(exprPtr);
        }
Пример #3
0
            Windows.UI.Xaml.DataTemplate SelectTemplateCore(object item, Windows.UI.Xaml.DependencyObject container)
            {
                DisplayExpressionToken token = (DisplayExpressionToken)(item);

                if (token != null)
                {
                    Common.TokenType type = token.Type;

                    switch (type)
                    {
                    case TokenType.Operator:
                        return(m_operatorTemplate);

                    case TokenType.Operand:
                        return(m_operandTemplate);

                    case TokenType.Separator:
                        return(m_separatorTemplate);

                    default:
                        throw new Exception("Invalid token type");
                    }
                }

                return(m_separatorTemplate);
            }
Пример #4
0
 //匹配记号
 private static void MatchToken(Common.TokenType theToken)
 {
     if (_token.Type != theToken)
     {
         SyntaxError(2);
     }
     FetchToken();
 }
Пример #5
0
        //Term的递归子程序
        private static ExprNode Term()
        {
            ExprNode left = Factor();

            while (_token.Type == Common.TokenType.Mul || _token.Type == Common.TokenType.Div)
            {
                Common.TokenType tokenTmp = _token.Type;
                MatchToken(tokenTmp);
                ExprNode right = Factor();
                left = MakeExprNode(tokenTmp, left, right);
            }
            return(left);
        }
Пример #6
0
        //Expression的递归子程序
        private static ExprNode Expression()
        {
            Common.Enter("Expression");
            ExprNode left = Term();

            while (_token.Type == Common.TokenType.Plus || _token.Type == Common.TokenType.Minus)
            {
                Common.TokenType tokenTmp = _token.Type;
                MatchToken(tokenTmp);
                ExprNode right = Term();
                left = MakeExprNode(tokenTmp, left, right);
            }
            Common.Tree_trace(left);
            Common.Back("Expression");
            return(left);
        }