Scala:解析匹配令牌
发布时间:2020-12-16 18:32:29 所属栏目:安全 来源:网络整理
导读:我正在玩一个玩具 HTML解析器,以帮助我熟悉 Scala的解析组合库: import scala.util.parsing.combinator._ sealed abstract class Node case class TextNode(val contents : String) extends Node case class Element( val tag : String,val attributes : Ma
我正在玩一个玩具
HTML解析器,以帮助我熟悉
Scala的解析组合库:
import scala.util.parsing.combinator._ sealed abstract class Node case class TextNode(val contents : String) extends Node case class Element( val tag : String,val attributes : Map[String,Option[String]],val children : Seq[Node] ) extends Node object HTML extends RegexParsers { val node: Parser[Node] = text | element val text: Parser[TextNode] = """[^<]+""".r ^^ TextNode val label: Parser[String] = """(w[:w]*)""".r val value : Parser[String] = """("[^"]*"|w+)""".r val attribute : Parser[(String,Option[String])] = label ~ ( "=" ~> value ^^ Some[String] | "" ^^ { case _ => None } ) ^^ { case (k ~ v) => k -> v } val element: Parser[Element] = ( ("<" ~> label ~ rep(whiteSpace ~> attribute) <~ ">" ) ~ rep(node) ~ ("</" ~> label <~ ">") ) ^^ { case (tag ~ attributes ~ children ~ close) => Element(tag,Map(attributes : _*),children) } } 我想要的是确保我的开始和结束标签匹配的一些方法. 我想这样做,我需要某种flatMap组合器~Parser [A] => (A => Parser [B])=>解析器[B], 这样做的正确方法是什么? 解决方法
你正在寻找错误的地方.不过,这是一个正常的错误.你想要一个方法Parser [A] => (A => Parser [B])=>解析器[B],但你查看了解析器的文档,而不是解析器.
看here. 有一个flatMap,也称为into或>>. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |