changeset 93:b1febd693942

add fig
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Fri, 05 Feb 2021 20:06:02 +0900
parents f5766148955f
children d4b5c1b2925f
files paper/chapter/02-cbc.tex paper/chapter/03-gears.tex paper/chapter/05-perl.tex paper/drawio/generateDataGearAbout.drawio paper/drawio/generateDataGearAbout.pdf paper/master_paper.pdf paper/master_paper.tex paper/src/callDebugPrint.pl paper/src/debugPrint.pl
diffstat 9 files changed, 31 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/paper/chapter/02-cbc.tex	Fri Feb 05 19:29:47 2021 +0900
+++ b/paper/chapter/02-cbc.tex	Fri Feb 05 20:06:02 2021 +0900
@@ -56,8 +56,8 @@
 
 
 実際に軽量継続になっているかを、この例題をアセンブラに変換した結果を見比べて確認する。
-\lstinputlisting[label=src:cbcexample_test_asm, caption=ソースコード\ref{src:cbcexample_test}のアセンブラの一部]{src/cbc_example_test.s}
-\lstinputlisting[label=src:cbcexample_test_asm_void, caption=ソースコード\ref{src:cbcexample_test_c}のアセンブラの一部]{src/cbc_example_test_void.s}
+\lstinputlisting[label=src:cbcexample_test_asm, caption=CbCの例題をコンパイルしたアセンブラの一部]{src/cbc_example_test.s}
+\lstinputlisting[label=src:cbcexample_test_asm_void, caption=C言語の例題をコンパイルしたアセンブラの一部]{src/cbc_example_test_void.s}
 codegear1からcodegear2への移動の際に、CbCとCで発行されるアセンブラの命令を比較する。
 CbCの例題の場合のアセンブラのソースコード\ref{src:cbcexample_test_asm}はcodegear2へ25行目でjmp命令を使って遷移している。
 対してC言語での実装の場合(ソースコード\ref{src:cbcexample_test_asm_void})は21行目でcallqを使っている。
--- a/paper/chapter/03-gears.tex	Fri Feb 05 19:29:47 2021 +0900
+++ b/paper/chapter/03-gears.tex	Fri Feb 05 20:06:02 2021 +0900
@@ -379,11 +379,21 @@
 \end{figure}
 
 1度ファイルを完全に読み込み、 CodeGear、DataGearの情報を取得し終わると、以降はその情報をもとに変換したファイルを書き出す。
+この書き出しはgenerateDataGear関数で行われる。(図\ref{fig:aboutgenerateDataGear})
 ファイルを書き出す際は、 元のCbCファイルを再読み込みし、 変換する必要があるキーワードが出現するまでは、変換後のファイルに転記を行う。
 例えば各CodeGearの最後に実行される\texttt{goto}文は、 GearsOSの場合はMetaCodeGearに継続するように、 対象を切り替える必要がある。
 この為にgenerate\_stub.plは、goto文を検知するとcontext経由で引数のやりとりをするメタ処理を付け加える。
 また、すべてのCodeGearはcontextを入力として受け取る必要があるため、 引数を書き換えてContextを付け加えている。
 
+\begin{figure}[h]
+    \begin{center}
+        \includegraphics[width=130mm]{drawio/generateDataGearAbout.pdf}
+    \end{center}
+    \caption{generateDataGearの処理の概要}
+    \label{fig:aboutgenerateDataGear}
+\end{figure}
+
+
 generate\_stub.plはPerlで書かれたトランスパイラであり、 C言語のコンパイラのように文字列を字句解析、構文解析をする訳ではない。
 いくつかあらかじめ定義した正規表現パターンに読み込んでいるCbCファイルの行がパターンマッチされたら、 特定の処理をする様に実装されている。
 
--- a/paper/chapter/05-perl.tex	Fri Feb 05 19:29:47 2021 +0900
+++ b/paper/chapter/05-perl.tex	Fri Feb 05 20:06:02 2021 +0900
@@ -333,10 +333,15 @@
 
 generate\_stub.plは巨大な正規表現パターンマッチで構成されたスクリプトであるので、 CbCのコードのどの行を呼んでいる時に、 Perlスクリプトのどの行にマッチしたかが重要となる。
 本来マッチしてほしい正規表現パターンにマッチしていないケースは、どの行にマッチしたかのログが解れば一発で確認することができる。
-また、逆に怪しい正規表現パターンの行にPerlデバッガでbreak pointを張ってデバッグすることも可能である。
+また、怪しい正規表現パターンの行にPerlデバッガでbreak pointを張ってデバッグすることも可能である。
+
+この機能をgenerate\_stub.plの起動時オプションの形で実装した。
+\texttt{--debug}オプションをつけると、デバッグ表示が行われる。(ソースコード\ref{src:debugGenStubSh}、 \ref{src:debugGenStub})
+\lstinputlisting[label=src:debugGenStubSh, caption=generate\_stub.plのデバッグモードでの起動]{src/debugGenerateStubLog.sh}
+\lstinputlisting[label=src:debugGenStub, caption=マッチしたPerlスクリプトの行番号と、CbCコードの対応表示]{src/debugGenerateStubLog.txt}
 
 Perlスクリプトでどの行にマッチしたかの情報は、 Perlの特殊変数\texttt{\_\_LINE\_\_}を利用した。
 この特殊変数は、特殊変数を呼び出したPerlの行番号が取得できるメタAPIである。
 
-\lstinputlisting[label=src:debugGenStubSh, caption=enumの番号が差し替えられたCodeGear]{src/debugGenerateStubLog.sh}
-\lstinputlisting[label=src:debugGenStub, caption=enumの番号が差し替えられたCodeGear]{src/debugGenerateStubLog.txt}
\ No newline at end of file
+\lstinputlisting[label=src:debugPrint, caption=debug\_print]{src/debugPrint.pl}
+\lstinputlisting[label=src:callDebugPrint, caption=debug\_printの呼び出し]{src/callDebugPrint.pl}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/drawio/generateDataGearAbout.drawio	Fri Feb 05 20:06:02 2021 +0900
@@ -0,0 +1,1 @@
+<mxfile host="Electron" modified="2021-02-05T11:03:10.686Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.1.8 Chrome/87.0.4280.88 Electron/11.1.1 Safari/537.36" etag="cZfqtVrtJDsL0GILw4Y6" version="14.1.8" type="device"><diagram id="IH5T0NB40Rg35STka0sH" name="ページ1">7Vpdb6M4FP01kWZXaoQxkOSxSdrpw4w6VVbamX2pHHCIpwYzxuRjf/3aYAjENM1saRJV5SX4+gN8z/Hh+jo9OIk2nzlKll9ZgGnPtoJND057tryckfxRlm1hGY68whByEhQmsDPMyL9YGy1tzUiA00ZDwRgVJGkafRbH2BcNG+KcrZvNFow2n5qgEBuGmY+oaf2bBGKpZ2EPdvY7TMJl+WTg6QlHqGysZ5IuUcDWNRO86cEJZ0wUd9FmgqlyXumXot/tM7XVi3Eci2M6+NPJAk2+Bw/TwcM/N4+PD+JneAX1u4ltOWEcyPnrIuNiyUIWI3qzs445y+IAq1EtWdq1+cJYIo1AGn9iIbYaTJQJJk1LEVFdizdEfNfd1f2P2v1UMQeAqqhoA6yy+A1zEmGBue6RCs6eKmCgtCxYLPSDwVCXb1FEqBroDtMVFsRHZUM9T42QmvqzztWmlGXcxwc8WpIU8RCLA+3sigJy7WAmZ8W3sh/HFAmyar4H0iQOq3Y7nOWNhvo3YNfjrhDN9JPk8uXp/axne1S+9XjOG6zwfmWKprnTrtLcvdeyARgmEq7xrl7ehep3VnjJtiZSEAyKyZWQqNuYCcWn9ZIIPEtQ7ta1lJEmW+bIfwpzzt1ngpIYa3uA+NO97EWEgtbqW64iRLnIFDtCitJU31M0x3RcDTVhlPH8FdR4bTwilJaNejZc5Jcak6OASFK01b2GeyvMBd4cZp/JFt1hoAfRGms7urzeKRYoBXVZV6uyY+cE886pK6CuK323riwNXblQBbGPVBD3rAoyNBDu7rvQt90ahOAggNK9fFv0Ao5bGn7Ua3cd85Lq6fRh1fa4j8rzFKhx5QwsAINz0sA2PiQHaAFeFvtul+OrRBXCl1UVei2qaltvpaqO4W0SJ5kwXC4nLZp+RZSEsbz35eQV0cfKNdJv9FpXRCQIChXG8vuO5tqNcJwwEot8Iu64507VWHLhphqRy4LMhm4TspFrQOa2IAbfCjDXAOxbxvO4aD7pMNSqAq1ORvz0Z9//4yNoe2uyDu09fXFNsp44ahsZdA1xjDkSDWpp3olsfs1DM86jVO7Nj6DIBekGdJ09KFoCaLsFiuFbIVHi3gKFcvz78LrX9Dp0WhbAab1u7os5jtiqjf7bWKDNu8DBNYTo7Ow3w8qIBWSx1R+6zxjxjj52Afbpu0TxAlYTNFAUHMWp2pewuCP8PmJf3cHZwx+0xL7AOmXwC8ztypoTFUtYGPlL+ZMHhh8AFrXeaE+G2wCEJwXQ3L4YaNXFsB7GByhdVrmg4wEsdxnRJlTnSf3iCMfuZ39lPL5WBTV2figA8sxe3uAOI/UoR+EXbGyFpNcfuK/L5extJqz8qhTnVVBfDf/nFxeUot491p6B9ccibUEOuHvQtWSFRiddpCMzfKml2vVeucPc7NCtJ2cb53aN5GyZYm05tqvlbF046tVytqBvWVVitiVvW5UuM2kL9LHwhZ/+DYy1Xm4uH1O5u+wn1NzwrBAnatGmZtUnn+M8R2DJSU+RQCo+fz6D5G+lpASYwyPSSAVtv8xfyiuVatGt5t/mVzea71hN4XDbDukcr0XzR7+v+bK4+2NBXlf7ewa8+Q8=</diagram></mxfile>
\ No newline at end of file
Binary file paper/drawio/generateDataGearAbout.pdf has changed
Binary file paper/master_paper.pdf has changed
--- a/paper/master_paper.tex	Fri Feb 05 19:29:47 2021 +0900
+++ b/paper/master_paper.tex	Fri Feb 05 20:06:02 2021 +0900
@@ -100,7 +100,7 @@
 \listoffigures
 
 %表目次
-\listoftables
+%\listoftables
 
 %リスト目次
 \lstlistoflistings
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/callDebugPrint.pl	Fri Feb 05 20:06:02 2021 +0900
@@ -0,0 +1,4 @@
+if (/^typedef struct (\w+)\s*<(.*)>/) {
+    debug_print("getDataGear",__LINE__, $_) if $opt_debug;
+    $inTypedef = 1;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/src/debugPrint.pl	Fri Feb 05 20:06:02 2021 +0900
@@ -0,0 +1,5 @@
+sub debug_print {
+  my ($functionName, $lineNumber, $line) = @_;
+  print "[$functionName] match $lineNumber : $line";
+}
+