有没有一个通用的词法分析器,可以用来将100-1000个perl脚本转换成包含API更改的lua脚本?
例如,我有一个c++程序,它使用perl作为脚本接口-它使用子按钮之类的东西
button.addEventLister(...)
结束
现在我想把我的脚本接口改为lua -我有所有这些perl脚本-我可以写一个基于regexp等的手动解析器,以获得良好的对话速率我相信-但是我更喜欢一个智能的解决方案,它将不可能在语言之间出现对话错误(不同的数据类型,语言语法关键字等)
也许是这样的?http://irony.codeplex.com/wikipage?title=expression%20grammar%20sample&referringTitle=Home
发布于 2012-07-18 00:07:10
没有现成的解决方案可以完全满足您的需求(特别是考虑到您需要的"API更改“)。
您的下一个最佳选择是找到一个可以生成Abastract语法树的perl解析器,然后可以将其转换为Lua。
当然,您也可以派生perl解析器并从中开始工作,但是使用已经构建好的Perl解析器可能会更简单,比如PPI。它将允许你在更高的层次上操纵语言。
您仍然需要通过更多的perl将PPI生成的内存中数据结构转换为Lua代码。这一部分丢失了,您必须自己编写它。
如果您正在处理100个脚本,那么可能不值得尝试这条路线,而是手动进行翻译。如果你更接近1000,我会说值得一试。
然而,我希望你有一种自动测试你的脚本的方法。否则,你会得到很多乐趣。
发布于 2012-07-16 22:01:04
我的回答很简短:No,除非您的Perl代码看起来和行为都像带有符号的C ;-)
(但是,您可以尝试通过应用加载的Regexes来辅助手动翻译,例如
s/ sub \s+ (\w+) \s* \{ /function $1/x,
s/ \} \s* elsif \s* \{ /elseif/x或
s/[@\$%]//和排序)
发布于 2012-07-17 01:10:32
首先,您必须用Lua编写与Perl运算符相同的函数。即使像加法这样简单的事情,在Perl和Lua中的表现也不同,更不用说像split和匹配操作符这样更复杂的事情了。
完成此操作后,将Perl脚本转换为Lua实际上相当容易。问题是,第一步需要几年时间才能完成。
一个更好的选择是在你的Lua进程中embed一个Perl解释器(假设Lua允许你链接到C代码,但是如果你不能,我会非常惊讶)。
https://stackoverflow.com/questions/11505685
复制相似问题