Лекции 9-10 18 марта 2016 г. (ADD, x, y, z) (SUB, x, y, z) (MUL, x, y, z) (DIV, x, y, z) (NEG, x,, z) (AND, x, y, z) (OR, x, y, z) (NOT, x,, z) (MOV, x,, z) z = x+y z = x-y z = x*y z = x/y z = -x z = x && y z = x || y z = !x z=x (LBL,,, L1) установить метку L1 на следующую по порядку инструкцию (кроме LBL, если эти инструкции идут одна за другой) (EQ, x, y, L1) (NE, x, y, L1) (GT, x, y, L1) (LT, x, y, L1) (GE, x, y, L1) (LE, x, y, L1) (JMP,,, L1) (IN,,, x) (OUT,,, x) если x == y перейти на L1 если x != y перейти на L1 если x > y перейти на L1 если x < y перейти на L1 если x >= y перейти на L1 если x <= y перейти на L1 перейти на инструкцию L1 ввод с клавиатуры значения в x вывод на экран значения x Таблица символов Имя (ATOM_TYPE, x, y, z) Не месте x, y и z может быть: • числовая константа • переменная (адрес в таблице символов) i = i + 1; → (ADD, ‘1’, 0, 0) • строковая константа (адрес в таблице строк) … out “Hello, world!”; → (OUT,,, s1) (MOV,1,,15) • метка (JMP,,,5) (LBL,,,5) (OUT,,,15) … Код i 0 age 1 … … temp1 n temp2 n+1 … Таблица строк Строка Код Input: 0 Hello, world! 1 Result = 2 … … Оператор Префиксный инкремент Постфиксный инкремент Логическое отрицание Умножение Сложение Вычитание Равенство Неравенство Больше Меньше Меньше или равно Логическое И Логическое ИЛИ Синтаксис Приоритет ++a a++ !a a*b a+b a–b a == b a != b a>b a<b a <= b a && b a || b 1 1 2 3 4 4 5 5 5 5 5 6 7 E → E7 E7 → E7 || E6 | E6 E6 → E6 && E5 | E5 E5 → E4 == E4 | E4 != E4 | E4 > E4 | E4 < E4 | E4 <= E4 | E4 E4 → E4 + E3 | E4 – E3 | E3 E3 → E3 * E2 | E2 E2 → !E1 | E1 E1 → ++ id | id ++ | ( E ) | num | id E → E7 E7 → E6 E7’ E7’ → || E6 E7’ | ε E6 → E5 E6’ E6’ → && E5 E6’ | ε E5 → E4 E5’ E5’ → == E4 | != E4 | > E4 | < E4 | <= E4 | ε E4 → E3 E4’ E4’ → + E3 E4’ | - E3 E4’ | ε E3 → E2 E3’ E3’ → * E2 E3’ | ε E2 → ! E1 | E1 E1 → ++ id | ( E ) | num | id E1’ E1’ → ++ | ε № Правило Семантическое определение 8 Ep → E7q E7p → E6q E7’rs E7’pq → || E6r {OR}prs E7’st E7’pq → ε E6p → E5q E6’rs E6’pq → && E5r {AND}prs E6’st E6’pq → ε E5p → E4q E5’rs p p q q p q q p 9 E5’pq → == E4r {MOV}1,,s {EQ}prl {MOV}0,,s {LBL},,l s = Alloc(); l = newlab(); q = s 10 E5’pq → != E4r {MOV}1,,s {NE}prl {MOV}0,,s {LBL},,l s = Alloc(); l = newlab(); q = s 11 E5’pq → > E4r {MOV}1,,s {GT}prl {MOV}0,,s {LBL},,l s = Alloc(); l = newlab(); q = s 12 E5’pq → < E4r {MOV}1,,s {LT}prl {MOV}0,,s {LBL},,l s = Alloc(); l = newlab(); q = s 13 E5’pq → <= E4r {MOV}1,,s {GE}prl {MOV}0,,s {LBL},,l s = Alloc(); l = newlab(); q = s 14 E5’pq → ε q = p 1 2 3 4 5 6 7 = = = = = = = = q s; t; p s; t; p s; r = q s = Alloc() r = q s = Alloc() r = q № 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Правило E4p → E4’pq E4’pq E4’pq E3p → E3’pq E3’pq E2p → E2p → E1p → E1p → E1p → E1p → E1’pq E1’pq E3q E4’rs → + E3r {ADD}prs E4’st → - E3r {SUB}prs E4’st → ε E2q E3’rs → * E2r {MUL}prs E3’st → ε ! E1q {NOT}q,,r E1q ++ idq {ADD}q1q ( Eq ) numval idq E1’rs → ++ {MOV}p,,r {ADD}p1p → ε Семантическое определение p q q q p q q r p p p p p r q = = = = = = = = = = = = = = = s; r = q t; s = Alloc() t; s = Alloc() p s; r = q t; s = Alloc() p Alloc(); p = r q q q val s; r = q Alloc(); q = r p Упражнение 1 Напишите список атомов, который будет сгенерирован для следующих инструкций 1.b * b – 4 * a * c 2.c * c <= a * a + b * b 3.(a < b) && (b < c) != !0