Exemplo n.º 1
0
        private AbstractSyntaxTree Multiplicative(AbstractSyntaxTree e)
        {
            var t = scanner.GetToken();

            switch (t.TokenType)
            {
            case TokenType.Modulo:
                return(Multiplicative(new ModuloNode(e, Exponent())));

            case TokenType.Times:
                return(Multiplicative(new MultiplyNode(e, Exponent())));

            case TokenType.Divide:
                return(Multiplicative(new DivideNode(e, Exponent())));

            case TokenType.X:
            case TokenType.Y:
            case TokenType.Z:
            case TokenType.Lexical:
            case TokenType.LBracket:
            case TokenType.LParen:
                scanner.PutBackToken();
                return(Multiplicative(new MultiplyNode(e, Exponent())));

            default:
                scanner.PutBackToken();
                return(e);
            }
        }
Exemplo n.º 2
0
        private AbstractSyntaxTree Exponent(AbstractSyntaxTree e)
        {
            var t = scanner.GetToken();

            switch (t.TokenType)
            {
            case TokenType.Caret:
                return(Exponent(new ExponentNode(e, Primary())));

            case TokenType.Number:
                if (e is VariableNode)
                {
                    return(Exponent(new ExponentNode(e, new ConstantNumberNode(double.Parse((t as LexicalToken).Lex, NumberStyles.Number, CultureInfo.InvariantCulture)))));
                }
                else
                {
                    scanner.PutBackToken();
                    return(e);
                }

            default:
                scanner.PutBackToken();
                return(e);
            }
        }
Exemplo n.º 3
0
        private AbstractSyntaxTree ConditionalAnd(AbstractSyntaxTree e)
        {
            var t = scanner.GetToken();

            switch (t.TokenType)
            {
            case TokenType.And:
                return(ConditionalAnd(new AndNode(e, Equality())));

            default:
                scanner.PutBackToken();
                return(e);
            }
        }
Exemplo n.º 4
0
        private AbstractSyntaxTree NullCoalescing(AbstractSyntaxTree e)
        {
            var t = scanner.GetToken();

            switch (t.TokenType)
            {
            case TokenType.DoubleQuestionMark:
                return(NullCoalescing(new NullCoalescingNode(e, ConditionalOr())));

            default:
                scanner.PutBackToken();
                return(e);
            }
        }
Exemplo n.º 5
0
        private AbstractSyntaxTree ConditionalOr(AbstractSyntaxTree e)
        {
            var t = scanner.GetToken();

            switch (t.TokenType)
            {
            case TokenType.Or:
                return(ConditionalOr(new OrNode(e, ConditionalAnd())));

            default:
                scanner.PutBackToken();
                return(e);
            }
        }
Exemplo n.º 6
0
        private AbstractSyntaxTree Additive(AbstractSyntaxTree e)
        {
            var t = scanner.GetToken();

            switch (t.TokenType)
            {
            case TokenType.Plus:
                return(Additive(new AddNode(e, Multiplicative())));

            case TokenType.Minus:
                return(Additive(new SubtractNode(e, Multiplicative())));

            default:
                scanner.PutBackToken();
                return(e);
            }
        }
Exemplo n.º 7
0
        private AbstractSyntaxTree Equality(AbstractSyntaxTree e)
        {
            var t = scanner.GetToken();

            switch (t.TokenType)
            {
            case TokenType.DoubleEqual:
                return(Equality(new EqualNode(e, Relational())));

            case TokenType.NotEqual:
                return(Equality(new NotEqualNode(e, Relational())));

            default:
                scanner.PutBackToken();
                return(e);
            }
        }
Exemplo n.º 8
0
        private AbstractSyntaxTree Relational(AbstractSyntaxTree e)
        {
            var t = scanner.GetToken();

            switch (t.TokenType)
            {
            case TokenType.LessThan:
                return(Relational(new LessThanNode(e, Additive())));

            case TokenType.LessThanEqual:
                return(Relational(new LessThanEqualNode(e, Additive())));

            case TokenType.GreaterThan:
                return(Relational(new GreaterThanNode(e, Additive())));

            case TokenType.GreaterThanEqual:
                return(Relational(new GreaterThanEqualNode(e, Additive())));

            default:
                scanner.PutBackToken();
                return(e);
            }
        }
Exemplo n.º 9
0
        private AbstractSyntaxTree Conditional(AbstractSyntaxTree e)
        {
            var t = scanner.GetToken();

            switch (t.TokenType)
            {
            case TokenType.QuestionMark:
                var then = ConditionalOr();
                t = scanner.GetToken();
                switch (t.TokenType)
                {
                case TokenType.Colon:
                    return(Conditional(new TernaryNode(e, then, ConditionalOr())));

                default:
                    throw new ParsingException(scanner.Position, "Could not find the ':' to terminate the ternary ('?:') statement");
                }

            default:
                scanner.PutBackToken();
                return(e);
            }
        }
Exemplo n.º 10
0
 public ExponentNode(AbstractSyntaxTree left, AbstractSyntaxTree right)
     : base(left, right)
 {
 }
Exemplo n.º 11
0
 public TernaryNode(AbstractSyntaxTree Condition, AbstractSyntaxTree Positive, AbstractSyntaxTree Negative)
 {
     this.Condition = Condition;
     this.Positive  = Positive;
     this.Negative  = Negative;
 }
Exemplo n.º 12
0
 public NotEqualNode(AbstractSyntaxTree left, AbstractSyntaxTree right)
     : base(left, right)
 {
 }
Exemplo n.º 13
0
 protected BinaryNode(AbstractSyntaxTree left, AbstractSyntaxTree right)
 {
     this.left  = left;
     this.right = right;
 }
Exemplo n.º 14
0
 public DivideNode(AbstractSyntaxTree left, AbstractSyntaxTree right)
     : base(left, right)
 {
 }
Exemplo n.º 15
0
 public NegativeNode(AbstractSyntaxTree node)
 {
     this.node = node;
 }
Exemplo n.º 16
0
 public FormulaNode2(string FormulaName, Func <object, object, object> formula, AbstractSyntaxTree arg1, AbstractSyntaxTree arg2)
 {
     this.FormulaName = FormulaName;
     this.formula     = formula;
     this.arg1        = arg1;
     this.arg2        = arg2;
 }
Exemplo n.º 17
0
 public NegativeNode(AbstractSyntaxTree node)
     : base(node)
 {
 }
Exemplo n.º 18
0
 public UnaryNode(AbstractSyntaxTree node)
 {
     this.node = node;
 }
Exemplo n.º 19
0
 public LessThanEqualNode(AbstractSyntaxTree left, AbstractSyntaxTree right)
     : base(left, right)
 {
 }
Exemplo n.º 20
0
 public GreaterThanEqualNode(AbstractSyntaxTree left, AbstractSyntaxTree right)
     : base(left, right)
 {
 }
Exemplo n.º 21
0
 public MultiplyNode(AbstractSyntaxTree left, AbstractSyntaxTree right)
     : base(left, right)
 {
 }
Exemplo n.º 22
0
 public NotNode(AbstractSyntaxTree node)
     : base(node)
 {
 }
Exemplo n.º 23
0
 public ModuloNode(AbstractSyntaxTree left, AbstractSyntaxTree right)
     : base(left, right)
 {
 }
Exemplo n.º 24
0
 public FormulaNode1(string FormulaName, Func <object, object> formula, AbstractSyntaxTree input)
 {
     this.FormulaName = FormulaName;
     this.formula     = formula;
     this.input       = input;
 }
Exemplo n.º 25
0
 public NullCoalescingNode(AbstractSyntaxTree left, AbstractSyntaxTree right)
     : base(left, right)
 {
 }
Exemplo n.º 26
0
 public SubtractNode(AbstractSyntaxTree left, AbstractSyntaxTree right)
     : base(left, right)
 {
 }
Exemplo n.º 27
0
 public NotNode(AbstractSyntaxTree node)
 {
     this.node = node;
 }