我正在涉足Object Pascal Engine(由 Rob van den Brink 编写),它似乎(除了一些小且易于纠正的错误)适用于 Delphi 单元文件。
但是,它在解析项目 ( .dpr) 和包 ( .dpk) 文件时存在问题;这个问题基本上归结为单元和项目中“使用”的东西之间的差异(以及包中的“包含”子句)。
让我举个简单的例子:
在单元 (.pas) 文件中,“uses”子句可以是这样的
uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
ExtCtrls,
ComCtrls;
而在项目 (.dpr) 文件中
uses
Forms,
UnitDemoMain in 'UnitDemoMain.pas' {Form1},
SomeUnit in '..\SomeUnit.pas',
SomeOtherUnit;
然而,相同的功能(以“包含”的名义)出现为:
contains
OneUnit in 'OneUnit.pas',
AnotherUnit in '..\AnotherUnit.pas';
我拥有的语法文件(来自上面的链接)的问题是它只处理最简单的情况(即单元文件中出现“使用”的方式),并为其他人抛出错误。
我猜它归结为语法文件中如何定义“IdList”,即:
<IdList> ::= <IdList> ',' <RefId>
| <RefId>
那么,我的问题是:如何更改此定义,以便它可以处理其他替代方案(如 Project 和 Pacckage 文件中所示),即:
UnitDemoMain in 'UnitDemoMain.pas' {Form1},
OneUnit in 'OneUnit.pas';