2016-11-04 3 views
1

私はJava 8の文法を扱っています。具体的には、itIteratorの場合には、it.hasNext()というメソッド呼び出しの出現箇所を探したいと思います。具体的な構文マッチングにおける補間

これは動作します:

visit(unit) { 
    case (MethodInvocation)`it . <TypeArguments? ta> hasNext()`: { 
     println("found"); 
    } 
} 

は、理想的には私がいないだけでit、任意の識別子と一致したいと思います。

だから私はコンパイルが、一致しない文字列の補間を、使用してみました:

str iteratorId = "it"; 
visit(unit) { 
    case (MethodInvocation)`$iteratorId$ . <TypeArguments? ta> hasNext()`: { 
     println("achei"); 
    } 
} 

私もパターン変数の使用を含むいくつかの他の方法を、試してみました(docsに見られるように)が、私は得ることができませんこれはうまくいく。

この種のマッチングはラスカルで可能ですか?はいの場合、どうすればいいですか?

答えは、特に私は見ていないあなたが使用している文法、に依存するが、具体的な構文フラグメントで一般的にこの表記法は、プレースホルダのために使用されている

答えて

1

<NonTerminal variableName>

だからあなたのパターンは以下のようになります:MethodNameは確かにあなたのJava8文法やメソッド呼び出しの構文規則の一部に非ターミナルであると仮定されて

str iteratorId = "it"; 
visit(unit) { 
    case (MethodInvocation)`<MethodName name>.<TypeArguments? ta>hasNext()`: 
     if (iteratorId == "<name>") println("bingo!"); 
} 

関連する問題