2016-05-24 9 views
1

これで、ノードの注釈にアクセスしたいときにアクセスしたいと思います。例与えるために:Rascal ASTアクセスのアクセス注釈

visit (myAST) { 
    case someNode(str name): { 
    // How do I now access the @src annotation of someNode here? 
    } 
}; 

を私はすでに次のことを試してみましたが、これは動作しません:私はここで間違って

visit (myAST) { 
    case someNode(str name): { 
    parents = getTraversalContext(); 

    iprintln(parents[0]); // This print shows someNode with the @src annotation. 
    iprintln(parents[0]@src); // This gives the error: get-annotation not supported on value at... 
    } 
}; 

何をしているのですか?私のアプローチは間違っていますか?

+1

'parents [0]'とアノテーションが宣言されている型、 'node'とマッチすると、2番目の解決策が動作します。これは 'getAnnotation'関数が' node'に対してのみ定義され、 'value'では定義されていないためです。しかし、Paulが持っている解決策は、 'getTraversalContext'を使用するよりも優先されるべきです – jurgenv

答えて

2

いい質問、これを行うための最善の方法は、パターン内のsn言うと注意点として、注釈に

visit (myAST) { 
    case sn:someNode(str name): { 
    // Access the @src annotation of someNode here by [email protected] 
    } 
}; 

を取得するためにそれを使用する変数を導入することである:あなたが関数を使用するgetTraversalContextが、実験的で、将来的には変わる可能性が非常に高いので、避けるよう強くお勧めします。授与された

+0

パーフェクト!魅力のように動作します。 – Nicasso

関連する問題