Exemplo n.º 1
0
        // アスペクトファイルを解析してその結果をフィールドに格納します
        public static void AnalizeAspect(string aspectPath)
        {
            //アスペクト情報を持つオブジェクトを生成する
            var aspect = new ANTLRFileStream(aspectPath);
            var lexer = new UniAspectLexer(aspect);
            var tokens = new CommonTokenStream(lexer);
            var parser = new UniAspectParser(tokens);

            //アスペクトファイルを解析してASTを生成する
            var result = parser.aspect();
            var ast = (CommonTree)result.Tree;

            //ASTを走査してパース結果をアスペクトオブジェクトとしてvisitor内に格納する
            _visitor = new AstVisitor();
            _visitor.Visit(ast, 0, null);
        }
Exemplo n.º 2
0
        public void SetUp()
        {
            //アスペクトファイルのパスを取得
            var input = new ANTLRFileStream(FixtureUtil.GetAspectPath("simple_advice_sample.apt"));

            //アスペクトファイルをパースして抽象構文木を生成する
            var lex = new UniAspectLexer(input);
            var tokens = new CommonTokenStream(lex);
            var parser = new UniAspectParser(tokens);

            var result = parser.aspect();
            var ast = (CommonTree)result.Tree;

            //抽象構文木を走査して、ポイントカット・アドバイス情報を格納する
            _visitor = new AstVisitor();
            _visitor.Visit(ast, 0, null);
        }
Exemplo n.º 3
0
        private void WeaveForOne(object sender, RoutedEventArgs e)
        {
            //選択されたパスからファイルを取得
            var targetPath = TargetPath.Text;
            var aspectPath = AspectPath.Text;

            //アスペクト情報を持つオブジェクトを生成する
            var aspect = new ANTLRFileStream(aspectPath);
            var lexer = new UniAspectLexer(aspect);
            var tokens = new CommonTokenStream(lexer);
            var parser = new UniAspectParser(tokens);

            //アスペクトファイルを解析してASTを生成する
            var result = parser.aspect();
            var ast = (CommonTree)result.Tree;

            //ASTを走査してパース結果をアスペクトオブジェクトとしてvisitor内に格納する
            var visitor = new AstVisitor();
            visitor.Visit(ast, 0, null);

            //対象ファイルの拡張子を取得
            var fileExtension = Path.GetExtension(targetPath);

            //対象言語のソースコードでない場合は次の対象へ進む
            string langType;
            if (fileExtension == null
                || !TargetLanguage.TryGetValue(fileExtension, out langType)) {
                WeavedSourceArea.Text = "指定のプログラミング言語には対応していません";
                return;
            }

            var code = File.ReadAllText(targetPath, XEncoding.SJIS);
            var gen =
                    UnifiedGenerators.GetProgramGeneratorByExtension(
                            fileExtension);
            var model = gen.Generate(code);

            Weaver.AnalizeAspect(aspectPath);
            //アスペクトの合成を行う
            Weaver.Weave(langType, model);

            //とりえあず標準出力に表示;
            var codeGen = UnifiedGenerators.GetCodeGeneratorByExtension(fileExtension);
            WeavedSourceArea.Text = codeGen.Generate(model);
        }
Exemplo n.º 4
0
        public AstVisitor CreateAspectElement(string path)
        {
            //アスペクトファイルの生成
            var aspect = new ANTLRFileStream(path);
            var lexer = new UniAspectLexer(aspect);
            var tokens = new CommonTokenStream(lexer);
            var parser = new UniAspectParser(tokens);

            //アスペクトファイルを解析してASTを生成する
            var result = parser.aspect();
            var ast = (CommonTree)result.Tree;

            var visitor = new AstVisitor();
            visitor.Visit(ast, 0, null);

            return visitor;
        }