Files
bds.mr.dpg/src.rtl/dpgrtl.lexerstate.pas
T
2026-01-03 18:32:50 +01:00

222 lines
8.2 KiB
ObjectPascal

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.