Введение
План на семестр, Литература
- ANTLR v.4 (http://www.antlr.org/)
- ANTLRWorks v.2 (http://tunnelvisionlabs.com/products/antlrworks)
- Terence Parr "The Definitive ANTLR 4 Reference"
Email рассылка: https://groups.google.com/forum/#!forum/usu_cc
Требования
- В конце каждого занятия формулируется домашнее задание.
- Сдавшие задание к следующему занятию получают 5 баллов, через одно - 4 балла,
- через 2 - 3 и так далее.
- Получившие 80% - 100% от максимального возможного балла получают отлично, 60% - 79% - хорошо, 40% - 59% - удовлетворительно или зачтено.
Этапы работы компилятора
- Лексический анализ (Lexer) -> поток токенов
- Синтаксический анализ (Parser) -> дерево разбора (parse tree)
- Семантический анализ -> построение AST, различные проверки
- Генерация кода -> ассемблерный код -> исполняемый модуль
ANTLRWorks
Построение лексического анализатора
INT : [0-9]+;
WS : [ \t\r\n]+ -> skip;
ID : [a-zA-Z_][a-zA-Z_0-9]*;
PLUS : '+';
MINUS : '-';
MULT : '*';
DIV : '/';
LPAR : '(';
RPAR : ')';
Построение грамматики и синтаксического анализатора
Пример 1
Обращаем внимание на порядок, чтобы дерево разбора было разумным
expr
: expr MULT expr
| expr PLUS expr
| INT
;
Пример 2
Без левой рекурсии (для общего образования)
input
: expr EOF
;
expr
: term ((PLUS | MINUS) term)*
;
term
: factor ((MULT | DIV) factor)*
;
factor
: (PLUS | MINUS) factor
| atom
;
atom
: INT
| LPAR expr RPAR
;
Домашнее задание
Создать combined grammar для арифметических выражений с +, -, *, /, скобками, возведением в степень, унарный минусом, double и символьными константами PI и E.