在scala解析器组合器中使用Positional和located()

时间:2014-01-04 09:11:19

标签: scala parsing position parser-combinators

使用单独的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 ... ), ... )}

1 个答案:

答案 0 :(得分:2)

positioned的类型是

def positioned[T <: Positional](p: ⇒ Parser[T]): Parser[T]

表示已解析的元素必须扩展Positional。因此,例如,YamlLexical应为:

class YamlLexical extends Positional 

这样,任何已解析的元素都会自动拥有一个pos来记录解析它的位置。