Подтвердить что ты не робот

Хороший генератор парсеров (думаю, lex/yacc или antlr) для .NET? Только время сборки?

Есть ли хороший генератор синтаксического анализатора (думаю, lex/yacc или antlr) для .NET? Любой, у кого есть лицензия, которая не напугала бы адвокатов? Множество LGPL, но я работаю над встроенными компонентами, и некоторым организациям не нравится, когда я беру зависимость LGPL.

Я слышал, что Oslo может предоставить эту функциональность, но я не уверен, что это зависимость от времени сборки, а также зависимость от времени выполнения. Может ли кто-нибудь уточнить, что Осло предоставит?

UPDATE
Мне бы очень понравился генератор парсера, который зависит только от времени сборки. Похоже, что ANTLR имеет компонент времени выполнения.

4b9b3361

Ответ 1

Я только что обнаружил, что F # поставляется с реализацией yacc и lex. Похоже, я смогу использовать этот генератор парсера для своих потребностей в .NET.

F # Образцы

В примере Parsing показано, как использовать инструменты fsyacc и fslex для создания парсеров и лексеров для использования с F #. (Mode: Compiled, Runs on: любой CLI, включая Mono)

Похожие записи в блогах:

Ответ 2

Хм-м, вы уже упоминали Antlr, поэтому я не уверен, почему вы не считаете это...

Antlr генерирует С# (http://www.antlr.org/wiki/display/ANTLR3/Antlr%2B3%2BCSharp%2BTarget) и имеет лицензию BSD (http://www.antlr.org/license.html), который, как представляется, имеет очень мало ограничений.


Ирония (http://irony.codeplex.com/) имеет довольно много загрузок и лицензию MIT (легко на глаза). Появляется полный исходный код, поэтому возможно "вставить" его прямо в ваше приложение.

Ответ 3

Лично я являюсь поклонником GOLD Parser Generator. Он не генерирует никакого кода напрямую, он просто дает таблицы состояний DFA и LALR и позволяет вам писать собственный движок парсера в соответствии с вашими потребностями.

Этот способ структурирования вещей не подходит ни для каждой, ни для любой ситуации (вы теряете некоторую гибкость, так как ваш язык должен соответствовать ограничениям LALR), поэтому я не утверждаю, что это "правильный путь", но мне понравилось разделение алгоритма синтаксического анализа из правил синтаксического анализа (и это означает, что любые требования времени выполнения полностью и легко находятся внутри вашего контроля).

Конечно, вам не нужно писать свой собственный движок - ndash; есть три движки, написанные на С#, перечисленные на сайте, например. Вне рук я не знаю, какие лицензии используют эти двигатели, но написание собственного движка откровенно тривиально, если вы обнаружите, что лицензии недоступны. GOLD включает документацию, которая дает полное описание рабочего алгоритма, который (как и следовало ожидать, если вы понимаете парсинг LALR), простую систему состояний. Конечно, сама программа GOLD может свободно использовать.

GOLD также включает в себя IDE для написания вашей грамматики языка, что может быть весьма полезным.

Ответ 4

ANTLR имеет компонент времени выполнения, но вы всегда можете использовать несколько классов, которые он использует, и включать их в свой проект, после чего вам больше не нужно ссылаться на сборку времени выполнения. Он лицензируется в соответствии с лицензией BSD - 3 для целевого объекта С# 3 и 4 для цели С# 2.