예제 #1
0
        Exp parseCall()
        {
            //report("parseCall");
            List <Exp> exps = new List <Exp>();

            while (tape.Current.Kind == TokenKind.Ident || tape.Current.Kind == TokenKind.LBS || TokenKindHelper.IsLiteral(tape.Current.Kind))//|| CurrentKind == TokenKind.RBS
            {
                Exp term = parseChain();
                exps.Add(term);
            }
            if (exps.Count == 2 && (exps[0] is ExpType) && (exps[1] is ExpBracket))
            {
                ExpNew expNew = new ExpNew();
                expNew.TypeExp    = (exps[0] as ExpType);
                expNew.BracketExp = (exps[1] as ExpBracket);
                return(expNew);
            }
            else if (exps.Count == 0)
            {
                return(null);
            }
            else if (exps.Count == 1 && !(exps[0] is ExpProcNamePart))
            {
                return(exps[0]);
            }
            else
            {
                ExpCall callExp = new ExpCall();
                callExp.Elements = exps;
                return(callExp);
            }
        }
예제 #2
0
        private ExpNew AnalyNewExp(ExpTypeUnsure expType, ExpBracket expBracket)
        {
            ExpNew expNew = new ExpNew(this.expContext, expType, expBracket);
            // expNew.SetContextExp(this.expContext);
            Exp expArg = expNew.Analy();

            ParseAsArg(expArg);
            return(expNew);
        }
예제 #3
0
        private Exp ParseToExpNew(ExpTypeBase expType, Exp exp2)
        {
            ExpBracket bracketBracket = WarpExp(exp2);

            if (bracketBracket.IsExpBracketTagNew())
            {
                bracketBracket = bracketBracket.AnalyToTagNew();
            }
            ExpNew newexp = new ExpNew(this.ExpContext, expType, bracketBracket);
            //newexp.SetContextExp(this.expContext);
            Exp exp3 = newexp.Analy();

            return(exp3);
        }