我已经使用Flex和Yacc制作了一种简单的编程语言和编译器,我希望能够转换我的代码以在浏览器中使用。
我已经看过像Jison这样的项目,但是我认为这对我不起作用,因为那时我必须维护两个不同的代码库。
环顾四周,我很确定将编译器编译为WebAssembly并在浏览器中运行将是解决方案。唯一的问题是我不确定该怎么做。将词法分析器和解析器链接在一起时传递的Flex库(-lfl)是否也可以与我的编译器一起进行编译?
我真的没有WASM的经验,我对Flex / Yacc也很陌生,因此可能有一些非常明显的解决方案,但我似乎什么也没找到。
如果您想看一下我的代码:https://github.com/inobulles/aqua-compiler/tree/master/langs/amber
非常感谢您的时间!
-lfl
中没有太多用处;您不应该在任何实际应用中使用它。
如果未在弹性文件中定义yywrap()
,则添加
%option noyywrap
您的flex序言,因此flex不会在生成的代码中引用yywrap
。如果您确实定义了yywrap
,那么您已经不需要-lfl
,但是您仍然可以考虑%option noyywrap
,因此您不需要定义。
我不知道WASM如何处理stdio.h
函数;据推测,您的意图是使用其他机制将文本输入到词法分析器中,但是生成的代码仍将包含对标准库I / O函数的引用(Bison生成的代码也是如此)。