magistr.ppt
- Количество слайдов: 15
Методы компиляции Часть 2 (магистратура)
Разработка парсера 1. Блок лексического анализа; 2. Блок синтаксического анализа Язык программы, состоящей только из функции main. Ниже неформальное описание языка.
Лексемы: • Идентификаторы, состоящие из маленьких английских букв, цифр, знака _. Начинается с буквы x y 1 arg_0 • Целые десятичные константы со знаком + или – или без 348 -5000 +2 • Служебные слова void main int if else while • Верные знаки + - ; , *{ } ( )
Программа -> функция_ main -> void main() составной_оператор -> {список_операторов} список_операторов -> оператор; |оператор; список_операторов
операторы: 1) Описание переменных без инициализации, возможен список. int x; int x, y 1; 2) Оператор присваивания идентификатор = арифметическое выражение или константа x=0; y 1 = x+2;
3) Условные операторы: • Полный if(x>0)y 1=x*x; else y 1=0; • Неполный if(x!=0)y 1=2*x; • Условие задается отношением – переменные и константы и знаки отношения (*несколько отношений, связанных логическими операциями & | ! )
операторы 4) оператор while (x<10) x=x+2; while(x<10){s=s+x; x=x+2; }
Примеры программ на языке 1. void main() {int x, y; x=5; If(x>2) y=x-2; else y=x; }
Примеры 2. void main() {int a, b, c; a=5; b=-3; if (a>b) {c=a; a=b; b=c; } }
примеры 3. void main() {int a; int b; a=21; b=35; while(a!=b) if(a>b)a=a-b; else b=b-a; }
примеры 4. void main() {int a, b, s, c; s=1; a=0; b=1; while(a+b<10) {c=a+b; s=s+c; a=b; b=c; } }
Задания 1) разработать сканер на основе КА и блок лексического анализа(ЛА). Сканер выделяет одну лексему. ЛА формирует лексическую свертку, используя таблицы • идентификаторов(ТИ) • служебных слов (ТСС) • констант(ТК) • верных знаков(ТВС)
Замечание На этапе ЛА выполняем 1 этап контекстного анализа – удаляем определяющие вхождения идентификаторов, занося их в соответствующие таблицы или распознавая по ним. Находим 2 ошибки: - err 1: нет определяющего вхождения; - err 2: повторное определение имени.
Задания 2) сформулировать правила грамматики в виде не леворекурсивной КСграмматики; (самый сложный пункт задания. ) Оператора описания переменных уже нет. 4) запрограммировать блок синтаксического анализа, используя нисходящий или восходящий распознаватель с 4 курса.
Удачи! В четверг и субботу занятия будут происходить в форме консультаций.
magistr.ppt