Какой парсер-генератор преподавать моим студентам? [закрытый]

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

15
задан Uri 23 August 2013 в 15:18
поделиться

15 ответов

Antlr широко используется, хорошо документируется и свободный. Это поддерживается Муравьем и может предназначаться для Java среди многих других языков.

28
ответ дан 30 November 2019 в 23:53
поделиться

Еще не попробовали его, но я нашел jparsec несколько дней назад. Это не парсер-генератор, вместо этого синтаксический анализатор является сборкой в Java combinators в стиле EBNF.

1
ответ дан 30 November 2019 в 23:53
поделиться

Системы синтаксического анализатора ШТЕПСЕЛЯ как КРЫСЫ более просты, чем lex/yacc комбинация. Это может или не может быть плюс для Вашего класса: Ваша цель состоит в том, чтобы учить регулярным выражениям и конечным автоматам, и LR-грамматикам и автоматам с магазинной памятью, и т.д.? Или Вы хотите самый простой практический компилятор frontend инструменты?

(Так как я не программирую в Java в эти дни, я не попробовал КРЫС в частности.)

3
ответ дан 30 November 2019 в 23:53
поделиться

Я не забываю использовать Бизона в одном из моих классов компиляторов. Мы также использовали гибкий провод и YACC.

0
ответ дан 30 November 2019 в 23:53
поделиться

Если Вы планируете работать с Java, JavaCC или ANTLR должны быть достаточными. Этот последний также поддерживает C и Python. Но если Вы планируете работать с C++, возможно, необходимо смотреть на Повышение:: Дух.

1
ответ дан 30 November 2019 в 23:53
поделиться

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

0
ответ дан 30 November 2019 в 23:53
поделиться

Вы могли пропустить часть генератора и взглянуть на синтаксический анализатор Scalas combinators.

1
ответ дан 30 November 2019 в 23:53
поделиться

Javacc это очень легко.
В том же файле у Вас есть грамматика и маркерный список.

https://javacc.dev.java.net /

2
ответ дан 30 November 2019 в 23:53
поделиться

Yacc и все другие LALR (1) дата синтаксических анализаторов с эры, когда ресурсы машины были дефицитными и было необходимо потратить большую разработку времени грамматика так, чтобы Вы могли запустить синтаксический анализатор вообще на PDP-11 с 64K RAM. Сегодня не имеет смысла преподавать инструмент как yacc с ужасным интерфейсом пользователя и очень ограниченным набором грамматик, которые это может использовать.

я рекомендовал бы любой из ОСНОВАННЫХ НА ШТЕПСЕЛЕ синтаксических анализаторов, таких как Крысы!, или GLR парсер Elkhound, разработанный George Necula и Scott McPeak (благодарит кварк). Извините я не могу рекомендовать определенный инструмент для Java, но Крыс! хорошо для C.

ANTLR в порядке, но слишком сложен для моего вкуса.

5
ответ дан 30 November 2019 в 23:53
поделиться

Lex и Yacc все еще используются. Один из новейших языков вокруг, F#, имеет свои собственные версии (fslex, fsyacc - см. здесь для примера.), Таким образом, я думаю, преподавая им, все еще релевантно.

5
ответ дан 30 November 2019 в 23:53
поделиться

Жаль, что Ваши студенты не являются сведущими в C++. После того как я столкнулся библиотека Spirit с ее понятием богатого, EBNF-стиля DSL, я покинул Antlr, Lex и Yacc позади! Это очень более гибкое описание грамматики вместе с кодом.

библиотека Brilliant, хотя с по общему признанию нетривиальной кривой обучения.

Однако без C++, Antlr является, вероятно, Вашим лучшим выбором.

10
ответ дан 30 November 2019 в 23:53
поделиться

Я не использую лексический анализатор и парсеры-генераторы. Они достаточно просты генерировать вручную и являются самыми легкими частями компилятора для записи. Кроме того, при создании их вручную можно сделать их действительно быстро.

14
ответ дан 30 November 2019 в 23:53
поделиться

Я не забываю использовать КУБОК и любить его. Смотрите на Парсер-генератор КУБКА для Java.

КУБОК сохраняется в Мюнхенском техническом университете. Я полагаю, что это - основная цель, должен учить студентов.

Это также имеет свободную модель лицензирования.

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

1
ответ дан 30 November 2019 в 23:53
поделиться

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

1
ответ дан 30 November 2019 в 23:53
поделиться

OCaml имеет фантастический набор генераторов парсеров. Вот несколько простых примеров .

JavaCC тоже неплох.

Я настоятельно рекомендую избегать C (и C ++) для этой цели, потому что они чрезвычайно болезненны в этом контексте.

0
ответ дан 30 November 2019 в 23:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: