首页 > 解决方案 > 转换 flex/bison 解析器以在浏览器中使用

问题描述

我使用 Flex 和 Yacc 制作了一种简单的编程语言和编译器,并且我希望能够转换我的代码以在浏览器中使用。

我已经看过像 Jison 这样的项目,但我认为这对我不起作用,因为我必须维护两个不同的代码库。

环顾四周,我很确定将我的编译器编译为 WebAssembly 并在浏览器中运行将是解决方案。唯一的问题是我不知道该怎么做。我在将词法分析器和解析器链接在一起时传递的 Flex 库 (-lfl) 是否也可以与我的编译器一起编译?

我真的没有使用 WASM 的经验,而且我对 Flex/Yacc 也很陌生,所以可能有一些非常明显的解决方案,但我似乎找不到任何东西。

如果你想看看我的代码:https ://github.com/inobulles/aqua-compiler/tree/master/langs/amber

非常感谢您的时间!

标签: javascriptcflex-lexeryacc

解决方案


没有什么用处-lfl;您在任何实际应用程序中都不需要它。

如果你没有yywrap()在你的 flex 文件中定义,那么添加

%option noyywrap

到您的 flex 序言,以便 flex 不会将引用yywrap放入生成的代码中。如果你定义yywrap了,那么你已经不需要了-lfl,但你仍然可以考虑%option noyywrap这样你就不需要定义了。

我不知道 WASM 是如何处理stdio.h函数的;据推测,您的意图是使用一些其他机制将文本输入您的词法分析器,但生成的代码仍将包含对标准库 I/O 函数的引用(就像 Bison 生成的代码一样)。


推荐阅读