#python #parsing
Вопрос:
Я хочу создать SQL-autocompleter для использования с rlwrap: https://github.com/hanslub42/rlwrap это может затем использоваться с sqlite3 amp; osqueri например (я знаю, что они уже есть автодополнение объекта, но этого не достаточно, особенно при rlwrap).
В самом деле, в более общем плане я хотел бы знать лучший подход для построения autocompleters на основе описания БНФ грамматики; может, я хочу произвести autocompleters для других rlwrapped REPLs в какой-то момент в будущем.
У меня нет опыта работы с синтаксическими анализаторами, но я прочитал в Интернете кое-что о различных типах анализаторов и о том, как они работают, и этот учебник по Пилери: https://tomassetti.me/pyleri-tutorial/
Pyleri выглядит довольно просто и обладает expecting
свойством, позволяющим легко создавать автозаполнитель, но для этого потребуется перевести BNF sqlite (и любые другие BNF, которые я, возможно, захочу использовать в будущем) в код python, что является тормозом.
В ANTLR есть множество предопределенных файлов грамматики для многих разных языков и возможность вывода кода на python, но я не уверен, насколько легко создать автозаполнитель, и я не хочу читать всю документацию только для того, чтобы узнать, что я потратил свое время впустую. Так может ли кто-нибудь дать мне совет? Каков наилучший подход?
Комментарии:
1. У Antlr4 есть цель на python. Кроме того, у Майка здесь есть библиотека «завершения кода». Я тоже написал свой собственный для C#. В Python нет порта, но можно было бы написать один из них с учетом исходного кода для трех других целей в своем коде. Antlr4 — это не BNF. В BNF нет операторов замыкания и группировки Клина. Antlr использует EBNF, которым Antlr4 пользуется с меньшими CST.