小编sch*_*cht的帖子

可以处理歧义的解析器库

我正在寻找一个成熟的解析器库,用于Scala或Haskell.最重要的一点是,库可以处理歧义.如果表达式不明确,我想要每个可能的抽象语法树,它与表达式匹配.简单的例子:表达式a⊗b⊗c可以看作是(a⊗b)⊗c⊗(b⊗c),我需要两种变体.谢谢!

parsing haskell scala

13
推荐指数
2
解决办法
960
查看次数

构建嵌套案例类的变体

所以我有这样的事情:

abstract class Term
case class App(f:Term,x:Term) extends Term
case class Var(s:String) extends Term
case class Amb(a:Term, b:Term) extends Term //ambiguity
Run Code Online (Sandbox Code Playgroud)

一个术语可能如下所示:

App(Var(f),Amb(Var(x),Amb(Var(y),Var(z))))
Run Code Online (Sandbox Code Playgroud)

所以我需要的是Amb类所指示的所有变体.这用于表示模糊的解析林,我想键入检查每个可能的变体并选择正确的变体.在这个例子中我需要:

App(Var(f),Var(x))
App(Var(f),Var(y))
App(Var(f),Var(z))
Run Code Online (Sandbox Code Playgroud)

什么是在scala中创建这些变体的最佳方法?效率会很好,但并不是真正的要求.如果可能的话,我喜欢不使用反射.

scala case-class

6
推荐指数
1
解决办法
385
查看次数

在scala combinatorparser中访问位置信息会导致性能下降

我在scala中为我的解析器编写了一个新的组合子.

它是^^组合子的变体,它传递位置信息.但访问输入元素的位置信息确实是性价比.

在我的情况下,解析一个大的例子需要大约3秒没有位置信息,它需要超过30秒.

我编写了一个可运行的示例,其中运行时在访问位置时大约多50%.

这是为什么?我怎样才能获得更好的运行时间?

例:

import scala.util.parsing.combinator.RegexParsers
import scala.util.parsing.combinator.Parsers
import scala.util.matching.Regex
import scala.language.implicitConversions
object FooParser extends RegexParsers with Parsers {
  var withPosInfo = false
  def b: Parser[String] = regexB("""[a-z]+""".r)  ^^@ { case (b, x) => b + " ::" + x.toString }
  def regexB(p: Regex): BParser[String] = new BParser(regex(p))
  class BParser[T](p: Parser[T]) {
    def ^^@[U](f: ((Int, Int), T) => U): Parser[U] = Parser { in =>
      val source = in.source
      val offset = in.offset
      val start = handleWhiteSpace(source, offset) …
Run Code Online (Sandbox Code Playgroud)

performance parsing scala parser-combinators

5
推荐指数
1
解决办法
787
查看次数

如何使用HTML,CSS和/或Javascript显示校样树?

我希望在网页中以自然演绎的方式显示证明树.我将从JSON文件中获取数据.

什么是显示这样的东西的最佳方式?它只能用css吗?或者有一个库可以做这样的事情吗?渲染为图像是不可能的,因为最终它应该是交互式的.我还应该提到这棵树可以变得相当大.

例: 证明树

更新:最终结果的最佳示例: 在此输入图像描述

javascript css tree proof

5
推荐指数
1
解决办法
1063
查看次数

用于scala的JavaScript源代码生成库

我在scala中寻找一个从抽象语法树生成JavaScript的库.我想在最终生成JavaScript的编译器中使用它,我不想自己实现漂亮的打印部分.

javascript code-generation scala abstract-syntax-tree

4
推荐指数
1
解决办法
751
查看次数