Scala Parser:但它既不包含在定界符列表中,也不包含在词法的保留关键字列表中
Scala Parser: but it is neither contained in the delimiters list, nor in the reserved keyword list of lexical
我已经使用解析器组合器编写了一个 Scala 解析器:
case class KW(str: String) {
val parser: Parser[String] = str
}
implicit class SymbolView(symbol: Symbol) {
val $: KW = {
KW(symbol.name.toLowerCase())
}
}
implicit def ks2Parser(ks: KW): Parser[String] = ks.parser
val _DELETE = 'delete $
val _REMOVE = 'remove $
val _DROP = 'drop $
val DELETE = _DELETE | _REMOVE | _DROP
lexical.reserved ++= Seq("delete", "remove", "drop")
val scanner: lexical.Scanner = new lexical.Scanner("delete")
phrase(DELETE).apply(scanner)
但是 scala 解析器给我这个错误:
failure: You are trying to parse "drop", but it is neither contained in the delimiters list, nor in the reserved keyword list of your lexical object
我非常确定 "delete" 和 "drop" 都包含在词法的保留关键字列表中(我在调试模式下发现了它们)。所以这个错误信息显然是错误的。它是 Scala 解析器组合器中的错误吗?我应该怎么做才能解决它?
当您使用 $
时,StandardTokenParsers.keyword
最终会在行 val parser: Parser[String] = str
中隐式调用。它在调用时使用 lexical.reserved
的内容。这些调用发生在您创建 _DELETE
/_REMOVE
/_DROP
解析器时,这是在您将标记添加到 lexical.reserved
.
之前
因此要么移动行以在创建解析器之前添加保留标记:
lexical.reserved ++= Seq("delete", "remove", "drop")
val _DELETE = 'delete $
val _REMOVE = 'remove $
val _DROP = 'drop $
val DELETE = _DELETE | _REMOVE | _DROP
或者使解析器定义 def
s(或 lazy val
s)而不是 val
s:
def _DELETE = 'delete $
def _REMOVE = 'remove $
def _DROP = 'drop $
def DELETE = _DELETE | _REMOVE | _DROP
我已经使用解析器组合器编写了一个 Scala 解析器:
case class KW(str: String) {
val parser: Parser[String] = str
}
implicit class SymbolView(symbol: Symbol) {
val $: KW = {
KW(symbol.name.toLowerCase())
}
}
implicit def ks2Parser(ks: KW): Parser[String] = ks.parser
val _DELETE = 'delete $
val _REMOVE = 'remove $
val _DROP = 'drop $
val DELETE = _DELETE | _REMOVE | _DROP
lexical.reserved ++= Seq("delete", "remove", "drop")
val scanner: lexical.Scanner = new lexical.Scanner("delete")
phrase(DELETE).apply(scanner)
但是 scala 解析器给我这个错误:
failure: You are trying to parse "drop", but it is neither contained in the delimiters list, nor in the reserved keyword list of your lexical object
我非常确定 "delete" 和 "drop" 都包含在词法的保留关键字列表中(我在调试模式下发现了它们)。所以这个错误信息显然是错误的。它是 Scala 解析器组合器中的错误吗?我应该怎么做才能解决它?
当您使用 $
时,StandardTokenParsers.keyword
最终会在行 val parser: Parser[String] = str
中隐式调用。它在调用时使用 lexical.reserved
的内容。这些调用发生在您创建 _DELETE
/_REMOVE
/_DROP
解析器时,这是在您将标记添加到 lexical.reserved
.
因此要么移动行以在创建解析器之前添加保留标记:
lexical.reserved ++= Seq("delete", "remove", "drop")
val _DELETE = 'delete $
val _REMOVE = 'remove $
val _DROP = 'drop $
val DELETE = _DELETE | _REMOVE | _DROP
或者使解析器定义 def
s(或 lazy val
s)而不是 val
s:
def _DELETE = 'delete $
def _REMOVE = 'remove $
def _DROP = 'drop $
def DELETE = _DELETE | _REMOVE | _DROP