Функция parse — различия между версиями

Материал из Compilers Wiki
Перейти к: навигация, поиск
(Новая страница: «Функция <strong>parse(FILE *f, char *path, void data(Dat *), void func(Fn *))</strong> - функция, реализованная в Си-интерф…»)
 
Строка 44: Строка 44:
 
  return;
 
  return;
 
  }
 
  }
}
+
}
 
  }
 
  }

Версия 15:08, 6 апреля 2018

Функция parse(FILE *f, char *path, void data(Dat *), void func(Fn *)) - функция, реализованная в Си интерфейсе QBE. Располагается в файле parse.c и "подключается" в all.h.

Назначение

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;
		}
	}
}