Initial check in lib
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
unit dpglib.RuleRefElem;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
dpgrtl.types,
|
||||
dpglib.Types,
|
||||
dpglib.AlternativeElem;
|
||||
|
||||
type
|
||||
// =========================================================================
|
||||
// TRuleRefElem class declaration
|
||||
// =========================================================================
|
||||
TRuleRefElem = class( TAlternativeElem,
|
||||
IRuleRefElem,
|
||||
IAlternativeElem,
|
||||
IGrammarElem)
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Members
|
||||
// ---------------------------------------------------------------
|
||||
protected
|
||||
fTargetRule : AnsiString;
|
||||
fIdAssign : AnsiString;
|
||||
fArgs : AnsiString;
|
||||
fLabel : AnsiString;
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Constructor/destructor
|
||||
// ---------------------------------------------------------------
|
||||
public
|
||||
constructor Create( pGrammar : IGrammar;
|
||||
pToken : IToken;
|
||||
pAutoGenType: integer);
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// IGrammarElem overrides
|
||||
// ---------------------------------------------------------------
|
||||
public
|
||||
procedure Generate;
|
||||
function Look( pK: integer): ILookahead;
|
||||
function AsString : AnsiString;
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// IAlternativeElem overrides
|
||||
// ---------------------------------------------------------------
|
||||
protected
|
||||
function GetLabel : AnsiString;
|
||||
procedure SetLabel( pLabel: AnsiString);
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// IRuleRefElem methods
|
||||
// ---------------------------------------------------------------
|
||||
protected
|
||||
function GetTargetRule : AnsiString;
|
||||
function GetIdAssign : AnsiString;
|
||||
function GetArgs : AnsiString;
|
||||
|
||||
procedure SetTargetRule( pTargetRule : AnsiString);
|
||||
procedure SetIdAssign( pIdAssign : AnsiString);
|
||||
procedure SetArgs( pArgs : AnsiString);
|
||||
end;
|
||||
|
||||
implementation
|
||||
uses
|
||||
dpglib.CodeGenerator,
|
||||
dpglib.DpgParserTokens;
|
||||
|
||||
// ****************************************************************************
|
||||
// Constructor/destructor
|
||||
// ****************************************************************************
|
||||
// ============================================================================
|
||||
// Constructor
|
||||
// ============================================================================
|
||||
constructor TRuleRefElem.Create( pGrammar : IGrammar;
|
||||
pToken : IToken;
|
||||
pAutoGenType: integer);
|
||||
begin
|
||||
inherited Create( pGrammar, pToken, pAutoGenType);
|
||||
|
||||
fTargetRule := pToken.TokenText;
|
||||
|
||||
if pToken.TokenType = TT_TOKENREF then
|
||||
fTargetRule := TCodeGenerator.encodeLexerRuleName( pToken.TokenText)
|
||||
else
|
||||
fTargetRule := pToken.TokenText;
|
||||
end;
|
||||
|
||||
// ****************************************************************************
|
||||
// IGrammarElem overrides
|
||||
// ****************************************************************************
|
||||
// ============================================================================
|
||||
// Generate
|
||||
// ============================================================================
|
||||
procedure TRuleRefElem.Generate;
|
||||
begin
|
||||
fGrammar.Generator.Gen(self);
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// Look
|
||||
// ============================================================================
|
||||
function TRuleRefElem.Look(pK: integer): ILookahead;
|
||||
begin
|
||||
result := fGrammar.LLkAnalyzer.Look( pK, self);
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// AsString
|
||||
// ============================================================================
|
||||
function TRuleRefElem.AsString: AnsiString;
|
||||
begin
|
||||
if fArgs <> '' then
|
||||
result := ' ' + fTargetRule + fArgs
|
||||
else
|
||||
result := ' ' + fTargetRule;
|
||||
end;
|
||||
|
||||
// ****************************************************************************
|
||||
// IAlternativeElem overrides
|
||||
// ****************************************************************************
|
||||
// ============================================================================
|
||||
// GetLabel
|
||||
// ============================================================================
|
||||
function TRuleRefElem.GetLabel: AnsiString;
|
||||
begin
|
||||
result := fLabel;
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// SetLabel
|
||||
// ============================================================================
|
||||
procedure TRuleRefElem.SetLabel(pLabel: AnsiString);
|
||||
begin
|
||||
fLabel := pLabel;
|
||||
end;
|
||||
|
||||
// ****************************************************************************
|
||||
// IRuleRefElem implementation
|
||||
// ****************************************************************************
|
||||
// ============================================================================
|
||||
// GetTargetRule
|
||||
// ============================================================================
|
||||
function TRuleRefElem.GetTargetRule: AnsiString;
|
||||
begin
|
||||
result := fTargetRule;
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// GetIdAssign
|
||||
// ============================================================================
|
||||
function TRuleRefElem.GetIdAssign: AnsiString;
|
||||
begin
|
||||
result := fIdAssign;
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// GetArgs
|
||||
// ============================================================================
|
||||
function TRuleRefElem.GetArgs: AnsiString;
|
||||
begin
|
||||
result := fArgs;
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// SetTargetRule
|
||||
// ============================================================================
|
||||
procedure TRuleRefElem.SetTargetRule(pTargetRule: AnsiString);
|
||||
begin
|
||||
fTargetRule := pTargetRule;
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// SetIdAssign
|
||||
// ============================================================================
|
||||
procedure TRuleRefElem.SetIdAssign(pIdAssign: AnsiString);
|
||||
begin
|
||||
fIdAssign := pIdAssign;
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// SetArgs
|
||||
// ============================================================================
|
||||
procedure TRuleRefElem.SetArgs(pArgs: AnsiString);
|
||||
begin
|
||||
fArgs := pArgs;
|
||||
end;
|
||||
|
||||
end.
|
||||
Reference in New Issue
Block a user