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

Лексический анализ

Читайте также:
  1. B) должен хорошо знать только физико-химические методы анализа
  2. I. Анализ социального окружения
  3. II. ИСТОРИЯ НАШЕЙ КАНАЛИЗАЦИИ
  4. III. Психологический анализ деятельности
  5. IV. Схема анализа внеклассного мероприятия
  6. IX. ЛЕКСИЧЕСКИЙ АНАЛИЗ
  7. PEST-анализ
  8. SWOT – анализ
  9. SWOT – анализ раздела
  10. SWOT-анализ
  11. SWOT-анализ
  12. SWOT-анализ раздела «ОБРАЗОВАТЕЛЬНЫЕ РЕЗУЛЬТАТЫ, ЭФФЕКТИВНОСТЬ»

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

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

Блок лексического анализа может быть организован в виде отдельной программы (как в трехпроходном компиляторе), либо в виде процедуры, которая вызывается по мере необходимости (как в одно- и двухпроходном компиляторе).

Уже отмечалось, что в лексической свертке каждая лексема заменяется дескриптором. Дескриптор имеет единый формат для всех типов лексем, и содержит два поля:

(<тип лексемы>, <указатель>)

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

· идентификаторы (имена переменных, процедур, функций, меток и т.д);

· служебные (ключевые) слова;

· числовые константы (целые неотрицательные числа, состоят только из цифр). Лексическая свертка вещественного числа включает дескриптор целой части числа и дескриптор дробной части числа;

· разделители (+ – * :=; пробел и т.д.).

Могут вводиться и другие классы. При этом предпочтительно разбивать множество слов языка программирования на такие классы, которые бы не пересекались между собой. Классы могут состоять из конечного числа лексем (разделители и служебные слова), либо из бесконечного или очень большого числа элементов (классы числовых констант и идентификаторов).

Лексемы собираются в таблицы – для каждого класса своя таблица. В поле дескриптора <указатель> содержится ссылка на строку соответствующей таблицы. Таблицы лексем для классов ключевых слов и разделителей встроены в компилятор, поэтому коды ключевых слов и разделителей всегда одни и те же в лексической свертке обрабатываемых текстов программ. Таблицы лексем для классов идентификаторов и числовых констант формируются на этапе лексического анализа. Поскольку тексты программ отличаются числом и именами переменных, количеством встречающихся числовых констант, коды идентификаторов и чисел различаются в лексической свертке различных программ. Конечность таблиц лексем объясняет ограничения, существующие в языках программирования на длину и количество различных используемых в программе идентификаторов.

Пример 1:

Вход лексического анализатора:

PROGRAM PRIMER;

VAR X,Y,Z: REAL;

BEGIN

X:=–3.14;

Y:=2;

Z:=X+Y;

END.

В качестве кодов классов лексем будем использовать числа: 10 – ключевое слово, 20 – разделитель, 30– идентификатор, 40 – числовая константа.

 

Внутренние таблицы лексического анализатора:


Таблица служебных слов (10)

№ п/п Служебное слово
PROGRAM BEGIN END VAR REAL INTEGER …

 


Таблица разделителей (20)

№ п/п Разделитель
; : , . + – * \ = …

Выходные таблицы лексического анализатора:


Таблица идентификаторов (30)

№ п/п Идентификатор
  PRIMER X Y Z

 


Таблица констант (40)

№ п/п Значение
   

Лексическая свертка исходного текста:

(10,1) (30,1) (20,1)

(10,4) (30,2) (20,3) (30,3) (20,3) (30,4) (20,2) (10,5) (20,1)

(10,2)

(30,2) (20,2) (20,9) (20,6) (40,1) (20,4) (40,2) (20,1)

(30,3) (20,2) (20,9) (40,3) (20,1)

(30,4) (20,2) (20,9) (30,2) (20,5) (30,3) (20,1)

(10,3) (20,4)

 

Обратите внимание, что число –3.14 кодируется четырьмя дескрипторами: “–“, “3”, “.”, “14”. «Сборка» вещественной константы происходит на этапе синтаксического анализа (например, проверяется, чтобы дробная часть записывалась через точку, а не через запятую).

 


1 | 2 |

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



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