Mercurial > hg > Papers > 2020 > anatofuz-sigos
changeset 18:099e7864ee79
fix md2tex
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 02 May 2020 15:13:07 +0900 |
parents | ea11eb7df53e |
children | 13d8fe4cfc5c |
files | paper/anatofuz-sigos.md paper/anatofuz-sigos.pdf paper/anatofuz-sigos.tex paper/md2tex.pl |
diffstat | 4 files changed, 30 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/anatofuz-sigos.md Sat May 02 15:01:22 2020 +0900 +++ b/paper/anatofuz-sigos.md Sat May 02 15:13:07 2020 +0900 @@ -55,10 +55,11 @@ CbCで階乗を求める例題をCode \ref{src:cbc_example}に示す。 例題ではCodeGearとして`factorial`を宣言している。 `factorial`はCodeGearの引数として`struct F`型の変数`arg`を受け取り、`arg`のメンバー変数によって`factorial`の再帰呼び出しを行う。 +`arg`の様なCodeGearの引数のことを`DataGear`と呼ぶ。 CodeGearの呼び出しは`goto`文によって行われる。 -``` src:cbc_example, Cbで階乗を求める処理 +``` src:cbc_example, CbCで階乗を求める処理 __code factorial(struct F arg) { if (arg.n<0) { exit(1); @@ -80,6 +81,10 @@ これはGCCでは内部コードを生成、 LLVM/clangでは`setjmp`と`longjmp`を使うことでCodeGearの次の継続対象として呼び出し元の関数を設定することが可能となる。 したがってプログラマから見ると、通常のCの関数呼び出しの返り値をCodeGearから取得する事が可能となる。 +# CbCを用いたxv6の再実装 + + + # xv6のファイルシステムの一部の分析 xv6のファイルシステムに関する定義ファイルはfs.c中に記述されている。
--- a/paper/anatofuz-sigos.tex Sat May 02 15:01:22 2020 +0900 +++ b/paper/anatofuz-sigos.tex Sat May 02 15:13:07 2020 +0900 @@ -130,11 +130,12 @@ CbCで階乗を求める例題をCode \ref{src:cbc_example}に示す。 例題ではCodeGearとして\texttt{factorial}を宣言している。 -\texttt{factorial}はCodeGearの引数として`struct F`型の変数`arg`を受け取り、`arg`のメンバー変数によって`factorial`の再帰呼び出しを行う。 +\texttt{factorial}はCodeGearの引数として\texttt{struct F}型の変数\texttt{arg}を受け取り、\texttt{arg}のメンバー変数によって\texttt{factorial}の再帰呼び出しを行う。 +\texttt{arg}の様なCodeGearの引数のことを\texttt{DataGear}と呼ぶ。 CodeGearの呼び出しは\texttt{goto}文によって行われる。 -\begin{lstlisting}[frame=lrbt,label=src:cbc_example,caption={Cbで階乗を求める処理}] +\begin{lstlisting}[frame=lrbt,label=src:cbc_example,caption={CbCで階乗を求める処理}] __code factorial(struct F arg) { if (arg.n<0) { exit(1); @@ -153,9 +154,13 @@ しかしCodeGearを呼び出す直前のスタックは保存されるため、 部分的にCbCを適用する場合はCodeGearを呼び出す\texttt{void}型などの関数を経由することで呼び出しが可能となる。 この他にCbCからCへ復帰する為のAPIとして、 環境付きgotoという機能がある。 -これはGCCでは内部コードを生成、 LLVM/clangでは\texttt{setjmp}と`longjmp`を使うことでCodeGearの次の継続対象として呼び出し元の関数を設定することが可能となる。 +これはGCCでは内部コードを生成、 LLVM/clangでは\texttt{setjmp}と\texttt{longjmp}を使うことでCodeGearの次の継続対象として呼び出し元の関数を設定することが可能となる。 したがってプログラマから見ると、通常のCの関数呼び出しの返り値をCodeGearから取得する事が可能となる。 +\section{CbCを用いたxv6の再実装} + + + \section{xv6のファイルシステムの一部の分析} xv6のファイルシステムに関する定義ファイルはfs.c中に記述されている。
--- a/paper/md2tex.pl Sat May 02 15:01:22 2020 +0900 +++ b/paper/md2tex.pl Sat May 02 15:13:07 2020 +0900 @@ -21,17 +21,7 @@ my $in_codeblock = 0; while (my $line = <$fh>) { - if ($line =~/^#/) { - $line =~ s/# (.*)/\\section{$1}/; - } - - if ($line =~ /`([\w_\-\\]+)`/) { - my $codeBlock = $1; - $codeBlock =~ s/_/\\_/g; - $line =~ s/`([\w_\-\\]+)`/\\texttt{$codeBlock}/; - } - - if ($line =~ /```/) { + if ($line =~ /^```/) { $in_codeblock = !$in_codeblock; if (!$in_codeblock) { $line = '\end{lstlisting}' ."\n"; @@ -41,6 +31,21 @@ } } + if ($in_codeblock) { + print $texFH $line; + next; + } + + if ($line =~/^#/) { + $line =~ s/# (.*)/\\section{$1}/; + } + + while ($line =~ /`([\s\w_\-\\]+)`/g) { + my $codeBlock = $1; + $codeBlock =~ s/_/\\_/g; + $line =~ s/`([\s\w_\-\\]+)`/\\texttt{$codeBlock}/; + } + if ($line =~ /^\[(.*),\s*(.*)\]\((.*)\)/) { $line = '\l' ."stinputlisting[label=$1, caption={$2}]{$3}\n"; }