183 lines
6.6 KiB
ObjectPascal
183 lines
6.6 KiB
ObjectPascal
unit dpgrtl.types;
|
|
|
|
interface
|
|
uses
|
|
Generics.Collections,
|
|
System.SysUtils;
|
|
|
|
const
|
|
// -------------------------------------------------------------------------
|
|
// autogen values
|
|
// -------------------------------------------------------------------------
|
|
AUTOGEN_INVALID = 0;
|
|
AUTOGEN_NONE = 1;
|
|
AUTOGEN_CARET = 2;
|
|
AUTOGEN_BANG = 3;
|
|
|
|
// -------------------------------------------------------------------------
|
|
// predefined token types
|
|
// -------------------------------------------------------------------------
|
|
TT_SKIP = $FF;
|
|
TT_INVALID = 0;
|
|
TT_EOF = 1;
|
|
TT_NTLA = 2; // null tree lookahead
|
|
TT_USER = 4;
|
|
|
|
EOF_CHAR = #0;
|
|
|
|
type
|
|
TByteSet = set of 0..255;
|
|
TCharSet = set of AnsiChar;
|
|
TCharMatrix = array of array of AnsiChar;
|
|
|
|
TTokenNameMap = TDictionary<integer,AnsiString>;
|
|
|
|
// ===================================================================================
|
|
// IToken interface
|
|
// ===================================================================================
|
|
IToken = interface
|
|
['{BFB516D6-7175-40C8-9AA0-592CA11AD391}']
|
|
|
|
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);
|
|
|
|
function Clone: IToken;
|
|
|
|
property TokenType : byte read GetTokenType write SetTokenType;
|
|
property TokenText : AnsiString read GetTokenText write SetTokenText;
|
|
property TokenLine : integer read GetTokenLine write SetTokenLine;
|
|
property TokenColumn : integer read GetTokenColumn write SetTokenColumn;
|
|
end;
|
|
|
|
// ===================================================================================
|
|
// ITokenStream interface
|
|
// ===================================================================================
|
|
ITokenStream = interface
|
|
['{48293450-4B0C-455B-BC3C-313363C503D2}']
|
|
|
|
function NextToken: IToken;
|
|
end;
|
|
|
|
// ===================================================================================
|
|
// IInputBuffer interface
|
|
// ===================================================================================
|
|
IInputBuffer = interface
|
|
['{936C26A0-E25F-4B4E-9FD3-5E8E7FC23B17}']
|
|
|
|
function GetMarked: boolean;
|
|
|
|
procedure Consume;
|
|
procedure Commit;
|
|
|
|
function Mark: integer;
|
|
procedure Rewind( Value: integer);
|
|
|
|
property Marked: boolean read GetMarked;
|
|
end;
|
|
|
|
// ===================================================================================
|
|
// ICharBuffer interface
|
|
// ===================================================================================
|
|
ICharBuffer = interface( IInputBuffer)
|
|
['{AA5CD21F-7982-4FF4-BB52-7A02B65C35A8}']
|
|
|
|
function LA(i: integer): AnsiChar;
|
|
end;
|
|
|
|
// ===================================================================================
|
|
// ITokenBuffer interface
|
|
// ===================================================================================
|
|
ITokenBuffer = interface( IInputBuffer)
|
|
['{1FD2EB56-5385-49B0-815D-8B7F96E33F1A}']
|
|
|
|
function LA(i: integer): integer;
|
|
function LT(i: integer): IToken;
|
|
end;
|
|
|
|
// ===================================================================================
|
|
// ILexerState
|
|
// ===================================================================================
|
|
ILexerState = interface
|
|
['{D6E15235-CADC-48BA-9390-376284515FAA}']
|
|
|
|
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);
|
|
|
|
property FileName : string read GetFileName
|
|
write SetFileName;
|
|
|
|
property Line : integer read GetLine
|
|
write SetLine;
|
|
|
|
property Column : integer read GetColumn
|
|
write SetColumn;
|
|
|
|
property Guessing : integer read GetGuessing
|
|
write SetGuessing;
|
|
|
|
property TokenStartLine : integer read GetTokenStartLine
|
|
write SetTokenStartLine;
|
|
|
|
property TokenStartColumn : integer read GetTokenStartColumn
|
|
write SetTokenStartColumn;
|
|
|
|
property InputBuffer : ICharBuffer read GetInputBuffer;
|
|
end;
|
|
|
|
// ===================================================================================
|
|
// IParserState
|
|
// ===================================================================================
|
|
IParserState = interface
|
|
['{763A4DAD-91F5-4225-A68D-8FE4B1A29164}']
|
|
|
|
function GetFileName : string;
|
|
function GetGuessing : integer;
|
|
function GetInputBuffer : ITokenBuffer;
|
|
|
|
procedure SetFileName( Value: string);
|
|
procedure SetGuessing( Value: integer);
|
|
|
|
property FileName : string read GetFileName write SetFileName;
|
|
property Guessing : integer read GetGuessing write SetGuessing;
|
|
property InputBuffer : ITokenBuffer read GetInputBuffer;
|
|
end;
|
|
|
|
// ===================================================================================
|
|
// ITreeParserState
|
|
// ===================================================================================
|
|
ITreeParserState = interface
|
|
['{439DCDAA-B1AB-482A-BAAE-843917F60E42}']
|
|
|
|
function GetGuessing: integer;
|
|
procedure SetGuessing( Value: integer);
|
|
|
|
property Guessing: integer read GetGuessing write SetGuessing;
|
|
end;
|
|
|
|
|
|
implementation
|
|
|
|
end.
|