АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Классификация компилирующих программ

Читайте также:
  1. I. Назначение, классификация, устройство и принцип действия машины.
  2. I. Определение, классификация и свойства эмульсий
  3. I. Системные программы.
  4. II. Классификация С/А в зависимости от способности всасываться в кровь и длительности действия.
  5. II. Требования к результатам освоения основной образовательной программы начального общего образования
  6. III. Описание основных целей и задач государственной программы. Ключевые принципы и механизмы реализации.
  7. III. Требования к структуре основной образовательной программы начального общего образования
  8. III. Характеристика ведомственных целевых программ и мероприятий подпрограммы
  9. III. Характеристика ведомственных целевых программ и мероприятий подпрограммы
  10. III. Характеристика ведомственных целевых программ и мероприятий подпрограммы
  11. III. Характеристика ведомственных целевых программ и мероприятий подпрограммы
  12. IV. Требования к условиям реализации основной образовательной программы начального общего образования

Основы конструирования компиляторов

Учебное пособие по курсу Системное программное обеспечение

 

 

Москва 2007

Введение. Трансляция арифметических выражений. Метод Рутисхаузера

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

EC = EL ã ER, где EC – результат, EL, ER – левый и правый операнды, ã – операция.

Основной проблемой при этом является необходимость учета приоритетов операций. Например, для выражения:

d = a + b * c должны быть построены тройки: T 1 = b * c, d = a + T 1

Исторически первым для решения этой задачи был метод Рутисхаузера.

Метод Рутисхаузера. Метод требует, чтобы выражение было записано в полной скобочной записи, когда порядок выполнения операций указывается скобками. Так, выражение d = a + b * c должно быть записано в виде d = a +(b * c), в противном случае сначала будет выполняться операция сложения. Метод заключается в следующем.

1. Каждому символу строки Si ставится в соответствие индекс Ni по алгоритму:

N [0]:=0

J:=1

Цикл-пока S [ J ]¹’_’

Если S [ J ] = ‘(‘ или S [ J ] = < операнд>

то N [ J ]:= N [ J -1] +1

иначе N [ J ]:= N [ J -1] -1

Все-если

J:= J +1

Все-цикл

N [ J ]:=0

2. Определяется наибольшее значение индексав структуре вида k (k -1) k или при наличии скобок (k -1) k (k -1) k (k -1) и строится соответствующая тройка.

3. Обработанные символы вместе со скобками удаляются, и на их место ставится значение N = k -1.

4. Операции 2, 3 повторяются до завершения выражения.

Пример. (((a+b)*c)+d)/k

a) S: (((a + b) * c) + d) / k

N: 0 1 2 3 4 3 4 3 2 3 2 1 2 1 0 1 0 => T1 = a+b

b) S: ((T1 * c) + d) / k

N: 0 1 2 3 2 3 2 1 2 1 0 1 0 => T2 = T1*c

c) S: (T2 + d) / k

N: 0 1 2 1 2 1 0 1 0 => T3 = T2+d

d) S: T3 / k

N: 0 1 0 1 0 => T4 = T3/k

Недостаток метода – требование полной скобочной структуры. Как правило, для этого используется специальная программа, которая вставляет скобки.

Решение прочих проблем компиляции было не таким простым. Первые компиляторы являлись крайне сложными программами, написание которых требовало неординарных способностей, и содержали большое количество ошибок. Так первый компилятор Fortran потребовал 18 человеко-лет работы. С тех пор разработаны систематические технологии решения многих задач компиляции, предложен соответствующий инструментарий, в результате чего небольшой компилятор может стать темой курсового проекта.

Основные понятия и определения

Классификация компилирующих программ

Транслятор – программа, которая переводит программу, написанную на одном языке, в эквивалентную ей программу, написанную на другом языке.

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

Ассемблер – транслятор с языка Ассемблера на машинный язык.

Интерпретатор – программа, которая принимает исходную программу и выполняет ее, не создавая программы на другом языке.

Макропроцессор (препроцессор – для компиляторов) – программа, которая принимает исходную программу, как текст и выполняет в нем замены определенных символов на подстроки. Макропроцессор обрабатывает программу до трансляции.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)