Exp parseTerm() { //report("parseTerm"); Exp leftExp = null; if (TokenKindHelper.IsLiteral(tape.CurrentKind))// CurrentToken.IsLiteral()) { leftExp = parseLiteral(); } else if (tape.CurrentKind == TokenKind.Each) { ExpEachWord varExp = new ExpEachWord(); varExp.EachToken = tape.Current; tape.MoveNext(); return(varExp); } else if (tape.Current.IsTypeName()) { leftExp = parseTypeExp(); return(leftExp); } else if (tape.Current.IsProcPart()) { leftExp = parseProcNamePart(); return(leftExp); } else if (tape.Current.IsVarName()) { leftExp = parseVarExp(); return(leftExp); } else if (tape.Current.Kind == TokenKind.Ident) { leftExp = parseVarExp(); return(leftExp); } else if (tape.Current.Kind == TokenKind.LBS) { leftExp = parseBracket(); return(leftExp); } else if (tape.Current.Kind == TokenKind.RBS) { tape.error("多余的右括号"); tape.MoveNext(); return(null); } else if (tape.Current.WKind == WordKind.Unkown) { var currentText = tape.Current.GetText(); tape.error("无法识别'" + currentText + "'"); tape.MoveNext(); return(null); } return(leftExp); }
private SectionUse ParseUse() { SectionUse ast = new SectionUse(); ast.KeyToken = tape.Current; tape.MoveNext(); tape.Match(TokenKind.Colon); while (tape.CurrentKind != TokenKind.NewLine && tape.CurrentKind != TokenKind.EOF) { if (tape.CurrentKind == TokenKind.Ident) { ast.AddTypeToken(tape.Current); tape.MoveNext(); } else if (tape.CurrentKind == TokenKind.Comma) { tape.MoveNext(); } else { tape.error(string.Format("使用的'{0}'不是正确的类型名称", tape.Current.GetText())); tape.MoveNext(); } } SkipNewLine(); return(ast); }