Mercurial > hg > Papers > 2016 > masa-master
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
--- 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 で処理される。 +そのため、分割された部分で状態遷移の途中で終わっている場合が多ければそれだけ集計時の処理が重くなる。