comparison paper/chapter/04-interface.tex @ 87:5051bfd6b35f

update
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Fri, 05 Feb 2021 12:48:47 +0900
parents eff53884ce6c
children 04a6b05666c1
comparison
equal deleted inserted replaced
86:eff53884ce6c 87:5051bfd6b35f
169 169
170 OutputDataGearがあるCodeGearの一覧が、 hasOutputArgsに格納される。(ソースコード68行目) 170 OutputDataGearがあるCodeGearの一覧が、 hasOutputArgsに格納される。(ソースコード68行目)
171 codeNameと同様に、CodeGearの名前がキーとなっている。 171 codeNameと同様に、CodeGearの名前がキーとなっている。
172 対応する値は、 出力する変数の名前と、その型の組のリストになっている。 172 対応する値は、 出力する変数の名前と、その型の組のリストになっている。
173 173
174 この詳細なパースの結果は、以下に例を示す用途で使われる。
175 \begin{itemize}
176 \item implementのCodeGearの名前の保管
177 \item InterfaceのCodeGearの定義と実装の対応の確認
178 \item OutputDataGearがあるAPI呼び出しであるかの確認
179 \item API呼び出し時の引数のチェック
180 \end{itemize}
181
174 \lstinputlisting[label=src:parsedStackDetail, caption=Stack Interfaceの詳細なパース]{src/StackParseDetail.pl} 182 \lstinputlisting[label=src:parsedStackDetail, caption=Stack Interfaceの詳細なパース]{src/StackParseDetail.pl}
175 183
176 184
177 185
178 \subsection{Interfaceパーサーの呼び出し} 186 \subsection{Interfaceパーサーの呼び出し}
187 定義したパーサーは都度呼ぶこともできるが、ヘッダファイルのパスを入力で与える必要がある。
188 generate\_stub.plは入力としてヘッダファイルは与えられないので、スクリプト中に探索する必要がある。
189 毎回探索するのは呼び出しにくい。
190 generate\_stub.plでは、Interfaceの名前とパースした結果を対応させる連想配列を最初に作製する。
191 ソースコード\ref{src:createHeaderName2Info}のサブルーチンが連想配列の作製を行い、これは初回ロード時に実行される。
192 このサブルーチンでは、ヘッダファイルを起動時に全探査し、 すべてパースを行う。
193 4行目でGears::UtilのAPI呼び出しをしているが、 このAPIはGearsOSで使うヘッダファイルを、指定されたパスから再帰的に探索するものである。
194
195 なお同名のヘッダファイルが見つかった場合は、 変換をしているCbCファイルと同じディレクトリにあるヘッダファイルが優先される。(ソースコード 13行目)
179 \lstinputlisting[label=src:createHeaderName2Info, caption=ヘッダファイルの名前とInterfaceのパース結果の対応リストの作製]{src/createHeaderName2Info.pl} 196 \lstinputlisting[label=src:createHeaderName2Info, caption=ヘッダファイルの名前とInterfaceのパース結果の対応リストの作製]{src/createHeaderName2Info.pl}
180 197
181 198
182 \section{Interfaceの実装のCbCファイルへの構文の導入} 199 \section{Interfaceの実装のCbCファイルへの構文の導入}
183 今までのGearsOSではマクロに似た\texttt{\#interface}構文で使用するInterfce名を指定した。 200 今までのGearsOSではマクロに似た\texttt{\#interface}構文で使用するInterfce名を指定した。