//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); }
public object ParseCurrent() { if (!tape.HasCurrent) { return(null); } //Debugr.WriteLine(tape.Current.ToString()); //if (tape.Current.ToString().IndexOf("之和")!=-1) //{ // Debugr.WriteLine(tape.Current.ToString()); //} BuildCurrentLineTape(); LexToken firstToken = currLineTokenTape.First; if (firstToken.IsKind(TokenKindKeyword.IF)) { StmtRaw stmt = ParseIf(); return(stmt); } else if (firstToken.IsKind(TokenKindKeyword.Dang)) { StmtRaw stmt = ParseWhile(); return(stmt); } else if (firstToken.IsKind(TokenKindKeyword.Repeat)) { StmtRaw stmt = ParseRepeat(); return(stmt); } else if (firstToken.IsKind(TokenKindKeyword.Loop)) { StmtRaw stmt = ParseForeach(); return(stmt); } else if (firstToken.IsKind(TokenKindKeyword.Catch)) { StmtRaw stmt = ParseCatch(); return(stmt); } else { List <StmtRaw> stmts = ParseStmtCall(); return(stmts); } }
private void ParseUseClass(SectionUseRaw ast, List <LexToken> sourceTokens) { ImportPackageRawParser packageParser = new ImportPackageRawParser(); for (int i = 0; i < sourceTokens.Count; i++) { LexToken token = sourceTokens[i]; if (token.IsKind(TokenKindKeyword.Ident)) { ast.Parts.Add((LexTokenText)token); } else if (token.IsKind(TokenKindSymbol.Comma)) { } else { error(token, string.Format("使用的'{0}'不是正确的类型名称", token.Text)); } } }
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); }
private bool isBracketEnd(LexToken tok) { return(tok.IsKind(TokenKindSymbol.EOF, TokenKindSymbol.Semi, TokenKindSymbol.RBS)); }
public bool IsCompareOp(LexToken tok) { return(tok.IsKind(TokenKindSymbol.GT, TokenKindSymbol.LT, TokenKindSymbol.GE, TokenKindSymbol.LE, TokenKindSymbol.NE, TokenKindSymbol.EQ)); }