All streams
Search
Write a publication
Pull to refresh
129
0.2
Ivan Kochurkin @KvanTTT

Software Developer at JetBrains (Kotlin Compiler)

Send message
Я один прочитал сначала «языковые проблемы» как «языковые пробелы»?
В МГТУ им. Баумана требуются эти разделы, хотя это и университет.
Ну и какие есть аргументы, кроме того, что он вам больше всего нравится?

>> Из особенностой можно отметить отсутствие деления на лексер и парсер, а так же то, что писать парсер приходиться на 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» у вас верно написано.
12 ...
262

Information

Rating
2,540-th
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity