Функция parse — различия между версиями
Admin (обсуждение | вклад) (Новая страница: «Функция <strong>parse(FILE *f, char *path, void data(Dat *), void func(Fn *))</strong> - функция, реализованная в Си-интерф…») |
Admin (обсуждение | вклад) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 1: | Строка 1: | ||
Функция <strong>parse(FILE *f, char *path, void data(Dat *), void func(Fn *))</strong> - функция, реализованная в [[ Си-интерфейс | Си интерфейсе]] [[QBE]]. Располагается в файле <code>parse.c</code> и "подключается" в <code>[[ Си-интерфейс | all.h]]</code>. | Функция <strong>parse(FILE *f, char *path, void data(Dat *), void func(Fn *))</strong> - функция, реализованная в [[ Си-интерфейс | Си интерфейсе]] [[QBE]]. Располагается в файле <code>parse.c</code> и "подключается" в <code>[[ Си-интерфейс | all.h]]</code>. | ||
+ | |||
+ | == Аргументы функции == | ||
+ | |||
+ | *<code>FILE *f</code> - хендл файла, откуда происходит чтение программы. | ||
+ | *<code>char *path</code> - путь к этому файлу (используется только для сообщений об ошибках, так что неважен). | ||
+ | *<code>void data(Dat *)</code> - функция, вызываемая для каждого распарсенного куска данных. | ||
+ | *<code>void func(Fn *)</code> - функция, вызываемая для каждой распарсенной функции. | ||
== Назначение == | == Назначение == | ||
Строка 44: | Строка 51: | ||
return; | return; | ||
} | } | ||
− | + | } | |
} | } |
Текущая версия на 15:20, 6 апреля 2018
Функция 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; } } }