Javascript 转换flex/bison解析器以在浏览器中使用
我已经使用Flex和Yacc制作了一个简单的编程语言和编译器,我希望能够将代码转换为在浏览器中使用 我已经看过像Jison这样的项目,但我不认为这对我有用,因为我需要维护两个不同的代码库 再看一看,我确信将我的编译器编译成WebAssembly并在浏览器中运行将是解决方案。唯一的问题是我不知道该怎么做。在将lexer和解析器链接在一起时传递的Flex库(-lfl)也可以与编译器一起编译吗 我真的没有WASM的经验,而且我对Flex/Yacc也很陌生,所以可能有一些非常明显的解决方案,但我似乎找不到任何东西 如果您想查看我的代码:Javascript 转换flex/bison解析器以在浏览器中使用,javascript,c,flex-lexer,yacc,Javascript,C,Flex Lexer,Yacc,我已经使用Flex和Yacc制作了一个简单的编程语言和编译器,我希望能够将代码转换为在浏览器中使用 我已经看过像Jison这样的项目,但我不认为这对我有用,因为我需要维护两个不同的代码库 再看一看,我确信将我的编译器编译成WebAssembly并在浏览器中运行将是解决方案。唯一的问题是我不知道该怎么做。在将lexer和解析器链接在一起时传递的Flex库(-lfl)也可以与编译器一起编译吗 我真的没有WASM的经验,而且我对Flex/Yacc也很陌生,所以可能有一些非常明显的解决方案,但我似乎找不
非常感谢您抽出时间 在
-lfl
中没有什么用处;在任何实际应用中都不需要它
如果没有在flex文件中定义yywrap()
,则添加
%option noyywrap
到flex序言,这样flex就不会在生成的代码中引用yywrap
。如果您确实定义了yywrap
,那么您已经不需要-lfl
,但是您仍然可以考虑%选项noyywrap
,这样您就不需要该定义了
我不知道WASM如何处理
stdio.h
函数;您的意图可能是使用其他机制将文本输入lexer,但生成的代码仍将包含对标准库I/O函数的引用(正如Bison生成的代码一样)。哦,好的,非常感谢。虽然我还没有太多地使用WASM,但我认为大多数标准函数都是受支持的。您可能会想使用Emscripten:Emscripten不是WASM的编译器吗?我以为您想将编译器移植到浏览器,是不是错了?一点也不,但我不确定我是否理解Emscripten是什么。它不是为wasm编译的编译器吗?Emscripten将C/C++代码编译成WebAssembly,您可以在浏览器中运行。