JavaScriptのキーワードで遊ぶ

画像

この記事では、任意のキーワードを使用してJavaScriptのサブセットを作成できるモジュールについて説明しています。 制限のない楽しみのために厳密に。

rucckuu.jsについての記事をきっかけに私はうらやましくなり、私の作成物、つまり JavaScriptの任意のサブセットを作成するための小さなエコシステムを発表することにしました。 一部のキーワードがアプリケーションのコンテキストにあまり適していないという考えや、javascriptが冗長すぎる(何でも起こり得る)という考えに長い間忍び寄っていた場合。 気さくに同僚をからかったり、職場で何をしているのかを母親に説明したい場合は、猫を歓迎します。







したがって、トランスピレーションのタスク自体は非常に簡単です-見つけて交換する。 現代のフロントエンドの世界におけるまさにトランスピレーションは、新しいテクノロジーと仕様の統合に不可欠な部分です。誰もがbabelまたはtraceur-compilerが何であるかを知っています 。 テクノロジースタックの超高速開発は1つのボトルに苦痛と奇跡をもたらします。なぜなら、それは可能性から息をのむようなものであり、一部の人々はパフォーマンスの可能なバリエーションの数をあきらめます。 彼らがお気に入りのキーボードに直接降りる、または単に彼らの下に落ちた人にとってはとても幸運でした。 このような勇敢なヒーローにとって、この記事は学術的な関心がほとんどないかもしれないので、私はあなたに警告します。 はい







トランスピレーションに戻ると、文字列の値を置き換えるタスクは非常に簡単です。 ただし、コンテキストに統合された単語を置き換えるタスクは、すでにいくらか興味深いものです。 さまざまな文法のパーサーを作成するための理論的基盤の研究と作成に費やされた数千人分の工数に影響を与えることなく、最も重要なことに直行しましょう。 プログラミング言語の文法は、特定のキーワードの使用のコンテキストを非常に明確に定義します。この使用は、1つの所定の方法でのみ解釈できます。 このような決定論はプログラムの本質に基づいています。同じ初期条件で同じプログラムを実行した結果、2つの異なる結果を見たいと思う人はいないでしょう。 これに基づいて、どのプログラムも非常に具体的な構文ツリーとして解釈できます。 したがって、プログラミング言語の場合は、構文上のモンスターを抑制し、任意の単語を使用するためのコンテキストの明確な定義を取得するだけで十分です。 コンテキストが手元にあれば、文字通り何でもできます。







ECMAScriptパーサーであるesprimaについて多くの人が聞いたことがあると思います。 少し少ない人がジソンについて知っています 。 最初のものがなければ、jsxはすぐには表示されず、2番目のものはCoffeeScriptにその外観を負っています。両方のツールは非常に強力ですが、esprimaはまさに私たちがやりたいことを専門としています-プログラムの外観を変更します。







エントリーの平均は終わりました。







MeowScriptを作成する





 VAR meow LET meoww CONST meOw FOR meowwr ...
      
      







 meowScript = new translator({ to: 'meowscript' }); let output = meowScript.parse(` var kitty = new Kitty(); if (kitty.isHungry()) {kitty.feed()} `, { from: 'javascript', to: 'meowscript' }); console.log(output); // stdout: // meow kitty = MEW Kitty(); meeow (kitty.isHungry()) {kitty.feed()}
      
      





一般に、それですべてです。

モジュールの範囲は想像力によって制限されます。 ボンネットの下には単なるエスプリマがありますが、このバージョンには、任意のキーワードセットをサポートするために(手動で、そして愛を込めて)パッチが適用される点を除き、既に説明しました。 ハードコードされたすべての使用を手動で見つけて、それらを正しい参照に置き換えるために必要な作業量については言及していません。 その後、ローダーを追加するだけで、実行時にキーワードのセットの任意の置換をサポートすることができました。 作業は非常に簡単ですが、骨の折れる作業です。

さらに、キットには、最もプリミティブな.lex



パーサーを備えたプリミティブキーワードプロバイダーが含まれています。 すべてのモジュールはパブリックドメインにあり、誰でもキックできます。









実際、このツールキットを使用すると、数分以内にJavaScriptの任意のサブセットを作成できます。 唯一の制限は、モジュールが標準ノードまたはブラウザインターフェイスを見つけられないことです。 悲しいかな、document.body.getBoundingClientRect、紳士。 インターフェイスのトランスコンパイルのサポートを追加することもそれほど難しくはありません。識別子のルールを決定し、それらに従って置換を実行するだけです。







最後に、投稿ヘッダーの写真は偶然ではありません。your-scriptの使用例として、ロシア語のjavascriptのサブセットであるredscriptを書きました。 さて、このパーサーを使用した結果:







 var  = 'var';
      
      





次のように正しく変換されます:







   = 'var';
      
      





モジュール自体はnpmでうなります。 シードの場合、トランスコンパイルされたプログラムの例:







  (, , ) {   = 0;   = {0: "", 1: ""};   =  () { }  (! > 10) {  (  = 0;  < 10; ++) {  (j) {  0:  = "zero"; ;  1:  = "one"; ; }   =  > 5 ? " 5" : " 5"; } }  {   = 0;  {  ( < 10) {  ( ==  ||  > 5) { a[] =  +  * 12; }  = ( << 2) & 4; ++; }  { --; }  ( > 0) }  (e) { alert(": " + e.message); }  { (a, ); } } }
      
      





広告の目的のために、これはあなたができるようにする唯一のモジュールです







  () { (); }
      
      





一般的に、キーワードの代替案を思い付くのは非常に興味深いことです。 クールなものを思いついたら、コメントを残してください。 良い週末を過ごして、あなたがすることから多くの、多くの、無限に多くの喜びを:)








All Articles