我正在使用
parboiled来编写解析器.我将一些方法定义为:
def InlineCharsBefore(sep: String) = rule { zeroOrMore(!str(sep) ~ InlineChar) } def InlineCharsBefore(sep1: String,sep2: String) = rule { zeroOrMore((!str(sep1) | !str(sep2)) ~ InlineChar) } def InlineCharsBefore(sep1: String,sep2: String,sep3: String) = rule { zeroOrMore((!str(sep1) | !str(sep2) | !str(sep3)) ~ InlineChar) }
你可以看到它们非常相似.我想把它们组合成一个,但我不知道该怎么做.也许它应该是:
def InlineCharsBefore(seps: String*) = rule { ??? }
解决方法
vararg版本可以实现为:
def InlineCharsBefore( seps: String* ) = { val sepMatch = seps.map( s => ! str(s) ).reduceLeft( _ | _ ) rule { zeroOrMore( sepMatch ~ InlineChar) } }
但是,我不使用parboiled所以我无法测试它.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。