Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

自作言語をrustでwasmにコンパイルする

karamaru
February 01, 2023
34

 自作言語をrustでwasmにコンパイルする

自作言語をparseして、wasmの四則演算と関数exportにマッピングするまでを行いました。

karamaru

February 01, 2023
Tweet

Transcript

  1. ࣈ۟ղੳ Lexser ·ͣ͸ࣈ۟ղੳʂ ϓϩάϥϜΛτʔΫφΠζͯ͠ɺ ಠࣗݴޠΛಡΈਐΊΔࡍͷ࠷খ୯Ґ(τʔΫϯ)ͷࣝผ͢Δɻ fn … ؔ਺એݴ add …

    ࣝผࢠ ( … ࠨׅހ a … ࣝผࢠ , … ΧϯϚ ͱ͔ɺ ه߸΍਺஋,ࣝผࢠͳͲͷίʔυͷ࠷খ୯ҐΛཧղ͠·͢
  2. WasmͷηΫγϣϯ: Function ɾWasmϞδϡʔϧ಺Ͱ࢖༻͞ΕΔ֤ؔ਺ͷએݴ ɾؔ਺ͱγάωνϟΛඥ͚ͮΔ 03: ηΫγϣϯ൪߸ 02: ηΫγϣϯbodyͷbyte਺ 01: ؔ਺ͷ૯਺

    00: index0ͷؔ਺͸ɺindex0ͷγάωνϟʹରԠ͢Δ https://webassembly.github.io/spec/core/binary/modules.html#function-section
  3. WasmͷηΫγϣϯ: Export ϗετ؀ڥʹఏڙ͢ΔશͯͷΦϒδΣΫτͷએݴ 07: ηΫγϣϯ൪߸ 07: ηΫγϣϯbodyͷbyte਺ 01: export͢Δݸ਺ 03:

    ࣝผࢠͷbyte਺ 61 64 64: ࣝผ໊add 00: exportछผ(ؔ਺) 00: exportͷindex http://webassembly.github.io/spec/core/binary/modules.html#export-section
  4. WasmͷηΫγϣϯ: Code ؔ਺ͷ಺༰Λఆٛ͢Δ (΍ͬͱຊ୊ײ) 0a: ηΫγϣϯ൪߸ 09: ηΫγϣϯbodyͷbyte਺ 01: ؔ਺ͷݸ਺

    07: ؔ਺(index:0)ͷbyte਺ 00: ؔ਺಺ͷม਺એݴ਺ 20: GetLocal 00: Ҿ਺1൪໨ 20: GetLocal 01: Ҿ਺2൪໨ 6a: plus 0b: end https://webassembly.github.io/spec/core/binary/modules.html#binary-codesec https://webassembly.github.io/spec/core/binary/instructions.html