Я пишу DSL и изучаю parboiled2 в то же время. Когда мой AST построен, я хотел бы запустить некоторые семантические проверки и, если есть какие-либо ошибки, выводит сообщения об ошибках, которые ссылаются на оскорбительные позиции в исходном тексте.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))
}
Есть ли лучше или более простой способ?
Выглядит хорошо. Я бы предпочел избежать «финиша». Вероятно, вы можете заменить его прямым вызовом на курсор в этой позиции, не проходя через стек. –