Initial check in lib
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
// ----------------------------------------------------------------------------
|
||||
// A GrammarElement is a generic node in our data structure that holds a
|
||||
// grammar in memory. This data structure can be used for static analysis or
|
||||
// for dynamic analysis (during parsing).
|
||||
// Every node must know which grammar owns it, how to generate code, and how
|
||||
// to do analysis.
|
||||
// ----------------------------------------------------------------------------
|
||||
unit dpglib.GrammarElem;
|
||||
|
||||
interface
|
||||
uses
|
||||
dpgrtl.types,
|
||||
dpglib.types;
|
||||
|
||||
type
|
||||
TGrammarElem = class( TInterfacedObject, IGrammarElem)
|
||||
protected
|
||||
fGrammar : IGrammar;
|
||||
fLine : integer;
|
||||
fColumn : integer;
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// IGrammarElem methods
|
||||
// ----------------------------------------------------------------------
|
||||
protected
|
||||
function GetLine : integer;
|
||||
function GetColumn : integer;
|
||||
|
||||
procedure SetLine( Line : integer);
|
||||
procedure SetColumn( Colunm : integer);
|
||||
|
||||
procedure Generate;
|
||||
function AsString: AnsiString;
|
||||
function Look( k: integer): ILookahead;
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Construction/destruction
|
||||
// ----------------------------------------------------------------------
|
||||
public
|
||||
constructor Create( Grammar: IGrammar); overload;
|
||||
constructor Create( Grammar: IGrammar; Start: IToken); overload;
|
||||
destructor Destroy; override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
// @@@: Construction/destruction ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
//
|
||||
// Construction/destruction
|
||||
//
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ================================================================================================
|
||||
// Constructor
|
||||
// ================================================================================================
|
||||
constructor TGrammarElem.Create(Grammar: IGrammar);
|
||||
begin
|
||||
inherited Create;
|
||||
|
||||
fGrammar := Grammar;
|
||||
fLine := -1;
|
||||
fColumn := -1;
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// Constructor
|
||||
// ================================================================================================
|
||||
constructor TGrammarElem.Create(Grammar: IGrammar; Start: IToken);
|
||||
begin
|
||||
inherited Create;
|
||||
|
||||
fGrammar := Grammar;
|
||||
fLine := Start.TokenLine;
|
||||
fColumn := Start.TokenColumn;
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// Destructor
|
||||
// ================================================================================================
|
||||
destructor TGrammarElem.Destroy;
|
||||
begin
|
||||
fGrammar := nil;
|
||||
inherited;
|
||||
end;
|
||||
|
||||
// @@@: IGrammarElem implementation +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
//
|
||||
// IGrammarElem implementation
|
||||
//
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ================================================================================================
|
||||
// Get Line
|
||||
// ================================================================================================
|
||||
function TGrammarElem.GetLine: integer;
|
||||
begin
|
||||
result := fLine;
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// Get Column
|
||||
// ================================================================================================
|
||||
function TGrammarElem.GetColumn: integer;
|
||||
begin
|
||||
result := fColumn;
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// Set Line
|
||||
// ================================================================================================
|
||||
procedure TGrammarElem.SetLine(Line: integer);
|
||||
begin
|
||||
fLine := Line
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// Set Column
|
||||
// ================================================================================================
|
||||
procedure TGrammarElem.SetColumn(Colunm: integer);
|
||||
begin
|
||||
fColumn := Colunm
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// Generate
|
||||
// ================================================================================================
|
||||
procedure TGrammarElem.Generate;
|
||||
begin
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// Look
|
||||
// ================================================================================================
|
||||
function TGrammarElem.Look(k: integer): ILookahead;
|
||||
begin
|
||||
result := nil;
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// AsString
|
||||
// ================================================================================================
|
||||
function TGrammarElem.AsString: AnsiString;
|
||||
begin
|
||||
result := ''
|
||||
end;
|
||||
|
||||
|
||||
end.
|
||||
Reference in New Issue
Block a user