Комментарии 9
Отличное применение Книги Дракона по назначению, а не для подпирания полочки, как я увидел однажды, придя на собеседование %)
-2
Пару лет назад, когда занимался .Net и созданием парсеров обнаружил, что удобнее Nemerle.Peg ничего нет. Советую посмотреть на него.
+3
Понастальгировал. Вспомнил, как диплом делал – среди прочего нужно было SQL-запросы парсить. Правда, я тогда на джаве писал, но в принципе те же яйца только в профиль. LL-грамматика она и в Африке LL-грамматика.
0
Я так понимаю, язык используется исключительно в целях обучения студентов написанию парсеров?
Вообще говоря, довольно странное подмножество. Имхо для обучения было бы куда логичнее сделать синтаксис более легковесным и сконцентрироваться на операциях, а не заставлять писать мантру
Вообще говоря, довольно странное подмножество. Имхо для обучения было бы куда логичнее сделать синтаксис более легковесным и сконцентрироваться на операциях, а не заставлять писать мантру
public static void Main(String[] ...)
просто потому, что так полагается в Java.0
Из интересного стоит отметить некоторые моменты. Через Reflector выяснил, что оператор цикла while отображается как for. В примере с linkedlist.java
Причём оператор
А просматривая через ILSpy, увидел, что таких преобразований не происходит (отображается while). Предполагаю, что используются различные алгоритмы декомпиляций .NET-сборок, поскольку на уровне IL-кода while и for практически не отличаются.
Также в том же примере в строках 144 и 151 в блоке else переменной
while ((!var_end) && (!ret_val))
(строка 131) изменяется на for (bool flag7 = flag4 ? flag6 : false; flag7; flag7 = flag14 ? flag16 : false)
Причём оператор
&&
преобразуется в тернарный оператор ? :
А просматривая через ILSpy, увидел, что таких преобразований не происходит (отображается while). Предполагаю, что используются различные алгоритмы декомпиляций .NET-сборок, поскольку на уровне IL-кода while и for практически не отличаются.
Также в том же примере в строках 144 и 151 в блоке else переменной
nt
присваивается 0
. В IL-коде этого уже нет. Можно заметить, что это бесполезный код (если переписать этот код на C#, то компилятор выдаст сообщение: warning: The variable 'nt' is assigned but its value is never used). Видимо класс динамический сборки AssemblyBuilder, находящийся внутри класса AssemblyGen библиотеки RunSharp, применяет некоторые оптимизации перед тем как сохранить файл сборки на диск. +1
Спасибо! Интересная статья. Особенно интересно для меня было про RunSharp, не знал, что такая библиотека существует. Правда жаль, что она судя по всему заброшена.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Компилятор языка программирования MiniJava