unit dpgrtl.token; interface uses dpgrtl.types; type TToken = class( TInterfacedObject, IToken) strict protected fTokenType : byte; fTokenText : AnsiString; fTokenLine : integer; fTokenColumn : integer; protected function GetTokenType : byte; function GetTokenText : AnsiString; function GetTokenLine : integer; function GetTokenColumn : integer; procedure SetTokenType( Value: byte); procedure SetTokenText( Value: AnsiString); procedure SetTokenLine( Value: integer); procedure SetTokenColumn( Value: integer); public function Clone: IToken; public constructor Create( ATokenType : byte=TT_INVALID; ATokenText : AnsiString=''; ATokenLine : integer=0; ATokenColumn: integer=0); public end; TTokenClass = class of TToken; var badToken : IToken; nullToken: IToken; implementation // ================================================================================================ // constructor // ================================================================================================ constructor TToken.Create( ATokenType : byte; ATokenText : AnsiString; ATokenLine : integer; ATokenColumn: integer); begin fTokenType := ATokenType; fTokenText := ATokenText; fTokenLine := ATokenLine; fTokenColumn:= ATokenColumn end; // ================================================================================================ // Get Token Text // ================================================================================================ function TToken.GetTokenText: AnsiString; begin result := fTokenText end; // ================================================================================================ // Get Token Type // ================================================================================================ function TToken.GetTokenType: byte; begin result := fTokenType end; // ================================================================================================ // Get Token Line // ================================================================================================ function TToken.GetTokenLine: integer; begin result := fTokenLine end; // ================================================================================================ // Get Token Column // ================================================================================================ function TToken.GetTokenColumn: integer; begin result := fTokenColumn end; // ================================================================================================ // Set Token Text // ================================================================================================ procedure TToken.SetTokenText( Value: AnsiString); begin fTokenText := Value end; // ================================================================================================ // Set Token Type // ================================================================================================ procedure TToken.SetTokenType( Value: byte); begin fTokenType := Value end; // ================================================================================================ // Set Token Line // ================================================================================================ procedure TToken.SetTokenLine( Value: integer); begin fTokenLine := Value end; // ================================================================================================ // Set Token Line // ================================================================================================ procedure TToken.SetTokenColumn( Value: integer); begin fTokenColumn := Value end; // ================================================================================================ // Clone // ================================================================================================ function TToken.Clone: IToken; begin result := TToken.Create( fTokenType, fTokenText, fTokenLine, fTokenColumn); end; initialization badToken := TToken.Create( TT_INVALID); nullToken := TToken.Create( TT_INVALID); finalization badToken := nil; nullToken := nil; end.