是否有一个通用词法分析器可用于将100-1000个perl脚本转换为包含API更改的lua脚本?
E.g。我有一个使用perl进行脚本界面的c ++程序 - 它使用类似的东西 子按钮
button.addEventLister(...)
端
现在我想将我的脚本界面更改为lua - 我拥有所有这些perl脚本 - 我可以编写一个基于regexp等的手动解析器来获得我相信的良好会话率 - 但是我更喜欢智能解决方案使语言之间不可能有对话错误(不同的数据类型,语言语法关键字等)
也许是这样的? http://irony.codeplex.com/wikipage?title=expression%20grammar%20sample&referringTitle=Home
答案 0 :(得分:1)
没有现成的解决方案可以满足您的需求(特别是考虑到您需要的“API更改”)。
您的下一个最佳选择是找到一个可以生成Abastract语法树的perl解析器,然后您可以将其转换为Lua。
你当然可以分叉perl解析器并从那里开始工作,但使用已经制作的Perl解析器可能更简单,比如PPI。它允许你在更高的层次上操纵语言。
您仍然需要通过更多perl将PPI生成的内存数据结构转换为Lua代码。那件作品遗失了,你必须自己编程。
如果你正在做100个脚本,那么可能不值得尝试走这条路线,而是手动进行翻译。如果你更接近1000,我会说它值得一试。
我希望你有办法自动测试你的脚本。否则,你会有很多乐趣。
答案 1 :(得分:0)
我的答案很简短:否,除非您的Perl代码外观和行为类似于C with sigils; - )
(但您可以尝试通过应用
等正则表达式来加载手动翻译 s/ sub \s+ (\w+) \s* \{ /function $1/x
,
s/ \} \s* elsif \s* \{ /elseif/x
或
s/[@\$%]//
和排序)
答案 2 :(得分:0)
首先,你必须在Lua中编写与Perl的运算符完全相同的函数。即使像Perl这样简单的事情在Perl和Lua中也有不同的表现,更不用说split
和匹配运算符等更复杂的事情。
完成后,将Perl脚本转换为Lua实际上相当容易。问题是第一步需要几年才能完成。
更好的选择是在你的Lua进程中embed一个Perl解释器(假设Lua允许你链接到C代码,但是如果你不能,那将会让我大吃一惊)。