summaryrefslogtreecommitdiff
path: root/src/GF/Speech/SISR.hs
blob: 20c6f7fe499116617a337c1036ce4331bfacadb0 (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
39
40
41
42
43
44
45
46
----------------------------------------------------------------------
-- |
-- Module      : GF.Speech.SISR
-- Maintainer  : BB
-- Stability   : (stable)
-- Portability : (portable)
--
-- Abstract syntax and pretty printer for SISR,
-- (Semantic Interpretation for Speech Recognition)
--
-----------------------------------------------------------------------------

module GF.Speech.SISR (SISRFormat(..), SISRExpr(..), prSISR) where

import Data.List

infixl 8 :.
infixr 1 :=

data SISRFormat = 
    -- SISR Working draft 1 April 2003
    -- http://www.w3.org/TR/2003/WD-semantic-interpretation-20030401/
    SISROld
 deriving Show

data SISRExpr = SISRExpr := SISRExpr
              | EThis 
              | SISRExpr :. String 
              | ERef String
              | EStr String
              | EApp SISRExpr [SISRExpr]
              | ENew String [SISRExpr]
  deriving Show

prSISR :: SISRFormat -> SISRExpr -> String
prSISR fmt = f
  where
   f e = 
    case e of
      x := y -> f x ++ "=" ++ f y
      EThis -> "$" 
      x :. y -> f x ++ "." ++ y
      ERef y -> "$" ++ y
      EStr s -> show s
      EApp x ys -> f x ++ "(" ++ concat (intersperse "," (map f ys)) ++ ")"
      ENew n ys -> "new " ++ n ++ "(" ++ concat (intersperse "," (map f ys)) ++ ")"