以下のインターフェイスに基づいて、Ada で一連のパーサーをモデル化しようとしています。
package Parsers is
type Parser is interface;
type DataArray is array(Integer range <>) of String(1..100);
function Parse(Object : access Parser; FilePath : String) return DataArray is abstract;
end Parsers;
最初の Parser インターフェイス メンバーは、以下に示すテキスト パーサーです。
with Parsers;
package TextParsers is
type Parser is new Parsers.Parser with null record;
overriding function Parse(Object : access Parser; FilePath : String) return Parsers.DataArray;
end TextParsers;
with Parsers;
use Parsers;
package body TextParsers is
overriding function Parse(Object : access Parser; FilePath : String) return Parsers.DataArray is
Data : Parsers.DataArray (0..144);
begin
-- just stubbed out
return Data;
end Parse;
end TextParsers;
そして最後に、提供されたパスに基づいてこれらのパーサーを作成するファクトリ メソッドが必要です。たとえば、txt ファイルか csv かなどを検出します。ファクトリ コードは次のとおりです。
with Parsers;
use Parsers;
package ParserFactories is
function GetParser(Path : String) return Parsers.Parser;
end ParserFactories;
with Parsers, TextParsers;
package body ParserFactories is
function GetParser(Path : String) return Parsers.Parser is
Text : TextParsers.Parser;
Parse : Parsers.Parser'Class := Text;
begin
return Parse;
end GetParser;
end ParserFactories;
「動的にタグ付けされた式は許可されていません」というコンパイラ エラーが発生し続け、パーサー インターフェイスを実装するこれらのオブジェクトを作成して、この関数から返す方法がわかりません。Adaでこれを行う方法はありますか?