Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры [4747 вопросов].doc
Скачиваний:
83
Добавлен:
15.06.2014
Размер:
407.04 Кб
Скачать

1 Общая модель компилятора. Блоки компилятора и их функции

Компилятор переводит программы с одного языка на другой

Процесс создания компилятора можно свести к решению нескольких задач, которые принято называть фазами компиляции: лексический анализ, синтаксический анализ, семантический анализ,оптимизация,генерация кода.

Лексический анализ: Входом компилятора служит программа на исходном языке программирования. С точки зрения компилятора это просто последовательность символов. Задача лексического анализатора, заключается в разборе входной цепочки и выделении некоторых более "крупных" единиц, лексем, которые удобнее для последующего разбора. Примерами лексем являются основные ключевые слова, идентификаторы, константные значения (числа, строки, логические) и т.п.

Синтаксический анализаторполучает на вход результат работы лексического анализатора и разбирает его в соответствии с некоторой грамматикой. Эта грамматика аналогична грамматике, используемой при описании входного языка. Однако грамматика входного языка обычно не уточняет, какие конструкции следует считать лексемами.

После синтаксического анализа можно считать, что исходная программа преобразована в некоторое промежуточное представление.

Семантический анализ заключается в проверке правильности типов данных, используемых в программе. Кроме того, на этом этапе компилятор должен также проверить, соблюдаются ли определенные контекстные условия входного языка.

Основная цель фазы оптимизации заключается в преобразовании промежуточного представления программы в целях повышения эффективности результирующей объектной программы. Отметим, что существует различные критерии эффетивности, например, скорость исполнения или объем памяти, требуемый программе. Очевидно, что все преобразования, осуществляемые на фазе оптимизации, должны приводить к программе, эквивалентной исходной.

Наконец, по оптимизированной версии промежуточного представления генерируется объектная программа. Эту задачу решает фаза генерации кода

2 Общее понятие синтаксиса и семантики языка. Бнф и др. Методы описания синтаксиса и семантики языка.

3 Понятие языка. Способы задания языка. Операции над языком

Язык задается алфавитом, правилами построения, синтаксисом. Чтобы его задать, нужно:

указать все конструкции,написать программу – распознаватель (проверяет, является ли текст корректным),

описать порождающую грамматику языка

ЯП – набор средств программного обеспечения, который выполняет функции обработки языков программирования.

Алфавит - это конечное множество символов. Для обозначения символов мы будем пользоваться цифрами, латинскими буквами и специальными литерами типа #, $.

Различные способы задания языков в компиляции:

    • Грамматики

    • Конечные и магазинные автоматы

Один из способов задания языка – регулярные выражения.

Язык, задаваемый регулярным выражением, называется регулярным множеством

4 Регулярные выражения. Способы задания регулярных выражений. Операции над регулярными выражениями.

Регулярные выражения:

 (символ пустой строки) a (а  алфавиту)

ab, если и a и b – регулярные выражения) a+b, если и a и b – регулярные выражения)

a*, если a – регулярное выражение (это операция – итерация)

Символ ‘*’ означает, что выражение в скобках может повторяться от 0 до ∞ раз.

Символ ‘+’ означает, что выражение в скобках может повторяться от 1 до ∞ раз.

? означает 0 или 1