Генератор синтаксического анализатора, который выводит C# с учетом грамматики BNF?

Я ищу инструмент, который сможет создать синтаксический анализатор (на C#), если я дам ему грамматику BNF (например, http://savage.net.au/SQL/sql-2003-2.bnf)

Такой генератор существует?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
0
13 677
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Обычно грамматики BNF слишком неоднозначны. ANTLR, вероятно, подойдет для того, что вы ищете.

Кажется, ты прав. Я только что прочитал где-то в сети: «If-then-else не может быть однозначно указано в контекстно-свободной грамматике без приоритета / без предикатов, такой как EBNF»

ilitirit 30.09.2008 19:40

Вам придется немного подправить BNF, но TinyPG - отличный инструмент.

Пакет SDK для Visual Studio фактически поставляется с инструментами генерации лексера и парсера. Они называются MPPG и MPLex и являются частью пакета Управляемый Babel. Хотя намерение связать их с SDK заключается в разработке языковых расширений для Visual Studio, они идеально подходят для создания общих синтаксических анализаторов, генерирующих AST.

MPLex и MPPG основаны на GPLEX и GPPG (проекты Технологического университета Квинсленда) и используются аналогично Lex и Yacc. SDK также содержит действия MSBuild для включения генерации парсера в обычный процесс сборки.

Вот скринкаст, демонстрирующий MPLex и MPPG в действии:
http://msdn.microsoft.com/en-us/vstudio/cc837016.aspx

Ссылка вроде не работает.

Kirill Kobelev 06.12.2016 21:49

Похоже, что Microsoft довольно давно прекратила выпуск Managed Babel. На этом этапе я, вероятно, выбрал бы FsLex и FsYacc (fsprojects.github.io/FsLexYacc). Он основан на F#, но компилируется в обычную сборку .NET и при желании может быть использован проектом C#.

Tormod Fjeldskår 07.12.2016 14:58

Я бы порекомендовал вам изучить это прекращение и глубоко переработать свой ответ, сказав, что с этого года по этот год VS SDK содержал то, а теперь то и то происходит. В ближайшие годы люди будут смотреть на ваш ответ несколько раз.

Kirill Kobelev 07.12.2016 19:41

Также взгляните на Irony:

http://irony.codeplex.com/

кажется очень многообещающим

IronMeta - это реализация C# OMeta Алекса Варта; это пакетный PEG (синтаксический анализ грамматики выражений; использует предвзятый выбор), поэтому грамматики могут быть чище, чем при использовании системы LALR, подобной yacc.

Другие вопросы по теме