2017-04-20 3 views
3

parboiled2의 파서 작업에서 오류를보고하는 가장 좋은 방법은 무엇입니까 (저는 2.1.4를 사용하고 있습니다)?parboiled2에서 파서 작업에서 오류를 어떻게보고해야합니까?

예를 들어, 정수 값을 읽고 원하는 범위 내에 있지 않으면 오류를보고 싶다고합시다. fail을 호출하려고했지만 파서 작업 내에서 유효하지 않은 것으로 보입니다. 또한, test 규칙에 스택 값을 제공해야하는 방법을 알 수 없습니다. ParseError 예외를 던지나요?

def Index = rule { 
    capture(oneOrMore(CharPredicate.Digit)) ~> {s => // s is a String 
    val i = s.toInt 
    if(i > SomeMaxIndexValue) ??? // What do I put here? 
    else i 
    } 
} 

답변

4

당신은 그것에 대해 test를 사용할 수 있습니다

좀 더 구체적으로, 다음과 같은 규칙을 고려하십시오. 트릭은 동작이 Rule을 반환 할 수도 있다는 것입니다.

def Index = rule { 
    capture(oneOrMore(CharPredicate.Digit)) ~> {s => 
    val i = s.toInt 
    test(i <= SomeMaxIndexValue) ~ push(i) 
    } 
} 
+0

와우! 그것은 꽤 산뜻한! 그냥 호기심에서 파싱 오류를 설명하는 텍스트를 어떻게 추가합니까? –

+0

단서가 아닙니다. 오랫동안 사용하지 않았습니다. –