Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
Goで始める言語処理系実装入門
株式会社 虎の穴 開発室
October 30, 2019
Technology
0
110
Goで始める言語処理系実装入門
【とらのあな主催】オタクが最新技術を追うライトニングトークイベント9回目 in渋谷で発表した資料です。
株式会社 虎の穴 開発室
October 30, 2019
Tweet
Share
More Decks by 株式会社 虎の穴 開発室
See All by 株式会社 虎の穴 開発室
toranoana
1
510
toranoana
1
460
toranoana
0
120
toranoana
0
120
toranoana
0
140
toranoana
0
120
toranoana
0
130
toranoana
0
110
toranoana
0
120
Other Decks in Technology
See All in Technology
hecateball
1
12k
am7cinnamon
2
2.7k
layerx
1
820
natsusan
0
170
saoritakita
0
350
kenya888
1
130
line_developers
PRO
0
150
yosuke_furukawa
PRO
14
5.2k
kanaugust
PRO
0
160
soachr
1
150
yuyaabo
0
260
ama_ch
0
3.5k
Featured
See All Featured
myddelton
109
11k
skipperchong
7
670
swwweet
206
6.8k
orderedlist
PRO
329
35k
jeffersonlam
328
15k
aarron
258
36k
notwaldorf
13
1.5k
philnash
8
490
cherdarchuk
71
260k
lara
172
9.5k
vanstee
116
4.8k
jnunemaker
PRO
40
4.5k
Transcript
Goで始める 言語処理系実装入門 ΦλΫ͕࠷৽ٕज़Λ͏ϥΠτχϯάτʔΫΠϕϯτ גࣜձࣾދͷ݀ ։ൃࣨ ্ా ণ
2 上田昌寛 (Masahiro Ueda) • 2017年5月虎の穴入社 • 前職Androidアプリ, 組み込みも少し •
KEEPER,とらのあなクラフトの運用/開発 • たまにVTuber見てます • 最近好きなアニメ まちカドまぞく
今回話すこと 1. はじめに 2. Schemeッポイ処理系 3. Schemeとは 4. インタプリタの基本的な流れ 5.
Goで実装 6. まとめ 3
はじめに 「Go言語でつくるインタプリタ」という本を読 んでみた。 4 https://www.amazon.co.jp/dp/4873118220 処理系の実装に興味が湧く
はじめに せっかくなので、 「自分でも作ってみたい!!」 5 比較的簡単なものからチャレンジ
Schemeッポイ処理系 6 • Scheme(スキーム)は言語仕様がシンプル! • S式とよばれる構文で、他の言語の比べて解析がや さしいのも特徴(※S式については後述) • 言語処理系をはじめて実装する入門言語としてもよ く取り上げられる
Schemeとは(S式とは) 7 • S式とは Lisp系の言語で採用されている構文。 以下のような再帰データ構造になっている。 例) 入力:(+ 5 (*
7 4)) 出力:33 + 5 * 7 4 car部 cdr部 セル 「+」や「*」はシンボルと呼ばれる。S式のSはSymbolの頭文字
Schemeとは(特徴) 8 例)算数 or 他の言語 5 + 7 * 4
計算する順序を全体の式から推測す る必要がある。 (5 + 7) * 4 ? 5 + (7 * 4) ? 式の評価の優先順位がつけやすい 例)Schemeの場合 (+ 5 (* 7 4)) そもそも括弧で分けてあるので、優 先順位がわかりやすい
インタプリタの基本的な流れ 9 字句解析 構文解析 評価 結果出力 (+ 5 (* 7
4)) ( + 5 4 ) ) 7 * (
インタプリタの基本的な流れ 10 字句解析 構文解析 評価 結果出力 ( + 5 4
) ) 7 * ( + 5 * 7 4
インタプリタの基本的な流れ 11 字句解析 構文解析 評価 結果出力 + 5 28 +
5 * 7 4 33
インタプリタの基本的な流れ 12 字句解析 構文解析 評価 結果出力 33
Goで実装(字句解析) 13 S式の基本構成となる ワードを分解する シンボルとなる各文字列を 分解する。 ⇛ 数値、文字、演算子
Goで実装(構文解析) 14 Cellの構造体を作る Car部に入るデータの構造体 数値(整数のみ), 文字列
Goで実装(構文解析) 15 Parseメソッドは再帰呼び出しされる トークン毎に合致したデータ生 成、ツリー構造を作る
Goで実装(評価) 16 car部が命令(+演算子など) cdrの中に更に評価すべきリストが あれば先に評価する
Goで実装(評価) 17 car部の数値を足し合わせていく cdrに次の要素(Cell)があれば移動 する リストの終端に到達したら処理を終了
実演 18
まとめ • 処理系の考え方や流れを説明 • Schemeだと構文解析しやすい (ただし括弧だらけが嫌いな人には向かないかも?) • S式のリストをGoのスライスのほうが楽そう • (今後)Lambda式の実装やローカル変数の実装
19