private PackageNameAST ParsePackageName(TokenTape tape) { PackageNameAST pname = new PackageNameAST(); //TokenKind currentKind = tape.Current.Kind; while (IsPackageNamePart(tape.CurrentKind)) { //currentKind = tape.Current.Kind; if (tape.CurrentKind == TokenKind.Ident) { pname.Add(tape.Current); tape.MoveNext(); } else if (tape.CurrentKind == TokenKind.DIV) { tape.MoveNext(); } //else if (tape.CurrentKind == TokenKind.Semi) //{ // break; //} //else if (tape.CurrentKind == TokenKind.NewLine) //{ // break; //} //else //{ // tape.error(string.Format("'{0}'不是正确的开发包名称", tape.Current.GetText())); // tape.MoveNext(); //} } return(pname); }
private SectionDim.DimVarAST ParseDimVar(TokenTape tape) { SectionDim.DimVarAST dimv = new SectionDim.DimVarAST(); dimv.NameToken = tape.Current; tape.MoveNext(); tape.Match(TokenKind.Assign); dimv.TypeToken = tape.Current; tape.MoveNext(); return(dimv); }
private SectionImport ParseImport() { SectionImport ast = new SectionImport(); ast.KeyToken = tape.Current; tape.MoveNext(); tape.Match(TokenKind.Colon); ast.Packages = ParsePackageList(); return(ast); }
private Exp ParseAssign() { Exp leftExp = parseBinaryLogicExp(); if (tape.Current.Kind == TokenKind.Assign || tape.Current.Kind == TokenKind.AssignTo) { ExpAssign assignExp = new ExpAssign(); assignExp.IsAssignTo = (tape.Current.Kind == TokenKind.AssignTo); tape.MoveNext(); Exp rightExp = parseBinaryLogicExp(); if (!assignExp.IsAssignTo) { assignExp.ToExp = leftExp; assignExp.ValueExp = rightExp; } else { assignExp.ToExp = rightExp; assignExp.ValueExp = leftExp; } return(assignExp); } else { return(leftExp); } }