相关疑难解决方法(0)

如何使scala解析器失败

所以我有这样的事情:

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我真正想做的是让解析器stored_val失败,以便其他解析器有机会匹配输入.但现在发生的是当地图无法找到值时会抛出.

我尝试像这样实现stored_val:

def stored_val = ident => {
    case k => if (m.contains(k)) m(k) else failure("identifier not found")
}
Run Code Online (Sandbox Code Playgroud)

但问题是失败返回Parser [Nothing],它与String不同.

scala

8
推荐指数
2
解决办法
1420
查看次数

标签 统计

scala ×1