Initial check in lib
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
unit dpglib.CharRangeElem;
|
||||
|
||||
interface
|
||||
uses
|
||||
dpgrtl.types,
|
||||
dpglib.types,
|
||||
dpglib.AlternativeElem;
|
||||
|
||||
type
|
||||
// =========================================================================
|
||||
// Class TCharRangeElem declaration
|
||||
// =========================================================================
|
||||
TCharRangeElem = class( TAlternativeElem,
|
||||
ICharRangeElem,
|
||||
IAlternativeElem,
|
||||
IGrammarElem)
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Members
|
||||
// ---------------------------------------------------------------
|
||||
protected
|
||||
fLabel : AnsiString;
|
||||
fBegin : AnsiChar;
|
||||
fEnd : AnsiChar;
|
||||
fBeginText : AnsiString;
|
||||
fEndText : AnsiString;
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Constructor/destructor
|
||||
// ---------------------------------------------------------------
|
||||
public
|
||||
constructor Create( pGrammar : IGrammar;
|
||||
pToken1 : IToken;
|
||||
pToken2 : 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);
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// ICharRangeElem methods
|
||||
// ---------------------------------------------------------------
|
||||
protected
|
||||
function GetBeginChar : AnsiChar;
|
||||
function GetEndChar : AnsiChar;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
// ****************************************************************************
|
||||
// Constructor/destructor
|
||||
// ****************************************************************************
|
||||
// ============================================================================
|
||||
// Constructor
|
||||
// ============================================================================
|
||||
constructor TCharRangeElem.Create( pGrammar : IGrammar;
|
||||
pToken1 : IToken;
|
||||
pToken2 : IToken;
|
||||
pAutoGenType: integer);
|
||||
var
|
||||
i: integer;
|
||||
|
||||
begin
|
||||
inherited Create( pGrammar, pToken1);
|
||||
|
||||
fBegin := pToken1.TokenText[1];
|
||||
fEnd := pToken2.TokenText[1];
|
||||
|
||||
fBeginText := pToken1.TokenText;
|
||||
fEndText := pToken2.TokenText;
|
||||
|
||||
fAutoGenType:= pAutoGenType;
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Track which AnsiCharacters are referenced in the grammar.
|
||||
// ---------------------------------------------------------------
|
||||
for i:=ord( fBegin) to ord( fEnd) do
|
||||
; // fGrammar.charVocabulary.add(i)
|
||||
end;
|
||||
|
||||
// ****************************************************************************
|
||||
// IGrammarElem ovrrides
|
||||
// ****************************************************************************
|
||||
// ============================================================================
|
||||
// Generate
|
||||
// ============================================================================
|
||||
procedure TCharRangeElem.Generate;
|
||||
begin
|
||||
fGrammar.Generator.gen( self);
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// Look
|
||||
// ============================================================================
|
||||
function TCharRangeElem.Look(pK: integer): ILookahead;
|
||||
begin
|
||||
result := fGrammar.LLkAnalyzer.Look( pK, self);
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// AsString
|
||||
// ============================================================================
|
||||
function TCharRangeElem.AsString: AnsiString;
|
||||
begin
|
||||
if fLabel <> '' then
|
||||
result := ' ' + fLabel + ':' + fBeginText + '..' + fEndText
|
||||
else
|
||||
result := ' ' + fBeginText + '..' + fEndText;
|
||||
end;
|
||||
|
||||
// ****************************************************************************
|
||||
// IAlternativeElem overrides
|
||||
// ****************************************************************************
|
||||
// ============================================================================
|
||||
// GetLabel
|
||||
// ============================================================================
|
||||
function TCharRangeElem.GetLabel: AnsiString;
|
||||
begin
|
||||
result := fLabel;
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// SetLabel
|
||||
// ============================================================================
|
||||
procedure TCharRangeElem.SetLabel(pLabel: AnsiString);
|
||||
begin
|
||||
fLabel := pLabel;
|
||||
end;
|
||||
|
||||
// ****************************************************************************
|
||||
// ICharRangeElem implementation
|
||||
// ****************************************************************************
|
||||
// ============================================================================
|
||||
// GetBeginChar
|
||||
// ============================================================================
|
||||
function TCharRangeElem.GetBeginChar: AnsiChar;
|
||||
begin
|
||||
result := fBegin;
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// GetEndChar
|
||||
// ============================================================================
|
||||
function TCharRangeElem.GetEndChar: AnsiChar;
|
||||
begin
|
||||
result := fEnd;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
end.
|
||||
Reference in New Issue
Block a user