Initial check in lib
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
// A TreeElement is a block with one alternative and a root node
|
||||
unit dpglib.TreeElem;
|
||||
|
||||
interface
|
||||
uses
|
||||
dpgrtl.types,
|
||||
dpglib.types,
|
||||
dpglib.AlternativeBlock;
|
||||
|
||||
type
|
||||
TTreeElem = class( TAlternativeBlock,
|
||||
ITreeElem,
|
||||
IGrammarElem)
|
||||
|
||||
protected
|
||||
fRoot : IGrammarAtom;
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// ITreeElem
|
||||
// ---------------------------------------------------------------
|
||||
protected
|
||||
function GetRoot: IGrammarAtom;
|
||||
procedure SetRoot( pRoot: IGrammarAtom);
|
||||
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// IGrammarElem
|
||||
// ---------------------------------------------------------------
|
||||
public
|
||||
procedure Generate;
|
||||
function Look( pK: integer): ILookahead;
|
||||
function AsString : AnsiString;
|
||||
|
||||
public
|
||||
constructor Create( Grammar : IGrammar;
|
||||
Start : IToken;
|
||||
Invert : boolean);
|
||||
|
||||
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{ TTreeElem }
|
||||
|
||||
|
||||
|
||||
// @@@: Construction / destruction ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
//
|
||||
// Construction / destruction
|
||||
//
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ================================================================================================
|
||||
// Constructor
|
||||
// ================================================================================================
|
||||
constructor TTreeElem.Create(Grammar: IGrammar; Start: IToken; Invert: boolean);
|
||||
begin
|
||||
inherited
|
||||
end;
|
||||
|
||||
|
||||
|
||||
// @@@: ITreeElem implementation ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
//
|
||||
// ITreeElem implementation
|
||||
//
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ================================================================================================
|
||||
// Get Root
|
||||
// ================================================================================================
|
||||
function TTreeElem.GetRoot: IGrammarAtom;
|
||||
begin
|
||||
result := fRoot
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// Set Root
|
||||
// ================================================================================================
|
||||
procedure TTreeElem.SetRoot(pRoot: IGrammarAtom);
|
||||
begin
|
||||
fRoot := pRoot
|
||||
end;
|
||||
|
||||
|
||||
|
||||
// @@@: IGrammarElem overrides ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
//
|
||||
// IGrammarElem overrides
|
||||
//
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ================================================================================================
|
||||
// Look
|
||||
// ================================================================================================
|
||||
function TTreeElem.Look(pK: integer): ILookahead;
|
||||
begin
|
||||
result := fGrammar.LLkAnalyzer.Look( pK, self);
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// Generate
|
||||
// ================================================================================================
|
||||
procedure TTreeElem.Generate;
|
||||
begin
|
||||
fGrammar.Generator.Gen( self);
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// As String
|
||||
// ================================================================================================
|
||||
function TTreeElem.AsString: AnsiString;
|
||||
var
|
||||
alt : IAlternative;
|
||||
elem : IAlternativeElem;
|
||||
|
||||
begin
|
||||
result := ' #(';
|
||||
|
||||
if Assigned(fRoot) then
|
||||
result := result +fRoot.AsString;
|
||||
|
||||
alt := fAlternatives.Items[0] as IAlternative;
|
||||
elem := alt.Head;
|
||||
|
||||
while Assigned(elem) do
|
||||
begin
|
||||
result := result + elem.AsString;
|
||||
elem := elem.Next;
|
||||
end;
|
||||
|
||||
result := result +')';
|
||||
end;
|
||||
|
||||
end.
|
||||
Reference in New Issue
Block a user