0

アプリケーションのクラスの配線にPicoContainerを使用しています。以下に示すように、すべてが完璧に進んでいますが、1 か所では次のようになります。

    CharArrayReader reader = new CharArrayReader(acCode.toCharArray());
    CharStream charStream = new CharStream(reader);
    Scanner scanner = new Scanner(charStream);
    TokenStream tokenStream = new TokenStream(scanner);
    ParserGeneratingAST parserGeneratingAST = new ParserGeneratingAST(tokenStream);
--> AbstractSyntaxTree ast = parserGeneratingAST.generateAST(); <-- here is the problem
    SymbolsTable symbolsTable = new SymbolsTable();
    ErrorsTable errorsTable = new ErrorsTable();

    SymbolsTableFillerVisitor symbolsTableFillerVisitor = new SymbolsTableFillerVisitor(symbolsTable, errorsTable);
    TypeCheckingVisitor typeCheckingVisitor = new TypeCheckingVisitor(symbolsTable, errorsTable);
    InstructionsList instructionsList = new InstructionsList();
    CodeGenerationVisitor codeGenerationVisitor = new CodeGenerationVisitor(instructionsList);

    symbolsTableFillerVisitor.visit(ast);
    typeCheckingVisitor.visit(ast);
    codeGenerationVisitor.visit(ast);        

問題の行は

AbstractSyntaxTree ast = parserGeneratingAST.generateAST();

PicoContainer を使用してこの問題を回避する方法はありますか? 可能であれば、注釈なしでクラスを維持したいと思います。

ありがとう

4

1 に答える 1

1

私の理解が正しければ、問題はAbstractSyntaxTreeクラスに注入されることですがParserGeneratingAST、のインスタンスを生成するには a を使用する必要がありますAbstractSyntaxTree。私は PicoContainer の専門家ではありませんが、この場合、AbstractSyntaxTree( を使用して) オブジェクトを作成する Factory を使用し、次にFactory InjectionParserGeneratingASTを使用できると思います。

于 2011-03-17T09:01:39.903 に答える