2009-10-01 3 views

ответ

18

У меня был хороший опыт работы с ANTLR v3. Безусловно, самое большое преимущество заключается в том, что он позволяет писать синтаксические анализаторы LL (*) с бесконечным взглядом - они могут быть довольно субоптимальными, но грамматика может быть написана самым простым и естественным способом, без необходимости реорганизации для работы с ограничениями парсера, и производительность парсера часто не очень важна (надеюсь, вы не пишете компилятор C++), особенно в учебных проектах.

Он также предоставляет неплохие средства для построения значимого ASTs без необходимости писать код - для каждой грамматики вы указываете «решающий» токен или подпрограмму, и это становится узлом дерева. Или вы можете написать деревообразование.

Посмотрите на следующие грамматик Antlr (перечислены здесь в порядке возрастания сложности), чтобы получить суть того, как она выглядит и чувствует себя

+0

Спасибо! Хорошее предложение – Nestor

+0

Еще раз спасибо. Очень полезные указатели. – Nestor

1

Вы можете изучить исходный код для Mono C# compiler.

+0

Спасибо. Я не пытаюсь написать парсер для C#, но синтаксический анализатор для моего собственного языка, синтаксический анализатор написан на C#. Большое спасибо за ваше предложение. – Nestor

1

Пока еще в ранней бета-версии Oslo Язык моделирования и инструменты MGrammar от Micro мягкие демонстрируют некоторые обещания.

+0

Да. Я видел это. Мне нравится редактор (настройка подсветки синтаксиса на мою грамматику). Но это немного рано использовать. Похоже. – Nestor

+1

@ Нестор - Я согласен, что использовать его еще рано, но я подумал, что это заслуживает упоминания. –

+0

+1 для вашего комментария. Это правда.Я бы использовал Осло, если бы он был в его окончательном выпуске. – Nestor

11

Я играл с Irony. Это выглядит просто и полезно.

+1

Хороший аспект (по крайней мере, я думал) Иронии заключается в том, что вы можете написать свою грамматику на языке, таком как C# – saret

1

Я также хотел бы взглянуть на SableCC. Его очень легко создать грамматик EBNF. Here - простой пример калькулятора C#.

0

Lex и yacc все еще мои любимые. Неясно, если вы только начинаете, но очень просто, быстро и легко, когда у вас есть жаргон.

Вы можете заставить его делать все, что угодно; генерировать код C#, строить другие грамматики, эмулировать инструкции, что угодно.

Это не очень, это текстовый формат и LL1, поэтому ваш синтаксис должен соответствовать этому.

С положительной стороны, это везде. В нем есть отличные книги О'райли, множество примеров кода, множество готовых грамматик и множество библиотек родного языка.

1

Здесь есть короткая статья here о создании парсера LL (1), конечно, вы также можете использовать генератор.

Смежные вопросы