Системное программное обеспечение. Лабораторный практикум. Алексей Молчанов

Чтение книги онлайн.

Читать онлайн книгу Системное программное обеспечение. Лабораторный практикум - Алексей Молчанов страница 16

Системное программное обеспечение. Лабораторный практикум - Алексей Молчанов

Скачать книгу

анализатором.

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

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

      

      begin

      for i:=1 to N do

      fg:= fg * 0.5

      

Таблица 2.1. Лексемы фрагмента программы на языке Pascal

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

      Построение лексических анализаторов (сканеров)

      Лексический анализатор имеет дело с такими объектами, как различного рода константы и идентификаторы (к последним относятся и ключевые слова). Язык описания констант и идентификаторов в большинстве случаев является регулярным, то есть может быть описан с помощью регулярных грамматик [1–4, 7]. Распознавателями для регулярных языков являются конечные автоматы (КА). Существуют правила, с помощью которых для любой регулярной грамматики может быть построен КА, распознающий цепочки языка, заданного этой грамматикой.

      Более подробно о построении КА на основе грамматик для регулярных языков можно узнать в [3, 7, 26].

      Любой КА может быть задан с помощью пяти параметров: M(Q,Σ,δ,q0,F),

      где:

      Q – конечное множество состояний автомата;

      Σ – конечное множество допустимых входных символов (входной алфавит КА);

      δ – заданное отображение множества Q·Σ во множество подмножеств P(Q)δ: Q·Σ → P(Q) (иногда δ называют функцией переходов автомата);

      – начальное состояние автомата;

      – множество заключительных состояний автомата.

Скачать книгу