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





Обычно грамматики BNF слишком неоднозначны. ANTLR, вероятно, подойдет для того, что вы ищете.
Вам придется немного подправить 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
Ссылка вроде не работает.
Похоже, что Microsoft довольно давно прекратила выпуск Managed Babel. На этом этапе я, вероятно, выбрал бы FsLex и FsYacc (fsprojects.github.io/FsLexYacc). Он основан на F#, но компилируется в обычную сборку .NET и при желании может быть использован проектом C#.
Я бы порекомендовал вам изучить это прекращение и глубоко переработать свой ответ, сказав, что с этого года по этот год VS SDK содержал то, а теперь то и то происходит. В ближайшие годы люди будут смотреть на ваш ответ несколько раз.
Кажется, ты прав. Я только что прочитал где-то в сети: «If-then-else не может быть однозначно указано в контекстно-свободной грамматике без приоритета / без предикатов, такой как EBNF»