2012年6月19日火曜日

CDTでAST

今日はちょっとだけC-Helperの開発として、EclipseのCDTを使って、C言語のソースコードから抽象構文木(AST)を生成する部分を実装しました。
同じような実装は卒論のときにもしたけれど、そのたびによくわからないのがAST生成メソッドの引数です。

ILanguage.getASTTranslationUnit(
        FileContent content,
        IScannerInfo scanInfo,
        IncludeFileContentProvider fileCreator,
        IIndex index,
        int options,
        IParserLogService log)

引数がいっぱいあるけれど、これらについてまともなドキュメントは存在しません。
何を渡せばいいのかはっきりせず、卒論のときも今も、自己流で引数を用意しています。こんな感じに。

        ILanguage language = GCCLanguage.getDefault();

        FileContent reader = FileContent.create(filePath, source);

        Map<String, String> macroDefinitions = null;
        String[] includeSearchPath = null;
        IScannerInfo scanInfo = new ScannerInfo(macroDefinitions, includeSearchPath );

        IncludeFileContentProvider fileCreator = IncludeFileContentProvider.getEmptyFilesProvider();
        IIndex index = null;
        int options = 0;
        IParserLogService log = new DefaultLogService();

        try {
            IASTTranslationUnit translationUnit = language.getASTTranslationUnit(reader, scanInfo, fileCreator, index, options, log);

とりあえずFileContentだけきちんと解析したいソースコードの内容を渡すようにすれば、とりあえずはそれなりの抽象構文木が手に入るなあという印象です。

0 件のコメント:

コメントを投稿