某些语言(例如 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/