编程语言语法分析器(将Perl脚本转换为Lua)

时间:2012-07-16 13:44:21

标签: perl lua

是否有一个通用词法分析器可用于将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

3 个答案:

答案 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代码,但是如果你不能,那将会让我大吃一惊)。