Initial check in lib
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
unit dpglib.StringLiteralElem;
|
||||
|
||||
interface
|
||||
uses
|
||||
dpgrtl.types,
|
||||
dpglib.types,
|
||||
dpglib.GrammarAtom;
|
||||
|
||||
type
|
||||
// =========================================================================
|
||||
// Class TStringLiteralElem declaration
|
||||
// =========================================================================
|
||||
TStringLiteralElem = class(TGrammarAtom,
|
||||
IStringLiteralElem,
|
||||
IGrammarAtom,
|
||||
IAlternativeElem,
|
||||
IGrammarElem)
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Members
|
||||
// ---------------------------------------------------------------
|
||||
protected
|
||||
fProcessedAtomText : AnsiString;
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Constructor/destructor
|
||||
// ---------------------------------------------------------------
|
||||
public
|
||||
constructor Create( pGrammar : IGrammar;
|
||||
pToken : IToken;
|
||||
pAutoGenType: integer);
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// IGrammarElem overrides
|
||||
// ---------------------------------------------------------------
|
||||
public
|
||||
procedure Generate;
|
||||
function Look( pK: integer): ILookahead;
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// IStringLiteralElem methods
|
||||
// ---------------------------------------------------------------
|
||||
protected
|
||||
function GetProcessedAtomText: AnsiString;
|
||||
|
||||
end;
|
||||
|
||||
implementation
|
||||
// ****************************************************************************
|
||||
// Constructor/destructor
|
||||
// ****************************************************************************
|
||||
// ============================================================================
|
||||
// Constructor
|
||||
// ============================================================================
|
||||
constructor TStringLiteralElem.Create( pGrammar : IGrammar;
|
||||
pToken : IToken;
|
||||
pAutoGenType: integer);
|
||||
var
|
||||
lg: ILexerGrammar;
|
||||
ts: ITokenSymbol;
|
||||
|
||||
begin
|
||||
inherited Create( pGrammar, pToken, pAutoGenType);
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Lexer does not have token types for AnsiString literals
|
||||
// ---------------------------------------------------------------
|
||||
if pGrammar.QueryInterface( ILexerGrammar, lg) <> S_OK then
|
||||
begin
|
||||
ts := fGrammar.TokenManager.TokenSymbol[ fAtomText];
|
||||
|
||||
if ts = nil then
|
||||
fGrammar.Tool.Error( 'Undefined literal: ' + String(fAtomText),
|
||||
fGrammar.GrammarFile,
|
||||
pToken.TokenLine,
|
||||
pToken.TokenColumn)
|
||||
else
|
||||
fTokenType := ts.TokenType;
|
||||
end;
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Process the AnsiString literal text by removing quotes and escaping
|
||||
// characters. If a lexical grammar, add the characters to the
|
||||
// char vocabulary.
|
||||
// (Later if I really need it....)
|
||||
// ---------------------------------------------------------------
|
||||
fProcessedAtomText := Copy(fAtomText,2,Length(fAtomText)-2);
|
||||
end;
|
||||
|
||||
// ****************************************************************************
|
||||
// IGrammarElem overrides
|
||||
// ****************************************************************************
|
||||
// ============================================================================
|
||||
// Generate
|
||||
// ============================================================================
|
||||
procedure TStringLiteralElem.Generate;
|
||||
begin
|
||||
fGrammar.Generator.Gen( self);
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// Look
|
||||
// ============================================================================
|
||||
function TStringLiteralElem.Look(pK: integer): ILookahead;
|
||||
begin
|
||||
result := fGrammar.LLkAnalyzer.Look(pK, self);
|
||||
end;
|
||||
|
||||
// ****************************************************************************
|
||||
// IStringLiteralElem implementation
|
||||
// ****************************************************************************
|
||||
// ============================================================================
|
||||
// GetProcessedAtomText
|
||||
// ============================================================================
|
||||
function TStringLiteralElem.GetProcessedAtomText: AnsiString;
|
||||
begin
|
||||
result := fProcessedAtomText;
|
||||
end;
|
||||
|
||||
end.
|
||||
Reference in New Issue
Block a user