comparison automaton-in-agda/src/cfg1.agda @ 405:af8f630b7e60

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 24 Sep 2023 18:02:04 +0900
parents 91781b7c65a8
children b85402051cdb
comparison
equal deleted inserted replaced
404:dfaf230f7b9a 405:af8f630b7e60
1 {-# OPTIONS --cubical-compatible #-}
2
1 module cfg1 where 3 module cfg1 where
2 4
3 open import Level renaming ( suc to succ ; zero to Zero ) 5 open import Level renaming ( suc to succ ; zero to Zero )
4 open import Data.Nat hiding ( _≟_ ) 6 open import Data.Nat hiding ( _≟_ )
5 -- open import Data.Fin 7 -- open import Data.Fin
33 35
34 record CFGGrammer (Symbol : Set) : Set where 36 record CFGGrammer (Symbol : Set) : Set where
35 field 37 field
36 cfg : Symbol → Body Symbol 38 cfg : Symbol → Body Symbol
37 top : Symbol 39 top : Symbol
38 eq? : Symbol → Symbol → Bool 40 eqP : Symbol → Symbol → Bool
39 typeof : Symbol → Node Symbol 41 typeof : Symbol → Node Symbol
40 42
41 infixr 80 _|_ 43 infixr 80 _|_
42 infixr 90 _; 44 infixr 90 _;
43 infixr 100 _,_ 45 infixr 100 _,_
62 64
63 {-# TERMINATING #-} 65 {-# TERMINATING #-}
64 cfg-language1 : {Symbol : Set} → CFGGrammer Symbol → Seq Symbol → List Symbol → Bool 66 cfg-language1 : {Symbol : Set} → CFGGrammer Symbol → Seq Symbol → List Symbol → Bool
65 cfg-language1 cg Error x = false 67 cfg-language1 cg Error x = false
66 cfg-language1 cg (S , seq) x with typeof cg S 68 cfg-language1 cg (S , seq) x with typeof cg S
67 cfg-language1 cg (_ , seq) (x' ∷ t) | T x = eq? cg x x' /\ cfg-language1 cg seq t 69 cfg-language1 cg (_ , seq) (x' ∷ t) | T x = eqP cg x x' /\ cfg-language1 cg seq t
68 cfg-language1 cg (_ , seq) [] | T x = false 70 cfg-language1 cg (_ , seq) [] | T x = false
69 cfg-language1 cg (_ , seq) x | N nonTerminal = split (cfg-language0 cg (cfg cg nonTerminal) )(cfg-language1 cg seq ) x 71 cfg-language1 cg (_ , seq) x | N nonTerminal = split (cfg-language0 cg (cfg cg nonTerminal) )(cfg-language1 cg seq ) x
70 cfg-language1 cg (S .) x with typeof cg S 72 cfg-language1 cg (S .) x with typeof cg S
71 cfg-language1 cg (_ .) (x' ∷ []) | T x = eq? cg x x' 73 cfg-language1 cg (_ .) (x' ∷ []) | T x = eqP cg x x'
72 cfg-language1 cg (_ .) _ | T x = false 74 cfg-language1 cg (_ .) _ | T x = false
73 cfg-language1 cg (_ .) x | N nonTerminal = cfg-language0 cg (cfg cg nonTerminal) x 75 cfg-language1 cg (_ .) x | N nonTerminal = cfg-language0 cg (cfg cg nonTerminal) x
74 76
75 cfg-language0 cg _ [] = false 77 cfg-language0 cg _ [] = false
76 cfg-language0 cg (rule | b) x = 78 cfg-language0 cg (rule | b) x =
115 117
116 IFGrammer : CFGGrammer IFToken 118 IFGrammer : CFGGrammer IFToken
117 IFGrammer = record { 119 IFGrammer = record {
118 cfg = cfg' 120 cfg = cfg'
119 ; top = statement 121 ; top = statement
120 ; eq? = token-eq? 122 ; eqP = token-eq?
121 ; typeof = typeof-IFG 123 ; typeof = typeof-IFG
122 } where 124 } where
123 cfg' : IFToken → Body IFToken 125 cfg' : IFToken → Body IFToken
124 cfg' expr = EA . | EB . | EC . ; 126 cfg' expr = EA . | EB . | EC . ;
125 cfg' statement = 127 cfg' statement =
166 168
167 E1Grammer : CFGGrammer E1Token 169 E1Grammer : CFGGrammer E1Token
168 E1Grammer = record { 170 E1Grammer = record {
169 cfg = cfgE 171 cfg = cfgE
170 ; top = expr 172 ; top = expr
171 ; eq? = E1-token-eq? 173 ; eqP = E1-token-eq?
172 ; typeof = typeof-E1 174 ; typeof = typeof-E1
173 } where 175 } where
174 cfgE : E1Token → Body E1Token 176 cfgE : E1Token → Body E1Token
175 cfgE expr = term . 177 cfgE expr = term .
176 178
284 286
285 pda→cfg : {Symbol : Set} { Q : Set} → (pda : PDA Q Symbol Q) → CFGGrammer Symbol 287 pda→cfg : {Symbol : Set} { Q : Set} → (pda : PDA Q Symbol Q) → CFGGrammer Symbol
286 pda→cfg pda = record { 288 pda→cfg pda = record {
287 cfg = {!!} 289 cfg = {!!}
288 ; top = {!!} 290 ; top = {!!}
289 ; eq? = {!!} 291 ; eqP = {!!}
290 ; typeof = {!!} 292 ; typeof = {!!}
291 } 293 }
292 294
293 pda->cfg : {Symbol : Set} { Q : Set} → (start : Q) → (input : List Symbol) 295 pda->cfg : {Symbol : Set} { Q : Set} → (start : Q) → (input : List Symbol)
294 → (pda : PDA Q Symbol Q) 296 → (pda : PDA Q Symbol Q)
297 299
298 record CDGGrammer (Symbol : Set) : Set where 300 record CDGGrammer (Symbol : Set) : Set where
299 field 301 field
300 cdg : Seq Symbol → Body Symbol 302 cdg : Seq Symbol → Body Symbol
301 top : Symbol 303 top : Symbol
302 eq? : Symbol → Symbol → Bool 304 eqP : Symbol → Symbol → Bool
303 typeof : Symbol → Node Symbol 305 typeof : Symbol → Node Symbol
304 306