Mercurial > hg > Papers > 2019 > mitsuki-master
view paper/generate_code.tex @ 6:7d9441dd343e
update
author | mir3636 |
---|---|
date | Mon, 21 Jan 2019 18:34:24 +0900 |
parents | 9100f20b8797 |
children | ddf62b739703 |
line wrap: on
line source
\chapter{コードの自動生成} \section{stub Code Gear の生成} stub Code Gear は Code Gear 間の継続に挟まれる Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。 Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。 stub Code Gear を 自動生成する generate stub を Perl スクリプトで作成することによって Code Gear の記述量を約半分にすることができる。 stub を生成するために generate\_stub は指定された cbc ファイルの \_\_code型である Code Gear を取得し、引数から必要な Data Gear を選択する。 generate\_stub は引数と interface を照らし合わせ、Gearef または GearImpl を決定する。 また、この時既に stub Code Gear が記述されている Code Gear は無視される。 cbc ファイルから、生成した stub Code Gear を加えて stub を加えたコードに変換を行う。(Code\ref{stack_c}) \lstinputlisting[label=stack_c, caption=stub Code Gear を加えたコード]{./src/ex_stub} \section{Context の生成} generate\_context は Context.h、Interface.cbc、generate\_stub で生成されたImpl.cbc を見て Context を生成する Perl スクリプトである。 \begin{figure}[ht] \begin{center} \includegraphics[width=70mm]{./fig/generate_context3.pdf} \end{center} \caption{generate\_context による Context の生成} \label{fig:gc} \end{figure} Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。 generate\_context は context.h を読み宣言されている Data Gear を取得する。 Code Gear の取得は指定された generate\_stub で生成されたコードから \_\_code 型を見て行う。 取得した Code Gear、Data Gear の enum の定義は enumCode.h、enumData.h に生成される。 Code/Data Gear の名前とポインタの対応は generate\_context によって生成される enum Code、enum Data を指定することで接続を行う。 また、generate context は取得した Code/Data Gear から initContext の生成も行う。 Context には Allocation 等で生成した Data Gear へのポインタが格納されている。 Code Gear は Context を通して Data Gear へアクセスする。 Data Gear の Allocation を行うコードは dataGearInit.cに生成される。