]> Git — Sourcephile - haskell/symantic-parser.git/blob - test/Grammar.hs
fix: use a global polyfix for defLet and defRef
[haskell/symantic-parser.git] / test / Grammar.hs
1 {-# LANGUAGE ExistentialQuantification #-}
2 {-# LANGUAGE FlexibleContexts #-}
3 {-# LANGUAGE NoMonomorphismRestriction #-}
4 {-# LANGUAGE RankNTypes #-}
5 {-# LANGUAGE TypeApplications #-}
6 {-# LANGUAGE TypeFamilies#-}
7 {-# OPTIONS_GHC -Wno-missing-signatures #-}
8 module Grammar where
9 import Data.Char (Char)
10 import qualified Data.Functor as Functor
11 import qualified Grammar.Brainfuck
12 import qualified Grammar.Nandlang
13
14 import Symantic.Parser
15
16 data G = forall a. G (
17 forall repr.
18 Grammar Char repr =>
19 repr a
20 )
21
22 rawGrammars :: [G]
23 rawGrammars =
24 [ G g1
25 , G g2
26 , G g3
27 , G g4
28 , G g5
29 , G g6
30 , G g7
31 , G g8
32 , G g9
33 , G g10
34 , G g11
35 , G g12
36 , G g13
37 , G g14
38 , G g15
39 , G g16
40 ]
41 grammars :: [G]
42 grammars = (\(G g) -> G (observeSharing g)) Functor.<$> rawGrammars
43
44 g1 = char 'a'
45 g2 = string "abc"
46 g3 = many (char 'a')
47 g4 = some (string "abcd")
48 g5 = some (string "abcd") <* eof
49 g6 = traverse char "aa" <|> traverse char "ab"
50 g7 = string "aa" <|> string "ab"
51 g8 = many (char 'r') <* eof
52 g9 = eof
53 g10 = char 'a' <|> char 'b'
54 g11 = many (char 'a') <* char 'b'
55 g12 = many (oneOf ['a', 'b', 'c', 'd']) <* eof
56 g13 = Grammar.Brainfuck.grammar
57 g14 = Grammar.Nandlang.grammar
58 g15 = (char 'a' <|> char 'b') <* char 'c'
59 g16 = (char 'a' <|> char 'b' <|> char 'c') <* char 'd'