//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); }
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); }
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); }