changeset 98:a099b533af0e

add
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Thu, 18 Feb 2016 21:13:37 +0900
parents c1738511433c
children f58bbc4a42f8
files paper/.c4.tex.swp paper/c4.tex paper/master_paper.pdf
diffstat 3 files changed, 13 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
Binary file paper/.c4.tex.swp has changed
--- a/paper/c4.tex	Thu Feb 18 20:40:30 2016 +0900
+++ b/paper/c4.tex	Thu Feb 18 21:13:37 2016 +0900
@@ -812,8 +812,6 @@
 
 % Print の分割部分の話追加 最後
 分割されたファイルに対して正規表現によるマッチングを行う。
-マッチングすると、マッチングの始まりのファイルの場所と終わりのファイルの場所を Result という構造体に格納する。
-マッチングの数だけこの構造体が生成され、これらは List 構造として結果をまとめていく。 (ソースコード\ref{src:result})
 \begin{lstlisting}[frame=lrbt,label=src:result,caption=Resultの構造体,numbers=left]
 typedef struct result {
     unsigned char *begin;
@@ -822,6 +820,9 @@
     struct result *next;
 } Result, *ResultPtr;
 \end{lstlisting}
+ソースコード\ref{src:result}では、
+マッチングの始まりのファイルの場所と終わりのファイルの場所を保存する。
+マッチングの数だけこの構造体が生成され、これらは List 構造として結果をまとめていく。
 
 全ての分割されたファイルに対してマッチングが終了すると、Print Task にてまとめてマッチした部分を表示する。
 
@@ -830,11 +831,9 @@
 並列処理時、分割されたファイルに対してパターンマッチさせるので、分割された1つ目のファイルの末尾の abb 、2つ目のファイルの先頭に bbc はマッチングしない。
 本来分割される前はマッチングする文字列だが、この場合見逃してしまう。
 それを解決するために、正規表現にマッチングし始めたファイルの場所を覚えておく。
+
 そして、1つ目のファイルの末尾が状態遷移の途中で終わっていた場合(状態 1 でない場合)は、結果を集計する際に再度マッチングし始めた場所から正規表現をマッチングさせる。
 
-このマッチングは結果を集計する Print Task にて実行されるので、single thread で処理される。
-そのため、分割された部分で状態遷移の途中で終わっている場合が多ければそれだけ集計時の処理が重くなる。
-
 \begin{figure}[htpb]
   \begin{center}
     \includegraphics[scale=0.3]{images/regex/regexdivide.pdf}
@@ -843,7 +842,7 @@
   \label{fig:regexdivide}
 \end{figure}
 
-\begin{lstlisting}[frame=lrbt,label=src:print,caption=マッチした結果を Print する,numbers=left]
+\begin{lstlisting}[frame=lrbt,label=src:regexprint,caption=マッチした結果を Print する,numbers=left]
 static
 TSValue stateSkipOnce(TSValue tsv) {
     if (tsv.matchEnd) {
@@ -898,3 +897,11 @@
     return 0;
 }
 \end{lstlisting}
+
+ソースコード\ref{src:regexprint}ではそれぞれの Task でマッチングした文字列を出力する。
+27-48行目がファイルの末尾が状態遷移の途中で終わった時の処理である。
+マッチングし始めたときのファイルの場所から再度マッチングするかどうか確認する。
+そして、マッチングしたら 46 行目で Print する。
+
+このマッチングは Print Task にて実行されるので、single thread で処理される。
+そのため、分割された部分で状態遷移の途中で終わっている場合が多ければそれだけ集計時の処理が重くなる。
Binary file paper/master_paper.pdf has changed