public void CanVisitForWithNoTest() { var parser = new JavaScriptParser(@"for (var a = []; ; ) { }"); var program = parser.ParseScript(); var visitor = new AstVisitor(); visitor.Visit(program); }
public void CanVisitForOfStatement() { var parser = new JavaScriptParser(@"for (var elem of list) { }"); var program = parser.ParseScript(); var visitor = new AstVisitor(); visitor.Visit(program); }
public void CanVisitIfWithNoElse() { var parser = new JavaScriptParser("if (true) { p(); }"); var program = parser.ParseScript(); var visitor = new AstVisitor(); visitor.Visit(program); }
public void CanVisitDefaultSwitchCase() { var parser = new JavaScriptParser(@"switch(foo) { default: p(); break; }"); var program = parser.ParseScript(); var visitor = new AstVisitor(); visitor.Visit(program); }
public void CanVisitSwitchCase() { var parser = new JavaScriptParser(@"switch(foo) { case 'A': p(); break; }"); var program = parser.ParseProgram(); AstVisitor visitor = new AstVisitor(); visitor.Visit(program); }
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 void AstVisitorCanVisitAllAstNodes() { var subject = new AstVisitor <int>(); var ns = typeof(Root).Namespace; var nodeTypes = typeof(Root) .Assembly.GetTypes() .Where(t => t.Namespace == ns && !t.IsAbstract && typeof(AstNode).IsAssignableFrom(t)) .ToList(); foreach (var t in nodeTypes) { var node = (AstNode)Activator.CreateInstance(t); Assert.DoesNotThrow(() => subject.Visit(node, 0)); } }
public void CanVisitFixtures(string fixture) { var jsFilePath = Path.Combine(Fixtures.GetFixturesPath(), "Fixtures", fixture); Script program; try { var parser = new JavaScriptParser(File.ReadAllText(jsFilePath), new ParserOptions { Tolerant = true }); program = parser.ParseScript(); } catch (ParserException) { // OK as we have invalid files to test against return; } var visitor = new AstVisitor(); visitor.Visit(program); }
public override void Accept(AstVisitor visitor) { visitor.Visit(this); }
public override AstNode Accept(AstVisitor visitor) { return visitor.Visit(this); }
public override AstNode Accept(AstVisitor visitor) { return(visitor.Visit(this)); }
public void Accept(AstVisitor visitor) => visitor.Visit(this);
public TRet Accept <TRet>(AstVisitor <TRet> visitor) => visitor.Visit(this);