【问题标题】:Case insensitive Scala parser-combinator不区分大小写的 Scala 解析器组合器
【发布时间】:2011-08-30 03:23:57
【问题描述】:

我正在尝试创建一个language,并且我希望其中的某些部分不区分大小写。我敢肯定这很容易,但我一直找不到。

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

【问题讨论】:

    标签: parsing scala parser-combinators


    【解决方案1】:

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

    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
    

    【讨论】:

    • 谢谢!效果很好。
    猜你喜欢
    • 2012-03-09
    • 2013-05-24
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多