Используя MySQL ANTLR4 грамматику в C#, получая «Тип или имя пространства имен« MySQLBaseLexer »не найден» - PullRequest
2 голосов
/ 06 января 2020

Я пытаюсь поиграть с грамматикой ANTLR4 для MySQL, чтобы выполнить базовый c анализ оператора. Я впервые использую ANTLR. Я создал пустой консольный проект C# в VS2017, установил пакеты nuget ANTLR4, ANTLR4.CodeGenerator и Antlr4.Runtime, а также расширение поддержки языка ANTLR. Я добавил в MySQLLexer.g4, MySQLParser.g4 и предопределенный файл.tokens. Когда я пытаюсь построить решение, я получаю следующую ошибку:

The type or namespace name 'MySQLBaseLexer' could not be found (are you missing a using directive or an assembly reference?"

Я просматривал учебные руководства, SO и другие блоги, в которых обсуждается использование ANTLR4 на C#, но кажется, ничего не решает ошибки. Кто-нибудь может указать мне правильное направление, чтобы заставить это работать правильно?

Спасибо!

Ответы [ 2 ]

1 голос
/ 06 января 2020

Я предполагаю, что вы используете два файла грамматики , расположенных здесь . Хотя эти грамматики могут не содержать код C ++, для этого требуется упомянутый вами базовый класс - код C ++, поэтому вам потребуется перенести MySQLBaseLexer.cpp и вспомогательный код на C#, который находится в репозитории Git. readme в каталоге грамматики ANTLR4 содержит еще несколько подробностей об этом требовании.

Кроме того, почему бы вам не попробовать Visual Studio 2019, официальный Java Antlr Tool 4.7. 2 (для чего требуется Java) и мой шаблон Net Core для создания программы Antlr C#? Все интегрировано в сборку и запуск F5. Проверьте это и это . Инструмент C# отстает от официального выпуска Antlr как минимум на два года. Далее, * .tokens - это сгенерированный файл.

Я не понимаю, почему люди продолжают проверять сгенерированные Antlr файлы в репо. Его не следует регистрировать и использовать, особенно если вы используете мой шаблон. Файлы .g4 - ваш источник. Если вам нужно расширение для редактирования грамматики Antlr в VS, вы можете проверить мое расширение AntlrVSIX.

0 голосов
/ 29 января 2020

Меня заинтересовали эти топи c, когда я увидел эти топи c, но недавно ушел в отпуск и смог закончить sh выборку.

Вот пример: https://github.com/hmadrigal/playground-dotnet/tree/master/MsDotNetCore.MySqlParser

Я создал, когда грамматика, предоставленная верстаком (https://github.com/mysql/mysql-workbench/tree/8.0/library/parsers/grammars), была адаптирована для работы NET Core (используется стандарт переносимости NET)

Я создал этот пример проекта, он не предназначен для производства, и я не эксперт ANTLR, но я люблю кодировать и парсеры.

Взгляните на README.md и https://github.com/hmadrigal/playground-dotnet/blob/master/MsDotNetCore.MySqlParser/MySqlParser.TerminalApp/MySqlParserTester.cs может быть вашим bootstrap. Если я когда-нибудь напишу пост в блоге, я поделюсь своими заметками здесь.

...