blob: d1041e380e26f1c6101261c0dd1f2a969a8102fc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
module GF.GFCC.Raw.PrintGFCCRaw (printTree) where
import GF.GFCC.Raw.AbsGFCCRaw
import Data.List (intersperse)
printTree :: Grammar -> String
printTree g = prGrammar g ""
prGrammar :: Grammar -> ShowS
prGrammar (Grm xs) = prRExpList xs
prRExp :: RExp -> ShowS
prRExp (App x []) = showChar '(' . prCId x . showChar ')'
prRExp (App x xs) = showChar '(' . prCId x . showChar ' '
. prRExpList xs . showChar ')'
prRExp (AId x) = prCId x
prRExp (AInt x) = shows x
prRExp (AStr x) = showChar '"' . concatS (map mkEsc x) . showChar '"'
prRExp (AFlt x) = shows x -- FIXME: simpler format
prRExp AMet = showChar '?'
mkEsc :: Char -> ShowS
mkEsc s = case s of
'"' -> showString "\\\""
'\\' -> showString "\\\\"
'\n' -> showString "\\n"
'\t' -> showString "\\t"
_ -> showChar s
prRExpList :: [RExp] -> ShowS
prRExpList = concatS . intersperse (showChar ' ') . map prRExp
prCId :: CId -> ShowS
prCId (CId x) = showString x
concatS :: [ShowS] -> ShowS
concatS = foldr (.) id
|