8
combinator 파서에서 모호한 언어가 있다고 가정합니다. 특정 표현을 지역적으로 탐욕스럽게 만드는 방법이 있습니까? 다음은 내가 말하는 의미의 예입니다. 다음과 같이스칼라 : 로컬로 욕심이 많을 수 있습니다.
import scala.util.parsing.combinator._
object Example extends JavaTokenParsers {
def obj: Parser[Any] = (shortchain | longchain) ~ anyrep
def longchain: Parser[Any] = zero~zero~one~one
def shortchain: Parser[Any] = zero~zero
def anyrep: Parser[Any] = rep(any)
def any: Parser[Any] = zero | one
def zero: Parser[Any] = "0"
def one: Parser[Any] = "1"
def main(args: Array[String]) {
println(parseAll(obj, args(0)))
}
}
컴파일 후, 나는 그것을 실행할 수 있습니다
$ scala Example 001111
[1.7] parsed: ((0~0)~List(1, 1, 1, 1))
어떻게 든 longchain
와 로컬 욕심과 일치 할 obj
의 첫 부분을 지시하고 싶습니다. 주문을 전환하면 longchain
과 일치하지만 이는 탐욕 때문이 아닙니다.
def obj: Parser[Any] = (longchain | shortchain) ~ anyrep
'(longchain | shortchain)'또는'(shortchain | longchain)'을 사용합니다. –