Ejemplo n.º 1
0
        private int EvaluateExpression(ExpressionSyntex node)
        {
            if (node is NumberExpresssionSyntex n)
            {
                return((int)n.NumberToken.Value);
            }

            if (node is BinaryExpressionSyntex b)
            {
                var left  = EvaluateExpression(b.Left);
                var right = EvaluateExpression(b.Right);

                switch (b.OperatorToken.Kind)
                {
                case SyntexKind.PlusToken:
                    return(left + right);

                case SyntexKind.MinusToken:
                    return(left - right);

                case SyntexKind.StarToken:
                    return(left * right);

                case SyntexKind.SlashToken:
                    return(left / right);

                default:
                    throw new Exception($"Unexpected binary operator {b.OperatorToken.Kind}");
                }
            }

            if (node is ParenthesisedExpressionSyntex p)
            {
                return(EvaluateExpression(p.Expression));
            }

            throw new Exception($"Unexpected node {node.Kind} ");
        }
Ejemplo n.º 2
0
 public BinaryExpressionSyntex(ExpressionSyntex left, SyntexToken operatorToken, ExpressionSyntex right)
 {
     Left          = left;
     OperatorToken = operatorToken;
     Right         = right;
 }
 public ParenthesisedExpressionSyntex(SyntexToken openParenthesisToken, ExpressionSyntex expression, SyntexToken closeParenthesisToken)
 {
     OpenParenthesisToken  = openParenthesisToken;
     Expression            = expression;
     CloseParenthesisToken = closeParenthesisToken;
 }
Ejemplo n.º 4
0
 public SyntexTree(IEnumerable <string> diagnostics, ExpressionSyntex root, SyntexToken endOfFileToken)
 {
     Diagnostics    = diagnostics.ToArray();
     Root           = root;
     EndOfFileToken = endOfFileToken;
 }
Ejemplo n.º 5
0
 public Evaluator(ExpressionSyntex root)
 {
     _root = root;
 }