packages feed

rtk-0.11: test/golden/debug-test/DebugTestParser.y

-- Generated by RTK from grammar 'DebugTest'. Do not edit by hand.
{
{-# LANGUAGE DeriveDataTypeable #-}
module DebugTestParser where
import qualified Data.Generics as Gen
import qualified DebugTestLexer as L (Token(..), PosToken(..), AlexPosn(..), alexScanTokens)
}

%name parseDebugTest
%tokentype { L.PosToken }
%monad { Either String }
%error { parseError }

%token

rtk__eof { L.PosToken _ L.EndOfFile }
tok__symbol__12 { L.PosToken _ L.Tk__tok__symbol__12 }
tok__symbol__11 { L.PosToken _ L.Tk__tok__symbol__11 }
tok_while_10 { L.PosToken _ L.Tk__tok_while_10 }
tok_unused_13 { L.PosToken _ L.Tk__tok_unused_13 }
tok_if_8 { L.PosToken _ L.Tk__tok_if_8 }
tok_else_9 { L.PosToken _ L.Tk__tok_else_9 }
tok__eql__0 { L.PosToken _ L.Tk__tok__eql__0 }
tok__semi__1 { L.PosToken _ L.Tk__tok__semi__1 }
tok__symbol__5 { L.PosToken _ L.Tk__tok__symbol__5 }
tok__minus__3 { L.PosToken _ L.Tk__tok__minus__3 }
tok__plus__2 { L.PosToken _ L.Tk__tok__plus__2 }
tok__star__4 { L.PosToken _ L.Tk__tok__star__4 }
tok__rparen__7 { L.PosToken _ L.Tk__tok__rparen__7 }
tok__lparen__6 { L.PosToken _ L.Tk__tok__lparen__6 }
number { L.PosToken _ (L.Tk__number _) }
identifier { L.PosToken _ (L.Tk__identifier _) }
qq_UnusedRule2 { L.PosToken _ (L.Tk__qq_UnusedRule2 _) }
qq_UnusedRule1 { L.PosToken _ (L.Tk__qq_UnusedRule1 _) }
qq_Block { L.PosToken _ (L.Tk__qq_Block _) }
qq_WhileLoop { L.PosToken _ (L.Tk__qq_WhileLoop _) }
qq_IfStatement { L.PosToken _ (L.Tk__qq_IfStatement _) }
qq_Factor { L.PosToken _ (L.Tk__qq_Factor _) }
qq_Term { L.PosToken _ (L.Tk__qq_Term _) }
qq_Expression { L.PosToken _ (L.Tk__qq_Expression _) }
qq_Assignment { L.PosToken _ (L.Tk__qq_Assignment _) }
qq_Statement { L.PosToken _ (L.Tk__qq_Statement _) }
qq_Program { L.PosToken _ (L.Tk__qq_Program _) }

%%

DebugTest__top : Program rtk__eof { (reverse $1) }

Program : {- empty -} { [] } |
          Program ListElem_Program0 { $2 : $1 }

Assignment : qq_Assignment { Anti_Assignment (tkVal_qq_Assignment $1) } |
             identifier tok__eql__0 Expression tok__semi__1 { Ctr__Assignment__0 (rtkPosOf $1) (tkVal_identifier $1) $3 }

Block : qq_Block { Anti_Block (tkVal_qq_Block $1) } |
        tok__symbol__11 Rule_7 tok__symbol__12 { Ctr__Block__0 (rtkPosOf $1) (reverse $2) }

Expression : qq_Expression { Anti_Expression (tkVal_qq_Expression $1) } |
             Term Rule_1 { Ctr__Expression__0 (rtkPosOf $1) $1 (reverse $2) }

Factor : qq_Factor { Anti_Factor (tkVal_qq_Factor $1) } |
         identifier { Ctr__Factor__0 (rtkPosOf $1) (tkVal_identifier $1) } |
         number { Ctr__Factor__1 (rtkPosOf $1) (tkVal_number $1) } |
         tok__lparen__6 Expression tok__rparen__7 { Ctr__Factor__2 (rtkPosOf $1) $2 }

IfStatement : qq_IfStatement { Anti_IfStatement (tkVal_qq_IfStatement $1) } |
              tok_if_8 tok__lparen__6 Expression tok__rparen__7 Statement { Ctr__IfStatement__0 (rtkPosOf $1) $3 $5 } |
              tok_if_8 tok__lparen__6 Expression tok__rparen__7 Statement tok_else_9 Statement { Ctr__IfStatement__1 (rtkPosOf $1) $3 $5 $7 }

Rule_1 : {- empty -} { [] } |
         Rule_1 Rule_2 { $2 : $1 }

Rule_2 : Rule_3 Term { Ctr__Rule_2__0 (rtkPosOf $1) $1 $2 }

Rule_3 : tok__plus__2 { Ctr__Rule_3__0 (rtkPosOf $1) } |
         tok__minus__3 { Ctr__Rule_3__1 (rtkPosOf $1) }

Rule_4 : {- empty -} { [] } |
         Rule_4 Rule_5 { $2 : $1 }

Rule_5 : Rule_6 Factor { Ctr__Rule_5__0 (rtkPosOf $1) $1 $2 }

Rule_6 : tok__star__4 { Ctr__Rule_6__0 (rtkPosOf $1) } |
         tok__symbol__5 { Ctr__Rule_6__1 (rtkPosOf $1) }

Rule_7 : {- empty -} { [] } |
         Rule_7 Statement { $2 : $1 }

Statement : qq_Statement { Anti_Statement (tkVal_qq_Statement $1) } |
            Assignment { Ctr__Statement__0 (rtkPosOf $1) $1 } |
            IfStatement { Ctr__Statement__1 (rtkPosOf $1) $1 } |
            WhileLoop { Ctr__Statement__2 (rtkPosOf $1) $1 } |
            Block { Ctr__Statement__3 (rtkPosOf $1) $1 }

ListElem_Program0 : qq_Program { Anti_Statement (tkVal_qq_Program $1) } |
                    Statement { $1 }

Term : qq_Term { Anti_Term (tkVal_qq_Term $1) } |
       Factor Rule_4 { Ctr__Term__0 (rtkPosOf $1) $1 (reverse $2) }

ListElem_UnusedRule28 : qq_UnusedRule2 { Anti_UnusedRule1 (tkVal_qq_UnusedRule2 $1) } |
                        UnusedRule1 { $1 }

UnusedRule1 : qq_UnusedRule1 { Anti_UnusedRule1 (tkVal_qq_UnusedRule1 $1) } |
              tok_unused_13 identifier { Ctr__UnusedRule1__1 (rtkPosOf $1) (tkVal_identifier $2) }

UnusedRule2 : {- empty -} { [] } |
              UnusedRule2 ListElem_UnusedRule28 { $2 : $1 }

WhileLoop : qq_WhileLoop { Anti_WhileLoop (tkVal_qq_WhileLoop $1) } |
            tok_while_10 tok__lparen__6 Expression tok__rparen__7 Statement { Ctr__WhileLoop__0 (rtkPosOf $1) $3 $5 }


{
parseError :: [L.PosToken] -> Either String a
parseError [] = Left "unexpected end of input"
parseError (L.PosToken (L.AlexPn _ line col) tok : _) =
    Left $ show line ++ ":" ++ show col ++ ":unexpected " ++ showRtkToken tok

-- Render a token the way it appears in the source, for error messages
showRtkToken :: L.Token -> String
showRtkToken L.EndOfFile = "end of input"
showRtkToken L.Tk__tok__symbol__12 = "'}'"
showRtkToken L.Tk__tok__symbol__11 = "'{'"
showRtkToken L.Tk__tok_while_10 = "'while'"
showRtkToken L.Tk__tok_unused_13 = "'unused'"
showRtkToken L.Tk__tok_if_8 = "'if'"
showRtkToken L.Tk__tok_else_9 = "'else'"
showRtkToken L.Tk__tok__eql__0 = "'='"
showRtkToken L.Tk__tok__semi__1 = "';'"
showRtkToken L.Tk__tok__symbol__5 = "'/'"
showRtkToken L.Tk__tok__minus__3 = "'-'"
showRtkToken L.Tk__tok__plus__2 = "'+'"
showRtkToken L.Tk__tok__star__4 = "'*'"
showRtkToken L.Tk__tok__rparen__7 = "')'"
showRtkToken L.Tk__tok__lparen__6 = "'('"
showRtkToken (L.Tk__number v) = "number " ++ show v
showRtkToken (L.Tk__identifier v) = "identifier " ++ show v
showRtkToken (L.Tk__qq_UnusedRule2 v) = "qq_UnusedRule2 " ++ show v
showRtkToken (L.Tk__qq_UnusedRule1 v) = "qq_UnusedRule1 " ++ show v
showRtkToken (L.Tk__qq_Block v) = "qq_Block " ++ show v
showRtkToken (L.Tk__qq_WhileLoop v) = "qq_WhileLoop " ++ show v
showRtkToken (L.Tk__qq_IfStatement v) = "qq_IfStatement " ++ show v
showRtkToken (L.Tk__qq_Factor v) = "qq_Factor " ++ show v
showRtkToken (L.Tk__qq_Term v) = "qq_Term " ++ show v
showRtkToken (L.Tk__qq_Expression v) = "qq_Expression " ++ show v
showRtkToken (L.Tk__qq_Assignment v) = "qq_Assignment " ++ show v
showRtkToken (L.Tk__qq_Statement v) = "qq_Statement " ++ show v
showRtkToken (L.Tk__qq_Program v) = "qq_Program " ++ show v

-- Source position of a node: every constructor except the Anti_* splice
-- artifacts stores the position of its alternative's first symbol in its
-- first field. Positions are transparent for equality and ordering, so two
-- ASTs that differ only in source positions (e.g. a quasi-quote parsed at
-- compile time vs the same construct parsed at run time) compare equal.
newtype RtkPos = RtkPos L.AlexPosn deriving (Show, Gen.Data, Gen.Typeable)
instance Eq RtkPos where _ == _ = True
instance Ord RtkPos where compare _ _ = EQ

-- The position used where no source token exists: empty productions, empty
-- lists, absent optionals and Anti_* quasi-quote splices
rtkNoPos :: RtkPos
rtkNoPos = RtkPos (L.AlexPn 0 0 0)

class RtkPosOf a where
    rtkPosOf :: a -> RtkPos
instance RtkPosOf L.PosToken where
    rtkPosOf (L.PosToken p _) = RtkPos p
instance RtkPosOf a => RtkPosOf [a] where
    rtkPosOf (x : _) = rtkPosOf x
    rtkPosOf []      = rtkNoPos
instance RtkPosOf a => RtkPosOf (Maybe a) where
    rtkPosOf (Just x) = rtkPosOf x
    rtkPosOf Nothing  = rtkNoPos
-- A Char carries no position; this also covers String token payloads
instance RtkPosOf Char where
    rtkPosOf _ = rtkNoPos

-- Recover a token's payload from the whole positioned token: %token
-- bindings keep the L.PosToken so semantic actions can read its position
tkVal_number :: L.PosToken -> String
tkVal_number (L.PosToken _ (L.Tk__number v)) = v
tkVal_number t = error ("rtk internal error: token number expected, got " ++ showRtkToken (L.ptToken t))
tkVal_identifier :: L.PosToken -> String
tkVal_identifier (L.PosToken _ (L.Tk__identifier v)) = v
tkVal_identifier t = error ("rtk internal error: token identifier expected, got " ++ showRtkToken (L.ptToken t))
tkVal_qq_UnusedRule2 :: L.PosToken -> String
tkVal_qq_UnusedRule2 (L.PosToken _ (L.Tk__qq_UnusedRule2 v)) = v
tkVal_qq_UnusedRule2 t = error ("rtk internal error: token qq_UnusedRule2 expected, got " ++ showRtkToken (L.ptToken t))
tkVal_qq_UnusedRule1 :: L.PosToken -> String
tkVal_qq_UnusedRule1 (L.PosToken _ (L.Tk__qq_UnusedRule1 v)) = v
tkVal_qq_UnusedRule1 t = error ("rtk internal error: token qq_UnusedRule1 expected, got " ++ showRtkToken (L.ptToken t))
tkVal_qq_Block :: L.PosToken -> String
tkVal_qq_Block (L.PosToken _ (L.Tk__qq_Block v)) = v
tkVal_qq_Block t = error ("rtk internal error: token qq_Block expected, got " ++ showRtkToken (L.ptToken t))
tkVal_qq_WhileLoop :: L.PosToken -> String
tkVal_qq_WhileLoop (L.PosToken _ (L.Tk__qq_WhileLoop v)) = v
tkVal_qq_WhileLoop t = error ("rtk internal error: token qq_WhileLoop expected, got " ++ showRtkToken (L.ptToken t))
tkVal_qq_IfStatement :: L.PosToken -> String
tkVal_qq_IfStatement (L.PosToken _ (L.Tk__qq_IfStatement v)) = v
tkVal_qq_IfStatement t = error ("rtk internal error: token qq_IfStatement expected, got " ++ showRtkToken (L.ptToken t))
tkVal_qq_Factor :: L.PosToken -> String
tkVal_qq_Factor (L.PosToken _ (L.Tk__qq_Factor v)) = v
tkVal_qq_Factor t = error ("rtk internal error: token qq_Factor expected, got " ++ showRtkToken (L.ptToken t))
tkVal_qq_Term :: L.PosToken -> String
tkVal_qq_Term (L.PosToken _ (L.Tk__qq_Term v)) = v
tkVal_qq_Term t = error ("rtk internal error: token qq_Term expected, got " ++ showRtkToken (L.ptToken t))
tkVal_qq_Expression :: L.PosToken -> String
tkVal_qq_Expression (L.PosToken _ (L.Tk__qq_Expression v)) = v
tkVal_qq_Expression t = error ("rtk internal error: token qq_Expression expected, got " ++ showRtkToken (L.ptToken t))
tkVal_qq_Assignment :: L.PosToken -> String
tkVal_qq_Assignment (L.PosToken _ (L.Tk__qq_Assignment v)) = v
tkVal_qq_Assignment t = error ("rtk internal error: token qq_Assignment expected, got " ++ showRtkToken (L.ptToken t))
tkVal_qq_Statement :: L.PosToken -> String
tkVal_qq_Statement (L.PosToken _ (L.Tk__qq_Statement v)) = v
tkVal_qq_Statement t = error ("rtk internal error: token qq_Statement expected, got " ++ showRtkToken (L.ptToken t))
tkVal_qq_Program :: L.PosToken -> String
tkVal_qq_Program (L.PosToken _ (L.Tk__qq_Program v)) = v
tkVal_qq_Program t = error ("rtk internal error: token qq_Program expected, got " ++ showRtkToken (L.ptToken t))

type Program = [Statement]
data Assignment = Anti_Assignment String |
                  Ctr__Assignment__0 RtkPos String Expression
                  deriving (Ord, Eq, Show, Gen.Data, Gen.Typeable)
instance RtkPosOf Assignment where
    rtkPosOf (Anti_Assignment _) = rtkNoPos
    rtkPosOf (Ctr__Assignment__0 p _ _) = p
data Block = Anti_Block String |
             Ctr__Block__0 RtkPos Rule_7
             deriving (Ord, Eq, Show, Gen.Data, Gen.Typeable)
instance RtkPosOf Block where
    rtkPosOf (Anti_Block _) = rtkNoPos
    rtkPosOf (Ctr__Block__0 p _) = p
data Expression = Anti_Expression String |
                  Ctr__Expression__0 RtkPos Term Rule_1
                  deriving (Ord, Eq, Show, Gen.Data, Gen.Typeable)
instance RtkPosOf Expression where
    rtkPosOf (Anti_Expression _) = rtkNoPos
    rtkPosOf (Ctr__Expression__0 p _ _) = p
data Factor = Anti_Factor String |
              Ctr__Factor__0 RtkPos String |
              Ctr__Factor__1 RtkPos String |
              Ctr__Factor__2 RtkPos Expression
              deriving (Ord, Eq, Show, Gen.Data, Gen.Typeable)
instance RtkPosOf Factor where
    rtkPosOf (Anti_Factor _) = rtkNoPos
    rtkPosOf (Ctr__Factor__0 p _) = p
    rtkPosOf (Ctr__Factor__1 p _) = p
    rtkPosOf (Ctr__Factor__2 p _) = p
data IfStatement = Anti_IfStatement String |
                   Ctr__IfStatement__0 RtkPos Expression Statement |
                   Ctr__IfStatement__1 RtkPos Expression Statement Statement
                   deriving (Ord, Eq, Show, Gen.Data, Gen.Typeable)
instance RtkPosOf IfStatement where
    rtkPosOf (Anti_IfStatement _) = rtkNoPos
    rtkPosOf (Ctr__IfStatement__0 p _ _) = p
    rtkPosOf (Ctr__IfStatement__1 p _ _ _) = p
type Rule_1 = [Rule_2]
data Rule_2 = Ctr__Rule_2__0 RtkPos Rule_3 Term
              deriving (Ord, Eq, Show, Gen.Data, Gen.Typeable)
instance RtkPosOf Rule_2 where
    rtkPosOf (Ctr__Rule_2__0 p _ _) = p
data Rule_3 = Ctr__Rule_3__0 RtkPos |
              Ctr__Rule_3__1 RtkPos
              deriving (Ord, Eq, Show, Gen.Data, Gen.Typeable)
instance RtkPosOf Rule_3 where
    rtkPosOf (Ctr__Rule_3__0 p) = p
    rtkPosOf (Ctr__Rule_3__1 p) = p
type Rule_4 = [Rule_5]
data Rule_5 = Ctr__Rule_5__0 RtkPos Rule_6 Factor
              deriving (Ord, Eq, Show, Gen.Data, Gen.Typeable)
instance RtkPosOf Rule_5 where
    rtkPosOf (Ctr__Rule_5__0 p _ _) = p
data Rule_6 = Ctr__Rule_6__0 RtkPos |
              Ctr__Rule_6__1 RtkPos
              deriving (Ord, Eq, Show, Gen.Data, Gen.Typeable)
instance RtkPosOf Rule_6 where
    rtkPosOf (Ctr__Rule_6__0 p) = p
    rtkPosOf (Ctr__Rule_6__1 p) = p
type Rule_7 = [Statement]
data Statement = Anti_Statement String |
                 Ctr__Statement__0 RtkPos Assignment |
                 Ctr__Statement__1 RtkPos IfStatement |
                 Ctr__Statement__2 RtkPos WhileLoop |
                 Ctr__Statement__3 RtkPos Block
                 deriving (Ord, Eq, Show, Gen.Data, Gen.Typeable)
instance RtkPosOf Statement where
    rtkPosOf (Anti_Statement _) = rtkNoPos
    rtkPosOf (Ctr__Statement__0 p _) = p
    rtkPosOf (Ctr__Statement__1 p _) = p
    rtkPosOf (Ctr__Statement__2 p _) = p
    rtkPosOf (Ctr__Statement__3 p _) = p
data Term = Anti_Term String |
            Ctr__Term__0 RtkPos Factor Rule_4
            deriving (Ord, Eq, Show, Gen.Data, Gen.Typeable)
instance RtkPosOf Term where
    rtkPosOf (Anti_Term _) = rtkNoPos
    rtkPosOf (Ctr__Term__0 p _ _) = p
data UnusedRule1 = Anti_UnusedRule1 String |
                   Ctr__UnusedRule1__1 RtkPos String
                   deriving (Ord, Eq, Show, Gen.Data, Gen.Typeable)
instance RtkPosOf UnusedRule1 where
    rtkPosOf (Anti_UnusedRule1 _) = rtkNoPos
    rtkPosOf (Ctr__UnusedRule1__1 p _) = p
type UnusedRule2 = [UnusedRule1]
data WhileLoop = Anti_WhileLoop String |
                 Ctr__WhileLoop__0 RtkPos Expression Statement
                 deriving (Ord, Eq, Show, Gen.Data, Gen.Typeable)
instance RtkPosOf WhileLoop where
    rtkPosOf (Anti_WhileLoop _) = rtkNoPos
    rtkPosOf (Ctr__WhileLoop__0 p _ _) = p
}