Функция parse
Функция parse(FILE *f, char *path, void data(Dat *), void func(Fn *)) - функция, реализованная в Си интерфейсе QBE. Располагается в файле parse.c и "подключается" в all.h.
Аргументы функции[править]
FILE *f- хендл файла, откуда происходит чтение программы.char *path- путь к этому файлу (используется только для сообщений об ошибках, так что неважен).void data(Dat *)- функция, вызываемая для каждого распарсенного куска данных.void func(Fn *)- функция, вызываемая для каждой распарсенной функции.
Назначение[править]
parse осуществляет парсинг QBE файла во внутреннее представление, с которым происходит взаимодействие внутри некоторой функции (внутри крутится вечный цикл со свитчами, которые еще что-то парсят). В примере считывание происходит, очевидно с stdin, работать с внутренним представлением функции предлагают в func, data не используется.
Исходный код[править]
Функция parse из parse.c
void parse(FILE *f, char *path, void data(Dat *), void func(Fn *))
{
int t, export;
lexinit();
inf = f;
inpath = path;
lnum = 1;
thead = Txxx;
ntyp = 0;
typ = vnew(0, sizeof typ[0], Pheap);
for (;;) {
export = 0;
switch (nextnl()) {
default:
err("top-level definition expected");
case Texport:
export = 1;
t = nextnl();
if (t == Tfunc) {
case Tfunc:
func(parsefn(export));
break;
}
else if (t == Tdata) {
case Tdata:
parsedat(data, export);
break;
}
else
err("export can only qualify data and function");
case Ttype:
parsetyp();
break;
case Teof:
vfree(typ);
return;
}
}
}