Initial check in docu
This commit is contained in:
@@ -0,0 +1,367 @@
|
||||
// ============================================================================
|
||||
// This file is generated by the Delphi Parser Generator.
|
||||
// ----------------------------------------------------------------------------
|
||||
// DPG version: 1.0.0.118r
|
||||
// Grammar: javadoclexer.g
|
||||
// ============================================================================
|
||||
unit JavaDocLexer;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes,
|
||||
Contnrs,
|
||||
dpgLexer,
|
||||
dpgToken,
|
||||
dpgTokenStreamSelector,
|
||||
dpgTypes,
|
||||
JavaDocTokens,
|
||||
SysUtils;
|
||||
|
||||
type
|
||||
// =========================================================================
|
||||
// Class TJavaDocLexer declaration
|
||||
// =========================================================================
|
||||
TJavaDocLexer = class( TdpgLexer)
|
||||
|
||||
public
|
||||
Selector : IdpgTokenStreamSelector;
|
||||
|
||||
protected // Protected grammar rules
|
||||
procedure mID ( pCreate: boolean);
|
||||
|
||||
protected // Public grammar rules ("rescoped")
|
||||
procedure mPARAM ( pCreate: boolean);
|
||||
procedure mEXCEPTION ( pCreate: boolean);
|
||||
procedure mSTAR ( pCreate: boolean);
|
||||
procedure mJAVADOC_CLOSE ( pCreate: boolean);
|
||||
procedure mNEWLINE ( pCreate: boolean);
|
||||
|
||||
public
|
||||
function NextToken: IdpgToken; override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
uses
|
||||
dpgException,
|
||||
dpgExceptionSemantic,
|
||||
dpgExceptionMismatchedChar;
|
||||
|
||||
// ============================================================================
|
||||
// mPARAM
|
||||
// ============================================================================
|
||||
procedure TJavaDocLexer.mPARAM( pCreate: boolean);
|
||||
var
|
||||
_begin: integer;
|
||||
_cnt_3: integer;
|
||||
_save: integer;
|
||||
_token: IdpgToken;
|
||||
_ttype: integer;
|
||||
|
||||
begin
|
||||
_begin := Length( fText) +1;
|
||||
_token := nil;
|
||||
_ttype := TT_PARAM;
|
||||
|
||||
match('@param');
|
||||
_cnt_3 := 0;
|
||||
|
||||
while(true) do
|
||||
begin
|
||||
if (( LA(1) in [' '])) then
|
||||
begin
|
||||
match(' ');
|
||||
end
|
||||
|
||||
else
|
||||
begin
|
||||
if _cnt_3 >= 1 then
|
||||
break
|
||||
else
|
||||
Raise EdpgMismatchedChar.Create( LA(1), [' '], FileName, Line, Column);
|
||||
end;
|
||||
|
||||
INC(_cnt_3);
|
||||
end;
|
||||
mID(false);
|
||||
|
||||
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;
|
||||
|
||||
// ============================================================================
|
||||
// mID
|
||||
// ============================================================================
|
||||
procedure TJavaDocLexer.mID( pCreate: boolean);
|
||||
var
|
||||
_begin: integer;
|
||||
_cnt_9: integer;
|
||||
_save: integer;
|
||||
_token: IdpgToken;
|
||||
_ttype: integer;
|
||||
|
||||
begin
|
||||
_begin := Length( fText) +1;
|
||||
_token := nil;
|
||||
_ttype := TT_ID;
|
||||
|
||||
_cnt_9 := 0;
|
||||
|
||||
while(true) do
|
||||
begin
|
||||
if (( LA(1) in ['a'..'z'])) then
|
||||
begin
|
||||
match( ['a'..'z']);
|
||||
end
|
||||
|
||||
else
|
||||
begin
|
||||
if _cnt_9 >= 1 then
|
||||
break
|
||||
else
|
||||
Raise EdpgMismatchedChar.Create( LA(1), ['a'..'z'], FileName, Line, Column);
|
||||
end;
|
||||
|
||||
INC(_cnt_9);
|
||||
end;
|
||||
|
||||
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;
|
||||
|
||||
// ============================================================================
|
||||
// mEXCEPTION
|
||||
// ============================================================================
|
||||
procedure TJavaDocLexer.mEXCEPTION( pCreate: boolean);
|
||||
var
|
||||
_begin: integer;
|
||||
_cnt_6: integer;
|
||||
_save: integer;
|
||||
_token: IdpgToken;
|
||||
_ttype: integer;
|
||||
|
||||
begin
|
||||
_begin := Length( fText) +1;
|
||||
_token := nil;
|
||||
_ttype := TT_EXCEPTION;
|
||||
|
||||
match('@exception');
|
||||
_cnt_6 := 0;
|
||||
|
||||
while(true) do
|
||||
begin
|
||||
if (( LA(1) in [' '])) then
|
||||
begin
|
||||
match(' ');
|
||||
end
|
||||
|
||||
else
|
||||
begin
|
||||
if _cnt_6 >= 1 then
|
||||
break
|
||||
else
|
||||
Raise EdpgMismatchedChar.Create( LA(1), [' '], FileName, Line, Column);
|
||||
end;
|
||||
|
||||
INC(_cnt_6);
|
||||
end;
|
||||
mID(false);
|
||||
|
||||
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;
|
||||
|
||||
// ============================================================================
|
||||
// mSTAR
|
||||
// ============================================================================
|
||||
procedure TJavaDocLexer.mSTAR( pCreate: boolean);
|
||||
var
|
||||
_begin: integer;
|
||||
_save: integer;
|
||||
_token: IdpgToken;
|
||||
_ttype: integer;
|
||||
|
||||
begin
|
||||
_begin := Length( fText) +1;
|
||||
_token := nil;
|
||||
_ttype := TT_STAR;
|
||||
|
||||
match('*');
|
||||
_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;
|
||||
|
||||
// ============================================================================
|
||||
// mJAVADOC_CLOSE
|
||||
// ============================================================================
|
||||
procedure TJavaDocLexer.mJAVADOC_CLOSE( pCreate: boolean);
|
||||
var
|
||||
_begin: integer;
|
||||
_save: integer;
|
||||
_token: IdpgToken;
|
||||
_ttype: integer;
|
||||
|
||||
begin
|
||||
_begin := Length( fText) +1;
|
||||
_token := nil;
|
||||
_ttype := TT_JAVADOC_CLOSE;
|
||||
|
||||
match('*/');
|
||||
Selector.Pop;
|
||||
|
||||
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 TJavaDocLexer.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);
|
||||
end
|
||||
|
||||
else if (( LA(1) in [#13])) then
|
||||
begin
|
||||
match(#13);
|
||||
end
|
||||
|
||||
else if (( LA(1) in [#10])) then
|
||||
begin
|
||||
match(#10);
|
||||
end
|
||||
|
||||
else
|
||||
Raise EdpgMismatchedChar.Create( LA(1), [#10,#13], FileName, Line, Column);
|
||||
newLine;
|
||||
_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 TJavaDocLexer.NextToken : IdpgToken;
|
||||
var
|
||||
la1 : char;
|
||||
la2 : char;
|
||||
begin
|
||||
while( true) do
|
||||
begin
|
||||
ResetText;
|
||||
|
||||
try
|
||||
la1 := LA(1);
|
||||
la2 := LA(2);
|
||||
|
||||
if (( LA(1) in ['@']) and (LA(2) in ['p'])) then
|
||||
begin
|
||||
mPARAM(true);
|
||||
result := fReturnToken;
|
||||
end
|
||||
|
||||
else if (( LA(1) in ['@']) and (LA(2) in ['e'])) then
|
||||
begin
|
||||
mEXCEPTION(true);
|
||||
result := fReturnToken;
|
||||
end
|
||||
|
||||
else if (( LA(1) in ['*']) and (LA(2) in ['/'])) then
|
||||
begin
|
||||
mJAVADOC_CLOSE(true);
|
||||
result := fReturnToken;
|
||||
end
|
||||
|
||||
else if (( LA(1) in ['*'])) then
|
||||
begin
|
||||
mSTAR(true);
|
||||
result := fReturnToken;
|
||||
end
|
||||
|
||||
else if (( LA(1) in [#10,#13])) then
|
||||
begin
|
||||
mNEWLINE(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,21 @@
|
||||
// ============================================================================
|
||||
// This file is generated by the Delphi Parser Generator.
|
||||
// ----------------------------------------------------------------------------
|
||||
// DPG version: 1.0.0.118r
|
||||
// Grammar: javadoclexer.g
|
||||
// ============================================================================
|
||||
unit JavaDocTokens;
|
||||
|
||||
interface
|
||||
|
||||
const
|
||||
TT_EOF = 1;
|
||||
TT_PARAM = 4;
|
||||
TT_EXCEPTION = 5;
|
||||
TT_ID = 6;
|
||||
TT_STAR = 7;
|
||||
TT_JAVADOC_CLOSE = 8;
|
||||
TT_NEWLINE = 9;
|
||||
|
||||
implementation
|
||||
end.
|
||||
@@ -0,0 +1,9 @@
|
||||
// $Delphi Parser Generator: JavaDocLexer.pas -> TJavaDocLexerTokens.txt$
|
||||
TJavaDocLexer
|
||||
TT_EOF=1
|
||||
TT_PARAM=4
|
||||
TT_EXCEPTION=5
|
||||
TT_ID=6
|
||||
TT_STAR=7
|
||||
TT_JAVADOC_CLOSE=8
|
||||
TT_NEWLINE=9
|
||||
@@ -0,0 +1,286 @@
|
||||
// ============================================================================
|
||||
// This file is generated by the Delphi Parser Generator.
|
||||
// ----------------------------------------------------------------------------
|
||||
// DPG version: 1.0.0.118r
|
||||
// Grammar: javalexer.g
|
||||
// ============================================================================
|
||||
unit JavaLexer;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes,
|
||||
Contnrs,
|
||||
dpgLexer,
|
||||
dpgToken,
|
||||
dpgTokenStreamSelector,
|
||||
dpgTypes,
|
||||
JavaTokens,
|
||||
SysUtils;
|
||||
|
||||
type
|
||||
// =========================================================================
|
||||
// Class TJavaLexer declaration
|
||||
// =========================================================================
|
||||
TJavaLexer = class( TdpgLexer)
|
||||
|
||||
public
|
||||
Selector : IdpgTokenStreamSelector;
|
||||
|
||||
protected // Internals
|
||||
procedure initialize; override;
|
||||
|
||||
protected // Public grammar rules ("rescoped")
|
||||
procedure mSEMI ( pCreate: boolean);
|
||||
procedure mJAVADOC_OPEN ( pCreate: boolean);
|
||||
procedure mID ( pCreate: boolean);
|
||||
procedure mWS ( pCreate: boolean);
|
||||
|
||||
public
|
||||
function NextToken: IdpgToken; override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
uses
|
||||
dpgException,
|
||||
dpgExceptionSemantic,
|
||||
dpgExceptionMismatchedChar;
|
||||
|
||||
// ============================================================================
|
||||
// mSEMI
|
||||
// ============================================================================
|
||||
procedure TJavaLexer.mSEMI( pCreate: boolean);
|
||||
var
|
||||
_begin: integer;
|
||||
_save: integer;
|
||||
_token: IdpgToken;
|
||||
_ttype: integer;
|
||||
|
||||
begin
|
||||
_begin := Length( fText) +1;
|
||||
_token := nil;
|
||||
_ttype := TT_SEMI;
|
||||
|
||||
match(';');
|
||||
|
||||
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;
|
||||
|
||||
// ============================================================================
|
||||
// mJAVADOC_OPEN
|
||||
// ============================================================================
|
||||
procedure TJavaLexer.mJAVADOC_OPEN( pCreate: boolean);
|
||||
var
|
||||
_begin: integer;
|
||||
_save: integer;
|
||||
_token: IdpgToken;
|
||||
_ttype: integer;
|
||||
|
||||
begin
|
||||
_begin := Length( fText) +1;
|
||||
_token := nil;
|
||||
_ttype := TT_JAVADOC_OPEN;
|
||||
|
||||
match('/**');
|
||||
Selector.Push('docLexer');
|
||||
|
||||
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;
|
||||
|
||||
// ============================================================================
|
||||
// mID
|
||||
// ============================================================================
|
||||
procedure TJavaLexer.mID( pCreate: boolean);
|
||||
var
|
||||
_begin: integer;
|
||||
_cnt_5: integer;
|
||||
_save: integer;
|
||||
_token: IdpgToken;
|
||||
_ttype: integer;
|
||||
|
||||
begin
|
||||
_begin := Length( fText) +1;
|
||||
_token := nil;
|
||||
_ttype := TT_ID;
|
||||
|
||||
_cnt_5 := 0;
|
||||
|
||||
while(true) do
|
||||
begin
|
||||
if (( LA(1) in ['a'..'z'])) then
|
||||
begin
|
||||
match( ['a'..'z']);
|
||||
end
|
||||
|
||||
else
|
||||
begin
|
||||
if _cnt_5 >= 1 then
|
||||
break
|
||||
else
|
||||
Raise EdpgMismatchedChar.Create( LA(1), ['a'..'z'], FileName, Line, Column);
|
||||
end;
|
||||
|
||||
INC(_cnt_5);
|
||||
end;
|
||||
_ttype := testLit( _ttype);
|
||||
|
||||
|
||||
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;
|
||||
|
||||
// ============================================================================
|
||||
// mWS
|
||||
// ============================================================================
|
||||
procedure TJavaLexer.mWS( pCreate: boolean);
|
||||
var
|
||||
_begin: integer;
|
||||
_save: integer;
|
||||
_token: IdpgToken;
|
||||
_ttype: integer;
|
||||
|
||||
begin
|
||||
_begin := Length( fText) +1;
|
||||
_token := nil;
|
||||
_ttype := TT_WS;
|
||||
|
||||
if (( LA(1) in [' '])) then
|
||||
begin
|
||||
match(' ');
|
||||
end
|
||||
|
||||
else if (( LA(1) in [#9])) then
|
||||
begin
|
||||
match(#9);
|
||||
end
|
||||
|
||||
else if (( LA(1) in [#10,#13])) then
|
||||
begin
|
||||
if (( LA(1) in [#13]) and (LA(2) in [#10])) then
|
||||
begin
|
||||
match(#13);
|
||||
match(#10);
|
||||
end
|
||||
|
||||
else if (( LA(1) in [#13])) then
|
||||
begin
|
||||
match(#13);
|
||||
end
|
||||
|
||||
else if (( LA(1) in [#10])) then
|
||||
begin
|
||||
match(#10);
|
||||
end
|
||||
|
||||
else
|
||||
Raise EdpgMismatchedChar.Create( LA(1), [#10,#13], FileName, Line, Column);
|
||||
newLine;
|
||||
end
|
||||
|
||||
else
|
||||
Raise EdpgMismatchedChar.Create( LA(1), [#9..#10,#13,' '], FileName, Line, Column);
|
||||
_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 TJavaLexer.NextToken : IdpgToken;
|
||||
var
|
||||
_first : TdpgCharSet;
|
||||
|
||||
begin
|
||||
_first := [#9..#10,#13,' ','/',';','a'..'z'];
|
||||
|
||||
while( true) do
|
||||
begin
|
||||
ResetText;
|
||||
|
||||
try
|
||||
if (( LA(1) in [';'])) then
|
||||
begin
|
||||
mSEMI(true);
|
||||
result := fReturnToken;
|
||||
end
|
||||
|
||||
else if (( LA(1) in ['/'])) then
|
||||
begin
|
||||
mJAVADOC_OPEN(true);
|
||||
result := fReturnToken;
|
||||
end
|
||||
|
||||
else if (( LA(1) in ['a'..'z'])) then
|
||||
begin
|
||||
mID(true);
|
||||
result := fReturnToken;
|
||||
end
|
||||
|
||||
else if (( LA(1) in [#9..#10,#13,' '])) then
|
||||
begin
|
||||
mWS(true);
|
||||
result := fReturnToken;
|
||||
end
|
||||
|
||||
else
|
||||
begin
|
||||
if LA(1) = EOF_CHAR then
|
||||
begin
|
||||
uponEof;
|
||||
result := TdpgToken.Create(TT_EOF);
|
||||
end
|
||||
|
||||
else
|
||||
Raise EdpgMismatchedChar.Create(LA(1), _first, FileName, Line, Column);
|
||||
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
|
||||
Raise;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// InitLiterals
|
||||
// ----------------------------------------------------------------------------
|
||||
procedure TJavaLexer.initialize;
|
||||
begin
|
||||
fLiterals.Add('int', 10);
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,25 @@
|
||||
// ============================================================================
|
||||
// This file is generated by the Delphi Parser Generator.
|
||||
// ----------------------------------------------------------------------------
|
||||
// DPG version: 1.0.0.118r
|
||||
// Grammar: javalexer.g
|
||||
// ============================================================================
|
||||
unit JavaTokens;
|
||||
|
||||
interface
|
||||
|
||||
const
|
||||
TT_EOF = 1;
|
||||
TT_PARAM = 4;
|
||||
TT_EXCEPTION = 5;
|
||||
TT_ID = 6;
|
||||
TT_STAR = 7;
|
||||
TT_JAVADOC_CLOSE = 8;
|
||||
TT_NEWLINE = 9;
|
||||
LT_int = 10;
|
||||
TT_SEMI = 11;
|
||||
TT_JAVADOC_OPEN = 12;
|
||||
TT_WS = 13;
|
||||
|
||||
implementation
|
||||
end.
|
||||
@@ -0,0 +1,13 @@
|
||||
// $Delphi Parser Generator: JavaLexer.pas -> TJavaLexerTokens.txt$
|
||||
TJavaLexer
|
||||
TT_EOF=1
|
||||
TT_PARAM=4
|
||||
TT_EXCEPTION=5
|
||||
TT_ID=6
|
||||
TT_STAR=7
|
||||
TT_JAVADOC_CLOSE=8
|
||||
TT_NEWLINE=9
|
||||
LT_int="int"=10
|
||||
TT_SEMI=11
|
||||
TT_JAVADOC_OPEN=12
|
||||
TT_WS=13
|
||||
@@ -0,0 +1,49 @@
|
||||
program demo;
|
||||
|
||||
{$APPTYPE CONSOLE}
|
||||
|
||||
uses
|
||||
Classes,
|
||||
SysUtils,
|
||||
dpgTokenStreamSelector,
|
||||
javaLexer,
|
||||
javaDocLexer,
|
||||
javaParser;
|
||||
|
||||
var
|
||||
stm : TFileStream;
|
||||
lexJava : TJavaLexer;
|
||||
lexJavaDoc : TJavaDocLexer;
|
||||
parJava : TJavaParser;
|
||||
sel : TdpgTokenStreamSelector;
|
||||
|
||||
begin
|
||||
if ParamCount = 1 then
|
||||
begin
|
||||
try
|
||||
stm := TFileStream.Create( ParamStr(1), fmOpenRead);
|
||||
sel := TdpgTokenStreamSelector.Create;
|
||||
|
||||
lexJava := TJavaLexer.Create( stm);
|
||||
lexJavaDoc := TJavaDocLexer.Create( lexJava.InputState);
|
||||
|
||||
lexJava.Selector := sel;
|
||||
lexJavaDoc.Selector := sel;
|
||||
|
||||
sel.add( lexJava, 'main');
|
||||
sel.add( lexJavaDoc, 'docLexer');
|
||||
sel.select( 'main');
|
||||
|
||||
parJava := TJavaParser.Create( sel);
|
||||
|
||||
parJava.input;
|
||||
except
|
||||
writeln('Exception...');
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
|
||||
{ TODO -oUser -cConsole Main : Insert code here }
|
||||
end.
|
||||
@@ -0,0 +1,76 @@
|
||||
unit JavaDocLexer;
|
||||
|
||||
uses
|
||||
{
|
||||
dpgTokenStreamSelector;
|
||||
}
|
||||
|
||||
lexer TJavaDocLexer;
|
||||
options
|
||||
{
|
||||
k = 2;
|
||||
exportVocab = JavaDoc;
|
||||
filter = true;
|
||||
}
|
||||
|
||||
memberdecl
|
||||
{
|
||||
public
|
||||
Selector : IdpgTokenStreamSelector;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// @param
|
||||
// ----------------------------------------------------------------------------
|
||||
PARAM
|
||||
: "@param" (' ')+ ID
|
||||
;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// @exception
|
||||
// ----------------------------------------------------------------------------
|
||||
EXCEPTION
|
||||
: "@exception" (' ')+ ID
|
||||
;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// identifier
|
||||
// ----------------------------------------------------------------------------
|
||||
protected ID
|
||||
: ('a'..'z')+
|
||||
;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Star
|
||||
//
|
||||
// This rule simply prevents JAVADOC_CLOSE from being called for every '*' in
|
||||
// a comment. Calling JAVADOC_CLOSE will fail for simple '*' and cause an
|
||||
// exception, which is slow. In other words, the grammar will work without
|
||||
// this rule, but is slower.
|
||||
// ----------------------------------------------------------------------------
|
||||
STAR
|
||||
: '*' { _ttype := TT_SKIP; }
|
||||
;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// JavaDocClose
|
||||
// ----------------------------------------------------------------------------
|
||||
JAVADOC_CLOSE
|
||||
: "*/" { Selector.Pop; }
|
||||
;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// NewLine
|
||||
// ----------------------------------------------------------------------------
|
||||
NEWLINE
|
||||
:
|
||||
(
|
||||
'\r' '\n'
|
||||
| '\r'
|
||||
| '\n'
|
||||
)
|
||||
{
|
||||
newLine;
|
||||
_ttype := TT_SKIP;
|
||||
}
|
||||
;
|
||||
@@ -0,0 +1,68 @@
|
||||
unit JavaLexer;
|
||||
|
||||
uses
|
||||
{
|
||||
dpgTokenStreamSelector;
|
||||
}
|
||||
|
||||
lexer TJavaLexer;
|
||||
options
|
||||
{
|
||||
k = 2;
|
||||
importVocab = JavaDoc;
|
||||
exportVocab = Java;
|
||||
}
|
||||
|
||||
tokens
|
||||
{
|
||||
"int";
|
||||
}
|
||||
|
||||
memberdecl
|
||||
{
|
||||
public
|
||||
Selector : IdpgTokenStreamSelector;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Simple tokens
|
||||
// ----------------------------------------------------------------------------
|
||||
SEMI : ';';
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// JavaDocOpen
|
||||
// ----------------------------------------------------------------------------
|
||||
JAVADOC_OPEN
|
||||
: "/**" { Selector.Push('docLexer'); }
|
||||
;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Identifier
|
||||
// ----------------------------------------------------------------------------
|
||||
ID
|
||||
options
|
||||
{
|
||||
testLiterals = true;
|
||||
}
|
||||
: ('a'..'z')+
|
||||
;
|
||||
|
||||
WS
|
||||
:
|
||||
(
|
||||
' '
|
||||
| '\t'
|
||||
|
|
||||
(
|
||||
'\r' '\n'
|
||||
| '\r'
|
||||
| '\n'
|
||||
)
|
||||
{
|
||||
newLine;
|
||||
}
|
||||
)
|
||||
{
|
||||
_ttype := TT_SKIP;
|
||||
}
|
||||
;
|
||||
@@ -0,0 +1,20 @@
|
||||
unit javaParser;
|
||||
|
||||
parser TJavaParser;
|
||||
options
|
||||
{
|
||||
k = 2;
|
||||
importVocab = Java;
|
||||
}
|
||||
|
||||
input
|
||||
: ( (javadoc)? "int" ID SEMI)+
|
||||
;
|
||||
|
||||
javadoc
|
||||
:
|
||||
JAVADOC_OPEN
|
||||
(PARAM)?
|
||||
(EXCEPTION)?
|
||||
JAVADOC_CLOSE
|
||||
;
|
||||
@@ -0,0 +1,91 @@
|
||||
// ============================================================================
|
||||
// This file is generated by the Delphi Parser Generator.
|
||||
// ----------------------------------------------------------------------------
|
||||
// DPG version: 1.0.0.118r
|
||||
// Grammar: javaparser.g
|
||||
// ============================================================================
|
||||
unit javaParser;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes,
|
||||
Contnrs,
|
||||
dpgLLkParser,
|
||||
dpgToken,
|
||||
dpgTypes,
|
||||
javaParserTokens,
|
||||
SysUtils;
|
||||
|
||||
type
|
||||
// =========================================================================
|
||||
// Class TJavaParser declaration
|
||||
// =========================================================================
|
||||
TJavaParser = class( TdpgLLkParser)
|
||||
|
||||
public // Public grammar rules
|
||||
procedure input ;
|
||||
procedure javadoc ;
|
||||
|
||||
end;
|
||||
|
||||
implementation
|
||||
uses
|
||||
dpgException,
|
||||
dpgExceptionSemantic,
|
||||
dpgExceptionMismatchedToken;
|
||||
|
||||
// ============================================================================
|
||||
// input
|
||||
// ============================================================================
|
||||
procedure TJavaParser.input;
|
||||
var
|
||||
_cnt_4: integer;
|
||||
|
||||
begin
|
||||
_cnt_4 := 0;
|
||||
|
||||
while(true) do
|
||||
begin
|
||||
if (( LA(1) in [LT_int,TT_JAVADOC_OPEN])) then
|
||||
begin
|
||||
if (( LA(1) in [TT_JAVADOC_OPEN])) then
|
||||
begin
|
||||
javadoc;
|
||||
end;
|
||||
match(LT_int);
|
||||
match(TT_ID);
|
||||
match(TT_SEMI);
|
||||
end
|
||||
|
||||
else
|
||||
begin
|
||||
if _cnt_4 >= 1 then
|
||||
break
|
||||
else
|
||||
Raise EdpgMismatchedToken.Create( LT(1), [LT_int,TT_JAVADOC_OPEN], FileName);
|
||||
end;
|
||||
|
||||
INC(_cnt_4);
|
||||
end;
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// javadoc
|
||||
// ============================================================================
|
||||
procedure TJavaParser.javadoc;
|
||||
begin
|
||||
|
||||
match(TT_JAVADOC_OPEN);
|
||||
if (( LA(1) in [TT_PARAM])) then
|
||||
begin
|
||||
match(TT_PARAM);
|
||||
end;
|
||||
if (( LA(1) in [TT_EXCEPTION])) then
|
||||
begin
|
||||
match(TT_EXCEPTION);
|
||||
end;
|
||||
match(TT_JAVADOC_CLOSE);
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -0,0 +1,25 @@
|
||||
// ============================================================================
|
||||
// This file is generated by the Delphi Parser Generator.
|
||||
// ----------------------------------------------------------------------------
|
||||
// DPG version: 1.0.0.118r
|
||||
// Grammar: javaparser.g
|
||||
// ============================================================================
|
||||
unit javaParserTokens;
|
||||
|
||||
interface
|
||||
|
||||
const
|
||||
TT_EOF = 1;
|
||||
TT_PARAM = 4;
|
||||
TT_EXCEPTION = 5;
|
||||
TT_ID = 6;
|
||||
TT_STAR = 7;
|
||||
TT_JAVADOC_CLOSE = 8;
|
||||
TT_NEWLINE = 9;
|
||||
LT_int = 10;
|
||||
TT_SEMI = 11;
|
||||
TT_JAVADOC_OPEN = 12;
|
||||
TT_WS = 13;
|
||||
|
||||
implementation
|
||||
end.
|
||||
@@ -0,0 +1,13 @@
|
||||
// $Delphi Parser Generator: javaParser.pas -> TJavaParserTokens.txt$
|
||||
TJavaParser
|
||||
TT_EOF=1
|
||||
TT_PARAM=4
|
||||
TT_EXCEPTION=5
|
||||
TT_ID=6
|
||||
TT_STAR=7
|
||||
TT_JAVADOC_CLOSE=8
|
||||
TT_NEWLINE=9
|
||||
LT_int="int"=10
|
||||
TT_SEMI=11
|
||||
TT_JAVADOC_OPEN=12
|
||||
TT_WS=13
|
||||
@@ -0,0 +1,20 @@
|
||||
/** a javadoc comment
|
||||
* @param foo
|
||||
* @exception bar
|
||||
* Just a little text for a comment
|
||||
*/
|
||||
int abc;
|
||||
|
||||
/** a javadoc comment
|
||||
* @param foo
|
||||
* @exception bar
|
||||
* Just a little text for a comment
|
||||
*/
|
||||
int zzz;
|
||||
|
||||
/** a javadoc comment
|
||||
* @param foo
|
||||
* @exception bar
|
||||
* Just a little text for a comment
|
||||
*/
|
||||
int xxx;
|
||||
Reference in New Issue
Block a user