2017-04-20 4 views
3

parboiled2(私はv 2.1.4を使用しています)のパーサーアクションでエラーを報告する最善の方法は何ですか?parboiled2では、パーサーアクションでエラーをどのように報告しますか?

例えば、整数値を読み込み、予想された範囲内にない場合にエラーを報告したいとしますか? failを呼び出そうとしましたが、パーサーアクション内では有効ではありません。また、私はtestルールにスタック値をどのように提供すべきかを知ることができません。 ParseError例外を投げるだけですか?あなたはそのためtestを使用することができます

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

少し具体的には、次のルールを考慮してください。そのトリックは、アクションもRuleを返すことができるということです。

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

ワウ!それはかなりきれいです!好奇心の外に、結果の解析エラーを説明するためにテキストを追加するにはどうすればよいですか? –

+0

手がかりではありません。長い間使っていない。 –

関連する問題