Включение действий в системы регулярных выражений. Взаимодействие ЛА с другими частями транслятора

Страницы работы

10 страниц (Word-файл)

Содержание работы

Включение действий в системы регулярных выражений

Прямоугольная выноска: В УП не так 


Правила лексики

.

 Имя автомата 

 Имя группы слов 

 Регулярное выражение 

 Действие 

 Примечание 

 main

 Ident

 [a-zA-Z][0-9a-zA-Z]*

 tables.PutToIdentTable(Lexem.textOfWord);

 main

 Const

 [0-9]+([.][0-9]*)?

 tables.PutToConstTable(Lexem.textOfWord);

 main

 Const

 [0-9]*[.][0-9]+

 tables.PutToConstTable(Lexem.textOfWord);

 main

 Formatting

 [ \t\r\n]*

 ignoreLastWord=true;

 main

 Operation

 [-+*/]

 main

 Delimiter

 [;]

 main

 Assign

 [=]

 main

 lineComment

 [/][/]

 ignoreLastWord=true;lStk.push(lexAcceptor); lexAcceptor=lexAcceptors[indexOfAutomat("lineComment")];

 lineComment

 endComment

 [\n\r]

 ignoreLastWord=true; lexAcceptor=(fAutomat)lStk.pop();

 lineComment

 anySymbols

 other+

 ignoreLastWord=true;


Взаимодействие ЛА с другими частями транслятора

 


Группы слов: предопределенные (таблицы обычно не используются) / определяемые (строятся таблицы)

Атрибуты:

  1. Группа слов (ключевые / идентификаторы (/ константы)) – флаги
  2. Класс памяти ( auto / static / register )
  3. Тип данных (примитивный ( char / int / float / …) / производный ( int[] / char* / struct{…} / class{…} / …))
  4. Диапазон значений ( signed / unsigned + short / long / …)
  5. Начальное / текущее значение

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


Учет областей видимости

 


int x=0;

{

int x=-1;

y=x;

}

z=x;

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

–  учитываются (нумеруются) точки входа в блоки, в том числе – в функции;

–  для любого объявления идентификатора / константы формируется и помещается на верхушку стека элемент, содержащий

o  номер блока;

o  атрибуты;

o  указатель на элемент, ранее бывший верхушкой стека;

–  - в точке выхода из блока / функции:

o  просматривается все строки таблицы;

o  если верхний элемент стека содержит номер блока больший или равный номеру покидаемого блока, то он удаляется из стека;


Учет пространств имен:

int x;

Struct {

int x;

} z;

y=x+z.x

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

–  для каждой точки входа в структуру / объединение / класс …формируется и помещается на верхушку стека элемент, содержащий:

o  номер блока;

o  указатель на новую пустую таблицу имен структуры / объединения / класса … (пространство имен);

o  указатель на элемент, ранее бывший верхушкой стека;

–  с этого момента лексический анализатор работает с двумя таблицами – главной (проверка ключевых слов) и новой (пополнение);

–  в точке выхода из структуры / объединения / класса восстанавливается работа лексического анализатора только с главной таблицей.

–  при обработке слов вида:

o  .

o  ->

o  ::

–  лексический анализатор переключается на поиск во вложенных пространствах имен
int foo( char[] str, int size ){

Прямоугольная выноска: Нет в УПint first=0,middle,last;

                   char wanted;

                   last=size-1;

                   …

}

Последовательнаяорганизациятаблиц идентификаторов

Похожие материалы

Информация о работе