![](/user_photo/1549_7W_y5.jpg)
- •1 Общая модель компилятора. Блоки компилятора и их функции
- •2 Общее понятие синтаксиса и семантики языка. Бнф и др. Методы описания синтаксиса и семантики языка.
- •3 Понятие языка. Способы задания языка. Операции над языком
- •4 Регулярные выражения. Способы задания регулярных выражений. Операции над регулярными выражениями.
- •5.Конечные автоматы. Способы задания. Методы построения конечных автоматов. Преобразование конечных автоматов.
- •6 Лексический анализ. Методы и средства построения лексического анализатора.
- •7 Распознавание цепочек символов с помощью конечных автоматов.
- •8 Распознавание цепочек символов с помощью автоматов с магазинной памятью.
- •9 Грамматики языков. Классификация языков по Хомскому.
- •11 Методы представления грамматики в памяти.
- •12 Нисходящий синтаксический анализ. Метод рекурсивного разбора.
- •14 Нисходящий синтаксический анализ. Методы восстановления после ошибок.
- •16 Синтаксический анализ приоритета операторов. Функция приоритета
- •18 Slr-анализаторы. Построение таблиц для slr-анализатора.
- •19 Методы анализа ошибок. Восстановление после ошибок.
- •20 Семантика языка, методы описания и анализа.
- •21 Понятие атрибутивные грамматики
- •22 Синтаксически управляемая трансляция.
- •23 Таблица символов, таблица меток и др. Методы построения, доступа и анализа.
- •24 Генерация промежуточного кода.
- •25 Методы оптимизация промежуточного кода.
- •29 Имена, связывание, проверка типов.
- •30 Область видимости имен. Способы реализации.
- •31 Типы данных. Способы реализации.
- •32 Выражения и операторы присваивания. Способы реализации.
- •36. Абстрактные типы данных. Способы реализации.
- •37 Объектно-ориентированные языки программирования. Способы реализации.
- •38 Обработка исключительных ситуаций. Способы реализации.
- •39 Языки параллельного программирования. Способы реализации.
- •40 Императивные языки программирования. Способы реализации.
- •41 Функциональные языки программирования. Способы реализации.
- •42 Языки логического программирования. Способы реализации.
- •43 Графовые грамматики. Назначение и основные понятия.
- •44 Antlr. Tree grammars.
- •46 Case-средства. Назначение, классификация и основные понятия.
- •47 Case-средства. Направления интеллектуализации.
29 Имена, связывание, проверка типов.
Элементы языков программирования.
Имена (идентификаторы). Атрибуты:Длина имени.Зависимость от регистра.Алфавит символов. Также влияет порядок символов в имени.Виды имен
Имена связаны с понятием меток, подпрограмм, формальных параметров и другими программными конструкциями. Синонимом термина имя часто является термин идентификатор.
Имя (name) — это строка символов, используемая для идентификации некоторой сущности в программе. В первых языках программирования использовались имена, состоящие только из одного символа. Общепринятым видом имени является строка с разумным ограничением длины (или без него), содержащая такие соединительные символы, как символ подчеркивания (_).
Специальные слова.Ключевые слова (для них семантика фиксируется).Зарезервированные слова.
Предопределённые имена.
В языках программирования специальные слова улучшают читабельность программ, называя выполняемые действия. В большинстве языков программирования эти слова классифицируются как зарезервированные, но в некоторых они являются всего лишь ключевыми.
Ключевое слово (keyword) имеет особое значение только в определенном контексте. Компиляторы языка и программисты должны различать имена и специальные слова по контексту.
Зарезервированное слово (reserved word) не может использоваться в качестве имени. При разработке языка лучше использовать зарезервированные слова, поскольку возможность переопределения ключевых слов может ухудшить читабельность.
Переменные.Переменная в программе представляет собой абстракцию ячейки памяти компьютера или совокупности таких ячеек. Переход с машинных языков на языки ассемблера происходил в основном путем замены абсолютных числовых адресов ячеек памяти именами, при этом значительно повысилась читабельность программ, а значит, они стали более легкими для создания и эксплуатации. Этот шаг также позволил избежать возникновения проблем, связанных с абсолютной адресацией, поскольку транслятор преобразовывает имена в фактические адреса, которые сам выбирает.Переменные можно охарактеризовать шестеркой атрибутов (имя, адрес, значение, тип, время жизни, область видимости). Несмотря на то, что такое описание может показаться слишком сложным для внешне простой концепции, оно позволяет ясно объяснить различные свойства переменных.
Атрибуты:Имя переменной.
Имена переменных — самые распространенные имена в программах. Большинство переменных имеют имена. Часто вместо слова "имя" используется слово "идентификатор".
Адрес переменной — это ячейка памяти, с которой связана переменная.
Значение переменной. — это содержимое ячейки или ячеек памяти, связанных с данной переменной. Память компьютера удобно представлять себе в терминах абстрактных ячеек, а не физических.
Тип (type) переменной определяет диапазон значений, которые может иметь переменная, и набор операций, предусмотренных для переменных этого типа.
Время жизни статических переменных начинается с момента объявления переменной и заканчивается в момент выхода из подпрограммы. Динамические переменные живут до момента пока выделенная им память не будет возвращена (освобождена).
Область видимости.Это все возможные места в программе, где данную переменную можно использовать.
Концепции связывания.- статическое связывание - динамическое связывание
Связывание типов (статическое)
Связывается имя переменной с типом переменной. явное объявление, неявное объявление
Динамическое связывание типов (во время выполнения программы)
При динамическом связывании в операторе объявления тип не указывается. Вместо этого переменная связывается с типом при присвоении ей значения оператором присваивания.
Языки, в которых типы связываются динамически, значительно отличаются от языков со статическим связыванием типов. Основным преимуществом динамического связывания переменных с типом является то, что оно обеспечивает значительную гибкость программирования.
Связывание имени с ячейкой памяти
Время жизни определяется с того момента, когда создаётся ячейка памяти, и заканчивается, когда она удаляется ()
Три типа переменных (по времени жизни)
- автоматические (связывание происходит во время декларирования типа)
- статические (связывание происходит до выполнения программы, а разыменование не происходит)
- явно динамические(связываем имя ‘a’ с ячейкой памяти, разрыв с ячейкой осуществляется оператором delete).
Проверка типов.
Различают языки со строгой типизацией (связывание имён переменных статическое) с нестрогой типизацией (можно связывать статические и динамические).
Расширяющее приведение int -> long
Существуют два различных вида совместимости типов: совместимость имен типов и совместимость структур типов.