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

5
我正在尝试创建一个编程语言,其中有一些部分我希望不区分大小写。我相信这是很容易的事情,但我还没有找到方法。

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

1个回答

15

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

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

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

如果您经常这样做,可以对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

谢谢!非常好用。 - Andres

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接