【问题标题】:Using Positional and positioned() in scala parser combinators在scala解析器组合器中使用Positional和positioned()
【发布时间】:2014-01-04 09:11:19
【问题描述】:

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

【问题讨论】:

    标签: scala parsing position parser-combinators


    【解决方案1】:

    positioned 的类型是

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

    这意味着解析的元素必须扩展Positional。因此,例如,YamlLexical 应该是:

    class YamlLexical extends Positional 
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      相关资源
      最近更新 更多