Сборник по задачам и примерам Assembler


       

с определенным набором таблиц, среди


Сканер работает с определенным набором таблиц, среди которых есть входные и выходные.

В общем случае сканер должен иметь две входные таблицы — таблицу лексем языка и таблицу классов литер. Таблица лексем языка содержит перечень всех лексем языка и соответствующих им целочисленных значений. Для нашей грамматики таблица может быть следующей:



































































































































































































































































































Лексема Внутренний код Лексема Внутренний код


ПРОГРАММА


1


*


23






:=


24


НАЧ БЛОК


3


)


25


КОН_БЛОК


4


НАЧ_ПРОГ


26


REAL


5


КОН_ПРОГ


27


INT_BYTE


6


/


28


DIV


7


INT_WORD


29


ЧИТАТЬ


8


INT_DWORD


30


ПИСАТЬ


9


=


31


ДЛЯ


10


MOD


32



ДЕЛАТЬ


11


[


33


(


12


]


34


ТО


13


<


35


ID


14


>


36


CHJNT


15


==


37


CH_REAL


16


>=


38




17


=<


39


>


18


до


40


1


19


ПОКА


41




20


довниз


42


+


21


ЕСЛИ


43


-


22


до


44






ПЕРЕЙТИ_НА*


Таблица классов литер используется только в процессе сканирования и предназначена для выяснения класса литеры, когда она выбирается сканером из входного потока. Лучше всего эту таблицу организовать в виде массива, элементы которого отражены на используемую кодовую таблицу (например, таблицу ASCII). Значение каждого элемента таблицы классов литер определяется классом литеры в кодовой таблице. В общем случае можно определить следующие классы литер:

  • d - цифра;


  • 1 — буква;


  • b — литеры, которые игнорируются, к ним может относится, например, пробел;


  • s1 — одиночные разделители: «.», «:», «(«, «)», «*»;


  • s2 — особые одиночные разделители: «.», «+», «-»,«:», «=», «<», «>».


  • Последние разделители отличаются тем, что они могут быть как собственно одиночными разделителями, так и входить в состав литер лексем, состоящих из нескольких литер. Например, разделитель «:» является не только одиночным, но и первой литерой двухлитерного разделителя «:=», а литеры «.», «+» и «-» являются составной частью лексемы «вещественное число».


    Содержание  Назад  Вперед