comparison 2015/0512.html @ 25:ef709768b9cf

add image
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Tue, 12 May 2015 19:06:48 +0900
parents 14d14dcb8219
children
comparison
equal deleted inserted replaced
24:14d14dcb8219 25:ef709768b9cf
100 </div> 100 </div>
101 </td> 101 </td>
102 </tr> 102 </tr>
103 <tr> 103 <tr>
104 <td><div align="right"> 104 <td><div align="right">
105 <name>Masataka Kohagura 5th, May , 2015</name> 105 <name>Masataka Kohagura 12th, May , 2015</name>
106 </div></td> 106 </div></td>
107 </tr> 107 </tr>
108 </tr> 108 </tr>
109 </table> 109 </table>
110 </div> 110 </div>
124 </li> 124 </li>
125 </ul> 125 </ul>
126 </div> 126 </div>
127 127
128 <div id="cover"> 128 <div id="cover">
129 <h1>今日の話題</h1>
130 <ul>
131 <li>
132 正規表現について
133 </li>
134 <li>
135 オートマトンについて
136 </li>
137 <li>
138 正規表現の基本三演算
139 </li>
140 <li>
141 正規表現の他の演算
142 </li>
143 </ul>
144 </div>
145
146 <div id="cover">
147 <h1>正規表現について</h1> 129 <h1>正規表現について</h1>
148 <ul> 130 <ul>
149 <li> 131 <li>
150 文字列の一部をパターン化して表現する手法 132 文字列の一部をパターン化して表現する手法
151 </li> 133 </li>
152 <li> 134 <li>
153 文章からあるパターン文字列を検索したいときに使用する <br> 135 文章からあるパターン文字列を検索したいときに使用する <br>
154 (e.g. 「ed」が末尾に含まれる英単語を検索する場合 : .*ed) 136 (e.g. 「ed」が末尾に含まれる英単語を検索する場合 : .*ed)<br>
155 </li> 137 . (ピリオド) : 改行コード以外の任意の1文字<br>
156 <li> 138 * : 直前の文字の 0 回以上の繰返し
157 正規表現は有限オートマトンで表現できる
158 </li> 139 </li>
159 </ul> 140 </ul>
160 </div> 141 </div>
161 142
162 <div id="cover"> 143 <div id="cover">
163 <h1>オートマトンについて</h1> 144 <h1>オートマトンについて</h1>
164 <ul> 145 <ul>
165 <li> 146 <li>
166 入力に対して内部の状況に応じた処理を行う結果を出力する仮想的な自動機械の概念 147 入力に対して内部の状況に応じた処理を行う結果を出力する仮想的な自動機械の概念
167 </li> 148 </li>
149 <li>
150 正規表現はオートマトンで表現することができる。
151 </li>
152 <li>
153 非決定性有限オートマトン NFA(Non-deterministic Finite Automaton)と、非決定性有限オートマトンDFA(Deterministic Finite Automaton)が存在する。
154 </li>
155 <li>
156 非決定性有限オートマトン : 1つの入力に対して複数の遷移先が存在する
157 </li>
158 <object data="images/vector/nfa.svg" type="image/svg+xml"></object>
159 <li>
160 決定性有限オートマトン : 1つの入力に対して遷移先が1つだけ
161 </li>
162 <object data="images/vector/dfa.svg" type="image/svg+xml"></object>
163
168 </ul> 164 </ul>
169 </div> 165 </div>
170 166
171 <div id="cover"> 167 <div id="cover">
172 <h1>正規表現の基本三演算</h1> 168 <h1>正規表現の基本三演算</h1>
173 <ul> 169 <ul>
174 <li> 170 <li>
175 正規表現は「連接」「選択」「繰返し」の演算が備えられている 171 正規表現は「連接」「選択」「繰返し」の演算が備えられている<br>
176 R,S という 2 つの正規表現が存在すると仮定する。<br> 172 R,S という 2 つの正規表現が存在すると仮定する。<br>
177 <b>連接 「RS」</b>: R の直後に S が続くパターン<br> 173 <b>連接 「RS」</b>: R の直後に S が続くパターン<br>
178 <ul>(e.g.) RS, RRS, RSS, RRSS, ...<br></ul> 174 <ul>(e.g.) RS, RRS, RSS, RRSS, ...<br></ul>
175 <object data="images/vector/rensetsu.svg" type="image/svg+xml"></object><br>
179 <b>選択 「R|S」</b>: R もしくは S が出現するパターン<br> 176 <b>選択 「R|S」</b>: R もしくは S が出現するパターン<br>
180 <ul>(e.g.) R, S, RS, ...<br></ul> 177 <ul>(e.g.) R, S, RS, ...<br></ul>
178 <object data="images/vector/sentaku.svg" type="image/svg+xml"></object><br>
181 <b>繰返し 「R*S」</b>: 「*」の直前(R)が 0 回以上出現するパターン<br> 179 <b>繰返し 「R*S」</b>: 「*」の直前(R)が 0 回以上出現するパターン<br>
182 <ul>(e.g.) S, RS, RRS, RRRS, ...</ul> 180 <ul>(e.g.) S, RS, RRS, RRRS, ...</ul><br>
181 <object data="images/vector/star.svg" type="image/svg+xml"></object><br>
183 </li> 182 </li>
184 <li> 183 <li>
185 基本三演算は結合順位が存在する<br> 184 基本三演算は結合順位が存在する<br>
186 <ul>繰返し &gt; 連接 &gt; 選択</ul> 185 <ul>繰返し &gt; 連接 &gt; 選択</ul>
187 </li> 186 </li>
200 <li> 199 <li>
201 <b>「R?S」</b>: 「?」の直前のパターンが 0 or 1 回出現するパターン<br> 200 <b>「R?S」</b>: 「?」の直前のパターンが 0 or 1 回出現するパターン<br>
202 <ul>(e.g.) S, RS</ul> 201 <ul>(e.g.) S, RS</ul>
203 </li> 202 </li>
204 <li> 203 <li>
205 <b>「R{1,3}」</b>: 「{}」の直前のパターンが 1 or 3 回出現するパターン<br> 204 <b>「R{1,3}」</b>: 「{}」の直前のパターンが 1 〜 3 回出現するパターン<br>
206 <ul>(e.g.) R, RR, RRR</ul> 205 <ul>(e.g.) R, RR, RRR</ul>
207 </li> 206 </li>
208 <li> 207 <li>
209 <b>「R{1,}」</b>: 「{}」の直前のパターンが 1 回以上出現するパターン<br> 208 <b>「R{1,}」</b>: 「{}」の直前のパターンが 1 回以上出現するパターン<br>
210 <ul>(e.g.) R, RR, RRR, ...</ul> 209 <ul>(e.g.) R, RR, RRR, ...</ul>
211 <ul>R+S ≡ R(R*)S ≡ R{1,}S</ul> 210 <ul>R+S ≡ R(R*)S ≡ R{1,}S</ul>
212 </li> 211 </li>
213 </ul> 212 </ul>
213 </div>
214
215 <div id="cover">
216 <h1>実装について</h1>
217 まずは基本三演算を実装していく。
218 <ul>
219 <li>
220 R*(T|S)U をオートマトンで表現してみる
221 </li>
222 <object data="images/vector/rtsu-automaton.svg" type="image/svg+xml"></object>
223 <li>
224 状態と入力に対する遷移先、遷移したかどうかフラグで管理する。
225 </li>
226 <pre>
227 <code>
228 typedef struct Automaton {
229 int state;
230 unsigned char input_char;
231 int next_state;
232 bool next_state;
233 };
234 </code>
235 </pre>
236 <object data="images/vector/rtsu-automatondata.svg" type="image/svg+xml"></object>
237 </ul>
214 </div> 238 </div>
215 239
216 <!-- 240 <!--
217 <div id="cover"> 241 <div id="cover">
218 <h1>prog</h1> 242 <h1>prog</h1>