Компиляторы, 3 курс, 5 семестр, 2016/17

Материал из SEWiki
Перейти к: навигация, поиск

Лектор: Булычев Дмитрий Юрьевич.

https://github.com/dboulytchev/sample-compiler

Образ с настроенным софтом для виртуальной машины: OVA (логин внутри: me, пароль: me).

Результаты

Вся информация на этой странице сдублирована из почты!

Домашние задания

Домашнее задание от 13.09.2016

  1. Дописать интерпретатор стековой машины с символическим стеком (там надо поддержать оставшиеся 5 инструкций).
  2. Реализовать печать инструкций в правильном формате ассемблера x86 (см., например, https://en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax).
  3. Реализовать правильное "обрамление" порожденной программы:
            .text
            .globl main

main:
            <тут идет текст ассемблерного порождения>
            ret

Документация

Конструкции управления

Базовые:

  1. if E then S1 else S2 fi, где E — выражение, а S1 и S2 — операторы. Если значение E вычисляется не в ноль, то исполняется <code>S1, иначе — S2.
  2. while E do S od</code, где <code>E — выражение, <code>S — оператор. Если значение E вычисляется в не ноль, то исполняется S, а потом весь while заново; иначе не делается ничего.

Дополнительные:

  1. if E1 then S1 {elif E2 then S2 elif E3 then S3} ... [else Sk] fi эквивалентно:
    if E1 then S1
    else if E2 then S2
           else if E3 then S3
           ....
           [else Sk]
    fi 
  1. repeat S until E эквивалентно S; while E == 0 do S od
  2. for S1, E, S2 do S od эквивалентно S1; while E do S; S2 od