-- UUAGC 0.9.52.1 (src/GLL/Types/Abstract.ag)
module GLL.Types.Abstract where
{-# LINE 1 "src/GLL/Types/Abstract.ag" #-}

import qualified    Data.Map as M
import qualified    Data.Set as S 
import              Data.List (delete, (\\), elemIndices, findIndices)
{-# LINE 12 "dist/build/GLL/Types/Abstract.hs" #-}

-- | Identifier for non-terminals
type Nt  = String
-- Alt ---------------------------------------------------------
data Alt = Alt (Nt) (Symbols)
-- Alts --------------------------------------------------------
type Alts = [Alt]
-- Grammar -----------------------------------------------------
data Grammar = Grammar (Nt) (([(String,String)])) (Rules)
-- Rule --------------------------------------------------------
data Rule = Rule (Nt) (Alts)
-- Rules -------------------------------------------------------
type Rules = [Rule]
-- Slot --------------------------------------------------------
data Slot = Slot (Nt) (([Symbol])) (([Symbol]))
-- Symbol ------------------------------------------------------
data Symbol = Nt (String)
            | Term (Token)
            | Error (Token) (Token)
-- Symbols -----------------------------------------------------
type Symbols = [Symbol]
-- Token -------------------------------------------------------
data Token = Char (Char)
           | EOS
           | Epsilon
           | Int (((Maybe Int)))
           | Bool (((Maybe Bool)))
           | String (((Maybe String)))
           | Token (String) (((Maybe String)))
-- Tokens ------------------------------------------------------
type Tokens = [Token]