読んだことないので先頭から。main関数はPrograms/python.cにあります。argvがwchar_t**じゃないときは前処理が行われていますがさくっと無視して本体らしいPy_Main関数に移ります。こちらはディレクトリが変わってModules/main.cにあります。Py_Main関数は500行ぐらいありますが、初めの300行ぐらいはコマンドラインの処理をしていますが無視します。コマンドライン処理が終わったぐらいのところでPy_Initialize関数(Python/pylifecycle.c)を呼び出しています。この関数(から呼ばれている_Py_InitializeEx_Private)でインタプリタやらスレッドやらオブジェクトシステムやらを初期化していますがまあ呼ばれている関数は名前の通りの動作をしているのだろうということでその先を深追いはしません。その後、コマンド指定(-c)がされているか、モジュール指定(-m)がされているか、ファイルが指定されているかによって処理が行われていますが今回は何も指定していないので、ファイルオープンなしのままrun_fileが呼ばれることになります。0;}fpはstdinです。†PyRun_AnyFileExFlags。入力がインタラクティブの時はInteractiveLoopに入って期待通りです。flags);}PyRun_InteractiveLoopFlagsに進みます。エラー処理とかを省くと以下のような感じ。err;}PyRun_InteractiveOneObjectと、シェルに入力した式が実行される雰囲気が漂います。長いのでざっくり必要な部分だけ残すと以下のような感じ。0;}入力からASTを作り、実行しています。PyParser_ASTFromFileObjectはpythonrun.cの下の方にあります。mod;}run_mod。v;}というわけで、教科書のように以下の順番で処理が行われているようです。(Python/ceval.c)スクリプト解析は長くなるので別ページで書きます。ここまでの感想、ってほどでもないですが、慣れてないせいかRubyに比べてどこに関数が書かれているかわかりにくくgrepで探して進んでいます。