Updated to simple CFGM grammar, use CFGM pretty printer when printing cfgm grammars.

This commit is contained in:
bringert
2004-09-29 15:53:46 +00:00
parent df2c63c559
commit 7492cfd236
8 changed files with 273 additions and 557 deletions

View File

@@ -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)

View File

@@ -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 "," ;
-}

View File

@@ -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>" #-}

View File

@@ -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

View File

@@ -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
happy_x_1
= case happyOut9 happy_x_1 of { happy_var_1 ->
case happyOut8 happy_x_2 of { happy_var_2 ->
happyIn9
(flip (:) happy_var_1 happy_var_2
)}}
happyReduce_8 = happySpecReduce_2 6# happyReduction_8
happyReduction_8 happy_x_2
happy_x_1
= case happyOut22 happy_x_2 of { happy_var_2 ->
= case happyOut10 happy_x_1 of { happy_var_1 ->
case happyOut9 happy_x_2 of { happy_var_2 ->
happyIn10
(StartCat happy_var_2
)}
happyReduce_9 = happySpecReduce_0 7# happyReduction_9
happyReduction_9 = happyIn11
([]
)
happyReduce_10 = happySpecReduce_3 7# happyReduction_10
happyReduction_10 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
(flip (:) happy_var_1 happy_var_2
)}}
happyReduce_11 = happyReduce 8# 8# happyReduction_11
happyReduction_11 (happy_x_8 `HappyStk`
happyReduce_9 = happySpecReduce_2 7# happyReduction_9
happyReduction_9 happy_x_2
happy_x_1
= case happyOut22 happy_x_2 of { happy_var_2 ->
happyIn11
(StartCat happy_var_2
)}
happyReduce_10 = happySpecReduce_0 8# happyReduction_10
happyReduction_10 = happyIn12
([]
)
happyReduce_11 = happySpecReduce_3 8# happyReduction_11
happyReduction_11 happy_x_3
happy_x_2
happy_x_1
= 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_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
((:[]) happy_var_1
)}
happyReduce_18 = happySpecReduce_3 12# happyReduction_18
happyReduction_18 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
((:) happy_var_1 happy_var_3
)}}
happyReduce_19 = happySpecReduce_0 13# happyReduction_19
happyReduction_19 = happyIn17
([]
)
happyReduce_20 = happySpecReduce_1 13# happyReduction_20
happyReduction_20 happy_x_1
= case happyOut5 happy_x_1 of { happy_var_1 ->
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_21 = happySpecReduce_3 13# happyReduction_21
happyReduction_21 happy_x_3
happyReduce_19 = happySpecReduce_3 13# happyReduction_19
happyReduction_19 happy_x_3
happy_x_2
happy_x_1
= case happyOut5 happy_x_1 of { happy_var_1 ->
= 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_22 = happySpecReduce_1 14# happyReduction_22
happyReduction_22 happy_x_1
= case happyOut22 happy_x_1 of { happy_var_1 ->
happyReduce_20 = happySpecReduce_0 14# happyReduction_20
happyReduction_20 = happyIn18
([]
)
happyReduce_21 = happySpecReduce_1 14# happyReduction_21
happyReduction_21 happy_x_1
= case happyOut5 happy_x_1 of { happy_var_1 ->
happyIn18
(CatS happy_var_1
((:[]) happy_var_1
)}
happyReduce_23 = happySpecReduce_1 14# happyReduction_23
happyReduction_23 happy_x_1
= case happyOut6 happy_x_1 of { happy_var_1 ->
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 happyOut18 happy_x_3 of { happy_var_3 ->
happyIn18
(TermS happy_var_1
((:) happy_var_1 happy_var_3
)}}
happyReduce_23 = happySpecReduce_1 15# happyReduction_23
happyReduction_23 happy_x_1
= case happyOut22 happy_x_1 of { happy_var_1 ->
happyIn19
(CatS happy_var_1
)}
happyReduce_24 = happySpecReduce_1 15# happyReduction_24
happyReduction_24 happy_x_1
= happyIn19
= case happyOut6 happy_x_1 of { happy_var_1 ->
happyIn19
(TermS happy_var_1
)}
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
)}}
(Name happy_var_1
)}
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 ->
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 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
(Category happy_var_1
)}
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
)}
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_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 $

View File

@@ -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 }

View File

@@ -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])
Category singlequotestring -> prPrec i 0 (concatD [prt 0 singlequotestring])
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 "}")])
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])

View File

@@ -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])