Реферат: Построение блок схем алгоритмов. Алгоритмические языки высокого уровня
Рис. 1. Упрощенная модель компилятора.
ЛЕКСИЧЕСКИЙ АНАЛИЗАТОР.
Исходная программа на языке высокого уровня (ЯВУ), представляет собой цепочку символов, образуемую последовательным сцеплением всех строк программы. Среди допустимых для языка символов всегда выделяют несколько, так называемых,символов-разделителей, благодаря которым предложения исходной программы разбиваются на отдельные слова. Такие слова в теории компиляции называютсялексемами. Например, предложение (оператор)
for i:=1 to n do Writeln(i) ;
будет разбито на лексемы
for, i, :=, 1, to, n, do, Writeln, (, i, ), ;.
Здесь в качестве разделителя используется символ «пробел». Однако можно заметить, что между некоторыми лексемами пробел не стоит. Это связано с тем, что эти лексемы сами являются разделителями и поэтому для отделения их от других лексем специальные символы-разделители использовать не обязательно, хотя и допустимо. Например, то же самое предложение без изменения смысла можно было бы записать так
fox i := 1 to n do Writeln ( i ) ;
СИНТАКСИЧЕСКИЙ АНАЛИЗАТОР.
Синтаксический анализатор на основе синтаксических правил грамматики языка проверяет корректность записи предложений программы и переводит последовательность лексем в последовательность внутренних кодов компилятора. Эта последовательность уже отражает порядок действий, которые должен выполнить компьютер, но еще не является окончательным машинным кодом. В теории компиляции разработано несколько разновидностей внутренних кодов компилятора (триады, тетрады, ПОЛИЗ, деревья, атрибутированные деревья, р-код), однако их рассмотрение выходит за рамки упрощенной модели.
ГЕНЕРАТОР КОДА.
Генератор кода осуществляет перевод внутреннего кода компилятора в окончательный машинный код компьютера.
ТАБЛИЦЫ.
В процессе работы все рассмотренные выше блоки компилятора обращаются к общему наборутаблиц, куда помещается как постоянная для трансляции всех программ информация (например, таблица зарезервированных слов), так и информация, индивидуальная для каждой программы (например, таблицы идентификаторов, литералов и др.).
Языки высокого уровня.
Язык высокого уровня состоит из алфавита и ключевых слова, правил написания идентификаторов, а также особенности построения программ.
Алфавит языка.
Рассматриваемые нами языки программирования, имеют сходный алфавит — набор символов, разрешенных к использованию и воспринимаемых компилятором. В алфавит языка входят:
Латинские строчные и прописные буквы:
A,B,…,Z и a,b,…,z
Цифры от 0 до 9.
Символ подчеркивания «_» (код ASCII номер 95).
Из этих символов (и только из них!) конструируются идентификаторы — имена типов, переменных, констант, процедур, функций и модулей, а также меток переходов. Имя может состоять из любого числа перечисленных выше символов, но должно начинаться с буквы, или символа «_» например:
IX Char Var My_Int_Var C_Dd16_32m int _L
Прописные и строчные буквы не различаются на языках Pascal и Delphi: идентификаторы FILENAME и filename — это одно и тоже. Но на языке С, С++ прописные и строчные буквы различаются, поэтому приведенные идентификаторы – это два различных идентификатора. Длина имен формально не ограничена, но различаются в них – «лишь» первые 32–63 символа (остальные игнорируются [зависит от установок в компиляторе]).
Символ «пробел» (код 32). Пробел является разделителем в языках. Если между двумя буквами имени или ключевого слова стоит пробел, то две буквы будут считаться принадлежащими разным именам (словам). Пробелы отделяют ключевые слова от имен. Количество пробелов не является значащим. Там, где можно поставить один пробел, можно поставить их сколько угодно. Например, выражения
С=2+2; и С = 2 + 2 ; С:=2+2; С := 2+2;
для компиляторов эквивалентны.