스칼라의 파서 결합자가 역 추적하지 않는 것처럼 보입니다.스칼라 파서 결합 자의 역 추적?
copy in to out .
되돌아와 구문 분석을 용이해야한다 : 나는 문법 (아래 참조)를 올바르게 다음 "STMT"을 구문 분석 할 수 없습니다가
stmt: (to out(copy in))
또는 내가 뭔가를 놓친 게 뭐죠?
파서 :
당신은 2.8PackratParsers
를 사용하려면
type ExprP = Parser[Expr]
type ValueP = Parser[ValExpr]
type CallP = Parser[Call]
type ArgsP = Parser[Seq[Expr]]
val ident = "[a-zA-Z\\+\\-\\*/%><\\\\\\=]+".r
val sqstart = "\\[" .r
val sqend = "\\]" .r
val del = "," .r
val end = "\\." .r
def stmt: ExprP = expr <~ end
def expr: ExprP = ucall | call | value
def value: ValueP = ident ^^ {str => IdentExpr(str)}
def call: CallP = (args ~ ident ~ expr) ^^ {case args ~ method ~ upon => Call(args, method, upon)}
def ucall: CallP = (ident ~ expr) ^^ {case method ~ upon => Call(Seq(), method, upon)}
def args: ArgsP = advargs | smplargs
def smplargs: ArgsP = expr ^^ {e => Seq(e)}
def advargs: ArgsP = (sqstart ~> repsep(expr, del) <~ sqend) ^^ {seq => seq}
작동이 끝나면 스택 오버플로가 발생합니다. 업데이트 된 파서. – Anonymous