Лексический анализ
Фазы компилятора
Введение в компиляцию
Компилятор – это программа , которая считывает текст исходной программы на одном языке – исходном, и транслирует (переводит) его в эквивалентный текст на дугом языке – целевом.
Компиляция состоит из двух частей: анализа и синтеза.
Анализ – разбиение исходной программы на составные части и создание ее промежуточного представления.
Синтез – построение требуемой целевой программы из промежуточного представления.
*
Пример фаз компиляции.
Лексический анализ – первая фаза компилятора. Его основная задача – читать символ за символом исходный текст программы и компоновать прочитанные символы в отдельные группы так, чтобы каждая такая группа представляла собой отдельную неделимую конструкцию языка. Например, последовательность символов w, h, i, l, e будет сгруппирована в строку while. Далее while будет рассматриваться как одна цельная конструкция, являющееся служебным словом.
Полученные в результате такой группировки конструкции, называются токенами. Токены передаются синтаксическому анализатору для дальнейшей обработки. Какую строку символов считать токеном определяется грамматикой языка. В большинстве языков программирования это ключевые слова, операторы, идентификаторы, константы, строки литералов и символы пунктуации (скобка, запятая, точка с запятой, …).
Токен можно рассматривать как обозначение (общее имя) для некоторого множества строк, т.е. токен – это множество строк.
Чтобы решить представляет ли строка символов некоторый токен, используется понятие «шаблон» токена. Таким образом, «шаблон» - это некоторый способ описания (задания) элементов, входящих в состав интересующего нас множества (интересующего нас токена).
Лекскма – последовательность символов исходной программы, которая соответсвует шаблону токена.
В таблице приведены примеры использования терминов «шаблон», «токен», «лексема».
Токен | Пример лексемы | Неформальное описание шаблона |
const | const | const |
If | if | if |
relation | <, <=, =, <>, >, >= | < или <= или = или <> или > или >= |
Id | pi, count, D2 | Буква, за которой следуют буквы и цифры |
num | 3.1416, 0, 6.02E02 | Любая числовая константа |
literal | «core dumped» | Любые символы между парными кавычками, исключая сами кавычки |