2016-10-09 3 views
1

私は、LuaからES3のtranspiler(LuaをクロスブラウザのJavaScriptに変換するツール)を再構築しています。ECMAScript3にLuaラベルをトランスリングするソリューションはありますか?

goto label; 

:: label :: 
print "skipped"; 

私の最初のアイデアは、例えば部品、内の文の各体を分離することだった:私はこのtranspilerに私の考えを過ごすために開始する前に、それは例えばECMAScriptの3にLuaのラベルを変換することができます場合は、私が聞きたいですラベルがある場合は、次の文全体を次の部分全体として格納する必要があります。

some body 
label (& statements) 
other label (& statements) 

など。本文(またはプログラムチャンク)を持つすべてのステートメントは、このような部分のリストを取得します。ラベルの各部分は、その名前がどこかに格納されるべきである(例えば、それ自身の部分オブジェクト、プロパティの中に)。

各部分は機能であるか、または他の部分と関連して順次実行される機能をそれ自身に格納します。

gotoステートメントは、そのステートメントを実行し、現在のステートメントの実行を停止するES returnステートメントを呼び出すために、特定のラベルをルックアップします。

このようにボディステートメントを分離することの限界は、さまざまな部分で定義されている変数と関数にアクセスすることです。これについてのアイデアや回答はありますか?それらをECMAScriptに変換する場合、安定したラベルを持つことは不可能ですか?

答えて

1

私は非常にあなたの考えに従うことはできませんが、誰かがすでに問題を解決したようだ:JavaScriptは、ダミーwhileループと組み合わせて、continue Sを、ラベルされた関数内gotoをエミュレート許可することを可能にします。 (そして、私が何かを忘れていない限り、それはあなたがルアに必要なものでなければなりません。)

ECMAScript仕様の72-74ページを比較してください。 2000年3月24日の#3では、ES3で動作するはずであることがわかります。 this answer to a question about goto in JS。いつものように、ネット上で参照されているURLは死んでいますが、あなたは素晴らしいインターネットアーカイブでsummerofgoto.com [archived]を得ることができます。 (発信GitHubのリンクも死んでいるが、スクリプトもアーカイブされます:parseScripts.jsgoto.min.jsまたはgoto.js

私は、幸運物事が動作して取得するのに十分です願っています!

+0

ラベルを宣言する前にgotoを実行することには1つの制限がありますが、これは私に役立ちます、ありがとう! – Hydro

関連する問題