2
學習如何使用scala DSL:s和很多例子都很好用。 但是我陷在了一個非常簡單的事情:scala dsl解析器:rep,opt和regexps
我解析語言,其中有' - '作爲評論,直到行結束。
單行工作正常使用:
def comment: Parser[Comment] = """--.*$""".r ^^ { case c => Comment(c) }
但是連接多條線路時,我得到一個錯誤。
我試過幾個varaints,但下面簡單的感覺:
def commentblock: Parser[List[Comment]] = opt(rep(comment)) ^^ {
case Some(x) => { x }
case None => { List() }
}
運行測試時兩個連續commentlines我得到一個錯誤。
測試用例:
--Test Comment
--Test Line 2
錯誤:
java.lang.AssertionError: Parse error: [1.1] failure: string matching regex `--.*$' expected but `-' found
,我應該如何解決這個問題的任何想法?
下面完整代碼:
import scala.util.parsing.combinator._
abstract class A
case class Comment(comment:String) extends A
object TstParser extends JavaTokenParsers {
override def skipWhitespace = true;
def comment: Parser[Comment] = """--.*$""".r ^^ { case c => Comment(c) }
def commentblock: Parser[List[Comment]] = opt(rep(comment)) ^^ {
case Some(x) => { x }
case None => { List() }
}
def parse(text : String) = {
parseAll(commentblock, text)
}
}
class TestParser {
import org.junit._, Assert._
@Test def testComment() = {
val y = Asn1Parser.parseAll(Asn1Parser.comment, "--Test Comment")
assertTrue("Parse error: " + y, y.successful)
val y2 = Asn1Parser.parseAll(Asn1Parser.commentblock,
"""--Test Comment
--Test Line 2
""")
assertTrue("Parse error: " + y2, y2.successful)
}
}
完美的作品,謝謝!傻我認爲這是一個斯卡拉匹配問題, 不是一個正則表達式問題。 – 2010-11-29 20:42:35