В последнее время я экспериментировал с Treetop, чтобы создать простой парсер для языка CFG DSL для одного из моих клиентов. Мне удалось реализовать все необходимые ему функции, но работа с Treetop оказалась довольно болезненным опытом.Механизм обработки ошибок парсера Treetop, обеспечивающий бесполезный вывод
Проблема в том, что я не смог получить какое-либо полезное сообщение об ошибке от Treetop. Единственным выходом, который я получаю, является
parser.rb:22:in `parse': Parser error at offset: 0 (Exception)
Error:
#<TranLanParser:0x007f960c852f60>
from parser.rb:28:in `<class:Parser>'
from parser.rb:10:in `<main>'
который всегда указывает на первый символ в файле. Это действительно ужасно, чтобы найти какую-либо ошибку в анализируемом языке. Как я должен постепенно развивать свой парсер, если не могу найти, что не так?
Я попытался изменить свою грамматику, чтобы содержать рекурсивные правила, потому что я думал, что это поможет парсеру создать узлы AST как можно скорее, но это не помогло.
Мой вопрос: Я что-то не так? Есть ли хороший пример того, как создавать грамматики PEG для Treetop, которые предоставляют значимые сообщения об ошибках на частично полученных деревьях? Или это ошибка/ошибка в библиотеке Treetop?
Спасибо за ваше мнение.
Спасибо, это действительно помогло. Кажется, что fail_rason предоставляет некоторую лучшую информацию. –