Initial check in docu
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
unit filter;
|
||||
|
||||
lexer Tfilter;
|
||||
options
|
||||
{
|
||||
k = 2;
|
||||
filter = true;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Paragraph
|
||||
// ----------------------------------------------------------------------------
|
||||
P
|
||||
: "<p>"
|
||||
;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Break
|
||||
// ----------------------------------------------------------------------------
|
||||
BR
|
||||
: "<br>"
|
||||
;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Newline
|
||||
// ----------------------------------------------------------------------------
|
||||
NEWLINE
|
||||
:
|
||||
(
|
||||
'\r' '\n' { newLine; _ttype := TT_SKIP; }
|
||||
| '\r' { newLine; _ttype := TT_SKIP; }
|
||||
| '\n' { newLine; _ttype := TT_SKIP; }
|
||||
)
|
||||
;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Tab
|
||||
// ----------------------------------------------------------------------------
|
||||
TAB
|
||||
: '\t' { tab; _ttype := TT_SKIP; }
|
||||
;
|
||||
|
||||
|
||||
@@ -0,0 +1,234 @@
|
||||
// ============================================================================
|
||||
// This file is generated by the Delphi Parser Generator.
|
||||
// ----------------------------------------------------------------------------
|
||||
// DPG version: 1.0.0.78r
|
||||
// Grammar: filter.g
|
||||
// ============================================================================
|
||||
unit filter;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes,
|
||||
Contnrs,
|
||||
dpgLexer,
|
||||
dpgToken,
|
||||
dpgTypes,
|
||||
filterTokens,
|
||||
SysUtils;
|
||||
|
||||
type
|
||||
// =========================================================================
|
||||
// Class Tfilter declaration
|
||||
// =========================================================================
|
||||
Tfilter = class( TdpgLexer)
|
||||
|
||||
protected // Public grammar rules ("rescoped")
|
||||
procedure mP ( pCreate: boolean);
|
||||
procedure mBR ( pCreate: boolean);
|
||||
procedure mNEWLINE ( pCreate: boolean);
|
||||
procedure mTAB ( pCreate: boolean);
|
||||
|
||||
public
|
||||
function NextToken: IdpgToken; override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
uses
|
||||
dpgException,
|
||||
dpgExceptionSemantic,
|
||||
dpgExceptionMismatchedChar;
|
||||
|
||||
// ============================================================================
|
||||
// mP
|
||||
// ============================================================================
|
||||
procedure Tfilter.mP( pCreate: boolean);
|
||||
var
|
||||
_begin: integer;
|
||||
_save: integer;
|
||||
_token: IdpgToken;
|
||||
_ttype: integer;
|
||||
|
||||
begin
|
||||
_begin := Length( fText) +1;
|
||||
_token := nil;
|
||||
_ttype := TT_P;
|
||||
|
||||
match('<p>');
|
||||
|
||||
if (_ttype <> TT_SKIP) and (pCreate = true) then
|
||||
begin
|
||||
_token := makeToken( _ttype);
|
||||
_token.TokenText := Copy( fText, _begin, Length(fText)-_begin+1);
|
||||
end;
|
||||
|
||||
fReturnToken := _token;
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// mBR
|
||||
// ============================================================================
|
||||
procedure Tfilter.mBR( pCreate: boolean);
|
||||
var
|
||||
_begin: integer;
|
||||
_save: integer;
|
||||
_token: IdpgToken;
|
||||
_ttype: integer;
|
||||
|
||||
begin
|
||||
_begin := Length( fText) +1;
|
||||
_token := nil;
|
||||
_ttype := TT_BR;
|
||||
|
||||
match('<br>');
|
||||
|
||||
if (_ttype <> TT_SKIP) and (pCreate = true) then
|
||||
begin
|
||||
_token := makeToken( _ttype);
|
||||
_token.TokenText := Copy( fText, _begin, Length(fText)-_begin+1);
|
||||
end;
|
||||
|
||||
fReturnToken := _token;
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// mNEWLINE
|
||||
// ============================================================================
|
||||
procedure Tfilter.mNEWLINE( pCreate: boolean);
|
||||
var
|
||||
_begin: integer;
|
||||
_save: integer;
|
||||
_token: IdpgToken;
|
||||
_ttype: integer;
|
||||
|
||||
begin
|
||||
_begin := Length( fText) +1;
|
||||
_token := nil;
|
||||
_ttype := TT_NEWLINE;
|
||||
|
||||
if (( LA(1) in [#13]) and (LA(2) in [#10])) then
|
||||
begin
|
||||
match(#13);
|
||||
match(#10);
|
||||
newLine; _ttype := TT_SKIP;
|
||||
end
|
||||
|
||||
else if (( LA(1) in [#13])) then
|
||||
begin
|
||||
match(#13);
|
||||
newLine; _ttype := TT_SKIP;
|
||||
end
|
||||
|
||||
else if (( LA(1) in [#10])) then
|
||||
begin
|
||||
match(#10);
|
||||
newLine; _ttype := TT_SKIP;
|
||||
end
|
||||
|
||||
else
|
||||
Raise EdpgMismatchedChar.Create( LA(1), [#10,#13], FileName, Line, Column);
|
||||
|
||||
if (_ttype <> TT_SKIP) and (pCreate = true) then
|
||||
begin
|
||||
_token := makeToken( _ttype);
|
||||
_token.TokenText := Copy( fText, _begin, Length(fText)-_begin+1);
|
||||
end;
|
||||
|
||||
fReturnToken := _token;
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// mTAB
|
||||
// ============================================================================
|
||||
procedure Tfilter.mTAB( pCreate: boolean);
|
||||
var
|
||||
_begin: integer;
|
||||
_save: integer;
|
||||
_token: IdpgToken;
|
||||
_ttype: integer;
|
||||
|
||||
begin
|
||||
_begin := Length( fText) +1;
|
||||
_token := nil;
|
||||
_ttype := TT_TAB;
|
||||
|
||||
match(#9);
|
||||
tab; _ttype := TT_SKIP;
|
||||
|
||||
if (_ttype <> TT_SKIP) and (pCreate = true) then
|
||||
begin
|
||||
_token := makeToken( _ttype);
|
||||
_token.TokenText := Copy( fText, _begin, Length(fText)-_begin+1);
|
||||
end;
|
||||
|
||||
fReturnToken := _token;
|
||||
end;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// NextToken
|
||||
// ----------------------------------------------------------------------------
|
||||
function Tfilter.NextToken : IdpgToken;
|
||||
begin
|
||||
while( true) do
|
||||
begin
|
||||
ResetText;
|
||||
|
||||
try
|
||||
if (( LA(1) in ['<']) and (LA(2) in ['p'])) then
|
||||
begin
|
||||
mP(true);
|
||||
result := fReturnToken;
|
||||
end
|
||||
|
||||
else if (( LA(1) in ['<']) and (LA(2) in ['b'])) then
|
||||
begin
|
||||
mBR(true);
|
||||
result := fReturnToken;
|
||||
end
|
||||
|
||||
else if (( LA(1) in [#10,#13])) then
|
||||
begin
|
||||
mNEWLINE(true);
|
||||
result := fReturnToken;
|
||||
end
|
||||
|
||||
else if (( LA(1) in [#9])) then
|
||||
begin
|
||||
mTAB(true);
|
||||
result := fReturnToken;
|
||||
end
|
||||
|
||||
else
|
||||
begin
|
||||
if LA(1) = EOF_CHAR then
|
||||
begin
|
||||
uponEof;
|
||||
result := TdpgToken.Create(TT_EOF);
|
||||
end
|
||||
|
||||
else
|
||||
begin
|
||||
consume;
|
||||
continue;
|
||||
end;
|
||||
end;
|
||||
|
||||
// --------------------------------------------------------------
|
||||
// If we found a SKIP token, then try again...
|
||||
// --------------------------------------------------------------
|
||||
if result = nil then
|
||||
continue;
|
||||
|
||||
// --------------------------------------------------------------
|
||||
// Now we have a valid token, so exit the function
|
||||
// --------------------------------------------------------------
|
||||
break;
|
||||
|
||||
except
|
||||
consume;
|
||||
continue;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,19 @@
|
||||
// ============================================================================
|
||||
// This file is generated by the Delphi Parser Generator.
|
||||
// ----------------------------------------------------------------------------
|
||||
// DPG version: 1.0.0.78r
|
||||
// Grammar: filter.g
|
||||
// ============================================================================
|
||||
unit filterTokens;
|
||||
|
||||
interface
|
||||
|
||||
const
|
||||
TT_EOF = 1;
|
||||
TT_P = 4;
|
||||
TT_BR = 5;
|
||||
TT_NEWLINE = 6;
|
||||
TT_TAB = 7;
|
||||
|
||||
implementation
|
||||
end.
|
||||
@@ -0,0 +1,7 @@
|
||||
// $Delphi Parser Generator: filter.pas -> TfilterTokens.txt$
|
||||
Tfilter
|
||||
TT_EOF=1
|
||||
TT_P=4
|
||||
TT_BR=5
|
||||
TT_NEWLINE=6
|
||||
TT_TAB=7
|
||||
Reference in New Issue
Block a user