CodeNet / Приложения / Алгоритмы / Разбор выражений. Компиляторы и интерпретаторы. / Компилятор пишется так...
Пример 2. Таблица имен.
(**************************************)
(* Процедуры для таблицы имен *)
(**************************************)
const WordLen = 32;
TabSize = 1024;
MaxKey = 12;
Type bloc = string [WordLen];
EnumTag = (Dunno, TagRecord, TagInt);
(* Ячейка таблицы имен *)
ncell = record
Pname : bloc;
Tag : EnumTag;
Ref : integer;
Fields : integer;
end;
(* Таблица имен *)
var TableOfNames : array [1..TabSize] of bloc;
TabLen : integer; (* Размер таблицы имен *)
procedure IniTab;
begin
TabLen := 0;
PutIn("procedure");
PutIn("main");
PutIn("end");
PutIn("int");
PutIn("record");
PutIn("if");
PutIn("then");
PutIn("else");
PutIn("close");
PutIn("while");
PutIn("do");
PutIn("print");
end;
(* Найти переменную с данным именем *)
int Find (Name: bloc);
var i : integer;
begin
Find := 0;
for i:=MaxKey+1 to TabLen do
if Name = TableOfNames [i].Pname;
then Find := i;
end;
(* Создать новую запись таблицы имен
с данным именем *)
procedure PutIn (Name:bloc);
begin
TabLen := TabLen +1;
With TableOfNames [TabLen] do
begin
Pname := Name;
Tag := Dunno;
end;
end;
(* Если номер записи не больше MaxKey,
то это на самом деле не имя,
а ключевое слово *)
Function KeyEntry (t:integer) : boolean;
begin
KeyEntry := (t>0) and (t
Назад |
Оглавление |
Вперед
