Example #1
0
        private Exp ParseDi()
        {
            ExpDi diexp = new ExpDi(this.ExpContext);

            diexp.KeyToken   = (LexTokenText)Tape.Current;
            diexp.SubjectExp = PopChainsExp();
            MoveNext();
            diexp.ArgExp = ParseExpect_Exp_Var();
            if (Tape.HasCurrent == false)
            {
                this.ExpContext.FileContext.Errorf(diexp.KeyToken.Position, "‘的’后面缺少‘个’匹配");
                this.ExpContext.FileContext.Errorf(diexp.KeyToken.Position, "‘的’后面缺少元素类型名称");
            }
            else
            {
                if (Tape.Current is LexToken)
                {
                    LexToken tok1 = (LexToken)Tape.Current;
                    if (tok1.IsKind(TokenKindKeyword.Ge))
                    {
                        diexp.GeToken = (LexTokenText)tok1;
                        MoveNext();
                    }
                    else
                    {
                        this.ExpContext.FileContext.Errorf(diexp.KeyToken.Position, "‘的’后面缺少‘个’匹配");
                    }
                }
                else
                {
                    this.ExpContext.FileContext.Errorf(diexp.KeyToken.Position, "‘的’后面缺少‘个’匹配");
                }
                var data = Tape.Current;
                if (featurer.IsThisClassName(data) || featurer.IsImportTypeName(data))
                {
                    Exp exp = ParseTypes();
                    diexp.ElementTypeExp = exp;
                }
                else
                {
                    this.ExpContext.FileContext.Errorf(diexp.KeyToken.Position, "‘的’后面缺少元素类型名称");
                }
            }

            return(diexp);
        }
Example #2
0
        Exp parseChain()
        {
            //report("parseChain");
            Exp leftExp = parseTerm();

            if (leftExp == null)
            {
                return(null);
            }

            while (tape.Current.Kind != TokenKind.EOF)
            {
                if (tape.Current.Kind == TokenKind.DE)
                {
                    ExpDe deExp = new ExpDe();
                    deExp.KeyToken = tape.Current;
                    deExp.LeftExp  = leftExp;
                    tape.MoveNext();
                    Exp rightExp = parseTerm();
                    deExp.RightExp = rightExp;
                    leftExp        = deExp;
                }
                else if (tape.Current.Kind == TokenKind.DI)
                {
                    ExpDi diExp = new ExpDi();
                    diExp.KeyToken   = tape.Current;
                    diExp.SubjectExp = leftExp;
                    tape.MoveNext();
                    Exp rightExp = parseTerm();
                    diExp.ArgExp = rightExp;
                    leftExp      = diExp;
                }
                else
                {
                    return(leftExp);
                }
            }
            return(leftExp);
        }