2012-07-16 81 views
0

是否有一個通用詞法分析器可用於將100-1000個Perl腳本轉換爲包含API更改的lua腳本?編程語言語法分析器(將Perl腳本轉換爲Lua)

E.g.我有利用的Perl腳本接口C++程序 - 它使用的東西像 子鍵

button.addEventLister(...)

現在我想改變我的腳本接口到Lua - 我有所有這些Perl腳本 - 我可以寫一個基於正則表達式的手動解析器等,以獲得一個很好的對話速度,我相信 - 但是我更喜歡聰明的解決方案,這將使不可能有語言之間的對話錯誤(不同的數據類型,語言語法關鍵字等)

也許這樣? http://irony.codeplex.com/wikipage?title=expression%20grammar%20sample&referringTitle=Home

+13

將perl轉換成另一種語言? Bwahahahaha!沒有機會!你的節目,它永遠被困住了! – 2012-07-16 13:46:41

+0

高度懷疑它。我認爲,完美的轉換需要能夠解決暫停問題。 – 2012-07-16 13:46:59

+3

「只有perl可以解析Perl」 - 我認爲你應該手動翻譯,因爲perl允許一些非常有趣的語法/功能在其他語言中不容易重現。只要想想非常先進的Regexp引擎或像BEGIN {}塊這樣的東西... – amon 2012-07-16 13:48:18

回答

1

沒有一個現成的解決方案可以完全滿足您的需求(特別是考慮到您需要的「API更改」)。

你的下一個最好的選擇是找到一個可以生成Abastract語法樹的Perl解析器,然後你可以將它轉換成Lua。

您當然可以從perl分析器中找到並工作,但使用已經制作的Perl分析器可能會更簡單,如PPI。它將允許您在更高級別上操作語言。

您仍然需要通過更多的perl將PPI生成的內存數據結構轉換爲Lua代碼。那件遺漏了,你將不得不自己編程。

如果您正在製作100個腳本,則可能不值得嘗試使用此路線,而是手動進行翻譯。如果你更接近1000,我會說它值得一試。

但是,我希望你有辦法自動測試你的腳本。否則,你會感到很開心。

+0

這個PPI util很棒,正是我一直在尋找的東西!謝謝!翻車機實用程序http://search.cpan.org/~adamk/PPI-1.215/lib/PPI/Dumper.pm是解析的一個很好的開始 - 至少我現在有一個樹形結構並知道條件開始和結束的時間。 – Steve 2012-07-18 13:05:27

0

我的回答是短暫的:沒有,除非你的Perl代碼的外觀和行爲像使用C印記;-)

(但是你可以嘗試通過應用的正則表達式的負載,如

幫助手冊翻譯

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

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

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

+0

謝謝,但多數民衆贊成我已經建議在我的帖子「基於正則表達式的手動解析器等,以獲得良好的對話」 – Steve 2012-07-16 14:38:23

+2

建議正則表達式將Perl轉換爲不同的語言?真的嗎? – 2012-07-16 15:33:45

0

首先,你必須在Lua中編寫與Perl操作符完全相同的函數。甚至像加法一樣簡單的事情在Perl和Lua中的行爲也不同,更不用說像split和匹配運算符那樣更復雜的事情了。

一旦你完成了,將Perl腳本翻譯成Lua實際上相當容易。問題是,第一步將需要幾年才能完成。

更好的選擇是在你的Lua進程中使用Perl解釋器embed(假設Lua允許你鏈接到C代碼,但是如果你不能的話它會給我很大的驚喜)。