Техника трансляции. Представление типов контроль типов. Конструкторы типов "Массивы". Конструкторы типов "Произведение типов"

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Содержание работы

Техника трансляции

Представление типов Контроль типов

Представление типов

  • Примитивные типы:
    • int, boolean, char, void, …, invalid_type
  • Составные типы  Конструкторы типов

Конструкторы типов Массивы

  • Если T – тип, то array (I, T) – тип, обозначающий тип массива с элементами типа T и индексным множеством I. Статические массивы.
  • Если T – тип, то array (T) – тип, обозначающий тип массива с элементами типа T. Динамические массивы.
  • Пример.
  • var A: array [1..10] of integer;
  • связывает
  • тип array (1..10, integer) с идентификатором A.

Конструкторы типов Произведение типов

  • Если T1 и T2 – типы, то их декартово произведение T1xT2 также является типом.

Конструкторы типов Структуры

  • Конструктор struct применяется к кортежу пар (field_name, field_type).
  • Например.
  • type row = record
    • address: integer;
    • lexeme: array [1:15] of char
    • end;
  • var table: array [1..13] of row;
  • struct ((address x integer) x
  • (lexeme x array (1..15, char))
  • )

Конструкторы типов Указатели

Если T – тип, то pointer (T) также является типом. Например. var p: ^ row определяет переменную p типа pointer (p).

Конструкторы типов Процедуры

  • Если T1 и T2 – типы, то proc (T1, T2) также является типом.
  • Пример.
  • proc (int x int, int) - тип функции mod,
  • proc (char x char, pointer (int)) – тип функции function f (a, b: char) : ^int.

Представление типов

Дерево DAG

proc

proc

x

^

x

^

integer

char

char

integer

char

Представление типов

Линейное представление дерева proc (x (char, char), pointer (integer)) Линейное представление DAG’a. proc, 2, m1, m2, m2 m1: pointer, integer m2: char

Контроль типов

  • Статический и динамический контроль типов.
  • Язык со статическим контролем типов или строго типизированный язык (strongly typed language).
  • Контроль индексов вырезки в Паскале.

Структурная эквивалентость типов Structural equivalence

bool sequiv (s, t) { if (s и t – два одинаковых примитивных типа) { return true; } else if (s == array (s1, s2) && t == array (t1, t2)) { return sequiv (s1, t1) && sequiv (s2, t2); } … else { return false; } }

Эквивалентность типов по имени Name equivalence of type

  • В этом случае каждое имя типа рассматривается как уникальный тип
  • два имени типов эквивалентны, если они идентичны.
  • type link = ^cell;
  • var next: link;
  • last: link;
  • p: ^cell;
  • q, r: ^cell;

Эквивалентны ли типы переменных на слайде 12?

  • Структурная эквивалентность  все объявленные переменные имеют одинаковый тип
    • Algol 68, C (?), ML.
  • Эквивалентность по имени  одинаковый тип имеют переменные p, q, r и p, next
    • Java, Ada.
  • А что верно для Паскаля?

Что верно для Паскаля?

type link = ^cell; np = ^cell; npg = ^cell; var next: link; last: link; p: np; q, r: npq;

type link = ^cell; var next: link; last: link; p: ^cell; q, r: ^cell;

Преобразования типов

  • real + int
  • Явное преобразование типов (explicit type conversion)
    • ord, chr
    • Casts
  • Неявное преобразование типов (implicit type conversion) - приведение (coercion)

Преобразования типов в Algol 68

  • 6 типов приведений.
  • Распроцедуривание – proc m  m
  • Разыменование – ref m  m
  • Объединение – m  union (m)
  • Векторизация – m  []m
  • Обобщение – int  real,
  • real  complex
  • Опустошение – m  void

Преобразования типов в Algol 68

  • 5 типов контекстных позиций.
  • Сильная (strong) позиция
  • Крепкая (firm) позиция
  • Раскрытая (meek) позиция
  • Слабая (weak) позиция
  • Мягкая (soft) позиция

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.