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

标签 scala parsing parser-combinators

某些语言(例如 SQL)具有不区分大小写的关键字(和/或标识符)。使用 TokenParsers 时,如何处理这种不区分大小写的情况?一种选择是生成关键字的所有可能的大小写组合,但如果有很多关键字,则效果会很差(在我的例子中,它以某种方式导致空白中的堆栈溢出!)并且不适用于无论如何,标识符。

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

最佳答案

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

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

关于scala - 如何使用 Scala 解析器组合器处理不区分大小写的关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38070885/

相关文章:

scala - 方法 "|"中的预期解析器类型

java - 如何在Scala中实现Java接口(interface)(针对Kafka)?

python - 如何在 argparse 中将可选位置参数与 nargs ='*' 参数一起使用?

c++ - 使用 Clang 查找 If 条件

regex - 解析 scala 中的 case 语句

scala - 如何在 Scala 解析器组合器中将 stringLiteral 设为 "dequote"?

scala - 实现具有隐式功能的蛋糕模式

scala - 如何在 Scala 中在运行时检查我是否在 @specialized 函数或类中?

java - 将 nscala-time 日期时间转换为 java.util.Date

ios - 将数据写入 HTML 模板