Esempio n. 1
0
        void Primary(out Expression e)
        {
            String name; int n; e = null;

            if (la.kind == 1)
            {
                Ident(out name);
                e = new VariableAccess(name);
            }
            else if (la.kind == 2)
            {
                Number(out n);
                e = new Constant(n, Type.intType);
            }
            else if (la.kind == 3)
            {
                Get();
                Expr(out e);
                Expect(10);
            }
            else
            {
                SynErr(40);
            }
        }
Esempio n. 2
0
        void PostFixExp(out Expression e)
        {
            Expression e1; Expression[] es = new Expression[0];

            Primary(out e);
            if (la.kind == 3 || la.kind == 8)
            {
                if (la.kind == 8)
                {
                    Get();
                    Expr(out e1);
                    e = new IndexAccess(e, e1);
                    Expect(9);
                }
                else
                {
                    Get();
                    if (StartOf(4))
                    {
                        ActualPars(out es);
                    }
                    Expect(10);
                    VariableAccess varAcc = e as VariableAccess;
                    if (varAcc != null)
                    {
                        e = new Call(varAcc.name, es);
                    }
                    else
                    {
                        throw new Exception("Calling non-name expression");
                    }
                }
            }
        }