내가 스칼라의 파서 콤비와 언어를 분석하고있어, 나는함께 스칼라 파서 콤비 여러 리터럴을 폐기 ~><~
stmt -> if (stmt) {stmt}
당연히 CFG 규칙을 표현하고 싶습니다, I 결과를 구성 할 때 "if() {}"문자열 리터럴을 버리려고합니다. 내가 생각한 두 가지 방법은 추한 것입니다.
방법 (A)는 "사건"문 내부의 문자열 리터럴의 위치를 복제하기 위해 우리를 필요
lazy val stmt: PackratParser[Stmt] =
(
// other rules...
| "if"~"("~stmt~")"~"{"~stmt~"}" ^^ { case _~_~s1~_~_~s2~_ ⇒ If(s1, s2) }
)
방법 (B)이 때문에 ~와 ~>의 우선 순위에 혼란 괄호가 필요합니다.
lazy val stmt: PackratParser[Stmt] =
(
// other rules...
| ("if"~>"("~>stmt)~(")"~>"{"~>stmt<~"}") ^^ { case s1~s2 ⇒ If(s1, s2) }
)
이상적으로는 폐기하고자하는 "(", ")"내 스칼라 코드에 괄호를 필요없이 리터럴. 이 작업을 수행 할 수있는 명확한 방법이 있습니까?