出力サンプル -ユーザー関数定義探索―

ある関数の内部処理です。 ast(抽象構文木)を用いて、与えられたソースコードからユーザー定義関数を探すプログラムです。

元のpythonソースコード

import ast source_code = """ def my_function(): print("Hello, world!") def another_function(): print("Goodbye, world!") """ # ソースコードを抽象構文木に変換 parsed_code = ast.parse(source_code) # 関数定義を探す for node in ast.walk(parsed_code): if isinstance(node, ast.FunctionDef): print(f"Found a function definition: {node.name}")

本体験版より出力後の、自動生成されたマークダウンソースファイル(拡張ファイル形式「.md」)

###### 関数ブロック以外 ````mermaid %%{init:{'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'black', 'primaryBorderColor':'#000000', 'lineColor':'gray', 'textColor':'#6A7FABCC', 'fontSize':'15px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis' } } }%% graph TD; classDef default fill:#FFF4DD,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:#FFC800,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:#005060,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFFFFF,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:#cde498,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:#F0B0A0,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:lightblue,stroke:#333,stroke-width:2px; linkStyle default stroke:gray,stroke-width:2px; %%データ項目 1["【処理】 3: source_code = ゛゛゛"] 2["【処理】 12: parsed_code = ast.parse(so urce_code) "] 3[/" 【繰返文開始】 15: for node in ast.walk(parse d_code): "\]:::clrPattern2 8{"16: 【条件文】"}:::clrPattern1 11["【出力】 17: print(f゛Found a function d efinition: {node.name}゛) "]:::clrPattern5 12(("条件文 終了")) 13[\" 【繰返文終了】"/]:::clrPattern2 %%ルート設定 s([START])--> 1-->2 2-->3 3-->|ループ開始|8 8-->|真(TRUE)|11 8-->|偽(FALSE)|12 11-->12 12-->13 13-->|ループ終了|e([end]) 13-->|ループ継続|3 style sg1 color:red,fill-opacity:0, stroke-opacity:0; subgraph sg1["if isinstance(node, ast.FunctionDef):"] 8 end

本体験版より出力後のマークダウンファイルのデータをもとにつくられたフローチャート図です。
フローチャート図は「%%ルート設定」に書かれたデータ項目同士のつながりで表現してます。

関数ブロック以外
%%{init:{'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'black', 'primaryBorderColor':'#000000', 'lineColor':'gray', 'textColor':'#6A7FABCC', 'fontSize':'15px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis' } } }%% graph TD; classDef default fill:#FFF4DD,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:#FFC800,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:#005060,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFFFFF,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:#cde498,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:#F0B0A0,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:lightblue,stroke:#333,stroke-width:2px; linkStyle default stroke:gray,stroke-width:2px; %%データ項目 1["【処理】 3: source_code = ゛゛゛"] 2["【処理】 12: parsed_code = ast.parse(so urce_code) "] 3[/" 【繰返文開始】 15: for node in ast.walk(parse d_code): "\]:::clrPattern2 8{"16: 【条件文】"}:::clrPattern1 11["【出力】 17: print(f゛Found a function d efinition: {node.name}゛) "]:::clrPattern5 12(("条件文 終了")) 13[\" 【繰返文終了】"/]:::clrPattern2 %%ルート設定 s([START])--> 1-->2 2-->3 3-->|ループ開始|8 8-->|真(TRUE)|11 8-->|偽(FALSE)|12 11-->12 12-->13 13-->|ループ終了|e([end]) 13-->|ループ継続|3 style sg1 color:red,fill-opacity:0, stroke-opacity:0; subgraph sg1["if isinstance(node, ast.FunctionDef):"] 8 end