0

100〜1000のperlスクリプトをAPIの変更を含むluaスクリプトに変換するために使用できる汎用レクサーはありますか?

たとえば、スクリプトインターフェイスにperlを利用したC++プログラムがあります-サブボタンのようなものを使用します

button.addEventLister(...)

終わり

今、私はスクリプトインターフェイスをluaに変更したいと思っています-そして私はこれらすべてのperlスクリプトを持っています-正規表現などに基づいて手動パーサーを書いて、私が信じる良い会話率を得ることができます-しかし私はそれを不可能にするスマートなソリューションを好みます言語間で会話エラーが発生する(異なるデータ型、言語構文キーワードなど)

多分このようなもの? http://irony.codeplex.com/wikipage?title=expression%20grammar%20sample&referringTitle=Home

4

3 に答える 3

1

必要なことを正確に実行する既製のソリューションはありません(特に、必要な「APIの変更」を考慮に入れて)。

次善の策は、抽象構文木を生成できるperlパーサーを見つけることです。これをLuaに変換できます。

もちろん、perlパーサーをフォークしてそこから作業することもできますが、 PPIのような既製のPerlパーサーを使用する方がおそらく簡単でしょう。それはあなたがより高いレベルで言語を操作することを可能にするでしょう。

さらに、perlを介して、PPIによって生成されたメモリ内データ構造をLuaコードに変換する必要があります。その部分が欠落しているので、自分でプログラムする必要があります。

100個のスクリプトを実行している場合は、このルートを実行して、代わりに手動で変換を実行することはおそらく価値がありません。あなたが1000にもっと近いなら、私はそれが一撃の価値があると言うでしょう。

ただし、スクリプトを自動的にテストする方法があることを願っています。そうでなければ、あなたはたくさんの楽しみのためにいます。

于 2012-07-17T16:07:10.057 に答える
0

私の答えは短いです:いいえ、あなたのPerlコードがシジルでCのように見えて振る舞わない限り;-)

(ただし、次のような正規表現を大量に適用することで、手動翻訳を支援することができます。

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

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

s/[@\$%]//と並べ替え)

于 2012-07-16T14:01:04.353 に答える
0

まず、Perlの演算子と同じことを行う関数をLuaで作成する必要があります。加算のような単純なものでさえ、PerlとLuaでは動作が異なります。もちろんsplit、一致演算子などのより複雑なものもあります。

それが済んだら、PerlスクリプトをLuaに変換するのは実際にはかなり簡単です。問題は、最初のステップが完了するまでに何年もかかることです。

より良いオプションは、LuaプロセスにPerlインタープリターを埋め込むことです(LuaでCコードにリンクできると仮定しますが、できなかった場合は非常に驚きます)。

于 2012-07-16T17:10:31.627 に答える