annotate a05/lecture.ind @ 406:a60132983557

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 08 Nov 2023 21:35:54 +0900
parents 9324852d3a17
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
37
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 -title: 正規表現
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
3 Regular language は union / concat / * について閉じているので、この演算を
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
4 使って構築する方法がある。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
5
37
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 --受理集合と演算
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 x 文字列そのもの
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 x+y 文字列の結合
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 * 文字列の繰り返し
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 x|y 文字列の選択
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 これらを使って文字列の集合を決めると、それは文字列に対するパターンマッチとなる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 これを正規表現という。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 ---正規表現の例
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 + は省略しても良いことにしよう。a+b+c の代わりに、
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 abc
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 文字集合の要素を全部選択したものを . と書くことにしよう。(Shell では?が多い。* は .* を意味する)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 .*abc
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 .*abcabc
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 曖昧さを避けるために()を使う。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 (abc|bcd)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 .*(abc|bcd)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 --問題5.1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 egrep / Perl などを使って、これらのパターンに対するテストプログラムを作成せよ。C で書くとどうなるか?
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 C の regcomp を使ってみよ。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 Option : 実行時間を測定してみよう。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
43 (a|b)*a(a|b)n
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
44
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
45 (a|b)n は(a|b)のn個の連続は指数関数時間がかか4ることが知られている。 ReDOS 攻撃と呼ばれている。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
46
37
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 --正規表現を表すデータ構造
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 再帰的な構文木を表すには data を使うことができる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 data Regex ( Σ : Set ) : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 _* : Regex Σ → Regex Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 _&_ : Regex Σ → Regex Σ → Regex Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 _||_ : Regex Σ → Regex Σ → Regex Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 <_> : Σ → Regex Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 List Σ を用いて < 文字列 > とすることもできるが、基本的なデータ構造をなるべく簡単にすることにしよう。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
59 <a href="../agda/regex.agda"> regex.agda </a>
37
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 上の例題は、
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 < a > & < b > & < c >
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 any = a || b || c
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 ( any * ) & ( < a > & < b > & < c > )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 ( any * ) & ( < a > & < b > & < c > & < a > & < b > & < c > )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 ( < a > & < b > & < c > ) || ( < b > & < c > & < d > )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 ( any * ) & ( < a > & < b > & < c > || < b > & < c > & < d > )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 となる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
77 <a href="../agda/regex1.agda"> regex1.agda </a>
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
78
37
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 --正規言語
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 ある正規表現が受け付ける文字列の集合を正規言語という。これは文字列の集合全体 ( List Σ )の部分集合になる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 部分集合は Bool への関数として表すことができる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 List Σ → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 正規言語は以下の論理式で表すことができる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 regular-language : {Σ : Set} → Regex Σ → List Σ → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 Regex Σはdataなので場合分けとなる。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 -- < a >
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 もし、Σがデータなら (例えば In2 )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 regular-language < h > f (i0 ∷ [] ) = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 regular-language < h > f (i1 ∷ [] ) = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 regular-language < h > f _ = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
102 で良い。そうでないなら、
37
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 cmp : (x y : Σ )→ Dec ( x ≡ y )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 みたいなのがあれば、
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 regular-language < h > (h1 ∷ [] ) with cmp h h1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 ... | yes _ = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 ... | no _ = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 regular-language < h > _ = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 と書ける。Dec は、条件分岐を理由付きで得るためのもの。理由がないと証明できない。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 in Relation.Nullary
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 ¬_ : ∀ {ℓ} → Set ℓ → Set ℓ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 ¬ P = P → ⊥
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 -- Decidable relations.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 data Dec {p} (P : Set p) : Set p where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 yes : ( p : P) → Dec P
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 no : (¬p : ¬ P) → Dec P
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125
331
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
126 -- x || Y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
127
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
128
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
129 regular-language (x || y) f = ( regular-language x f ) ∨ ( regular-language y f )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
130
37
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 -- x & y
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133
331
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
134 --begin-comment:
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
135
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
136 教科書の定義の通りに定義するべき
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
137
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
138 regular-language (x & y) f = ( regular-language x g ) ∧ ( regular-language y h )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
139 ∧ ( g ++ h ≡ f )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
140
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
141 record Concat {Σ : Set} (x y : List Σ → Bool ) (f : List Σ) : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
142 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
143 g h : List Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
144 f=gh : g ++ h ≡ f
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
145 match : ( regular-language x g ) ∧ ( regular-language y h ) ≡ true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
146
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
147 --end-comment:
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
148
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
149
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
150
37
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 これは
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
152
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 split : {Σ : Set} → (List Σ → Bool)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 → ( List Σ → Bool) → List Σ → Bool
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
155 split x y [] = x [] ∧ y []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
156 split x y (h ∷ t) = (x [] ∧ y (h ∷ t)) ∨
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
157 split (λ t1 → x ( ( h ∷ [] ) ++ t1 )) (λ t2 → y t2 ) t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
158
37
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
159
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 があれば、
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
162 regular-language (x & y) cmp = split ( λ z → regular-language x cmp z ) (λ z → regular-language y cmp z )
37
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
163
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
164 -- x *
37
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 repeat : {Σ : Set} → (List Σ → Bool) → List Σ → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 repeat x [] = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 repeat {Σ} x ( h ∷ t ) = split x (repeat {Σ} x) ( h ∷ t )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 regular-language (x *) f = repeat ( regular-language x f )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 --問題5.2 - 5.7
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 いくつかの正規表現に関する例題
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 <a href="../exercise/002.html"> 問題5.2 - 5.7 </a> <!--- Exercise 5.2 --->
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 <a href=""> </a> <!--- Exercise 5.3 --->
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 <a href=""> </a> <!--- Exercise 5.4 --->
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 <a href=""> </a> <!--- Exercise 5.5 --->
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 <a href=""> </a> <!--- Exercise 5.6 --->
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 <a href=""> </a> <!--- Exercise 5.7 --->
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
185
331
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
186 --begin-comment:
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
187
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
188 正規表現がどんな文字列にマッチするかという問題
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
189
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
190 マッチして欲しいパターンに対する正規表現を作る問題
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
191
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
192 --end-comment:
37
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
193
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
194
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
195
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
199
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
200
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
201
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
202
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
203
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
204
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
205