]> Git — Sourcephile - haskell/symantic-parser.git/blob - test/Grammar.hs
test: add goldens for TH splices
[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 Grammar.Brainfuck
11 import qualified Grammar.Nandlang
12
13 import Symantic.Parser
14
15 data G = forall a. G (
16 forall repr.
17 Grammar Char repr =>
18 repr a
19 )
20
21 grammars :: [G]
22 grammars =
23 [ G (grammar @Char g1)
24 , G (grammar @Char g2)
25 , G (grammar @Char g3)
26 , G (grammar @Char g4)
27 , G (grammar @Char g5)
28 , G (grammar @Char g6)
29 , G (grammar @Char g7)
30 , G (grammar @Char g8)
31 , G (grammar @Char g9)
32 , G (grammar @Char g10)
33 , G (grammar @Char g11)
34 , G (grammar @Char g12)
35 , G (grammar @Char g13)
36 , G (grammar @Char g14)
37 ]
38
39 g1 = char 'a'
40 g2 = string "abc"
41 g3 = many (char 'a')
42 g4 = some (string "abcd")
43 g5 = some (string "abcd") <* eof
44 g6 = traverse char "aa" <|> traverse char "ab"
45 g7 = string "aa" <|> string "ab"
46 g8 = many (char 'r') <* eof
47 g9 = eof
48 g10 = char 'a' <|> char 'b'
49 g11 = many (char 'a') <* char 'b'
50 g12 = many (oneOf ['a', 'b', 'c', 'd']) <* eof
51 g13 = Grammar.Brainfuck.grammar
52 g14 = Grammar.Nandlang.grammar