Преобразование парсера flex / bison для использования в браузере - PullRequest
0 голосов
/ 31 октября 2019

Я сделал простой язык программирования и компилятор, используя Flex и Yacc, и я хочу иметь возможность конвертировать мой код для использования в браузере.

Я уже посмотрел на такие проекты, какJison, но я не думаю, что это сработало бы для меня, так как тогда мне пришлось бы поддерживать две разные кодовые базы.

Посмотрев еще немного, я почти уверен, что компиляция моего компилятора в WebAssembly и запуск его в браузере будет решением. Единственная проблема в том, что я не знаю, как это сделать. Может ли библиотека Flex, которую я передаю при соединении лексера и парсера (-lfl), также скомпилироваться вместе с моим компилятором?

У меня действительно нет опыта работы с WASM, и я довольно новичок в Flex / Yaccтоже, так что может быть какое-то очень очевидное решение, но я не могу ничего найти.

Если вы хотите взглянуть на мой код: https://github.com/inobulles/aqua-compiler/tree/master/langs/amber

Большое спасибо заваше время!

1 Ответ

0 голосов
/ 31 октября 2019

В -lfl нет ничего особенного;вам не нужно это делать ни в одном реальном приложении.

Если вы не определили yywrap() в своем гибком файле, то добавьте

%option noyywrap

к своему прологу flex, так что flexне помещает ссылку на yywrap в сгенерированный код. Если вы определите yywrap, тогда вам уже не понадобится -lfl, но вы все равно можете подумать о %option noyywrap, чтобы вам не понадобилось определение.

Я не знаю, как работает WASMимеет дело с stdio.h функциями;вероятно, вы намереваетесь использовать какой-то другой механизм для подачи текста в ваш лексер, но сгенерированный код все равно будет содержать ссылки на стандартные функции ввода / вывода библиотеки (как и код, сгенерированный Bison).

...