Формальные языки, грамматики и основы построения трансляторов. Кревский И.Г - 31 стр.

UptoLike

31
5. ЛЕКСИЧЕСКИЙ АНАЛИЗ
Первой фазой процесса компиляции является лексический анализ, то
есть группирование строк литер, обозначающих идентификаторы, константы
или слова языка и т.д., в единые символы (лексемы
). Этот процесс может
идти параллельно с другими фазами компиляции (например, в
однопроходных компиляторах). Однако, в любом случае, при описании
конструкции компилятора и его построения удобно представлять
лексический анализ как самостоятельную фазу.
Блок сканирования (сканер
) должен выдавать каждую лексему,
устанавливая ее принадлежность тому или иному классу. Выбор классов
зависит от особенностей транслируемого языка. Часто выделяют классы
имен переменных, констант, ключевых слов, арифметических и логических
операций ("+", "-", "*", "/" и т.д.), специальных символов ("=", ";" и т. д.)
Характер распознаваемых строк может намного упростить процесс
лексического анализа. Например:
идентификаторы:
a1 one
числа
:
100 10.54
ключевые слова языка:
begin if end
Все эти строки можно генерировать с помощью регулярных
выражений. Например, вещественные числа можно генерировать
посредством регулярного выражения (+ | -) d d*.d* , где d обозначает любую
цифру. Из выражения видно, что вещественное число состоит из следующих
компонентов, расположенных именно в таком порядке:
1. возможного знака;
2. последовательности из одной или
более цифр;
3. десятичной точки;
4. последовательности из нуля или более цифр.
                                                                                 31
                         5. ЛЕКСИЧЕСКИЙ АНАЛИЗ
       Первой фазой процесса компиляции является лексический анализ, то
есть группирование строк литер, обозначающих идентификаторы, константы
или слова языка и т.д., в единые символы (лексемы). Этот процесс может
идти    параллельно     с     другими     фазами    компиляции      (например,   в
однопроходных компиляторах). Однако, в любом случае, при описании
конструкции     компилятора      и    его   построения     удобно    представлять
лексический анализ как самостоятельную фазу.
       Блок сканирования (сканер) должен выдавать каждую лексему,
устанавливая ее принадлежность тому или иному классу. Выбор классов
зависит от особенностей транслируемого языка. Часто выделяют классы
имен переменных, констант, ключевых слов, арифметических и логических
операций ("+", "-", "*", "/" и т.д.), специальных символов ("=", ";" и т. д.)
       Характер распознаваемых строк может намного упростить процесс
лексического анализа. Например:
       идентификаторы:
                                     a1     one
       числа:
                                     100 10.54
       ключевые слова языка:
                              begin         if     end
       Все эти строки можно генерировать с помощью регулярных
выражений.      Например,      вещественные        числа   можно     генерировать
посредством регулярного выражения (+ | -) d d*.d* , где d обозначает любую
цифру. Из выражения видно, что вещественное число состоит из следующих
компонентов, расположенных именно в таком порядке:
       1. возможного знака;
       2. последовательности из одной или более цифр;
       3. десятичной точки;
       4. последовательности из нуля или более цифр.