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); }
// アスペクトファイルを解析してその結果をフィールドに格納します 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); }
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); }
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); }
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; }