0

是否有通用词法分析器可用于将 100-1000 个 perl 脚本转换为包含 API 更改的 lua 脚本?

例如,我有一个使用 perl 编写脚本界面的 c++ 程序——它使用子按钮之类的东西

按钮.addEventLister(...)

结尾

现在我想将我的脚本界面更改为 lua - 我拥有所有这些 perl 脚本 - 我可以编写一个基于正则表达式等的手动解析器,以获得良好的对话率,我相信 - 但是我更喜欢一个智能的解决方案,这将使它成为不可能在语言之间出现对话错误(不同的数据类型、语言语法关键字等)

也许是这样的? http://irony.codeplex.com/wikipage?title=expression%20grammar%20sample&referringTitle=Home

4

3 回答 3

1

没有现成的解决方案可以完全满足您的需求(尤其是考虑到您需要的“API 更改”)。

您的下一个最佳选择是找到一个可以生成抽象语法树的 perl 解析器,然后您可以将其转换为 Lua。

您当然可以分叉 perl 解析器并从那里开始工作,但使用已经制作的 Perl 解析器可能会更简单,例如PPI。它将允许您在更高级别上操作语言。

您仍然需要通过更多 perl 将 PPI 生成的内存数据结构转换为 Lua 代码。那一块不见了,你必须自己编程。

如果您正在编写 100 个脚本,则可能不值得尝试走这条路,而是手动进行翻译。如果你更接近1000,我会说值得一试。

不过,我希望你有办法自动测试你的脚本。否则,您将获得很多乐趣。

于 2012-07-17T16:07:10.057 回答
0

首先,您必须在 Lua 中编写与 Perl 的操作符做同样事情的函数。即使像加法这样简单的事情在 Perl 和 Lua 中的行为也不同,更不用说更复杂split的事情,比如匹配运算符。

一旦你完成了这些,实际上将你的 Perl 脚本翻译成 Lua 就相当容易了。问题是第一步需要你数年才能完成。

更好的选择是在你的 Lua 进程中嵌入一个 Perl 解释器(假设 Lua 允许你链接到 C 代码,但如果你不能,我会非常惊讶)。

于 2012-07-16T17:10:31.627 回答
0

我的回答很简短:,除非你的 Perl 代码看起来和表现得像带有印记的 C ;-)

(但是,您可以尝试通过应用大量正则表达式来帮助手动翻译,例如

s/ sub \s+ (\w+) \s* \{ /function $1/x,

s/ \} \s* elsif \s* \{ /elseif/x或者

s/[@\$%]//和排序)

于 2012-07-16T14:01:04.353 回答