Ответ 1
- В Visual Studio откройте "Инструменты" → "Расширения и обновления" и выполните поиск в онлайн-разделе "Поддержка языка ANTLR" Сэма Харвелла. Более подробную информацию можно найти на сайте проекта GitHub
- Это делает несколько вещей:
- Добавляет шаблоны для комбинированных грамматик.
- Добавляет выделение синтаксиса
- Добавляет цель MSBuild для грамматики для генерации парсера.
- Это делает несколько вещей:
- В своем решении настройте структуру проекта следующим образом:
- Решение
- GrammarProject
- Calculator.g4
- ImplementationProject
- GeneratedFiles (все файлы в этой папке добавляются как Ссылки на файлы, расположенные в GrammarProject\obj\Debug)
- CalculatorBaseListener.cs
- CalculatorBaseVisitor.cs
- CalculatorLexer.cs
- CalculatorListener.cs
- CalculatorParser.cs
- CalculatorVistor.cs
- MyCalcualtorImplementation.cs
- GeneratedFiles (все файлы в этой папке добавляются как Ссылки на файлы, расположенные в GrammarProject\obj\Debug)
- GrammarProject
- Решение
- Напишите и скомпилируйте грамматику.
- В папке "Ссылки на сгенерированные файлы" щелкните правой кнопкой мыши папку и нажмите "Добавить" - "Существующий элемент"
- Обзор проекта Grammar\obj\Debug и выберите все созданные файлы парсера.
- Этот следующий шаг важен. На кнопке "Добавить" есть небольшая стрелка раскрывающегося списка. Нажмите стрелку раскрывающегося списка и нажмите "Добавить как ссылку".
- Это добавит сгенерированные файлы в проект реализации, используя символическую ссылку вместо прямой копии.
- Это дает дополнительное преимущество в том, что вам не нужно удалять и повторно добавлять файлы парсера, если вам нужно позже поменять свою грамматику.
- Как только вы достигли этого, вы можете наследовать от GrammarProject.CalculatorBaseListener или GrammarProject.CalculatorBaseParser в зависимости от того, какой шаблон разработки вы решили использовать.
В качестве побочного примечания, "The Definitive ANTLR 4 Reference" от Terence Parr - отличный ресурс для понимания того, как работает ANTLR4, и разницы шаблонов развития. Все примеры представлены в java, но концепции применимы как к Java, так и к С#.