mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-17 15:12:50 -06:00
46 lines
1.2 KiB
Haskell
46 lines
1.2 KiB
Haskell
----------------------------------------------------------------------
|
|
-- |
|
|
-- 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)) ++ ")" |