不区分大小写的Scala解析器 - 组合子

时间:2011-05-21 08:02:03

标签: parsing scala parser-combinators

我正在尝试创建一个language,并且我希望它的一些部分不区分大小写。我确信这很容易,但我找不到它。

编辑: 重读使我对这个问题感到羞愧。 Here是一个失败的测试,解释了我的意思。

1 个答案:

答案 0 :(得分:15)

使用正则表达式而不是文字。

lazy val caseSensitiveKeyword: Parser[String] = "casesensitive"
lazy val caseInsensitiveKeyWord: Parser[String] = """(?i)\Qcaseinsensitive\E""".r

(有关所使用的正则表达式语法的信息,请参阅java.util.Pattern的文档。)

如果您经常这样做,可以使用pimp String来简化语法:

class MyRichString(str: String) {
  def ignoreCase: Parser[String] = ("""(?i)\Q""" + str + """\E""").r
}

implicit def pimpString(str: String): MyRichString = new MyRichString(str)

lazy val caseInsensitiveKeyword = "caseinsensitive".ignoreCase