Initial check in docu

This commit is contained in:
2026-01-03 18:31:15 +01:00
parent e2c3cbc520
commit ee130973e2
98 changed files with 9430 additions and 0 deletions
@@ -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
+286
View File
@@ -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
+49
View File
@@ -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;
}
;
+68
View File
@@ -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;
}
;
+20
View File
@@ -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
+20
View File
@@ -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;