Пример #1
0
        //private void SkipSpaceLine()
        //{
        //    while (tape.HasCurrent)
        //    {
        //        if (tape.Current.Count == 0)
        //        {
        //            tape.MoveNext();
        //        }
        //        else
        //        {
        //            break;
        //        }
        //    }
        //}

        private bool IsSectionHead(LineTokenCollection ltc)
        {
            if (ltc.Count < 2)
            {
                return(false);
            }
            int bracketCounter = 0;

            for (int i = 0; i < ltc.Count; i++)
            {
                LexToken token = ltc.Get(i);
                if (token.IsKind(TokenKindSymbol.LBS))
                {
                    bracketCounter++;
                }
                else if (token.IsKind(TokenKindSymbol.RBS))
                {
                    bracketCounter--;
                }
                else if (token.IsKind(TokenKindSymbol.Colon))
                {
                    if (bracketCounter == 0)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
Пример #2
0
        private SectionExtendsRaw ParseExtends()
        {
            SectionExtendsRaw   ast        = new SectionExtendsRaw();
            LexToken            headToken  = tape.Current.FirstToken;
            LineTokenCollection lineTokens = tape.Current;

            if (lineTokens.Count == 3)
            {
                ast.BaseTypeToken = (LexTokenText)lineTokens.Get(2);
            }
            else if (lineTokens.Count > 3)
            {
                error(lineTokens.Get(3), string.Format("不支持多继承'{0}'", lineTokens.Get(3)));
            }
            tape.MoveNext();
            return(ast);
        }
Пример #3
0
        private SectionNameRaw ParseClassName()
        {
            SectionNameRaw      ast        = new SectionNameRaw();
            LexToken            headToken  = tape.Current.FirstToken;
            LineTokenCollection lineTokens = tape.Current;

            if (lineTokens.Count == 3)
            {
                ast.NameToken = (LexTokenText)lineTokens.Get(2);
            }
            else if (lineTokens.Count > 3)
            {
                error(lineTokens.Get(3), string.Format("类型名称后的'{0}'是多余的", lineTokens.Get(3)));
            }
            //string headFirstText = headToken.Text;
            //if (headFirstText.Length > 2)
            //{
            //    string baseTypeName = headFirstText.Substring(0, headFirstText.Length - 2);
            //    ast.BaseTypeToken = new LexTokenText( headToken.Line, headToken.Col,baseTypeName);
            //}
            //else
            //{
            //    ast.BaseTypeToken = null;
            //}

            //if(tape.Current.Count>=3)
            //{
            //    LexToken nameToken = tape.Current.Get(2);
            //    if (nameToken.IsKind(TokenKindKeyword.Ident))
            //    {
            //        ast.NameToken = nameToken;
            //        tape.MoveNext();
            //    }
            //}
            //if (tape.Current.Count > 3)
            //{
            //    for(int i=3;i<tape.Current.Count;i++)
            //    {
            //        LexToken tok = tape.Current.Get(i);
            //        error(tok, string.Format("类型名称后的'{0}'是多余的", tok.Text));
            //    }
            //}
            tape.MoveNext();
            return(ast);
        }