Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pythonはどうやって動くのか / Python How to Work

kaityo256
December 13, 2022

Pythonはどうやって動くのか / Python How to Work

プログラミング基礎同演習10

kaityo256

December 13, 2022
Tweet

More Decks by kaityo256

Other Decks in Education

Transcript

  1. 5 24 整数を二つ受け取って四則演算をして返す計算機を考える 「3+4」や「8-5」という式を数字で表現 演算方法を数字で表現する 0 + 1 - 2

    × 3 ÷ 命令表(オペコード) 例えば「3+4」は「0,3,4」、「8-5」は「1,8,5」で表す 0 3 4 opcode operand 何をするか データ
  2. 6 24 0 3 4 1 8 5 メモリ メモリから命令とデータを取ってくる

    0 3 4 opcode operand 命令表を見て、どの演算 器に投げるか決める 加算器 減算器 乗算器 除算器 3 4 0 + 1 - 2 × 3 ÷ 命令表(オペコード) 0
  3. 7 24 機械語は数字の羅列 コンピュータは機械語しか理解できない 「3+4」は「0,3,4」という数字列で表現 機械語 (Machine Language) アセンブリ言語 (Assembly

    Language) 「0,3,4」が「3+4」というのは分かりづらい 機械語と一対一対応する形でわかりやすく 0 3 4 opcode operand ADD 3,4 アセンブラ ※ 実行バイナリ作成にはリンカも必要
  4. 8 24 ADD 3,4 アセンブリ言語 (Assembly Language) ではまだわかりづらい 機械語はCPUによって異なる →

    アセンブリ言語もCPUによって異なる → 人間にわかりやすい形、かつ共通な書き方をしたい プログラム言語 (Programming Language) 3+4 人間がわかりやすい形で書く ADD 3,4 アセンブリに変換 機械語に変換 0,3,4 ここの変換を行うのがコンパイラ アセンブラ
  5. 9 24 「3+4」を「ADD 3, 4」に変換したい・・・どうやって? 字句解析 "3 + 4" プログラムを意味のある最小単位(トークン)にバラす

    3 + 4 数 加算記号 数 構文解析 トークンの関係を解析する 3 + 4 3 + 4 抽象構文木(Abstract Syntax Tree, AST)
  6. 10 24 プログラム 抽象構文木 Abstract Syntax Tree, AST アセンブリ言語 Assembly

    Language 機械語 Machine Language 人間が読める 計算機が読める コンパイラ 0 3 4 opcode operand 字句解析 構文解析 意味解析 etc. "3 + 4" 3 + 4 ADD 3,4 Programming Language
  7. 11 24 プログラム 抽象構文木 Abstract Syntax Tree, AST バイトコード LOAD_CONST

    3 LOAD_CONST 4 BINARY_ADD Byte Code Programming Language 人間が読める パーサ 仮想マシン Virtual Machine, VM インタプリタ 計算機が読める 3 + 4 "3 + 4"
  8. 12 24 "3 + 4" LOAD_CONST 3 LOAD_CONST 4 BINARY_ADD

    プログラム バイトコード 仮想マシン バイトコード 仮想マシン 仮想的なコンピュータの動作をエミュレートするもの スタックマシンの形を取ることが多い 仮想マシンのためのアセンブリ言語 プログラムの中間表現
  9. 14 24 メモリとしてスタックを使う仮想マシン "3 + 4" LOAD_CONST 3 LOAD_CONST 4

    BINARY_ADD プログラム バイトコード スタックに3を積む スタックに4を積む スタックの上二つを足す スタックマシンでの動作
  10. 15 24 LOAD_CONST 3 3 push LOAD_CONST 4 4 push

    3 3 4 3 4 BINARY_ADD 3 4 pop 4 3 + = 7 7 push 7 3 4 pop
  11. 16 24 "3 + 4" LOAD_CONST 3 LOAD_CONST 4 BINARY_ADD

    プログラム (中置記法) バイトコード 逆ポーランド記法 (後置記法) 3 4 + 演算子を、被演算子の後ろに置く記法
  12. 17 24 演算子でないものはスタックに積む (二項)演算子が来たら、スタックの上から二つ取り出し、演算結果を積む 逆ポーランド記法の読み方 3 4 + 3をスタックに積む 4をスタックに積む

    + スタックから二つ取り出して加算 LOAD_CONST 3 LOAD_CONST 4 BINARY_ADD スタックマシンのバイトコードは逆ポーランド記法で記述されている
  13. 18 24 a b * c + a * b

    + c 中置記法 逆ポーランド記法 a push b push a a b ab ab c push ab c a b ab c ab+c ab+c BINARY_MULTIPLY BINARY_ADD
  14. 19 24 a b c * + a + b

    * c 中置記法 逆ポーランド記法 a push b push a a b c push a b c b c a a bc a bc a+bc a+bc BINARY_MULTIPL Y BINARY_AD D
  15. 21 24 プログラム 抽象構文木 Abstract Syntax Tree, AST バイトコード LOAD_CONST

    3 LOAD_CONST 4 BINARY_ADD Byte Code Programming Language 3 + 4 "3 + 4" ここを確認する
  16. 22 24 プログラム 抽象構文木 Abstract Syntax Tree, AST バイトコード LOAD_CONST

    3 LOAD_CONST 4 BINARY_ADD Byte Code Programming Language 3 + 4 "3 + 4" ここを確認する
  17. 23 24 スタックマシンで計算機を実装する プログラム 抽象構文木 Abstract Syntax Tree, AST バイトコード

    LOAD_CONST 3 LOAD_CONST 4 BINARY_ADD Byte Code Programming Language 仮想マシン Virtual Machine, VM 計算機が読める 3 + 4 "3 + 4" ここを作る
  18. 24 24 プログラム 抽象構文木 Abstract Syntax Tree, AST バイトコード LOAD_CONST

    3 LOAD_CONST 4 BINARY_ADD Byte Code Programming Language 仮想マシン Virtual Machine, VM 計算機が読める 3 + 4 "3 + 4" ここを作る 中置記法 逆ポーランド記法 3 + 4 3 4 + a + b x c a b c * +