Как создать Lexer / Parser? - PullRequest
       27

Как создать Lexer / Parser?

0 голосов
/ 07 октября 2019

Используется:
Visual Studio - 2019

Для установки ANTLR Я использую - tunnelvisionlabs / antlr4cs // Github.com

Я взял грамматикуздесь - antlr / grammars-v4 // Github.com
грамматика:
- CSharpLexer.g4;
- CSharpParser.g4;
- CSharpPreprocessorParser.g4;

Я сделал:
1. Установил ANTLR;
2. Создал приложение WinFrom;
3. Добавил грамматику;
Щелкните правой кнопкой мыши проект или папку в обозревателе решений и выберите
AddExisting Element.

Вопрос.
Как создать Lexer / Parser?
В инструкциях говорится, что должны быть созданы дополнительные классы, но этого не происходит.

enter image description here enter image description here enter image description here enter image description here


Обновление 1.

Я сделал:
1. Я закрыл Visual Studio 2019;
2. Я открыл проект в Visual Studio 2017;
3. Я удалил файлы:
- CSharpLexer.g4;
- CSharpParser.g4;
- CSharpPreprocessorParser.g4;
4. Я нажал «Добавить новый элемент»;
5. Я выбрал «ANTL 4 Lexer»;
Примечание: в «VS-2019» нет шаблонов «ANTL». 6. Я установил имя «CSharpLexer»;
7. Я нажал «Добавить»;
8. Результат:
- VS создал файл - CSharpLexer.g4;
- VS создал файл- CSharpLexer.g4.cs;
- VS для файла CSharpLexer.g4 установить свойство "Действие при сборке" = "Antlr4".

Вопросы. Обновление-1.
1. Я прав?
2. Где я могу получить данные для заполнения файла CSharpLexer.g4?
Можно ли взять данные из файла CSharpLexer.g4, чтонаходится по ссылке https://github.com/antlr/grammars-v4/tree/master/csharp?
3. Файлы «CSharpParser.g4», «CSharpPreprocessorParser.g4» создаются таким же образом?
4. Какой шаблон использовать для файла - «CSharpPreprocessorParser». g4" ?

enter image description here enter image description here

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Если вам не удалось протестировать с тем, что предлагал @NirMH, я настоятельно рекомендую вам сначала попробовать со средой исполнения Java , поскольку Java является первым гражданином в проекте ANTLR;https://github.com/antlr/antlr4/blob/master/doc/targets.md

Какую бы целевую грамматику вы не выбрали (в вашем случае C #), для генерации результата ANTLR4 со средой исполнения Java стабильнее, чем с любым другим языком. Я тестировал с JS, C # и генератором Python, но все они были недостаточно стабильны. stable означает, что у вас может быть вечный цикл при синтаксическом анализе не-Java.

Конечно, вы можете анализировать файл C# во время выполнения Java ANTLR. Чтобы сгенерировать файлы лексера / анализатора, пройдите учебник . Сгенерированные результаты представляют собой простые .java файлы, поэтому вы должны создать из них свой собственный файл библиотеки jar.

Я согласен, что весь процесс не является одним щелчком мыши, но языковая обработка всегда грязная.

Чтобы вызвать jar в WinForm, вы можете использовать пакет IKVM nuget для преобразования jar в dll, как показано ниже, а затем добавить dll вПроект WinForm.

C:\ikvmc.exe -target:library csharp-lexer-parser.jar
1 голос
/ 07 октября 2019

При добавлении пакета Antlr в проект VS, включая файл грамматики и сборку проекта, выходные файлы (lexer / Parser) будут автоматически созданы в той же папке, где находится файл грамматики.

Затем вы должны использовать VS «Добавить существующий элемент», чтобы добавить сгенерированные файлы CS в ваш проект, чтобы вы могли скомпилировать их как файлы «C #».

...