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中に記述されている。
Binary file paper/anatofuz-sigos.pdf has changed
--- 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";
   }