全4313文字
プログラミング言語「Python」の処理系は、様々な仕組みを利用して動いている。この特集では、Pythonがプログラムを実行する仕組みを解き明かしていく。
Pythonインタプリタの仕組み
Pythonインタプリタ(CPythonの処理系)がプログラムを実行する仕組みを、少し詳しく見てみましょう。
プログラムは図6の流れで実行されます。
字句解析
Pythonインタプリタははじめに、プログラムに対して字句解析(プログラムをトークンに分解する処理)を行います。例えば、「total = price*count+shipment」(合計=単価×個数+送料)というプログラムは、字句解析によって、「total」、「=」、「price」、「*」、「count」、「+」、「shipment」というトークンに分解されます(図7)。
構文解析
字句解析が終わると、Pythonインタプリタは字句解析で得られたトークンから、構文解析によって、「AST」(Abstract Syntax Tree、抽象構文木)と呼ばれるデータ構造を生成します。先ほどの「total = price*count+shipment」からは、図8のようなASTが作られます。
ここで、乗算や加算といった演算の優先順位が、ASTで表現されている点に注目してください。「price」「*」「count」を含む「部分木」(ASTの一部)は、「price」と「count」の乗算を表します。そして、「price*count」「+」「shipment」を含む部分木は、「price*count」の結果と「shipment」の加算を表します。このようにASTは、「乗算を加算よりも先に行う」といった、演算の優先順位を表現できます。
Pythonインタプリタが作るASTを見てみよう
Pythonの標準ライブラリにある「ast」モジュールを使うと、Pythonインタプリタが生成するASTを閲覧できます。どんなASTが作られるのか、astモジュールを使って見てみましょう。
コマンドプロンプト等で「python」と入力して、Pythonの「対話モード」を起動し、次のプログラムを入力してください。
>>> import ast
>>> tree = ast.parse('total = price*count+shipment')
>>> print(ast.dump(tree, indent=4))
2行目で先ほどの「total = price*count+shipment」からASTを作り、3行目でASTを表示しています。このプログラムの実行結果は図9です。
図9の結果をわかりやすくするために、階層的な図にしたものが図10です。図8のASTの図と、構造は同じです。
ここで、「Assign」は代入(=)を、「Name」は変数を、「BinOp」(Binary Operatorの略)は加算(+、Add)や乗算(*、Mult)の二項演算子を意味します。
from "プログラム" - Google ニュース https://ift.tt/h7Obqdv
via IFTTT
Bagikan Berita Ini
0 Response to "Pythonがプログラムを実行する流れ、最後に「バイトコード」が生成される - ITpro"
Post a Comment