mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-22 01:22:51 -06:00
Include startcat in generated JavaScript.
This commit is contained in:
@@ -2,20 +2,31 @@ module GF.Canon.CanonToJS (prCanon2js) where
|
|||||||
|
|
||||||
import GF.Canon.GFC
|
import GF.Canon.GFC
|
||||||
import GF.Canon.CanonToGFCC
|
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.Canon.GFCC.AbsGFCC as C
|
||||||
import qualified GF.JavaScript.AbsJS as JS
|
import qualified GF.JavaScript.AbsJS as JS
|
||||||
import qualified GF.JavaScript.PrintJS as JS
|
import qualified GF.JavaScript.PrintJS as JS
|
||||||
|
|
||||||
|
|
||||||
prCanon2js :: CanonGrammar -> String
|
import Control.Monad (mplus)
|
||||||
prCanon2js gr = gfcc2js $ mkCanon2gfcc gr
|
import Data.Maybe (fromMaybe)
|
||||||
|
|
||||||
gfcc2js :: C.Grammar -> String
|
prCanon2js :: Options -> CanonGrammar -> String
|
||||||
gfcc2js (C.Grm (C.Hdr n _) as cs) = JS.printTree $ JS.Program $ abstract2js n as ++ concatMap (concrete2js n) cs
|
prCanon2js opts gr = gfcc2js start $ mkCanon2gfcc gr
|
||||||
|
where
|
||||||
|
start = fromMaybe "S" (getOptVal opts gStartCat
|
||||||
|
`mplus` getOptVal grOpts gStartCat)
|
||||||
|
grOpts = errVal noOptions $ lookupOptionsCan gr
|
||||||
|
|
||||||
abstract2js :: C.CId -> C.Abstract -> [JS.Element]
|
gfcc2js :: String -> C.Grammar -> String
|
||||||
abstract2js (C.CId n) (C.Abs ds) =
|
gfcc2js start (C.Grm (C.Hdr n _) as cs) =
|
||||||
[JS.ElStmt $ JS.SDeclOrExpr $ JS.Decl [JS.DInit a (new "Abstract" [])]]
|
JS.printTree $ JS.Program $ abstract2js start n as ++ concatMap (concrete2js n) cs
|
||||||
|
|
||||||
|
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
|
++ concatMap (absdef2js a) ds
|
||||||
where a = JS.Ident n
|
where a = JS.Ident n
|
||||||
|
|
||||||
|
|||||||
@@ -328,7 +328,7 @@ customMultiGrammarPrinter =
|
|||||||
[
|
[
|
||||||
(strCI "gfcm", const MC.prCanon)
|
(strCI "gfcm", const MC.prCanon)
|
||||||
,(strCI "gfcc", const GFCC.prCanon2gfcc)
|
,(strCI "gfcc", const GFCC.prCanon2gfcc)
|
||||||
,(strCI "js", const JS.prCanon2js)
|
,(strCI "js", JS.prCanon2js)
|
||||||
,(strCI "header", const (MC.prCanonMGr . unoptimizeCanon))
|
,(strCI "header", const (MC.prCanonMGr . unoptimizeCanon))
|
||||||
,(strCI "cfgm", prCanonAsCFGM)
|
,(strCI "cfgm", prCanonAsCFGM)
|
||||||
,(strCI "graph", visualizeCanonGrammar)
|
,(strCI "graph", visualizeCanonGrammar)
|
||||||
|
|||||||
Reference in New Issue
Block a user