Правила лексики
.
Имя автомата |
Имя группы слов |
Регулярное выражение |
Действие |
Примечание |
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; |
|
Взаимодействие ЛА с другими частями транслятора
Группы слов: предопределенные (таблицы обычно не используются) / определяемые (строятся таблицы)
Атрибуты:
Все атрибуты за исключением флагов формируются и используются вне лексического анализатора.
Учет областей видимости
…
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;
…
}
Последовательнаяорганизациятаблиц идентификаторов
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.