使用单独的Lexer和Parser ......
class YamlLexical extends StdLexical with YamlTokens with RegexParsers {...
object YamlParser extends StdTokenParsers with YamlTokens with PackratParsers {...
...如何将解析后的字符串的位置转换为AST类?
(... positioned(elem(...)) * ... )^^ { ... => List( Ast(startpos, parsedtext, ... subnodes ... ), ... )}
答案 0 :(得分:2)
positioned
的类型是
def positioned[T <: Positional](p: ⇒ Parser[T]): Parser[T]
表示已解析的元素必须扩展Positional
。因此,例如,YamlLexical
应为:
class YamlLexical extends Positional
这样,任何已解析的元素都会自动拥有一个pos
来记录解析它的位置。