私はObject Pascal エンジン(Rob van den Brink 作) に手を出していますが、Delphi ユニット ファイルで動作するようです (いくつかのマイナーで簡単に修正可能なエラーを除く)。
ただし、プロジェクト ( .dpr) およびパッケージ ( .dpk) ファイルの解析に問題があります。そして、この問題は基本的に、「uses」がユニットとプロジェクトで持つことができるもの(および「contains」句がパッケージで持つことができるもの)の違いに要約されます。
簡単な例を挙げましょう:
ユニット (.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>
私の質問は、次のとおりです。この定義を変更して、他の選択肢を処理できるようにするにはどうすればよいですか (プロジェクト ファイルとパッケージ ファイルに見られるように)。
UnitDemoMain in 'UnitDemoMain.pas' {Form1},
OneUnit in 'OneUnit.pas';