così ho qualcosa di simile a questo:come fare Scala parser sicuro
class MyParser extends JavaTokenParsers {
var m = new HashMap[String,String]
def store = ("var" ~> ident "=") ~ ident ^^ {
case k ~ v => m += k -> v
}
def stored_val = ident ^^ {
case k => m(k)
}
}
E il mio problema è che quello che voglio fare è avere il parser stored_val fallire in modo che altri parser hanno la possibilità di abbinare il ingresso. Ma quello che succede ora è che la mappa getta quando non riesce a trovare il valore.
ho cercato attuazione stored_val come questo:
def stored_val = ident => {
case k => if (m.contains(k)) m(k) else failure("identifier not found")
}
Ma il problema è che il fallimento restituisce Parser [Niente] che è un tipo diverso rispetto a String.
Ho esattamente lo stesso problema e voglio fallire in modo esplicito il parser. Come si suppone che il fallimento venga usato se il suo tipo Nothing non è compatibile con qualcosa? – hotzen