0

私はこれを試しました

import scala.util.parsing.combinator._  
def name = ident ^^ {case ident => if (ident.contains("a")) ident.toUpperCase else ident 

println(parseAll(name, "aa")) // parsed: AA
println(parseAll(name, "bb")) 

出力あり

[1.3] parsed: AA
[1.3] parsed: bb
[1.1] failure: `(' expected but `a' found

aa
^
[1.3] failure: end of input expected

f1(aa)
  ^

ご覧のとおり、2 番目の解析は失敗します。最初の生産で失敗すると、2 番目の代替案を試すことができなくなるようです。実際には、最初の識別子の値に応じて、これまたはそのパーサーを選択して続行したいと考えています。

4

1 に答える 1