Initial check in
This commit is contained in:
@@ -0,0 +1,280 @@
|
||||
// ============================================================================
|
||||
// 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.
|
||||
Reference in New Issue
Block a user