222 lines
8.2 KiB
ObjectPascal
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.
|