unit dpgrtl.lexerstate; interface uses System.Classes, dpgrtl.types, dpgrtl.charbuffer; type TLexerState = class( TInterfacedObject, ILexerState) private fFileName : string; fLine : integer; fColumn : integer; fGuessing : integer; fInputBuffer : ICharBuffer; fTokenStartLine : integer; fTokenStartColumn : integer; // ------------------------------------------------------------ // ILexerState // ------------------------------------------------------------ protected function GetFileName : string; function GetLine : integer; function GetColumn : integer; function GetGuessing : integer; function GetInputBuffer : ICharBuffer; function GetTokenStartLine : integer; function GetTokenStartColumn : integer; procedure SetFileName( Value: string); procedure SetLine( Value: integer); procedure SetColumn( Value: integer); procedure SetGuessing( Value: integer); procedure SetTokenStartLine( Value: integer); procedure SetTokenStartColumn( Value: integer); public constructor Create( AStream: TStream); overload; constructor Create( ABuffer: ICharBuffer); overload; procedure AfterConstruction; override; procedure BeforeDestruction; override; end; implementation { TLexerState } // @@@: Construction/destruction ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // Construction/destruction // // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ================================================================================================ // Constructor // ================================================================================================ constructor TLexerState.Create(AStream: TStream); begin inherited Create; fInputBuffer := TCharBuffer.Create(AStream) end; // ================================================================================================ // Constructor // ================================================================================================ constructor TLexerState.Create(ABuffer: ICharBuffer); begin inherited Create; fInputBuffer := ABuffer end; // ================================================================================================ // After Construction // ================================================================================================ procedure TLexerState.AfterConstruction; begin inherited; fFileName := ''; fLine := 1; fColumn := 1; fGuessing := 0; fTokenStartLine := 1; fTokenStartColumn := 1; end; // ================================================================================================ // Before Destruction // ================================================================================================ procedure TLexerState.BeforeDestruction; begin fInputBuffer := nil; inherited; end; // @@@: ILexerState +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // ILexerState // // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ================================================================================================ // Get File Name // ================================================================================================ function TLexerState.GetFileName: string; begin result := fFileName end; // ================================================================================================ // Get Line number // ================================================================================================ function TLexerState.GetLine: integer; begin result := fLine end; // ================================================================================================ // Get Column number // ================================================================================================ function TLexerState.GetColumn: integer; begin result := fColumn end; // ================================================================================================ // Get Guessing // ================================================================================================ function TLexerState.GetGuessing: integer; begin result := fGuessing end; // ================================================================================================ // Get Input Buffer // ================================================================================================ function TLexerState.GetInputBuffer: ICharBuffer; begin result := fInputBuffer end; // ================================================================================================ // Get Token Start Line // ================================================================================================ function TLexerState.GetTokenStartLine: integer; begin result := fTokenStartLine end; // ================================================================================================ // Get Token Start Column // ================================================================================================ function TLexerState.GetTokenStartColumn: integer; begin result := fTokenStartColumn end; // ================================================================================================ // Set File Name // ================================================================================================ procedure TLexerState.SetFileName(Value: string); begin fFileName := Value end; // ================================================================================================ // Set Line number // ================================================================================================ procedure TLexerState.SetLine(Value: integer); begin fLine := Value end; // ================================================================================================ // Set Column Number // ================================================================================================ procedure TLexerState.SetColumn(Value: integer); begin fColumn := Value end; // ================================================================================================ // Set Guessing // ================================================================================================ procedure TLexerState.SetGuessing(Value: integer); begin fGuessing := Value end; // ================================================================================================ // Set Token Start Line // ================================================================================================ procedure TLexerState.SetTokenStartLine(Value: integer); begin fTokenStartLine := Value end; // ================================================================================================ // Set Token Start Column // ================================================================================================ procedure TLexerState.SetTokenStartColumn(Value: integer); begin fTokenStartColumn := Value end; end.