summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/GF/CFGM/AbsCFG.hs27
-rw-r--r--src/GF/CFGM/CFG.cf6
-rw-r--r--src/GF/CFGM/LexCFG.hs28
-rw-r--r--src/GF/CFGM/LexCFG.x12
-rw-r--r--src/GF/CFGM/ParCFG.hs547
-rw-r--r--src/GF/CFGM/ParCFG.y62
-rw-r--r--src/GF/CFGM/PrintCFG.hs52
-rw-r--r--src/GF/CFGM/PrintCFGrammar.hs56
8 files changed, 253 insertions, 537 deletions
diff --git a/src/GF/CFGM/AbsCFG.hs b/src/GF/CFGM/AbsCFG.hs
index 61a6154f5..f26175f41 100644
--- a/src/GF/CFGM/AbsCFG.hs
+++ b/src/GF/CFGM/AbsCFG.hs
@@ -3,6 +3,7 @@ module AbsCFG where
-- Haskell module generated by the BNF converter
newtype Ident = Ident String deriving (Eq,Ord,Show)
+newtype SingleQuoteString = SingleQuoteString String deriving (Eq,Ord,Show)
data Grammars =
Grammars [Grammar]
deriving (Eq,Ord,Show)
@@ -33,32 +34,10 @@ data Symbol =
deriving (Eq,Ord,Show)
data Name =
- Name [IdentParam] Category
+ Name SingleQuoteString
deriving (Eq,Ord,Show)
data Category =
- Category IdentParam Ident [Proj]
- deriving (Eq,Ord,Show)
-
-data IdentParam =
- IdentParam Ident [Field]
- deriving (Eq,Ord,Show)
-
-data Field =
- Field KeyValue
- deriving (Eq,Ord,Show)
-
-data Proj =
- Proj Param
- deriving (Eq,Ord,Show)
-
-data KeyValue =
- KeyValue Ident Param
- deriving (Eq,Ord,Show)
-
-data Param =
- ParamSimple Ident
- | ParamPatt Ident [Param]
- | ParamRec [KeyValue]
+ Category SingleQuoteString
deriving (Eq,Ord,Show)
diff --git a/src/GF/CFGM/CFG.cf b/src/GF/CFGM/CFG.cf
index f7b15aea1..c6b5c751b 100644
--- a/src/GF/CFGM/CFG.cf
+++ b/src/GF/CFGM/CFG.cf
@@ -25,7 +25,12 @@ TermS. Symbol ::= String;
(:[]). [Symbol] ::= Symbol ;
(:). [Symbol] ::= Symbol [Symbol] ;
+Name. Name ::= SingleQuoteString ;
+Category. Category ::= SingleQuoteString ;
+token SingleQuoteString '\'' ((char - ["'\\"]) | ('\\' ["'\\"]))* '\'' ;
+
+{-
Name. Name ::= [IdentParam] Category;
terminator IdentParam "/";
@@ -46,3 +51,4 @@ ParamSimple. Param ::= Ident ;
ParamPatt. Param ::= Ident "(" [Param] ")" ;
ParamRec. Param ::= "{" [KeyValue] "}" ;
separator Param "," ;
+-} \ No newline at end of file
diff --git a/src/GF/CFGM/LexCFG.hs b/src/GF/CFGM/LexCFG.hs
index 37b8ba936..fbf5ede3d 100644
--- a/src/GF/CFGM/LexCFG.hs
+++ b/src/GF/CFGM/LexCFG.hs
@@ -13,19 +13,19 @@ import Array
import Char (ord)
#endif
alex_base :: Array Int Int
-alex_base = listArray (0,11) [1,57,66,0,9,154,362,0,277,485,211,51]
+alex_base = listArray (0,15) [-8,-3,2,0,-46,0,-6,-4,45,200,408,0,115,323,257,67]
alex_table :: Array Int Int
-alex_table = listArray (0,740) [0,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,2,2,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,8,-1,-1,-1,-1,-1,3,3,-1,-1,3,4,3,3,11,11,11,11,11,11,11,11,11,11,3,3,-1,3,-1,-1,-1,2,2,2,2,2,3,0,0,0,2,2,2,2,2,0,0,0,0,0,0,0,0,0,2,0,0,3,-1,3,-1,-1,-1,2,11,11,11,11,11,11,11,11,11,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,-1,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,6,0,0,0,0,-1,0,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,9,0,0,-1,6,9,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,10,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,6,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,10,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
+alex_table = listArray (0,663) [0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,0,0,0,0,0,0,0,2,0,12,0,0,2,0,6,0,5,2,5,3,4,3,0,15,15,15,15,15,15,15,15,15,15,3,3,0,0,0,0,0,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,3,7,3,8,0,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,15,15,15,15,15,15,15,15,15,15,-1,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,14,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,13,0,0,0,10,13,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,14,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,10,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,10,10,10,10,10,10,10,10]
alex_check :: Array Int Int
-alex_check = listArray (0,740) [-1,0,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,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,9,10,11,12,13,62,-1,-1,-1,9,10,11,12,13,-1,-1,-1,-1,-1,-1,-1,-1,-1,32,-1,-1,91,92,93,94,95,96,32,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,39,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,215,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,34,-1,-1,247,95,39,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,92,-1,-1,-1,-1,-1,-1,-1,34,-1,-1,-1,-1,-1,-1,-1,-1,-1,110,-1,-1,-1,-1,-1,116,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,92,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,39,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,34,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,92,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]
+alex_check = listArray (0,663) [-1,9,10,11,12,13,9,10,11,12,13,9,10,11,12,13,62,-1,-1,-1,-1,-1,-1,-1,32,-1,34,-1,-1,32,-1,39,-1,39,32,39,44,45,46,-1,48,49,50,51,52,53,54,55,56,57,58,59,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,39,93,92,-1,92,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,92,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,34,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,92,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,39,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,34,-1,-1,-1,95,39,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,92,-1,-1,-1,-1,-1,-1,-1,34,-1,-1,-1,-1,-1,-1,-1,-1,-1,110,-1,-1,-1,-1,-1,116,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,92,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,39,248,249,250,251,252,253,254,255,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,-1,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,-1,248,249,250,251,252,253,254,255]
alex_deflt :: Array Int Int
-alex_deflt = listArray (0,11) [5,-1,-1,-1,-1,-1,-1,-1,9,9,-1,-1]
+alex_deflt = listArray (0,15) [-1,-1,-1,-1,-1,-1,7,7,-1,-1,-1,-1,13,13,-1,-1]
-alex_accept = listArray (0::Int,11) [[],[],[(AlexAccSkip)],[(AlexAcc (alex_action_1))],[],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_3))],[],[],[],[(AlexAcc (alex_action_4))]]
-{-# LINE 31 "LexCFG.x" #-}
+alex_accept = listArray (0::Int,15) [[],[],[(AlexAccSkip)],[(AlexAcc (alex_action_1))],[],[(AlexAcc (alex_action_2))],[],[],[],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_4))],[],[],[],[(AlexAcc (alex_action_5))]]
+{-# LINE 32 "LexCFG.x" #-}
tok f p s = f p s
@@ -36,13 +36,14 @@ data Tok =
| TV String -- identifiers
| TD String -- double precision float literals
| TC String -- character literals
+ | T_SingleQuoteString String
- deriving (Eq,Show)
+ deriving (Eq,Show,Ord)
data Token =
PT Posn Tok
| Err Posn
- deriving Show
+ deriving (Eq,Show,Ord)
tokenPos (PT (Pn _ l _) _ :_) = "line " ++ show l
tokenPos (Err (Pn _ l _) :_) = "line " ++ show l
@@ -57,6 +58,8 @@ prToken t = case t of
PT _ (TV s) -> s
PT _ (TD s) -> s
PT _ (TC s) -> s
+ _ -> show t
+ PT _ (T_SingleQuoteString s) -> s
eitherResIdent :: (String -> Tok) -> String -> Tok
@@ -90,7 +93,7 @@ unescapeInitTail = unesc . tail where
-------------------------------------------------------------------
data Posn = Pn !Int !Int !Int
- deriving (Eq, Show)
+ deriving (Eq, Show,Ord)
alexStartPos :: Posn
alexStartPos = Pn 0 1 1
@@ -125,9 +128,10 @@ alexInputPrevChar :: AlexInput -> Char
alexInputPrevChar (p, c, s) = c
alex_action_1 = tok (\p s -> PT p (TS s))
-alex_action_2 = tok (\p s -> PT p (eitherResIdent TV s))
-alex_action_3 = tok (\p s -> PT p (TL $ unescapeInitTail s))
-alex_action_4 = tok (\p s -> PT p (TI s))
+alex_action_2 = tok (\p s -> PT p (eitherResIdent T_SingleQuoteString s))
+alex_action_3 = tok (\p s -> PT p (eitherResIdent TV s))
+alex_action_4 = tok (\p s -> PT p (TL $ unescapeInitTail s))
+alex_action_5 = tok (\p s -> PT p (TI s))
{-# LINE 1 "GenericTemplate.hs" #-}
{-# LINE 1 "<built-in>" #-}
{-# LINE 1 "<command line>" #-}
diff --git a/src/GF/CFGM/LexCFG.x b/src/GF/CFGM/LexCFG.x
index e59d8652a..322d10a18 100644
--- a/src/GF/CFGM/LexCFG.x
+++ b/src/GF/CFGM/LexCFG.x
@@ -15,12 +15,13 @@ $i = [$l $d _ '] -- identifier character
$u = [\0-\255] -- universal: any character
@rsyms = -- reserved words consisting of special symbols
- \; | \: | \. | \- \> | \[ | \] | \, | \/ | \{ | \} | \! | \= | \( | \)
+ \; | \: | \. | \- \> | \[ | \] | \,
:-
$white+ ;
@rsyms { tok (\p s -> PT p (TS s)) }
+\' ($u # [\' \\]| \\ [\' \\]) * \' { tok (\p s -> PT p (eitherResIdent T_SingleQuoteString s)) }
$l $i* { tok (\p s -> PT p (eitherResIdent TV s)) }
\" ([$u # [\" \\ \n]] | (\\ (\" | \\ | \' | n | t)))* \"{ tok (\p s -> PT p (TL $ unescapeInitTail s)) }
@@ -39,13 +40,14 @@ data Tok =
| TV String -- identifiers
| TD String -- double precision float literals
| TC String -- character literals
+ | T_SingleQuoteString String
- deriving (Eq,Show)
+ deriving (Eq,Show,Ord)
data Token =
PT Posn Tok
| Err Posn
- deriving Show
+ deriving (Eq,Show,Ord)
tokenPos (PT (Pn _ l _) _ :_) = "line " ++ show l
tokenPos (Err (Pn _ l _) :_) = "line " ++ show l
@@ -60,6 +62,8 @@ prToken t = case t of
PT _ (TV s) -> s
PT _ (TD s) -> s
PT _ (TC s) -> s
+ _ -> show t
+ PT _ (T_SingleQuoteString s) -> s
eitherResIdent :: (String -> Tok) -> String -> Tok
@@ -93,7 +97,7 @@ unescapeInitTail = unesc . tail where
-------------------------------------------------------------------
data Posn = Pn !Int !Int !Int
- deriving (Eq, Show)
+ deriving (Eq, Show,Ord)
alexStartPos :: Posn
alexStartPos = Pn 0 1 1
diff --git a/src/GF/CFGM/ParCFG.hs b/src/GF/CFGM/ParCFG.hs
index afab149ac..96a7ecd93 100644
--- a/src/GF/CFGM/ParCFG.hs
+++ b/src/GF/CFGM/ParCFG.hs
@@ -12,198 +12,144 @@ import GHC.Exts
import GlaExts
#endif
-newtype HappyAbsSyn t4 t5 t6 = HappyAbsSyn (() -> ())
-happyIn4 :: t4 -> (HappyAbsSyn t4 t5 t6)
+newtype HappyAbsSyn t4 t5 t6 t7 = HappyAbsSyn (() -> ())
+happyIn4 :: t4 -> (HappyAbsSyn t4 t5 t6 t7)
happyIn4 x = unsafeCoerce# x
{-# INLINE happyIn4 #-}
-happyOut4 :: (HappyAbsSyn t4 t5 t6) -> t4
+happyOut4 :: (HappyAbsSyn t4 t5 t6 t7) -> t4
happyOut4 x = unsafeCoerce# x
{-# INLINE happyOut4 #-}
-happyIn5 :: t5 -> (HappyAbsSyn t4 t5 t6)
+happyIn5 :: t5 -> (HappyAbsSyn t4 t5 t6 t7)
happyIn5 x = unsafeCoerce# x
{-# INLINE happyIn5 #-}
-happyOut5 :: (HappyAbsSyn t4 t5 t6) -> t5
+happyOut5 :: (HappyAbsSyn t4 t5 t6 t7) -> t5
happyOut5 x = unsafeCoerce# x
{-# INLINE happyOut5 #-}
-happyIn6 :: t6 -> (HappyAbsSyn t4 t5 t6)
+happyIn6 :: t6 -> (HappyAbsSyn t4 t5 t6 t7)
happyIn6 x = unsafeCoerce# x
{-# INLINE happyIn6 #-}
-happyOut6 :: (HappyAbsSyn t4 t5 t6) -> t6
+happyOut6 :: (HappyAbsSyn t4 t5 t6 t7) -> t6
happyOut6 x = unsafeCoerce# x
{-# INLINE happyOut6 #-}
-happyIn7 :: (Grammars) -> (HappyAbsSyn t4 t5 t6)
+happyIn7 :: t7 -> (HappyAbsSyn t4 t5 t6 t7)
happyIn7 x = unsafeCoerce# x
{-# INLINE happyIn7 #-}
-happyOut7 :: (HappyAbsSyn t4 t5 t6) -> (Grammars)
+happyOut7 :: (HappyAbsSyn t4 t5 t6 t7) -> t7
happyOut7 x = unsafeCoerce# x
{-# INLINE happyOut7 #-}
-happyIn8 :: (Grammar) -> (HappyAbsSyn t4 t5 t6)
+happyIn8 :: (Grammars) -> (HappyAbsSyn t4 t5 t6 t7)
happyIn8 x = unsafeCoerce# x
{-# INLINE happyIn8 #-}
-happyOut8 :: (HappyAbsSyn t4 t5 t6) -> (Grammar)
+happyOut8 :: (HappyAbsSyn t4 t5 t6 t7) -> (Grammars)
happyOut8 x = unsafeCoerce# x
{-# INLINE happyOut8 #-}
-happyIn9 :: ([Grammar]) -> (HappyAbsSyn t4 t5 t6)
+happyIn9 :: (Grammar) -> (HappyAbsSyn t4 t5 t6 t7)
happyIn9 x = unsafeCoerce# x
{-# INLINE happyIn9 #-}
-happyOut9 :: (HappyAbsSyn t4 t5 t6) -> ([Grammar])
+happyOut9 :: (HappyAbsSyn t4 t5 t6 t7) -> (Grammar)
happyOut9 x = unsafeCoerce# x
{-# INLINE happyOut9 #-}
-happyIn10 :: (Flag) -> (HappyAbsSyn t4 t5 t6)
+happyIn10 :: ([Grammar]) -> (HappyAbsSyn t4 t5 t6 t7)
happyIn10 x = unsafeCoerce# x
{-# INLINE happyIn10 #-}
-happyOut10 :: (HappyAbsSyn t4 t5 t6) -> (Flag)
+happyOut10 :: (HappyAbsSyn t4 t5 t6 t7) -> ([Grammar])
happyOut10 x = unsafeCoerce# x
{-# INLINE happyOut10 #-}
-happyIn11 :: ([Flag]) -> (HappyAbsSyn t4 t5 t6)
+happyIn11 :: (Flag) -> (HappyAbsSyn t4 t5 t6 t7)
happyIn11 x = unsafeCoerce# x
{-# INLINE happyIn11 #-}
-happyOut11 :: (HappyAbsSyn t4 t5 t6) -> ([Flag])
+happyOut11 :: (HappyAbsSyn t4 t5 t6 t7) -> (Flag)
happyOut11 x = unsafeCoerce# x
{-# INLINE happyOut11 #-}
-happyIn12 :: (Rule) -> (HappyAbsSyn t4 t5 t6)
+happyIn12 :: ([Flag]) -> (HappyAbsSyn t4 t5 t6 t7)
happyIn12 x = unsafeCoerce# x
{-# INLINE happyIn12 #-}
-happyOut12 :: (HappyAbsSyn t4 t5 t6) -> (Rule)
+happyOut12 :: (HappyAbsSyn t4 t5 t6 t7) -> ([Flag])
happyOut12 x = unsafeCoerce# x
{-# INLINE happyOut12 #-}
-happyIn13 :: ([Rule]) -> (HappyAbsSyn t4 t5 t6)
+happyIn13 :: (Rule) -> (HappyAbsSyn t4 t5 t6 t7)
happyIn13 x = unsafeCoerce# x
{-# INLINE happyIn13 #-}
-happyOut13 :: (HappyAbsSyn t4 t5 t6) -> ([Rule])
+happyOut13 :: (HappyAbsSyn t4 t5 t6 t7) -> (Rule)
happyOut13 x = unsafeCoerce# x
{-# INLINE happyOut13 #-}
-happyIn14 :: (Profile) -> (HappyAbsSyn t4 t5 t6)
+happyIn14 :: ([Rule]) -> (HappyAbsSyn t4 t5 t6 t7)
happyIn14 x = unsafeCoerce# x
{-# INLINE happyIn14 #-}
-happyOut14 :: (HappyAbsSyn t4 t5 t6) -> (Profile)
+happyOut14 :: (HappyAbsSyn t4 t5 t6 t7) -> ([Rule])
happyOut14 x = unsafeCoerce# x
{-# INLINE happyOut14 #-}
-happyIn15 :: (Ints) -> (HappyAbsSyn t4 t5 t6)
+happyIn15 :: (Profile) -> (HappyAbsSyn t4 t5 t6 t7)
happyIn15 x = unsafeCoerce# x
{-# INLINE happyIn15 #-}
-happyOut15 :: (HappyAbsSyn t4 t5 t6) -> (Ints)
+happyOut15 :: (HappyAbsSyn t4 t5 t6 t7) -> (Profile)
happyOut15 x = unsafeCoerce# x
{-# INLINE happyOut15 #-}
-happyIn16 :: ([Ints]) -> (HappyAbsSyn t4 t5 t6)
+happyIn16 :: (Ints) -> (HappyAbsSyn t4 t5 t6 t7)
happyIn16 x = unsafeCoerce# x
{-# INLINE happyIn16 #-}
-happyOut16 :: (HappyAbsSyn t4 t5 t6) -> ([Ints])
+happyOut16 :: (HappyAbsSyn t4 t5 t6 t7) -> (Ints)
happyOut16 x = unsafeCoerce# x
{-# INLINE happyOut16 #-}
-happyIn17 :: ([Integer]) -> (HappyAbsSyn t4 t5 t6)
+happyIn17 :: ([Ints]) -> (HappyAbsSyn t4 t5 t6 t7)
happyIn17 x = unsafeCoerce# x
{-# INLINE happyIn17 #-}
-happyOut17 :: (HappyAbsSyn t4 t5 t6) -> ([Integer])
+happyOut17 :: (HappyAbsSyn t4 t5 t6 t7) -> ([Ints])
happyOut17 x = unsafeCoerce# x
{-# INLINE happyOut17 #-}
-happyIn18 :: (Symbol) -> (HappyAbsSyn t4 t5 t6)
+happyIn18 :: ([Integer]) -> (HappyAbsSyn t4 t5 t6 t7)
happyIn18 x = unsafeCoerce# x
{-# INLINE happyIn18 #-}
-happyOut18 :: (HappyAbsSyn t4 t5 t6) -> (Symbol)
+happyOut18 :: (HappyAbsSyn t4 t5 t6 t7) -> ([Integer])
happyOut18 x = unsafeCoerce# x
{-# INLINE happyOut18 #-}
-happyIn19 :: ([Symbol]) -> (HappyAbsSyn t4 t5 t6)
+happyIn19 :: (Symbol) -> (HappyAbsSyn t4 t5 t6 t7)
happyIn19 x = unsafeCoerce# x
{-# INLINE happyIn19 #-}
-happyOut19 :: (HappyAbsSyn t4 t5 t6) -> ([Symbol])
+happyOut19 :: (HappyAbsSyn t4 t5 t6 t7) -> (Symbol)
happyOut19 x = unsafeCoerce# x
{-# INLINE happyOut19 #-}
-happyIn20 :: (Name) -> (HappyAbsSyn t4 t5 t6)
+happyIn20 :: ([Symbol]) -> (HappyAbsSyn t4 t5 t6 t7)
happyIn20 x = unsafeCoerce# x
{-# INLINE happyIn20 #-}
-happyOut20 :: (HappyAbsSyn t4 t5 t6) -> (Name)
+happyOut20 :: (HappyAbsSyn t4 t5 t6 t7) -> ([Symbol])
happyOut20 x = unsafeCoerce# x
{-# INLINE happyOut20 #-}
-happyIn21 :: ([IdentParam]) -> (HappyAbsSyn t4 t5 t6)
+happyIn21 :: (Name) -> (HappyAbsSyn t4 t5 t6 t7)
happyIn21 x = unsafeCoerce# x
{-# INLINE happyIn21 #-}
-happyOut21 :: (HappyAbsSyn t4 t5 t6) -> ([IdentParam])
+happyOut21 :: (HappyAbsSyn t4 t5 t6 t7) -> (Name)
happyOut21 x = unsafeCoerce# x
{-# INLINE happyOut21 #-}
-happyIn22 :: (Category) -> (HappyAbsSyn t4 t5 t6)
+happyIn22 :: (Category) -> (HappyAbsSyn t4 t5 t6 t7)
happyIn22 x = unsafeCoerce# x
{-# INLINE happyIn22 #-}
-happyOut22 :: (HappyAbsSyn t4 t5 t6) -> (Category)
+happyOut22 :: (HappyAbsSyn t4 t5 t6 t7) -> (Category)
happyOut22 x = unsafeCoerce# x
{-# INLINE happyOut22 #-}
-happyIn23 :: (IdentParam) -> (HappyAbsSyn t4 t5 t6)
-happyIn23 x = unsafeCoerce# x
-{-# INLINE happyIn23 #-}
-happyOut23 :: (HappyAbsSyn t4 t5 t6) -> (IdentParam)
-happyOut23 x = unsafeCoerce# x
-{-# INLINE happyOut23 #-}
-happyIn24 :: (Field) -> (HappyAbsSyn t4 t5 t6)
-happyIn24 x = unsafeCoerce# x
-{-# INLINE happyIn24 #-}
-happyOut24 :: (HappyAbsSyn t4 t5 t6) -> (Field)
-happyOut24 x = unsafeCoerce# x
-{-# INLINE happyOut24 #-}
-happyIn25 :: ([Field]) -> (HappyAbsSyn t4 t5 t6)
-happyIn25 x = unsafeCoerce# x
-{-# INLINE happyIn25 #-}
-happyOut25 :: (HappyAbsSyn t4 t5 t6) -> ([Field])
-happyOut25 x = unsafeCoerce# x
-{-# INLINE happyOut25 #-}
-happyIn26 :: (Proj) -> (HappyAbsSyn t4 t5 t6)
-happyIn26 x = unsafeCoerce# x
-{-# INLINE happyIn26 #-}
-happyOut26 :: (HappyAbsSyn t4 t5 t6) -> (Proj)
-happyOut26 x = unsafeCoerce# x
-{-# INLINE happyOut26 #-}
-happyIn27 :: ([Proj]) -> (HappyAbsSyn t4 t5 t6)
-happyIn27 x = unsafeCoerce# x
-{-# INLINE happyIn27 #-}
-happyOut27 :: (HappyAbsSyn t4 t5 t6) -> ([Proj])
-happyOut27 x = unsafeCoerce# x
-{-# INLINE happyOut27 #-}
-happyIn28 :: (KeyValue) -> (HappyAbsSyn t4 t5 t6)
-happyIn28 x = unsafeCoerce# x
-{-# INLINE happyIn28 #-}
-happyOut28 :: (HappyAbsSyn t4 t5 t6) -> (KeyValue)
-happyOut28 x = unsafeCoerce# x
-{-# INLINE happyOut28 #-}
-happyIn29 :: ([KeyValue]) -> (HappyAbsSyn t4 t5 t6)
-happyIn29 x = unsafeCoerce# x
-{-# INLINE happyIn29 #-}
-happyOut29 :: (HappyAbsSyn t4 t5 t6) -> ([KeyValue])
-happyOut29 x = unsafeCoerce# x
-{-# INLINE happyOut29 #-}
-happyIn30 :: (Param) -> (HappyAbsSyn t4 t5 t6)
-happyIn30 x = unsafeCoerce# x
-{-# INLINE happyIn30 #-}
-happyOut30 :: (HappyAbsSyn t4 t5 t6) -> (Param)
-happyOut30 x = unsafeCoerce# x
-{-# INLINE happyOut30 #-}
-happyIn31 :: ([Param]) -> (HappyAbsSyn t4 t5 t6)
-happyIn31 x = unsafeCoerce# x
-{-# INLINE happyIn31 #-}
-happyOut31 :: (HappyAbsSyn t4 t5 t6) -> ([Param])
-happyOut31 x = unsafeCoerce# x
-{-# INLINE happyOut31 #-}
-happyInTok :: Token -> (HappyAbsSyn t4 t5 t6)
+happyInTok :: Token -> (HappyAbsSyn t4 t5 t6 t7)
happyInTok x = unsafeCoerce# x
{-# INLINE happyInTok #-}
-happyOutTok :: (HappyAbsSyn t4 t5 t6) -> Token
+happyOutTok :: (HappyAbsSyn t4 t5 t6 t7) -> Token
happyOutTok x = unsafeCoerce# x
{-# INLINE happyOutTok #-}
happyActOffsets :: HappyAddr
-happyActOffsets = HappyA# "\x00\x00\x68\x00\x00\x00\x67\x00\x66\x00\x00\x00\x60\x00\x00\x00\x64\x00\x65\x00\xfd\xff\x5f\x00\x5e\x00\x00\x00\x61\x00\x63\x00\x62\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x2c\x00\x00\x00\x5d\x00\x57\x00\x00\x00\x29\x00\x5b\x00\x5a\x00\x56\x00\x59\x00\x4b\x00\x00\x00\x54\x00\x00\x00\x00\x00\x00\x00\xfb\xff\x55\x00\x53\x00\x45\x00\x49\x00\x00\x00\x52\x00\x4e\x00\x51\x00\x00\x00\x00\x00\x4f\x00\x46\x00\x00\x00\x40\x00\xfb\xff\x00\x00\x50\x00\x44\x00\xfb\xff\x00\x00\x00\x00\x3d\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x3f\x00\x00\x00\x3a\x00\x00\x00\x00\x00\xfb\xff\x00\x00\x00\x00\x00\x00"#
+happyActOffsets = HappyA# "\x00\x00\x33\x00\x00\x00\x27\x00\x34\x00\x00\x00\x31\x00\x00\x00\x30\x00\x38\x00\x19\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x36\x00\x35\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x2e\x00\x2f\x00\x2b\x00\x2a\x00\x29\x00\x22\x00\x1f\x00\x28\x00\x24\x00\x20\x00\x00\x00\x00\x00\x1d\x00\x00\x00\x00\x00\x1e\x00\x11\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
happyGotoOffsets :: HappyAddr
-happyGotoOffsets = HappyA# "\x2f\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\x4a\x00\x42\x00\x08\x00\x00\x00\x0a\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x3c\x00\x33\x00\x21\x00\xfc\xff\x31\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x3b\x00\xfa\xff\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x32\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x0b\x00\x05\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x07\x00\x2b\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00"#
+happyGotoOffsets = HappyA# "\x21\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x0d\x00\x01\x00\x16\x00\x00\x00\x1a\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\xf9\xff\x00\x00\x1c\x00\x00\x00\x00\x00\x0b\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x02\x00\x03\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
happyDefActions :: HappyAddr
-happyDefActions = HappyA# "\xf9\xff\x00\x00\xfe\xff\x00\x00\xfb\xff\xf8\xff\x00\x00\xf6\xff\xf3\xff\x00\x00\x00\x00\x00\x00\x00\x00\xf7\xff\x00\x00\x00\x00\x00\x00\x00\x00\xf5\xff\xfa\xff\xf2\xff\xe3\xff\x00\x00\xde\xff\x00\x00\xdb\xff\x00\x00\x00\x00\xe4\xff\x00\x00\x00\x00\xef\xff\xe1\xff\x00\x00\x00\x00\xe0\xff\x00\x00\xdf\xff\xdd\xff\xda\xff\x00\x00\xee\xff\x00\x00\xec\xff\x00\x00\xe2\xff\x00\x00\xeb\xff\x00\x00\xfd\xff\xf1\xff\xef\xff\xd5\xff\xdc\xff\xd8\xff\x00\x00\xd9\xff\xd7\xff\x00\x00\xd2\xff\xed\xff\xf0\xff\xec\xff\x00\x00\xe8\xff\xe6\xff\xf4\xff\xe9\xff\xe7\xff\xfc\xff\xea\xff\xd1\xff\x00\x00\xd3\xff\xd8\xff\xd6\xff\xd4\xff\xd2\xff\xe5\xff\xd0\xff"#
+happyDefActions = HappyA# "\xf8\xff\x00\x00\xfe\xff\x00\x00\xfa\xff\xf7\xff\x00\x00\xf5\xff\xf2\xff\x00\x00\x00\x00\x00\x00\xe2\xff\xf6\xff\xfb\xff\x00\x00\x00\x00\x00\x00\xf4\xff\xf9\xff\xf1\xff\x00\x00\xe3\xff\x00\x00\x00\x00\xee\xff\xed\xff\x00\x00\xeb\xff\x00\x00\x00\x00\xea\xff\x00\x00\xfd\xff\xf0\xff\xee\xff\xec\xff\xef\xff\xeb\xff\x00\x00\xe7\xff\xe5\xff\xf3\xff\xe8\xff\xe6\xff\xfc\xff\xe9\xff\xe4\xff"#
happyCheck :: HappyAddr
-happyCheck = HappyA# "\xff\xff\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x03\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x12\x00\x06\x00\x12\x00\x16\x00\x09\x00\x08\x00\x17\x00\x0d\x00\x00\x00\x12\x00\x00\x00\x14\x00\x02\x00\x18\x00\x1a\x00\x1b\x00\x1a\x00\x1b\x00\x1a\x00\x1a\x00\x18\x00\x19\x00\x18\x00\x19\x00\x0e\x00\x0f\x00\x12\x00\x13\x00\x12\x00\x13\x00\x00\x00\x03\x00\x02\x00\x00\x00\x03\x00\x00\x00\x08\x00\x03\x00\x01\x00\x05\x00\x14\x00\x0a\x00\x10\x00\x11\x00\x0e\x00\x0f\x00\x0a\x00\x00\x00\x12\x00\x13\x00\x0d\x00\x12\x00\x13\x00\x12\x00\x13\x00\x0b\x00\x0c\x00\x0b\x00\x0c\x00\x15\x00\x07\x00\x00\x00\x04\x00\x12\x00\x0e\x00\x0a\x00\x07\x00\x13\x00\x01\x00\x12\x00\x0d\x00\x05\x00\x07\x00\x04\x00\x06\x00\x13\x00\x06\x00\x01\x00\x12\x00\x07\x00\x12\x00\x03\x00\x05\x00\x0c\x00\x0b\x00\x05\x00\x01\x00\x03\x00\x02\x00\x01\x00\x09\x00\xff\xff\x12\x00\x12\x00\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x12\x00\xff\xff\xff\xff\x11\x00\x10\x00\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+happyCheck = HappyA# "\xff\xff\x02\x00\x03\x00\x01\x00\x0b\x00\x02\x00\x03\x00\x03\x00\x03\x00\x08\x00\x03\x00\x05\x00\x01\x00\x00\x00\x0f\x00\x10\x00\x0e\x00\x12\x00\x0f\x00\x10\x00\x03\x00\x12\x00\x12\x00\x12\x00\x11\x00\x0e\x00\x00\x00\x0c\x00\x0d\x00\x07\x00\x0d\x00\x0e\x00\x0a\x00\x08\x00\x05\x00\x09\x00\x0b\x00\x04\x00\x06\x00\x06\x00\x0c\x00\x0d\x00\x0c\x00\x07\x00\x04\x00\x0e\x00\x0c\x00\x06\x00\x05\x00\x07\x00\x03\x00\x05\x00\x0e\x00\x09\x00\x01\x00\x10\x00\x02\x00\x01\x00\x0a\x00\x0e\x00\x0b\x00\x09\x00\x0b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
happyTable :: HappyAddr
-happyTable = HappyA# "\x00\x00\x34\x00\x24\x00\x34\x00\x37\x00\x34\x00\x34\x00\x45\x00\x2f\x00\x24\x00\x0f\x00\x24\x00\x12\x00\x03\x00\x09\x00\x03\x00\x27\x00\x0a\x00\x10\x00\x20\x00\x46\x00\x0c\x00\x03\x00\x0c\x00\x46\x00\x40\x00\x25\x00\x47\x00\x4f\x00\x47\x00\x48\x00\x38\x00\x35\x00\x39\x00\x4b\x00\x39\x00\x3a\x00\x41\x00\x4e\x00\x2e\x00\x0e\x00\x43\x00\x0e\x00\x0c\x00\x17\x00\x40\x00\x0c\x00\x23\x00\x0c\x00\x2e\x00\x03\x00\x2f\x00\x04\x00\x21\x00\x24\x00\x1a\x00\x1b\x00\x41\x00\x42\x00\x1e\x00\x19\x00\x43\x00\x0e\x00\x30\x00\x1c\x00\x1d\x00\x0d\x00\x0e\x00\x29\x00\x3c\x00\x29\x00\x2a\x00\x18\x00\x08\x00\x07\x00\x05\x00\x03\x00\x4d\x00\x4a\x00\x4e\x00\x32\x00\x4b\x00\x03\x00\x3c\x00\x2c\x00\x3f\x00\x40\x00\x3e\x00\x32\x00\x33\x00\x27\x00\x03\x00\x34\x00\x03\x00\x2d\x00\x2c\x00\x38\x00\x29\x00\x20\x00\x15\x00\x17\x00\x16\x00\x13\x00\x18\x00\x00\x00\x03\x00\x03\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x00\x00\x00\x00\x0c\x00\x07\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+happyTable = HappyA# "\x00\x00\x28\x00\x0c\x00\x1f\x00\x18\x00\x28\x00\x0c\x00\x0c\x00\x0c\x00\x08\x00\x16\x00\x05\x00\x1f\x00\x07\x00\x29\x00\x2f\x00\x2e\x00\x2b\x00\x29\x00\x2a\x00\x2d\x00\x2b\x00\x1e\x00\x0d\x00\x17\x00\x20\x00\x0f\x00\x1a\x00\x24\x00\x09\x00\x2e\x00\x0f\x00\x0a\x00\x12\x00\x1d\x00\x10\x00\x03\x00\x03\x00\x26\x00\x04\x00\x1a\x00\x1b\x00\x22\x00\x27\x00\x28\x00\x0f\x00\x22\x00\x23\x00\x1d\x00\x24\x00\x1e\x00\x1a\x00\x0f\x00\x14\x00\x15\x00\xff\xff\x16\x00\x13\x00\x0c\x00\x0f\x00\x03\x00\x07\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
-happyReduceArr = array (1, 47) [
+happyReduceArr = array (1, 29) [
(1 , happyReduce_1),
(2 , happyReduce_2),
(3 , happyReduce_3),
@@ -232,29 +178,11 @@ happyReduceArr = array (1, 47) [
(26 , happyReduce_26),
(27 , happyReduce_27),
(28 , happyReduce_28),
- (29 , happyReduce_29),
- (30 , happyReduce_30),
- (31 , happyReduce_31),
- (32 , happyReduce_32),
- (33 , happyReduce_33),
- (34 , happyReduce_34),
- (35 , happyReduce_35),
- (36 , happyReduce_36),
- (37 , happyReduce_37),
- (38 , happyReduce_38),
- (39 , happyReduce_39),
- (40 , happyReduce_40),
- (41 , happyReduce_41),
- (42 , happyReduce_42),
- (43 , happyReduce_43),
- (44 , happyReduce_44),
- (45 , happyReduce_45),
- (46 , happyReduce_46),
- (47 , happyReduce_47)
+ (29 , happyReduce_29)
]
-happy_n_terms = 23 :: Int
-happy_n_nonterms = 28 :: Int
+happy_n_terms = 17 :: Int
+happy_n_nonterms = 19 :: Int
happyReduce_1 = happySpecReduce_1 0# happyReduction_1
happyReduction_1 happy_x_1
@@ -279,13 +207,20 @@ happyReduction_3 happy_x_1
happyReduce_4 = happySpecReduce_1 3# happyReduction_4
happyReduction_4 happy_x_1
- = case happyOut9 happy_x_1 of { happy_var_1 ->
+ = case happyOutTok happy_x_1 of { (PT _ (T_SingleQuoteString happy_var_1)) ->
happyIn7
+ (SingleQuoteString (happy_var_1)
+ )}
+
+happyReduce_5 = happySpecReduce_1 4# happyReduction_5
+happyReduction_5 happy_x_1
+ = case happyOut10 happy_x_1 of { happy_var_1 ->
+ happyIn8
(Grammars (reverse happy_var_1)
)}
-happyReduce_5 = happyReduce 6# 4# happyReduction_5
-happyReduction_5 (happy_x_6 `HappyStk`
+happyReduce_6 = happyReduce 6# 5# happyReduction_6
+happyReduction_6 (happy_x_6 `HappyStk`
happy_x_5 `HappyStk`
happy_x_4 `HappyStk`
happy_x_3 `HappyStk`
@@ -293,51 +228,51 @@ happyReduction_5 (happy_x_6 `HappyStk`
happy_x_1 `HappyStk`
happyRest)
= case happyOut4 happy_x_2 of { happy_var_2 ->
- case happyOut11 happy_x_3 of { happy_var_3 ->
- case happyOut13 happy_x_4 of { happy_var_4 ->
- happyIn8
+ case happyOut12 happy_x_3 of { happy_var_3 ->
+ case happyOut14 happy_x_4 of { happy_var_4 ->
+ happyIn9
(Grammar happy_var_2 (reverse happy_var_3) (reverse happy_var_4)
) `HappyStk` happyRest}}}
-happyReduce_6 = happySpecReduce_0 5# happyReduction_6
-happyReduction_6 = happyIn9
+happyReduce_7 = happySpecReduce_0 6# happyReduction_7
+happyReduction_7 = happyIn10
([]
)
-happyReduce_7 = happySpecReduce_2 5# happyReduction_7
-happyReduction_7 happy_x_2
+happyReduce_8 = happySpecReduce_2 6# happyReduction_8
+happyReduction_8 happy_x_2
happy_x_1
- = case happyOut9 happy_x_1 of { happy_var_1 ->
- case happyOut8 happy_x_2 of { happy_var_2 ->
- happyIn9
+ = case happyOut10 happy_x_1 of { happy_var_1 ->
+ case happyOut9 happy_x_2 of { happy_var_2 ->
+ happyIn10
(flip (:) happy_var_1 happy_var_2
)}}
-happyReduce_8 = happySpecReduce_2 6# happyReduction_8
-happyReduction_8 happy_x_2
+happyReduce_9 = happySpecReduce_2 7# happyReduction_9
+happyReduction_9 happy_x_2
happy_x_1
= case happyOut22 happy_x_2 of { happy_var_2 ->
- happyIn10
+ happyIn11
(StartCat happy_var_2
)}
-happyReduce_9 = happySpecReduce_0 7# happyReduction_9
-happyReduction_9 = happyIn11
+happyReduce_10 = happySpecReduce_0 8# happyReduction_10
+happyReduction_10 = happyIn12
([]
)
-happyReduce_10 = happySpecReduce_3 7# happyReduction_10
-happyReduction_10 happy_x_3
+happyReduce_11 = happySpecReduce_3 8# happyReduction_11
+happyReduction_11 happy_x_3
happy_x_2
happy_x_1
- = case happyOut11 happy_x_1 of { happy_var_1 ->
- case happyOut10 happy_x_2 of { happy_var_2 ->
- happyIn11
+ = case happyOut12 happy_x_1 of { happy_var_1 ->
+ case happyOut11 happy_x_2 of { happy_var_2 ->
+ happyIn12
(flip (:) happy_var_1 happy_var_2
)}}
-happyReduce_11 = happyReduce 8# 8# happyReduction_11
-happyReduction_11 (happy_x_8 `HappyStk`
+happyReduce_12 = happyReduce 8# 9# happyReduction_12
+happyReduction_12 (happy_x_8 `HappyStk`
happy_x_7 `HappyStk`
happy_x_6 `HappyStk`
happy_x_5 `HappyStk`
@@ -347,37 +282,28 @@ happyReduction_11 (happy_x_8 `HappyStk`
happy_x_1 `HappyStk`
happyRest)
= case happyOut4 happy_x_1 of { happy_var_1 ->
- case happyOut20 happy_x_3 of { happy_var_3 ->
- case happyOut14 happy_x_4 of { happy_var_4 ->
+ case happyOut21 happy_x_3 of { happy_var_3 ->
+ case happyOut15 happy_x_4 of { happy_var_4 ->
case happyOut22 happy_x_6 of { happy_var_6 ->
- case happyOut19 happy_x_8 of { happy_var_8 ->
- happyIn12
+ case happyOut20 happy_x_8 of { happy_var_8 ->
+ happyIn13
(Rule happy_var_1 happy_var_3 happy_var_4 happy_var_6 happy_var_8
) `HappyStk` happyRest}}}}}
-happyReduce_12 = happySpecReduce_0 9# happyReduction_12
-happyReduction_12 = happyIn13
+happyReduce_13 = happySpecReduce_0 10# happyReduction_13
+happyReduction_13 = happyIn14
([]
)
-happyReduce_13 = happySpecReduce_3 9# happyReduction_13
-happyReduction_13 happy_x_3
- happy_x_2
- happy_x_1
- = case happyOut13 happy_x_1 of { happy_var_1 ->
- case happyOut12 happy_x_2 of { happy_var_2 ->
- happyIn13
- (flip (:) happy_var_1 happy_var_2
- )}}
-
happyReduce_14 = happySpecReduce_3 10# happyReduction_14
happyReduction_14 happy_x_3
happy_x_2
happy_x_1
- = case happyOut16 happy_x_2 of { happy_var_2 ->
+ = case happyOut14 happy_x_1 of { happy_var_1 ->
+ case happyOut13 happy_x_2 of { happy_var_2 ->
happyIn14
- (Profile happy_var_2
- )}
+ (flip (:) happy_var_1 happy_var_2
+ )}}
happyReduce_15 = happySpecReduce_3 11# happyReduction_15
happyReduction_15 happy_x_3
@@ -385,267 +311,114 @@ happyReduction_15 happy_x_3
happy_x_1
= case happyOut17 happy_x_2 of { happy_var_2 ->
happyIn15
+ (Profile happy_var_2
+ )}
+
+happyReduce_16 = happySpecReduce_3 12# happyReduction_16
+happyReduction_16 happy_x_3
+ happy_x_2
+ happy_x_1
+ = case happyOut18 happy_x_2 of { happy_var_2 ->
+ happyIn16
(Ints happy_var_2
)}
-happyReduce_16 = happySpecReduce_0 12# happyReduction_16
-happyReduction_16 = happyIn16
+happyReduce_17 = happySpecReduce_0 13# happyReduction_17
+happyReduction_17 = happyIn17
([]
)
-happyReduce_17 = happySpecReduce_1 12# happyReduction_17
-happyReduction_17 happy_x_1
- = case happyOut15 happy_x_1 of { happy_var_1 ->
- happyIn16
+happyReduce_18 = happySpecReduce_1 13# happyReduction_18
+happyReduction_18 happy_x_1
+ = case happyOut16 happy_x_1 of { happy_var_1 ->
+ happyIn17
((:[]) happy_var_1
)}
-happyReduce_18 = happySpecReduce_3 12# happyReduction_18
-happyReduction_18 happy_x_3
+happyReduce_19 = happySpecReduce_3 13# happyReduction_19
+happyReduction_19 happy_x_3
happy_x_2
happy_x_1
- = case happyOut15 happy_x_1 of { happy_var_1 ->
- case happyOut16 happy_x_3 of { happy_var_3 ->
- happyIn16
+ = case happyOut16 happy_x_1 of { happy_var_1 ->
+ case happyOut17 happy_x_3 of { happy_var_3 ->
+ happyIn17
((:) happy_var_1 happy_var_3
)}}
-happyReduce_19 = happySpecReduce_0 13# happyReduction_19
-happyReduction_19 = happyIn17
+happyReduce_20 = happySpecReduce_0 14# happyReduction_20
+happyReduction_20 = happyIn18
([]
)
-happyReduce_20 = happySpecReduce_1 13# happyReduction_20
-happyReduction_20 happy_x_1
+happyReduce_21 = happySpecReduce_1 14# happyReduction_21
+happyReduction_21 happy_x_1
= case happyOut5 happy_x_1 of { happy_var_1 ->
- happyIn17
+ happyIn18
((:[]) happy_var_1
)}
-happyReduce_21 = happySpecReduce_3 13# happyReduction_21
-happyReduction_21 happy_x_3
+happyReduce_22 = happySpecReduce_3 14# happyReduction_22
+happyReduction_22 happy_x_3
happy_x_2
happy_x_1
= case happyOut5 happy_x_1 of { happy_var_1 ->
- case happyOut17 happy_x_3 of { happy_var_3 ->
- happyIn17
+ case happyOut18 happy_x_3 of { happy_var_3 ->
+ happyIn18
((:) happy_var_1 happy_var_3
)}}
-happyReduce_22 = happySpecReduce_1 14# happyReduction_22
-happyReduction_22 happy_x_1
+happyReduce_23 = happySpecReduce_1 15# happyReduction_23
+happyReduction_23 happy_x_1
= case happyOut22 happy_x_1 of { happy_var_1 ->
- happyIn18
+ happyIn19
(CatS happy_var_1
)}
-happyReduce_23 = happySpecReduce_1 14# happyReduction_23
-happyReduction_23 happy_x_1
+happyReduce_24 = happySpecReduce_1 15# happyReduction_24
+happyReduction_24 happy_x_1
= case happyOut6 happy_x_1 of { happy_var_1 ->
- happyIn18
+ happyIn19
(TermS happy_var_1
)}
-happyReduce_24 = happySpecReduce_1 15# happyReduction_24
-happyReduction_24 happy_x_1
- = happyIn19
+happyReduce_25 = happySpecReduce_1 16# happyReduction_25
+happyReduction_25 happy_x_1
+ = happyIn20
([]
)
-happyReduce_25 = happySpecReduce_1 15# happyReduction_25
-happyReduction_25 happy_x_1
- = case happyOut18 happy_x_1 of { happy_var_1 ->
- happyIn19
+happyReduce_26 = happySpecReduce_1 16# happyReduction_26
+happyReduction_26 happy_x_1
+ = case happyOut19 happy_x_1 of { happy_var_1 ->
+ happyIn20
((:[]) happy_var_1
)}
-happyReduce_26 = happySpecReduce_2 15# happyReduction_26
-happyReduction_26 happy_x_2
- happy_x_1
- = case happyOut18 happy_x_1 of { happy_var_1 ->
- case happyOut19 happy_x_2 of { happy_var_2 ->
- happyIn19
- ((:) happy_var_1 happy_var_2
- )}}
-
happyReduce_27 = happySpecReduce_2 16# happyReduction_27
happyReduction_27 happy_x_2
happy_x_1
- = case happyOut21 happy_x_1 of { happy_var_1 ->
- case happyOut22 happy_x_2 of { happy_var_2 ->
+ = case happyOut19 happy_x_1 of { happy_var_1 ->
+ case happyOut20 happy_x_2 of { happy_var_2 ->
happyIn20
- (Name (reverse happy_var_1) happy_var_2
+ ((:) happy_var_1 happy_var_2
)}}
-happyReduce_28 = happySpecReduce_0 17# happyReduction_28
-happyReduction_28 = happyIn21
- ([]
- )
-
-happyReduce_29 = happySpecReduce_3 17# happyReduction_29
-happyReduction_29 happy_x_3
- happy_x_2
- happy_x_1
- = case happyOut21 happy_x_1 of { happy_var_1 ->
- case happyOut23 happy_x_2 of { happy_var_2 ->
+happyReduce_28 = happySpecReduce_1 17# happyReduction_28
+happyReduction_28 happy_x_1
+ = case happyOut7 happy_x_1 of { happy_var_1 ->
happyIn21
- (flip (:) happy_var_1 happy_var_2
- )}}
-
-happyReduce_30 = happyReduce 4# 18# happyReduction_30
-happyReduction_30 (happy_x_4 `HappyStk`
- happy_x_3 `HappyStk`
- happy_x_2 `HappyStk`
- happy_x_1 `HappyStk`
- happyRest)
- = case happyOut23 happy_x_1 of { happy_var_1 ->
- case happyOut4 happy_x_3 of { happy_var_3 ->
- case happyOut27 happy_x_4 of { happy_var_4 ->
- happyIn22
- (Category happy_var_1 happy_var_3 (reverse happy_var_4)
- ) `HappyStk` happyRest}}}
-
-happyReduce_31 = happyReduce 4# 19# happyReduction_31
-happyReduction_31 (happy_x_4 `HappyStk`
- happy_x_3 `HappyStk`
- happy_x_2 `HappyStk`
- happy_x_1 `HappyStk`
- happyRest)
- = case happyOut4 happy_x_1 of { happy_var_1 ->
- case happyOut25 happy_x_3 of { happy_var_3 ->
- happyIn23
- (IdentParam happy_var_1 (reverse happy_var_3)
- ) `HappyStk` happyRest}}
-
-happyReduce_32 = happySpecReduce_2 20# happyReduction_32
-happyReduction_32 happy_x_2
- happy_x_1
- = case happyOut28 happy_x_2 of { happy_var_2 ->
- happyIn24
- (Field happy_var_2
- )}
-
-happyReduce_33 = happySpecReduce_0 21# happyReduction_33
-happyReduction_33 = happyIn25
- ([]
- )
-
-happyReduce_34 = happySpecReduce_3 21# happyReduction_34
-happyReduction_34 happy_x_3
- happy_x_2
- happy_x_1
- = case happyOut25 happy_x_1 of { happy_var_1 ->
- case happyOut24 happy_x_2 of { happy_var_2 ->
- happyIn25
- (flip (:) happy_var_1 happy_var_2
- )}}
-
-happyReduce_35 = happySpecReduce_2 22# happyReduction_35
-happyReduction_35 happy_x_2
- happy_x_1
- = case happyOut30 happy_x_2 of { happy_var_2 ->
- happyIn26
- (Proj happy_var_2
+ (Name happy_var_1
)}
-happyReduce_36 = happySpecReduce_0 23# happyReduction_36
-happyReduction_36 = happyIn27
- ([]
- )
-
-happyReduce_37 = happySpecReduce_2 23# happyReduction_37
-happyReduction_37 happy_x_2
- happy_x_1
- = case happyOut27 happy_x_1 of { happy_var_1 ->
- case happyOut26 happy_x_2 of { happy_var_2 ->
- happyIn27
- (flip (:) happy_var_1 happy_var_2
- )}}
-
-happyReduce_38 = happySpecReduce_3 24# happyReduction_38
-happyReduction_38 happy_x_3
- happy_x_2
- happy_x_1
- = case happyOut4 happy_x_1 of { happy_var_1 ->
- case happyOut30 happy_x_3 of { happy_var_3 ->
- happyIn28
- (KeyValue happy_var_1 happy_var_3
- )}}
-
-happyReduce_39 = happySpecReduce_0 25# happyReduction_39
-happyReduction_39 = happyIn29
- ([]
- )
-
-happyReduce_40 = happySpecReduce_1 25# happyReduction_40
-happyReduction_40 happy_x_1
- = case happyOut28 happy_x_1 of { happy_var_1 ->
- happyIn29
- ((:[]) happy_var_1
- )}
-
-happyReduce_41 = happySpecReduce_3 25# happyReduction_41
-happyReduction_41 happy_x_3
- happy_x_2
- happy_x_1
- = case happyOut28 happy_x_1 of { happy_var_1 ->
- case happyOut29 happy_x_3 of { happy_var_3 ->
- happyIn29
- ((:) happy_var_1 happy_var_3
- )}}
-
-happyReduce_42 = happySpecReduce_1 26# happyReduction_42
-happyReduction_42 happy_x_1
- = case happyOut4 happy_x_1 of { happy_var_1 ->
- happyIn30
- (ParamSimple happy_var_1
- )}
-
-happyReduce_43 = happyReduce 4# 26# happyReduction_43
-happyReduction_43 (happy_x_4 `HappyStk`
- happy_x_3 `HappyStk`
- happy_x_2 `HappyStk`
- happy_x_1 `HappyStk`
- happyRest)
- = case happyOut4 happy_x_1 of { happy_var_1 ->
- case happyOut31 happy_x_3 of { happy_var_3 ->
- happyIn30
- (ParamPatt happy_var_1 happy_var_3
- ) `HappyStk` happyRest}}
-
-happyReduce_44 = happySpecReduce_3 26# happyReduction_44
-happyReduction_44 happy_x_3
- happy_x_2
- happy_x_1
- = case happyOut29 happy_x_2 of { happy_var_2 ->
- happyIn30
- (ParamRec happy_var_2
- )}
-
-happyReduce_45 = happySpecReduce_0 27# happyReduction_45
-happyReduction_45 = happyIn31
- ([]
- )
-
-happyReduce_46 = happySpecReduce_1 27# happyReduction_46
-happyReduction_46 happy_x_1
- = case happyOut30 happy_x_1 of { happy_var_1 ->
- happyIn31
- ((:[]) happy_var_1
+happyReduce_29 = happySpecReduce_1 18# happyReduction_29
+happyReduction_29 happy_x_1
+ = case happyOut7 happy_x_1 of { happy_var_1 ->
+ happyIn22
+ (Category happy_var_1
)}
-happyReduce_47 = happySpecReduce_3 27# happyReduction_47
-happyReduction_47 happy_x_3
- happy_x_2
- happy_x_1
- = case happyOut30 happy_x_1 of { happy_var_1 ->
- case happyOut31 happy_x_3 of { happy_var_3 ->
- happyIn31
- ((:) happy_var_1 happy_var_3
- )}}
-
happyNewToken action sts stk [] =
- happyDoAction 22# (error "reading EOF!") action sts stk []
+ happyDoAction 16# (error "reading EOF!") action sts stk []
happyNewToken action sts stk (tk:tks) =
let cont i = happyDoAction i tk action sts stk tks in
@@ -657,20 +430,14 @@ happyNewToken action sts stk (tk:tks) =
PT _ (TS "[") -> cont 5#;
PT _ (TS "]") -> cont 6#;
PT _ (TS ",") -> cont 7#;
- PT _ (TS "/") -> cont 8#;
- PT _ (TS "{") -> cont 9#;
- PT _ (TS "}") -> cont 10#;
- PT _ (TS "!") -> cont 11#;
- PT _ (TS "=") -> cont 12#;
- PT _ (TS "(") -> cont 13#;
- PT _ (TS ")") -> cont 14#;
- PT _ (TS "end") -> cont 15#;
- PT _ (TS "grammar") -> cont 16#;
- PT _ (TS "startcat") -> cont 17#;
- PT _ (TV happy_dollar_dollar) -> cont 18#;
- PT _ (TI happy_dollar_dollar) -> cont 19#;
- PT _ (TL happy_dollar_dollar) -> cont 20#;
- _ -> cont 21#;
+ PT _ (TS "end") -> cont 8#;
+ PT _ (TS "grammar") -> cont 9#;
+ PT _ (TS "startcat") -> cont 10#;
+ PT _ (TV happy_dollar_dollar) -> cont 11#;
+ PT _ (TI happy_dollar_dollar) -> cont 12#;
+ PT _ (TL happy_dollar_dollar) -> cont 13#;
+ PT _ (T_SingleQuoteString happy_dollar_dollar) -> cont 14#;
+ _ -> cont 15#;
_ -> happyError tks
}
@@ -681,7 +448,7 @@ happyReturn = (returnM)
happyThen1 m k tks = (thenM) m (\a -> k a tks)
happyReturn1 = \a tks -> (returnM) a
-pGrammars tks = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut7 x))
+pGrammars tks = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut8 x))
happySeq = happyDontSeq
@@ -697,7 +464,7 @@ happyError ts =
myLexer = tokens
{-# LINE 1 "GenericTemplate.hs" #-}
--- $Id: ParCFG.hs,v 1.2 2004/09/29 09:27:29 bringert Exp $
+-- $Id: ParCFG.hs,v 1.3 2004/09/29 16:53:46 bringert Exp $
diff --git a/src/GF/CFGM/ParCFG.y b/src/GF/CFGM/ParCFG.y
index 0570d7c38..b6021bcd6 100644
--- a/src/GF/CFGM/ParCFG.y
+++ b/src/GF/CFGM/ParCFG.y
@@ -19,13 +19,6 @@ import ErrM
'[' { PT _ (TS "[") }
']' { PT _ (TS "]") }
',' { PT _ (TS ",") }
- '/' { PT _ (TS "/") }
- '{' { PT _ (TS "{") }
- '}' { PT _ (TS "}") }
- '!' { PT _ (TS "!") }
- '=' { PT _ (TS "=") }
- '(' { PT _ (TS "(") }
- ')' { PT _ (TS ")") }
'end' { PT _ (TS "end") }
'grammar' { PT _ (TS "grammar") }
'startcat' { PT _ (TS "startcat") }
@@ -33,6 +26,7 @@ import ErrM
L_ident { PT _ (TV $$) }
L_integ { PT _ (TI $$) }
L_quoted { PT _ (TL $$) }
+L_SingleQuoteString { PT _ (T_SingleQuoteString $$) }
L_err { _ }
@@ -41,6 +35,7 @@ L_err { _ }
Ident : L_ident { Ident $1 }
Integer : L_integ { (read $1) :: Integer }
String : L_quoted { $1 }
+SingleQuoteString : L_SingleQuoteString { SingleQuoteString ($1)}
Grammars :: { Grammars }
Grammars : ListGrammar { Grammars (reverse $1) }
@@ -105,60 +100,11 @@ ListSymbol : '.' { [] }
Name :: { Name }
-Name : ListIdentParam Category { Name (reverse $1) $2 }
-
-
-ListIdentParam :: { [IdentParam] }
-ListIdentParam : {- empty -} { [] }
- | ListIdentParam IdentParam '/' { flip (:) $1 $2 }
+Name : SingleQuoteString { Name $1 }
Category :: { Category }
-Category : IdentParam '.' Ident ListProj { Category $1 $3 (reverse $4) }
-
-
-IdentParam :: { IdentParam }
-IdentParam : Ident '{' ListField '}' { IdentParam $1 (reverse $3) }
-
-
-Field :: { Field }
-Field : '.' KeyValue { Field $2 }
-
-
-ListField :: { [Field] }
-ListField : {- empty -} { [] }
- | ListField Field ';' { flip (:) $1 $2 }
-
-
-Proj :: { Proj }
-Proj : '!' Param { Proj $2 }
-
-
-ListProj :: { [Proj] }
-ListProj : {- empty -} { [] }
- | ListProj Proj { flip (:) $1 $2 }
-
-
-KeyValue :: { KeyValue }
-KeyValue : Ident '=' Param { KeyValue $1 $3 }
-
-
-ListKeyValue :: { [KeyValue] }
-ListKeyValue : {- empty -} { [] }
- | KeyValue { (:[]) $1 }
- | KeyValue ';' ListKeyValue { (:) $1 $3 }
-
-
-Param :: { Param }
-Param : Ident { ParamSimple $1 }
- | Ident '(' ListParam ')' { ParamPatt $1 $3 }
- | '{' ListKeyValue '}' { ParamRec $2 }
-
-
-ListParam :: { [Param] }
-ListParam : {- empty -} { [] }
- | Param { (:[]) $1 }
- | Param ',' ListParam { (:) $1 $3 }
+Category : SingleQuoteString { Category $1 }
diff --git a/src/GF/CFGM/PrintCFG.hs b/src/GF/CFGM/PrintCFG.hs
index 3ff89234d..ba8f6f6a6 100644
--- a/src/GF/CFGM/PrintCFG.hs
+++ b/src/GF/CFGM/PrintCFG.hs
@@ -82,6 +82,10 @@ instance Print Ident where
prt _ (Ident i) = doc (showString i)
+instance Print SingleQuoteString where
+ prt _ (SingleQuoteString i) = doc (showString i)
+
+
instance Print Grammars where
prt i e = case e of
@@ -138,56 +142,12 @@ instance Print Symbol where
instance Print Name where
prt i e = case e of
- Name identparams category -> prPrec i 0 (concatD [prt 0 identparams , prt 0 category])
+ Name singlequotestring -> prPrec i 0 (concatD [prt 0 singlequotestring])
instance Print Category where
prt i e = case e of
- Category identparam id projs -> prPrec i 0 (concatD [prt 0 identparam , doc (showString ".") , prt 0 id , prt 0 projs])
-
-
-instance Print IdentParam where
- prt i e = case e of
- IdentParam id fields -> prPrec i 0 (concatD [prt 0 id , doc (showString "{") , prt 0 fields , doc (showString "}")])
+ Category singlequotestring -> prPrec i 0 (concatD [prt 0 singlequotestring])
- prtList es = case es of
- [] -> (concatD [])
- x:xs -> (concatD [prt 0 x , doc (showString "/") , prt 0 xs])
-
-instance Print Field where
- prt i e = case e of
- Field keyvalue -> prPrec i 0 (concatD [doc (showString ".") , prt 0 keyvalue])
-
- prtList es = case es of
- [] -> (concatD [])
- x:xs -> (concatD [prt 0 x , doc (showString ";") , prt 0 xs])
-
-instance Print Proj where
- prt i e = case e of
- Proj param -> prPrec i 0 (concatD [doc (showString "!") , prt 0 param])
-
- prtList es = case es of
- [] -> (concatD [])
- x:xs -> (concatD [prt 0 x , prt 0 xs])
-
-instance Print KeyValue where
- prt i e = case e of
- KeyValue id param -> prPrec i 0 (concatD [prt 0 id , doc (showString "=") , prt 0 param])
-
- prtList es = case es of
- [] -> (concatD [])
- [x] -> (concatD [prt 0 x])
- x:xs -> (concatD [prt 0 x , doc (showString ";") , prt 0 xs])
-
-instance Print Param where
- prt i e = case e of
- ParamSimple id -> prPrec i 0 (concatD [prt 0 id])
- ParamPatt id params -> prPrec i 0 (concatD [prt 0 id , doc (showString "(") , prt 0 params , doc (showString ")")])
- ParamRec keyvalues -> prPrec i 0 (concatD [doc (showString "{") , prt 0 keyvalues , doc (showString "}")])
-
- prtList es = case es of
- [] -> (concatD [])
- [x] -> (concatD [prt 0 x])
- x:xs -> (concatD [prt 0 x , doc (showString ",") , prt 0 xs])
diff --git a/src/GF/CFGM/PrintCFGrammar.hs b/src/GF/CFGM/PrintCFGrammar.hs
index f27eddb1a..80025deea 100644
--- a/src/GF/CFGM/PrintCFGrammar.hs
+++ b/src/GF/CFGM/PrintCFGrammar.hs
@@ -2,11 +2,17 @@
module PrintCFGrammar (prCanonAsCFGM) where
import AbsGFC
+import qualified PrintCFG
import Ident
import GFC
import Modules
import qualified ConvertGrammar as Cnv
import qualified PrintParser as Prt
+import qualified CFGrammar
+import qualified GrammarTypes as GT
+import qualified AbsCFG
+import qualified Parser
+import qualified PrintParser
import ErrM
import List (intersperse)
@@ -28,11 +34,55 @@ getFlag :: [Flag] -> String -> Maybe String
getFlag fs x = listToMaybe [v | Flg (IC k) (IC v) <- fs, k == x]
prLangAsCFGM :: CanonGrammar -> Ident -> Maybe String -> String
-prLangAsCFGM gr i@(IC lang) start = (header . startcat . rules . footer) ""
+prLangAsCFGM gr i start = prCFGrammarAsCFGM (Cnv.cfg (Cnv.pInfo gr i)) i start
+
+{-
+prCFGrammarAsCFGM :: GT.CFGrammar -> Ident -> Maybe String -> String
+prCFGrammarAsCFGM gr i@(IC lang) start = (header . startcat . rules . footer) ""
where
header = showString "grammar " . showString lang . showString "\n"
startcat = maybe id (\s -> showString "startcat " . showString (s++"{}.s") . showString ";\n") start
- rules0 = map Prt.prt $ Cnv.cfg $ Cnv.pInfo gr i
- rules = showString $ concat $ map (\l -> init l++";\n") rules0
+ rules0 = map Prt.prt gr
+ rules = showString $ concat $ map (\l -> init l++";\n") rules0
footer = showString "end grammar\n"
+-}
+
+prCFGrammarAsCFGM :: GT.CFGrammar -> Ident -> Maybe String -> String
+prCFGrammarAsCFGM gr i start = PrintCFG.printTree $ cfGrammarToCFGM gr i start
+
+cfGrammarToCFGM :: GT.CFGrammar -> Ident -> Maybe String -> AbsCFG.Grammar
+cfGrammarToCFGM gr i start = AbsCFG.Grammar (identToCFGMIdent i) flags (map ruleToCFGMRule gr)
+ where flags = maybe [] (\c -> [AbsCFG.StartCat $ strToCFGMCat (c++"{}.s")]) start
+
+ruleToCFGMRule :: GT.CFRule -> AbsCFG.Rule
+ruleToCFGMRule (CFGrammar.Rule c rhs (GT.CFName (GT.MCFName fun cat args) lbl profile))
+ = AbsCFG.Rule fun' n' p' c' rhs'
+ where
+ fun' = identToCFGMIdent fun
+ n' = strToCFGMName (Prt.prt cat ++ concat [ "/" ++ Prt.prt arg | arg <- args ] ++ Prt.prt lbl)
+ p' = profileToCFGMProfile profile
+ c' = catToCFGMCat c
+ rhs' = map symbolToGFCMSymbol rhs
+
+profileToCFGMProfile :: GT.CFProfile -> AbsCFG.Profile
+profileToCFGMProfile = AbsCFG.Profile . map (AbsCFG.Ints . map fromIntegral)
+
+identToCFGMIdent :: Ident -> AbsCFG.Ident
+identToCFGMIdent = AbsCFG.Ident . Prt.prt
+
+strToCFGMCat :: String -> AbsCFG.Category
+strToCFGMCat = AbsCFG.Category . AbsCFG.SingleQuoteString . quoteSingle
+
+catToCFGMCat :: GT.CFCat -> AbsCFG.Category
+catToCFGMCat = strToCFGMCat . Prt.prt
+
+strToCFGMName :: String -> AbsCFG.Name
+strToCFGMName = AbsCFG.Name . AbsCFG.SingleQuoteString . quoteSingle
+
+symbolToGFCMSymbol :: Parser.Symbol GT.CFCat GT.Token -> AbsCFG.Symbol
+symbolToGFCMSymbol (Parser.Cat c) = AbsCFG.CatS (catToCFGMCat c)
+symbolToGFCMSymbol (Parser.Tok t) = AbsCFG.TermS (Prt.prt t)
+quoteSingle :: String -> String
+quoteSingle s = "'" ++ escapeSingle s ++ "'"
+ where escapeSingle = concatMap (\c -> if c == '\'' then "\\'" else [c])