Exemplo n.º 1
0
        public override IVecValue VisitUnary([NotNull] VectorizeParser.UnaryContext context)
        {
            var expr = context.expression();

            if (expr is VectorizeParser.VarContext var)
            {
                var       name     = var.ID().GetText();
                var       oldValue = CurrentScope[name];
                IVecValue newValue;
                switch (context.op.Text)
                {
                case "++":
                    newValue = oldValue.Add(VecInt.One);
                    break;

                case "--":
                    newValue = oldValue.Subtract(VecInt.One);
                    break;

                default:
                    throw new InvalidOperationException($"Unknown operator '{context.op.Text}'!");
                }
                CurrentScope[name] = newValue;
                return(oldValue);
            }
            else
            {
                throw new InvalidOperationException("Increment can only be used with variables!");
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// Exit a parse tree produced by the <c>Unary</c>
 /// labeled alternative in <see cref="VectorizeParser.expression"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitUnary([NotNull] VectorizeParser.UnaryContext context)
 {
 }
Exemplo n.º 3
0
 /// <summary>
 /// Visit a parse tree produced by the <c>Unary</c>
 /// labeled alternative in <see cref="VectorizeParser.expression"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitUnary([NotNull] VectorizeParser.UnaryContext context)
 {
     return(VisitChildren(context));
 }