Лабораторная 1: Лексический разбор, синтаксический разбор и вычисление суммы римских чисел: вход: "XVI et X et XIV" выход: "XL" и объяснение принципов работы программы на защите. Желательно реализовать, используя атрибуты в ANTLR ( http://www.antlr.org/ ) ANTLR Getting started https://github.com/antlr/antlr4/blob/master/doc/getti.. (от себя-посмотрите https://habrahabr.ru/post/110710/. Ввод из файла input.txt, вывод в консоль. Гы-гениально)
Лабораторная 2: Байт-код Java: Познакомиться с командами байт-кода, соответствующими базовым конструкциям языка Java (инициализация переменных, циклы, условные конструкции, вычисление выражений, вызов методов... ). Как минимум в объёме статьи http://habrahabr.ru/post/111456/ . Рекомендуется заглянуть в спецификацию JVM http://docs.oracle.com/javase/specs/jvms/se8/html/ind.. На защите показываете исходник и мнемоничное представление .class файла, спрашиваю по инструкциям. (от себя-я не делал то задание т.к. третье включает в себя. Достаточно понимать какие инструкции что делают. Смотри описание третьего)
Лабораторная 3: Для подмножества Java, содержащего алгоритмы над целыми числами (алгоритм в main, без ООП и других сложностей), написать компилятор в байт-код и виртуальную машину. Пример целочисленного алгоритма — алгоритм Евклида поиска НОД. Естественно, компиляция должна работать для произвольного алгоритма с операциями над целыми числами, целочисленными переменными и управляющими конструкциями. (от себя-в input.txt положен алгоритм Евклида. В output.txt выводятся инструкции кода. В консоль выводятся операции с памятью. В папке out лежит bat'ник, который генерит "джавовские" инструкции. Полезно сравнить и убедиться, что все хорошо, а так же подумать, почему номера инстуркций некоторые пропущены. Ну и впринципе разобраться, когда именно срабатывают команды из класса Listener(в конце, это видно по рекурсии в walker'е))