如何使用Scala解析器组合器处理不区分大小写的关键字

如何使用Scala解析器组合器处理不区分大小写的关键字,scala,parsing,parser-combinators,Scala,Parsing,Parser Combinators,有些语言,如SQL,具有不区分大小写的关键字(和/或标识符)。使用令牌解析器时,如何处理这种不区分大小写的情况?一个选项是生成所有可能的关键字大小写组合,但如果有许多关键字(在我的例子中,它不知何故导致空白!)中的堆栈溢出,并且在任何情况下都不适用于标识符,那么这将非常糟糕 [自我回答,希望其他人不会为此花费一天时间。]这可以通过覆盖processIdent来完成(假设关键字以大写形式给出,与SQL的正常情况相同): override protected def processIdent(nam

有些语言,如SQL,具有不区分大小写的关键字(和/或标识符)。使用
令牌解析器时
,如何处理这种不区分大小写的情况?一个选项是生成所有可能的关键字大小写组合,但如果有许多关键字(在我的例子中,它不知何故导致
空白
!)中的堆栈溢出,并且在任何情况下都不适用于标识符,那么这将非常糟糕


[自我回答,希望其他人不会为此花费一天时间。]

这可以通过覆盖
processIdent
来完成(假设关键字以大写形式给出,与SQL的正常情况相同):

override protected def processIdent(name: String) = {
  val upperCased = name.toUpperCase
  if (reserved contains upperCased) Keyword(upperCased) else Identifier(upperCased)
}