soukouki’s diary

誰かの役に立つ記事をかけたらいいなあ

scalaのパーサーコンビネーターのorでハマった

import scala.util.parsing.combinator._

object Main extends App with RegexParsers {
    def aor = a | aa
    def a = "a"
    def aa = "aa"
    println(parseAll(aor, "a"))
    println(parseAll(aor, "aa"))
}

こんな感じのを書くと・・・

[1.2] parsed: a
[1.2] failure: end of input expected

aa
 ^

失敗する。

def aor = aa | a

こうか、

def aor = a ||| aa

こう書くと

[1.2] parsed: a
[1.3] parsed: aa

成功する。

Scala 2.12.0 "scala-parser-combinators" % "1.0.4"