Initial check in
This commit is contained in:
@@ -0,0 +1,247 @@
|
||||
unit prgParser;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// This section is used for generating "uses" clause in the unit 'prgParser'.
|
||||
// Every unit name must be terminated with ';'
|
||||
// e.g:
|
||||
//
|
||||
// uses
|
||||
// {
|
||||
// Classes;
|
||||
// SysUtils;
|
||||
// }
|
||||
// ----------------------------------------------------------------------------
|
||||
uses
|
||||
{
|
||||
Classes;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// This section is used for generating "const" clause in the unit 'prgParser'.
|
||||
// The content of the section is verbatim copied into the generated code.
|
||||
// ----------------------------------------------------------------------------
|
||||
//const
|
||||
//{
|
||||
//}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// This section is used for generating "type" clause in the unit 'prgParser'.
|
||||
// The content of the section is verbatim copied into the generated code.
|
||||
// ----------------------------------------------------------------------------
|
||||
type
|
||||
{
|
||||
TprgCommand =
|
||||
(
|
||||
cmdNone,
|
||||
cmdList,
|
||||
cmdListDSOs,
|
||||
cmdListJTAGs,
|
||||
cmdListFX2s,
|
||||
cmdListDSO,
|
||||
cmdListJTAG,
|
||||
cmdProgramDSO,
|
||||
cmdProgramJTAG,
|
||||
cmdProgramFX2,
|
||||
cmdProgramFX2Perm,
|
||||
cmdEepromDump,
|
||||
cmdEepromRead,
|
||||
cmdEepromWrite
|
||||
);
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Parser class declaration
|
||||
// ============================================================================
|
||||
parser TprgParser;
|
||||
// ----------------------------------------------------------------------------
|
||||
// Parser options
|
||||
// ----------------------------------------------------------------------------
|
||||
options
|
||||
{
|
||||
k = 2;
|
||||
importVocab = prgLexer;
|
||||
exportVocab = prgParser;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Parser member declarations.
|
||||
// All user defined member declarations should be placed here.
|
||||
// The content of the section is verbatim copied into the generated code.
|
||||
// ----------------------------------------------------------------------------
|
||||
memberdecl
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Begin rule definitions
|
||||
//
|
||||
// Remember: All parser rule names must begin with LOWERCASE letter!
|
||||
// ============================================================================
|
||||
prg
|
||||
{
|
||||
fCommand := cmdNone;
|
||||
fVerbose := '';
|
||||
fDevice := '';
|
||||
}
|
||||
: "/list"
|
||||
{
|
||||
fCommand := cmdList;
|
||||
}
|
||||
|
|
||||
(
|
||||
"fx2" (WS)?
|
||||
(
|
||||
"/list"
|
||||
{
|
||||
fCommand := cmdListFX2s;
|
||||
}
|
||||
|
||||
| "/loc" COLON (x:INT | x:REXP) EQ prgfile
|
||||
{
|
||||
fCommand := cmdProgramFX2;
|
||||
fDevice := x.TokenText;
|
||||
}
|
||||
(
|
||||
"/perm"
|
||||
{
|
||||
fCommand := cmdProgramFX2Perm;
|
||||
}
|
||||
)?
|
||||
)
|
||||
)
|
||||
|
|
||||
(
|
||||
"dso" { fCommand := cmdListDSOs; }
|
||||
| "jtag" { fCommand := cmdListJTAGs; }
|
||||
)
|
||||
(WS)?
|
||||
(
|
||||
"/id"
|
||||
COLON
|
||||
x:ID { fDevice := x.TokenText; }
|
||||
{
|
||||
if fCommand = cmdListDSOs then fCommand := cmdListDSO;
|
||||
if fCommand = cmdListJTAGs then fCommand := cmdListJTAG;
|
||||
}
|
||||
(WS)?
|
||||
)?
|
||||
|
||||
(
|
||||
"/list"
|
||||
| EQ prgfile
|
||||
{
|
||||
if fCommand = cmdListDSO then fCommand := cmdProgramDSO;
|
||||
if fCommand = cmdListJTAG then fCommand := cmdProgramJTAG;
|
||||
}
|
||||
(
|
||||
v:"/v" { fVerbose := '0'; }
|
||||
| v:"/v1" { fVerbose := '1'; }
|
||||
)?
|
||||
)
|
||||
;
|
||||
|
||||
//prgfiles:
|
||||
// (prgfile)+
|
||||
// ;
|
||||
|
||||
prgfile
|
||||
local
|
||||
{
|
||||
pos : AnsiString;
|
||||
name : AnsiString;
|
||||
}
|
||||
{
|
||||
pos := '0';
|
||||
name := '';
|
||||
}
|
||||
: x:QID { name := x.TokenText; }
|
||||
// SLASH "pos" COLON
|
||||
// x:INT { pos := x.TokenText; }
|
||||
{
|
||||
fFiles.Add(pos+'='+name);
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
|
||||
// ============================================================================
|
||||
// End rule definitions
|
||||
// ============================================================================
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// This section is used for generating member defintions in the unit 'prgParser'.
|
||||
// The content of the section is verbatim copied into the generated code.
|
||||
// ----------------------------------------------------------------------------
|
||||
memberdef
|
||||
{
|
||||
// ============================================================================
|
||||
// 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;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user