diff options
| author | bringert <bringert@cs.chalmers.se> | 2007-09-19 08:58:39 +0000 |
|---|---|---|
| committer | bringert <bringert@cs.chalmers.se> | 2007-09-19 08:58:39 +0000 |
| commit | 46c8026b9d7e5f6d061b7dd340bfeb4a012b07c8 (patch) | |
| tree | e17320dc6368fae527e9643e08ee0d4de11cc93f /src/GF/Canon | |
| parent | c27087d14d456e174335c7b2eea15100054ab57f (diff) | |
Include startcat in generated JavaScript.
Diffstat (limited to 'src/GF/Canon')
| -rw-r--r-- | src/GF/Canon/CanonToJS.hs | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/GF/Canon/CanonToJS.hs b/src/GF/Canon/CanonToJS.hs index 161a21fb0..bcd64e282 100644 --- a/src/GF/Canon/CanonToJS.hs +++ b/src/GF/Canon/CanonToJS.hs @@ -2,20 +2,31 @@ module GF.Canon.CanonToJS (prCanon2js) where import GF.Canon.GFC import GF.Canon.CanonToGFCC +import GF.Canon.Look +import GF.Data.ErrM +import GF.Infra.Option import qualified GF.Canon.GFCC.AbsGFCC as C import qualified GF.JavaScript.AbsJS as JS import qualified GF.JavaScript.PrintJS as JS -prCanon2js :: CanonGrammar -> String -prCanon2js gr = gfcc2js $ mkCanon2gfcc gr +import Control.Monad (mplus) +import Data.Maybe (fromMaybe) -gfcc2js :: C.Grammar -> String -gfcc2js (C.Grm (C.Hdr n _) as cs) = JS.printTree $ JS.Program $ abstract2js n as ++ concatMap (concrete2js n) cs +prCanon2js :: Options -> CanonGrammar -> String +prCanon2js opts gr = gfcc2js start $ mkCanon2gfcc gr + where + start = fromMaybe "S" (getOptVal opts gStartCat + `mplus` getOptVal grOpts gStartCat) + grOpts = errVal noOptions $ lookupOptionsCan gr + +gfcc2js :: String -> C.Grammar -> String +gfcc2js start (C.Grm (C.Hdr n _) as cs) = + JS.printTree $ JS.Program $ abstract2js start n as ++ concatMap (concrete2js n) cs -abstract2js :: C.CId -> C.Abstract -> [JS.Element] -abstract2js (C.CId n) (C.Abs ds) = - [JS.ElStmt $ JS.SDeclOrExpr $ JS.Decl [JS.DInit a (new "Abstract" [])]] +abstract2js :: String -> C.CId -> C.Abstract -> [JS.Element] +abstract2js start (C.CId n) (C.Abs ds) = + [JS.ElStmt $ JS.SDeclOrExpr $ JS.Decl [JS.DInit a (new "Abstract" [JS.EStr start])]] ++ concatMap (absdef2js a) ds where a = JS.Ident n |
