首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FastParse解析缩进

使用FastParse解析缩进
EN

Stack Overflow用户
提问于 2018-06-12 04:51:26
回答 1查看 200关注 0票数 1

我正在尝试使用FastParse解析缩进语言,但我很难找到关于它的任何资源或信息。

我能找到的here示例只有一个,它展示了如何解析和计算树结构中整数的总和。我尝试复制这段代码,但在解析\n时遇到同样的错误。

我想解析一下这个。

代码语言:javascript
复制
example
  1
  2
  3

代码

代码语言:javascript
复制
import fastparse.all._

class ExampleParser(indent: Int) {

  val word: P[String] = P("example".!)

  val number: P[String] = P( CharIn('0'to'9').rep(1).! )

  val blockBody: P[Seq[String]] = "\n" ~ deeper.flatMap(i => new ExampleParser(indent = i).number.rep(1, sep = ("\n" + " " * i).~/))

  val deeper: P[Int] = P(" ".rep(indent + 1).!.map(_.length))

  val section: P[(String, Seq[String])] = P(word ~ blockBody)

  val expr: P[(String, Seq[String])] = P(section)

}

object Main
{
  def main(args: Array[String]) =
  {
    check(
      """example
        |  1
        |  2
        |  3
      """.stripMargin.trim

    )
    println()
  }

  def check(str: String) = {
    new ExampleParser(0).expr.parse(str) match {
      case Parsed.Success(value, _) => println(value)
      case Parsed.Failure(a, b, c) => println("Failure:" + a + ":" + b + ":" + c)
    }
  }
}

输出

代码语言:javascript
复制
Failure:"\n":7:Extra(...ample
1
2
3, [traced - not evaluated])

我怎样才能正确地解析它呢?

EN

回答 1

Stack Overflow用户

发布于 2018-06-12 11:30:56

如果我将"expression“改为"example":

代码语言:javascript
复制
check (
  """example
    |  1
    |  2
    |  3
  """.stripMargin.trim
)

我得到的结果是:

代码语言:javascript
复制
[info] Running Main 
(example,ArrayBuffer(1, 2, 3))

当然,您可能希望以相反的方式更改它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50805829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档