Ну и какие есть аргументы, кроме того, что он вам больше всего нравится?
>> Из особенностой можно отметить отсутствие деления на лексер и парсер, а так же то, что писать парсер приходиться на Nemerle.
Вы наверное хотели сказать, код, который использует парсер, нужно писать на Nemerle? Потому что парсер писать вообще не надо — для этого и используются генераторы.
Судя по этому и этому сравнениям, единственным адекватным конкурентом для ANTLR является Gold Parser. Он основан на LALR синтезе.
Если сравнивать его с ANTLR, то основными преимуществами являются:
1. Скорость работы.
2. Допустимость левой рекурсии.
3. Поддержка большего количества языков.
4. Более красивый интерфейс (нет мелких шрифтов, как в ANTLR под Windows).
А недостатки следующие:
1. Сложновоспринимаемый человеком код лексера и парсера.
2. Необходимость приведения грамматики к форме Бэкуса-Наура.
3. Работает только под Windows (ANTLR на Java, а значит кроссплатформенная).
Кстати, ваше замечание про оператор Case было прямо в точку.
Именно этот оператор не реализован у меня в генерации кода, поскольку это оказалось слишком ресурсозатратно для меня ;) (Этот проект вообще идет в качестве 4 лабораторных по курсу «Конструирование компиляторов»).
Теперь я подумаю, стоит ли для него сделать генерацию или нет.
Смотрите: оператор case всегда должен возвращать статический тип, как и остальные операторы. Этот тип определяется на этапе компиляции по выражениям expr1...exprn.
А у вас тоже почти все верно написано: в Case вводятся как бы локальные переменные x1,…, xn с соответствующими типами, которые затем могут использоваться в выражениях expr1,…, exprn.
Я не до конца разъяснил: результат в операторе Case получается как если бы мы несколько раз применили поиск «наиболее общего близкого предка» поочередно к выражениям expr1,…, exprn, которые справа.
А про «as» у вас верно написано.
>> Из особенностой можно отметить отсутствие деления на лексер и парсер, а так же то, что писать парсер приходиться на Nemerle.
Вы наверное хотели сказать, код, который использует парсер, нужно писать на Nemerle? Потому что парсер писать вообще не надо — для этого и используются генераторы.
Судя по этому и этому сравнениям, единственным адекватным конкурентом для ANTLR является Gold Parser. Он основан на LALR синтезе.
Если сравнивать его с ANTLR, то основными преимуществами являются:
А недостатки следующие:
Именно этот оператор не реализован у меня в генерации кода, поскольку это оказалось слишком ресурсозатратно для меня ;) (Этот проект вообще идет в качестве 4 лабораторных по курсу «Конструирование компиляторов»).
Теперь я подумаю, стоит ли для него сделать генерацию или нет.
А у вас тоже почти все верно написано: в Case вводятся как бы локальные переменные x1,…, xn с соответствующими типами, которые затем могут использоваться в выражениях expr1,…, exprn.
А про «as» у вас верно написано.