annotate a08/lecture.ind @ 406:a60132983557

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 08 Nov 2023 21:35:54 +0900
parents 6f3636fbc481
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 -title: push donwオートマトンと文法クラス
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 任意のnについて 0{n}1{n} に対応する有限オートマトンはない。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
5 inputnn0 : ( n : ℕ ) → { Σ : Set } → ( x y : Σ ) → List Σ → List Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
6 inputnn0 zero {_} _ _ s = s
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
7 inputnn0 (suc n) x y s = x ∷ ( inputnn0 n x y ( y ∷ s ) )
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 inputnn だけ受け付けて、それ以外を受け付けないということができない。
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
11 かっこの対応が取れないことに相当する。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
12
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
13 inputnn : List In2 → Maybe (List In2)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
14 inputnn [] = just []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
15 inputnn (i1 ∷ t) = just (i1 ∷ t)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
16 inputnn (i0 ∷ t) with inputnn t
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
17 ... | nothing = nothing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
18 ... | just [] = nothing
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
19 ... | just (i0 ∷ t1) = nothing -- can't happen
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
20 ... | just (i1 ∷ t1) = just t1 -- remove i1 from later part
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
21
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
22 inputnn1 : List In2 → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
23 inputnn1 s with inputnn s
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
24 ... | nothing = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
25 ... | just [] = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
26 ... | just _ = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
27
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
28 こちらは 0{n}1{n} を受け付けるかどうか調べるプログラムである。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
29
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
30 inputnn1 が inpuynn0 を受けつけるかどうかを証明する必要がある。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
31
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
32 nn01 : (i : ℕ) → inputnn1 ( inputnn0 i i0 i1 [] ) ≡ true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
33 nn01 = ?
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
34
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
35 これはやさしくない。一般的にプログラムが正しく動くことを証明することに相当する。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
36
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
37 --pumping lemma
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
38
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
39 まず Trace を定義する。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
40
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
41 data Trace { Q : Set } { Σ : Set } (fa : Automaton Q Σ ) : (is : List Σ) → Q → Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
42 tend : {q : Q} → aend fa q ≡ true → Trace fa [] q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
43 tnext : (q : Q) → {i : Σ} { is : List Σ}
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
44 → Trace fa is (δ fa q i) → Trace fa (i ∷ is) q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
45
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
46 これは Automaton が受け付ける文字列を生成する data である。実際、
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
47
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
48 tr-accept→ : { Q : Set } { Σ : Set }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
49 → (fa : Automaton Q Σ )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
50 → (is : List Σ) → (q : Q) → Trace fa is q → accept fa q is ≡ true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
51 tr-accept→ {Q} {Σ} fa [] q (tend x) = x
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
52 tr-accept→ {Q} {Σ} fa (i ∷ is) q (tnext _ tr) = tr-accept→ {Q} {Σ} fa is (δ fa q i) tr
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
53
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
54 tr-accept← : { Q : Set } { Σ : Set }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
55 → (fa : Automaton Q Σ )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
56 → (is : List Σ) → (q : Q) → accept fa q is ≡ true → Trace fa is q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
57 tr-accept← {Q} {Σ} fa [] q ac = tend ac
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
58 tr-accept← {Q} {Σ} fa (x ∷ []) q ac = tnext _ (tend ac )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
59 tr-accept← {Q} {Σ} fa (x ∷ x1 ∷ is) q ac = tnext _ (tr-accept← fa (x1 ∷ is) (δ fa q x) ac)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
60
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
61 もし、ある文字列を受け付ける Automaton の状態に重複があれば
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
64 record TA { Q : Set } { Σ : Set } (fa : Automaton Q Σ ) ( q : Q ) (is : List Σ) : Set where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
65 field
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
66 x y z : List Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
67 xyz=is : x ++ y ++ z ≡ is
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
68 trace-xyz : Trace fa (x ++ y ++ z) q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
69 trace-xyyz : Trace fa (x ++ y ++ y ++ z) q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
70 non-nil-y : ¬ (y ≡ [])
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
72 pumping-lemma : { Q : Set } { Σ : Set } (fa : Automaton Q Σ ) (finq : FiniteSet Q) (q qd : Q) (is : List Σ)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
73 → (tr : Trace fa is q )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
74 → dup-in-list finq qd (tr→qs fa is q tr) ≡ true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
75 → TA fa q is
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
76
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
77 を示すことができる。(Agda ではあんまりやさしくないが、割と自明)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
78
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
79 状態数よりも長い文字列を使えば、必ずこの方法で延長できる。 inputnn0 は、この性質を持たないので(なぜか?)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
80 inputnn0 が正規言語でないことがわかる。
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 --push down automaton
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
84 Automatonを拡張して、これを受け付けるようにすることができる。
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 data PushDown ( Γ : Set ) : Set where
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 pop : PushDown Γ
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 push : Γ → PushDown Γ
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
89 none : PushDown Γ
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
91 record PDA ( Q : Set ) ( Σ : Set ) ( Γ : Set )
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 : Set where
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 field
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
94 automaton : Automaton Q Σ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
95 pδ : Q → PushDown Γ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
96 open Automaton
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
97 paccept : (q : Q ) ( In : List Σ ) ( sp : List Γ ) → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
98 paccept q [] [] = aend automaton q
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
99 paccept q (H ∷ T) [] with pδ (δ automaton q H)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
100 paccept q (H ∷ T) [] | pop = paccept (δ automaton q H) T []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
101 paccept q (H ∷ T) [] | none = paccept (δ automaton q H) T []
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
102 paccept q (H ∷ T) [] | push x = paccept (δ automaton q H) T (x ∷ [] )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
103 paccept q [] (_ ∷ _ ) = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
104 paccept q ( H ∷ T ) ( SH ∷ ST ) with pδ (δ automaton q H)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
105 ... | pop = paccept (δ automaton q H) T ST
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
106 ... | none = paccept (δ automaton q H) T (SH ∷ ST)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
107 ... | push ns = paccept (δ automaton q H) T ( ns ∷ SH ∷ ST )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
108
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
109 例えば
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
111 pnnp : PDA States2 In2 States2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
112 pnnp = record {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
113 automaton = record { aend = aend ; δ = δ }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
114 ; pδ = pδ
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
115 } where
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
116 δ : States2 → In2 → States2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
117 δ ph1 i0 = ph1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
118 δ ph1 i1 = ph2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
119 δ ph2 i1 = ph2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
120 δ _ _ = phf
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
121 aend : States2 → Bool
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
122 aend ph2 = true
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
123 aend _ = false
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
124 pδ : States2 → PushDown States2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
125 pδ ph1 = push ph1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
126 pδ ph2 = pop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
127 pδ phf = none
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
128
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
129 これと inputnn1 が同じ動作をすることを示せれば良い。
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 --文脈自由文法
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
133 PDA で受け付ける言語を文脈自由文法(context free grammer)という。
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
135 実際のプログラミング言語は、型宣言とかの文脈に依存するので、CFGではない。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
136
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
137 しかし、文法自体は CFG で定義されることが多い。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
138
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
139 文法定義には BNF (Buckas Noar Form)を使う。
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
140
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
141 expr : EA | EB | EC ;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
142 statement :
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
143 SA | SB | SC
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
144 | IF expr THEN statement
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
145 | IF expr THEN statement ELSE statement
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
146 ;
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
147
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
148 これらを実際に parse するのには再帰下降法が便利なことが知られている。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
149
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
150 現在のコンパイラは。だいたいそれで実装されている。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
151
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
152 文法規則がプログラムで直接記述されるという利点もある。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
153
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
154 --文脈依存文法
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
155
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
156 expr : EA | EB | EC ;
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
157
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
158 の部分を
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
159
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
160 delcare exprt : EA | EB | EC ;
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
161
332
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
162 のように : の左側に複数の要素を許す
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 326
diff changeset
163 と、文脈依存文法になる。これを判定して停止するプログラムは、stack を二つ持つ Automaton になるが、
326
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
164 Turing Machine と呼ばれる。 その停止性を判定することはできない。それを次の講義で示す。
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
165
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 127
diff changeset
166 実用的には文法規則の適当な subset を停止することが分かっているアルゴリズムで決めれば良い。
127
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 ---問題8.1 push down automaton
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 <a href="../exercise/004.html"> 例題 </a> <!--- Exercise 8.1 --->
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173
0e8a0e50ed26 add some files
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174