Функция 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; } } }