私は DSL を書いており、同時に parboiled2 を学んでいます。AST が構築されたら、いくつかのセマンティック チェックを実行し、エラーがある場合は、ソース テキスト内の問題のある位置を参照するエラー メッセージを出力したいと考えています。
私は次のようなことを書いていますが、これまでのところうまくいきます:
case class CtxElem[A](start:Int, end:Int, elem:A)
def Identifier = rule {
push(cursor) ~
capture(Alpha ~ zeroOrMore(AlphaNum)) ~
push(cursor) ~
WhiteSpace
~> ((start, identifier, finish) => CtxElem(start, finish, identifier))
}
より良い、またはより簡単な方法はありますか?