281 lines
7.0 KiB
ObjectPascal
281 lines
7.0 KiB
ObjectPascal
// ============================================================================
|
|
// This file is generated by the Delphi Parser Generator.
|
|
// ----------------------------------------------------------------------------
|
|
// DPG version: 2.1.0.0r
|
|
// Grammar: prgparser.g
|
|
// ============================================================================
|
|
unit prgParser;
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes,
|
|
dpgrtl.llkparser,
|
|
dpgrtl.types,
|
|
prgParserTokens,
|
|
SysUtils;
|
|
|
|
type
|
|
// =========================================================================
|
|
// Type declarations from grammar.
|
|
// =========================================================================
|
|
TprgCommand =
|
|
(
|
|
cmdNone,
|
|
cmdList,
|
|
cmdListDSOs,
|
|
cmdListJTAGs,
|
|
cmdListFX2s,
|
|
cmdListDSO,
|
|
cmdListJTAG,
|
|
cmdProgramDSO,
|
|
cmdProgramJTAG,
|
|
cmdProgramFX2,
|
|
cmdProgramFX2Perm,
|
|
cmdEepromDump,
|
|
cmdEepromRead,
|
|
cmdEepromWrite
|
|
);
|
|
|
|
// =========================================================================
|
|
// Class TprgParser declaration
|
|
// =========================================================================
|
|
TprgParser = class( TLLkParser)
|
|
|
|
protected
|
|
fCommand : TprgCommand;
|
|
fDevice : string;
|
|
fFiles : TStringList;
|
|
fVerbose : string;
|
|
|
|
private
|
|
function GetFileCount: integer;
|
|
function GetFile( Idx: integer): string;
|
|
|
|
public
|
|
procedure AfterConstruction; override;
|
|
procedure BeforeDestruction; override;
|
|
|
|
public
|
|
property Command : TprgCommand read fCommand;
|
|
property Verbose : string read fVerbose;
|
|
property DeviceID : string read fDevice;
|
|
property FileCount : integer read GetFileCount;
|
|
property Files[i:integer] : string read GetFile;
|
|
|
|
public // Public grammar rules
|
|
procedure prg ;
|
|
procedure prgfile ;
|
|
|
|
end;
|
|
|
|
implementation
|
|
uses
|
|
dpgrtl.exception,
|
|
dpgrtl.token;
|
|
|
|
|
|
// ============================================================================
|
|
// prg
|
|
// ============================================================================
|
|
procedure TprgParser.prg;
|
|
var
|
|
v: IToken;
|
|
x: IToken;
|
|
|
|
begin
|
|
|
|
fCommand := cmdNone;
|
|
fVerbose := '';
|
|
fDevice := '';
|
|
|
|
if (( LA(1) in [LT_SLASH_list])) then
|
|
begin
|
|
match(LT_SLASH_list);
|
|
fCommand := cmdList;
|
|
end
|
|
|
|
else if (( LA(1) in [LT_fx2])) then
|
|
begin
|
|
match(LT_fx2);
|
|
if (( LA(1) in [TT_WS])) then
|
|
begin
|
|
match(TT_WS);
|
|
end;
|
|
if (( LA(1) in [LT_SLASH_list])) then
|
|
begin
|
|
match(LT_SLASH_list);
|
|
fCommand := cmdListFX2s;
|
|
end
|
|
|
|
else if (( LA(1) in [LT_SLASH_loc])) then
|
|
begin
|
|
match(LT_SLASH_loc);
|
|
match(TT_COLON);
|
|
if (( LA(1) in [TT_INT])) then
|
|
begin
|
|
x := LT(1);
|
|
match(TT_INT);
|
|
end
|
|
|
|
else if (( LA(1) in [TT_REXP])) then
|
|
begin
|
|
x := LT(1);
|
|
match(TT_REXP);
|
|
end
|
|
|
|
else
|
|
Raise EMismatchedToken.Create( LT(1), [TT_INT..TT_REXP], InputState.FileName);
|
|
match(TT_EQ);
|
|
prgfile;
|
|
fCommand := cmdProgramFX2;
|
|
fDevice := x.TokenText;
|
|
if (( LA(1) in [LT_SLASH_perm])) then
|
|
begin
|
|
match(LT_SLASH_perm);
|
|
fCommand := cmdProgramFX2Perm;
|
|
end;
|
|
end
|
|
|
|
else
|
|
Raise EMismatchedToken.Create( LT(1), [LT_SLASH_list,LT_SLASH_loc], InputState.FileName);
|
|
end
|
|
|
|
else if (( LA(1) in [LT_dso..LT_jtag])) then
|
|
begin
|
|
if (( LA(1) in [LT_dso])) then
|
|
begin
|
|
match(LT_dso);
|
|
fCommand := cmdListDSOs;
|
|
end
|
|
|
|
else if (( LA(1) in [LT_jtag])) then
|
|
begin
|
|
match(LT_jtag);
|
|
fCommand := cmdListJTAGs;
|
|
end
|
|
|
|
else
|
|
Raise EMismatchedToken.Create( LT(1), [LT_dso..LT_jtag], InputState.FileName);
|
|
if (( LA(1) in [TT_WS])) then
|
|
begin
|
|
match(TT_WS);
|
|
end;
|
|
if (( LA(1) in [LT_SLASH_id])) then
|
|
begin
|
|
match(LT_SLASH_id);
|
|
match(TT_COLON);
|
|
x := LT(1);
|
|
match(TT_ID);
|
|
fDevice := x.TokenText;
|
|
if fCommand = cmdListDSOs then fCommand := cmdListDSO;
|
|
if fCommand = cmdListJTAGs then fCommand := cmdListJTAG;
|
|
if (( LA(1) in [TT_WS])) then
|
|
begin
|
|
match(TT_WS);
|
|
end;
|
|
end;
|
|
if (( LA(1) in [LT_SLASH_list])) then
|
|
begin
|
|
match(LT_SLASH_list);
|
|
end
|
|
|
|
else if (( LA(1) in [TT_EQ])) then
|
|
begin
|
|
match(TT_EQ);
|
|
prgfile;
|
|
if fCommand = cmdListDSO then fCommand := cmdProgramDSO;
|
|
if fCommand = cmdListJTAG then fCommand := cmdProgramJTAG;
|
|
if (( LA(1) in [LT_SLASH_v])) then
|
|
begin
|
|
v := LT(1);
|
|
match(LT_SLASH_v);
|
|
fVerbose := '0';
|
|
end
|
|
|
|
else if (( LA(1) in [LT_SLASH_v1])) then
|
|
begin
|
|
v := LT(1);
|
|
match(LT_SLASH_v1);
|
|
fVerbose := '1';
|
|
end;
|
|
end
|
|
|
|
else
|
|
Raise EMismatchedToken.Create( LT(1), [LT_SLASH_list,TT_EQ], InputState.FileName);
|
|
end
|
|
|
|
else
|
|
Raise EMismatchedToken.Create( LT(1), [LT_dso..LT_SLASH_list], InputState.FileName);
|
|
end;
|
|
|
|
// ============================================================================
|
|
// prgfile
|
|
// ============================================================================
|
|
procedure TprgParser.prgfile;
|
|
var
|
|
x: IToken;
|
|
pos : AnsiString;
|
|
name : AnsiString;
|
|
|
|
begin
|
|
|
|
pos := '0';
|
|
name := '';
|
|
|
|
x := LT(1);
|
|
match(TT_QID);
|
|
name := x.TokenText;
|
|
fFiles.Add(pos+'='+name);
|
|
end;
|
|
|
|
// ============================================================================
|
|
// After construction
|
|
// ============================================================================
|
|
procedure TprgParser.AfterConstruction;
|
|
begin
|
|
inherited;
|
|
fFiles := TStringList.Create
|
|
end;
|
|
|
|
// ============================================================================
|
|
// Before Destruction
|
|
// ============================================================================
|
|
procedure TprgParser.BeforeDestruction;
|
|
begin
|
|
fFiles.Free;
|
|
inherited
|
|
end;
|
|
|
|
// ============================================================================
|
|
// Get File Count
|
|
// ============================================================================
|
|
function TprgParser.GetFileCount: integer;
|
|
begin
|
|
result := fFiles.Count
|
|
end;
|
|
|
|
// ============================================================================
|
|
// Get File
|
|
// ============================================================================
|
|
function TprgParser.GetFile( Idx: integer): string;
|
|
var
|
|
i: integer;
|
|
p: integer;
|
|
|
|
begin
|
|
result := '';
|
|
|
|
for i:=0 to fFiles.Count -1 do
|
|
begin
|
|
p := StrToIntDef( fFiles.Names[i], -1);
|
|
|
|
if p = Idx then
|
|
begin
|
|
result := fFiles.ValueFromIndex[i];
|
|
break;
|
|
end
|
|
end;
|
|
end;
|
|
end.
|