Initial check in lib
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
unit dpglib.ActionElem;
|
||||
|
||||
interface
|
||||
uses
|
||||
dpgrtl.types,
|
||||
dpglib.types,
|
||||
dpglib.AlternativeElem;
|
||||
|
||||
type
|
||||
// =========================================================================
|
||||
// Class TActionElem declaration
|
||||
// =========================================================================
|
||||
TActionElem = class( TAlternativeElem,
|
||||
IActionElem,
|
||||
IAlternativeElem,
|
||||
IGrammarElem)
|
||||
|
||||
protected
|
||||
// ------------------------------------------------------------
|
||||
// Members
|
||||
// ------------------------------------------------------------
|
||||
fActionText : AnsiString;
|
||||
fIsSemPred : boolean;
|
||||
|
||||
public
|
||||
// ------------------------------------------------------------
|
||||
// Constructor/destructor
|
||||
// ------------------------------------------------------------
|
||||
constructor Create( pGrammar: IGrammar; pToken: IToken);
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// IGrammarElem methods
|
||||
// ------------------------------------------------------------
|
||||
procedure Generate;
|
||||
function Look( pK: integer): ILookahead;
|
||||
function AsString : AnsiString;
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// IsgpAlternativeElem methods
|
||||
// ------------------------------------------------------------
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// IActionElem methods
|
||||
// ------------------------------------------------------------
|
||||
function GetActionText : AnsiString;
|
||||
function GetSemPred : boolean;
|
||||
|
||||
procedure SetSempred( pSemPred: boolean);
|
||||
end;
|
||||
|
||||
|
||||
implementation
|
||||
// ****************************************************************************
|
||||
// Constructor/destructor
|
||||
// ****************************************************************************
|
||||
// ============================================================================
|
||||
// Constructor
|
||||
// ============================================================================
|
||||
constructor TActionElem.Create(pGrammar: IGrammar; pToken: IToken);
|
||||
begin
|
||||
inherited Create( pGrammar);
|
||||
|
||||
fActionText := pToken.TokenText;
|
||||
fIsSemPred := false;
|
||||
end;
|
||||
|
||||
// ****************************************************************************
|
||||
// IActionElem implementation
|
||||
// ****************************************************************************
|
||||
// ============================================================================
|
||||
// GetActionText
|
||||
// ============================================================================
|
||||
function TActionElem.GetActionText: AnsiString;
|
||||
begin
|
||||
result := fActionText;
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// GetSemPred
|
||||
// ============================================================================
|
||||
function TActionElem.GetSemPred: boolean;
|
||||
begin
|
||||
result := fIsSemPred;
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// SetSemPred
|
||||
// ============================================================================
|
||||
procedure TActionElem.SetSempred(pSemPred: boolean);
|
||||
begin
|
||||
fIsSemPred := pSemPred;
|
||||
end;
|
||||
|
||||
// ****************************************************************************
|
||||
// IGrammarElem implementation
|
||||
// ****************************************************************************
|
||||
// ============================================================================
|
||||
// Generate
|
||||
// ============================================================================
|
||||
procedure TActionElem.Generate;
|
||||
begin
|
||||
fGrammar.Generator.gen( self);
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// Look
|
||||
// ============================================================================
|
||||
function TActionElem.Look(pK: integer): ILookahead;
|
||||
begin
|
||||
result := fGrammar.LLkAnalyzer.Look( pK, self);
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// AsString
|
||||
// ============================================================================
|
||||
function TActionElem.AsString: AnsiString;
|
||||
begin
|
||||
result := ' {' + fActionText;
|
||||
|
||||
if fIsSemPred then
|
||||
result := result + '}?';
|
||||
end;
|
||||
|
||||
end.
|
||||
Reference in New Issue
Block a user