javascript - 转换 flex/bison 解析器以在浏览器中使用
问题描述
我使用 Flex 和 Yacc 制作了一种简单的编程语言和编译器,并且我希望能够转换我的代码以在浏览器中使用。
我已经看过像 Jison 这样的项目,但我认为这对我不起作用,因为我必须维护两个不同的代码库。
环顾四周,我很确定将我的编译器编译为 WebAssembly 并在浏览器中运行将是解决方案。唯一的问题是我不知道该怎么做。我在将词法分析器和解析器链接在一起时传递的 Flex 库 (-lfl) 是否也可以与我的编译器一起编译?
我真的没有使用 WASM 的经验,而且我对 Flex/Yacc 也很陌生,所以可能有一些非常明显的解决方案,但我似乎找不到任何东西。
如果你想看看我的代码:https ://github.com/inobulles/aqua-compiler/tree/master/langs/amber
非常感谢您的时间!
解决方案
没有什么用处-lfl
;您在任何实际应用程序中都不需要它。
如果你没有yywrap()
在你的 flex 文件中定义,那么添加
%option noyywrap
到您的 flex 序言,以便 flex 不会将引用yywrap
放入生成的代码中。如果你定义yywrap
了,那么你已经不需要了-lfl
,但你仍然可以考虑%option noyywrap
这样你就不需要定义了。
我不知道 WASM 是如何处理stdio.h
函数的;据推测,您的意图是使用一些其他机制将文本输入您的词法分析器,但生成的代码仍将包含对标准库 I/O 函数的引用(就像 Bison 生成的代码一样)。
推荐阅读
- c# - 为什么 spawn 对象不在平面上工作?对象从平面区域生成。在地形上它正在工作
- node.js - 如何从node.js(电子)将大文件上传到firebase存储?
- c# - AzureKeyVault 在本地 ASP.NET 4.7.1 WebForms 应用程序中不起作用
- html - 带有修改后 alpha 的渐变不会填满整个页面
- angular - 数字通过从 Angular 客户端到 NestJS 服务器的 Http 请求转换为字符串
- java-8 - 使用流有选择地修改列表项
- swift - FSCalendar:从头开始查看标题?
- c - 使用 LLVMBuildNeg 时出现致命的 llvm 错误
- python - AWS IoT Core:能够从设备连接到 AWS,但已发布的消息未显示在控制台中并且订阅主题无限期挂起
- python - 如何为 pytest 创建 BaseTest 类