packages feed

BNFC 2.9.3.1 → 2.9.4

raw patch · 74 files changed

+2985/−452 lines, 74 filesdep ~mtlPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: mtl

API changes (from Hackage documentation)

- BNFC.CF: data Base
- BNFC.CF: instance GHC.Classes.Eq BNFC.CF.Base
- BNFC.CF: instance GHC.Classes.Ord BNFC.CF.Base
- BNFC.TypeChecker: BaseT :: String -> Base
- BNFC.TypeChecker: ListT :: Base -> Base
- BNFC.TypeChecker: data Base
+ BNFC.Backend.Haskell.CFtoAbstract: DefCfg :: (String -> String) -> String -> String -> String -> String -> (String -> String) -> (Exp -> Exp) -> ([Base] -> [Base]) -> DefCfg
+ BNFC.Backend.Haskell.CFtoAbstract: [arrow] :: DefCfg -> String
+ BNFC.Backend.Haskell.CFtoAbstract: [cons] :: DefCfg -> String
+ BNFC.Backend.Haskell.CFtoAbstract: [convLitInt] :: DefCfg -> Exp -> Exp
+ BNFC.Backend.Haskell.CFtoAbstract: [convTok] :: DefCfg -> String -> String
+ BNFC.Backend.Haskell.CFtoAbstract: [hasType] :: DefCfg -> String
+ BNFC.Backend.Haskell.CFtoAbstract: [lambda] :: DefCfg -> String
+ BNFC.Backend.Haskell.CFtoAbstract: [polymorphism] :: DefCfg -> [Base] -> [Base]
+ BNFC.Backend.Haskell.CFtoAbstract: [sanitizeName] :: DefCfg -> String -> String
+ BNFC.Backend.Haskell.CFtoAbstract: data DefCfg
+ BNFC.Backend.Haskell.CFtoAbstract: definedRules' :: DefCfg -> Bool -> CF -> [Doc]
+ BNFC.Backend.OCaml.OCamlUtil: class OCamlParserName a
+ BNFC.Backend.OCaml.OCamlUtil: instance BNFC.Backend.OCaml.OCamlUtil.OCamlParserName BNFC.Options.OCamlParser
+ BNFC.Backend.OCaml.OCamlUtil: instance BNFC.Backend.OCaml.OCamlUtil.OCamlParserName BNFC.Options.SharedOptions
+ BNFC.Backend.OCaml.OCamlUtil: ocamlParserName :: OCamlParserName a => a -> String
+ BNFC.CF: data Base' a
+ BNFC.CF: instance GHC.Base.Functor BNFC.CF.Base'
+ BNFC.CF: instance GHC.Classes.Eq a => GHC.Classes.Eq (BNFC.CF.Base' a)
+ BNFC.CF: instance GHC.Classes.Ord a => GHC.Classes.Ord (BNFC.CF.Base' a)
+ BNFC.CF: type Base = Base' String
+ BNFC.Lexing: debugPrint :: Reg -> IO ()
- BNFC.Backend.Common.NamedVariables: showNum :: (Eq a, Num a, Show a) => a -> String
+ BNFC.Backend.Common.NamedVariables: showNum :: Int -> String
- BNFC.Backend.Common.NamedVariables: varName :: [Char] -> [Char]
+ BNFC.Backend.Common.NamedVariables: varName :: String -> String
- BNFC.Backend.Common.OOAbstract: basetypes :: [(TokenCat, String)]
+ BNFC.Backend.Common.OOAbstract: basetypes :: [(String, String)]
- BNFC.Backend.Haskell.HsOpts: txtFile :: Options -> FilePath
+ BNFC.Backend.Haskell.HsOpts: txtFile :: Options -> String
- BNFC.Backend.Haskell.HsOpts: xmlFile :: Options -> FilePath
+ BNFC.Backend.Haskell.HsOpts: xmlFile :: Options -> String
- BNFC.Backend.OCaml.CFtoOCamlTest: ocamlTestfile :: String -> String -> String -> String -> String -> CF -> Doc
+ BNFC.Backend.OCaml.CFtoOCamlTest: ocamlTestfile :: OCamlParser -> String -> String -> String -> String -> String -> CF -> Doc
- BNFC.Backend.OCaml.CFtoOCamlYacc: cf2ocamlyacc :: OCamlParser -> String -> String -> String -> CF -> String
+ BNFC.Backend.OCaml.CFtoOCamlYacc: cf2ocamlyacc :: OCamlParser -> String -> CF -> String
- BNFC.CF: BaseT :: String -> Base
+ BNFC.CF: BaseT :: a -> Base' a
- BNFC.CF: ListT :: Base -> Base
+ BNFC.CF: ListT :: Base' a -> Base' a
- BNFC.CF: type Signature = Map String WithPosition Type
+ BNFC.CF: type Signature = Map String (WithPosition Type)
- BNFC.Check.EmptyTypes: emptyData :: IsFun f => [Rul f] -> [RCat]
+ BNFC.Check.EmptyTypes: emptyData :: forall f. IsFun f => [Rul f] -> [RCat]
- BNFC.Lex: alexScan :: (Posn, Char, [Byte], String) -> Int -> AlexReturn (Posn -> String -> Token)
+ BNFC.Lex: alexScan :: AlexInput -> Int -> AlexReturn (Posn -> String -> Token)
- BNFC.Lex: alexScanUser :: t -> (Posn, Char, [Byte], String) -> Int -> AlexReturn (Posn -> String -> Token)
+ BNFC.Lex: alexScanUser :: t -> AlexInput -> Int -> AlexReturn (Posn -> String -> Token)
- BNFC.Lex: alex_scan_tkn :: t1 -> t2 -> Int# -> AlexInput -> Int# -> AlexLastAcc -> (AlexLastAcc, AlexInput)
+ BNFC.Lex: alex_scan_tkn :: t -> t -> Int# -> AlexInput -> Int# -> AlexLastAcc -> (AlexLastAcc, AlexInput)
- BNFC.Options: type Backend = SharedOptions -> CF -> IO ()
+ BNFC.Options: type Backend = SharedOptions " Options" -> CF " Grammar" -> IO ()

Files

BNFC.cabal view
@@ -1,5 +1,5 @@ Name: BNFC-Version: 2.9.3.1+Version: 2.9.4 cabal-version: 2.0   -- >=1.24 for the custom-setup section   -- >=2.0  for the build-tools: hspec-discover@@ -27,61 +27,56 @@   a LaTeX file containing a readable specification of the language.  tested-with:-  GHC == 9.12.2-  GHC == 9.10.3-  GHC == 9.8.4-  GHC == 9.6.7-  GHC == 9.4.8-  GHC == 9.2.8-  GHC == 9.0.2-  GHC == 8.10.7-  GHC == 8.8.4-  GHC == 8.6.5-  GHC == 8.4.4-  GHC == 8.2.2+  GHC == 7.10.3   GHC == 8.0.2-  -- GHC == 7.10.3+  GHC == 8.2.2+  GHC == 8.4.4+  GHC == 8.6.5+  GHC == 8.8.4+  GHC == 8.10.7+  GHC == 9.0.2+  GHC == 9.2.1 -Extra-doc-files:+Extra-source-files:   README.md   CHANGELOG.md   -- LICENSE is automatically included--Extra-source-files:   Makefile   src/BNFC.cf   src/Makefile-  stack-9.12.yaml-  stack-9.10.yaml-  stack-9.8.yaml-  stack-9.6.yaml-  stack-9.4.yaml-  stack-9.2.yaml-  stack-9.0.yaml-  stack-8.10.yaml-  stack-8.8.yaml-  stack-8.6.yaml-  stack-8.4.yaml-  stack-8.2.yaml+  stack-9.2.1.yaml+  stack-9.0.2.yaml+  stack-9.0.1.yaml+  stack-8.10.7.yaml+  stack-8.10.4.yaml+  stack-8.10.3.yaml+  stack-8.10.2.yaml+  stack-8.8.4.yaml+  stack-8.8.3.yaml+  stack-8.8.2.yaml+  stack-8.6.5.yaml+  stack-8.6.4.yaml+  stack-8.4.4.yaml+  stack-8.2.2.yaml   stack-8.0.2.yaml   stack-7.10.3.yaml  Source-repository head   type:     git-  location: https://github.com/BNFC/bnfc.git+  location: git://github.com/BNFC/bnfc.git   subdir:   source  Source-repository this   type:     git-  location: https://github.com/BNFC/bnfc.git+  location: git://github.com/BNFC/bnfc.git   subdir:   source-  tag:      v2.9.3.1+  tag:      v2.9.4  -- Setup using https://github.com/haskellari/cabal-doctest custom-setup  setup-depends:-   base >= 4 && < 5,-   Cabal >= 2.0 && < 4,+   base >= 4 && <5,+   Cabal >= 2.0,    cabal-doctest >= 1 && < 1.1  executable bnfc@@ -94,8 +89,6 @@   other-modules:     -- Generated by cabal     Paths_BNFC-  autogen-modules:-    Paths_BNFC   default-extensions:     -- Keep in alphabetical order.     LambdaCase@@ -125,7 +118,7 @@     , process     , string-qq     , time-  if impl(ghc < 8)+  if impl(ghc < 8.0)     build-depends:       semigroups   build-tool-depends:@@ -134,10 +127,15 @@   hs-source-dirs:     src   ghc-options:-    -W+    -Wall+    -fno-warn-dodgy-imports+    -fno-warn-name-shadowing   if impl(ghc >= 8.0)     ghc-options:       -Wcompat+  if impl(ghc == 9.2.1)+    ghc-options:+      -Wno-incomplete-uni-patterns   default-extensions:     -- Keep the list of language extensions in sync with its other occurrences.     -- Keep in alphabetical order.@@ -166,8 +164,6 @@   other-modules:     -- Generated by cabal     Paths_BNFC-  autogen-modules:-    Paths_BNFC   exposed-modules:     -- Generated from LICENSE     BNFC.License@@ -300,7 +296,7 @@     deepseq,     string-qq,     time-  if impl(ghc < 8)+  if impl(ghc < 8.0)     build-depends:       semigroups   build-tool-depends:@@ -313,6 +309,8 @@     test   ghc-options:     -W+    -- TODO: -Wall+    -fno-warn-name-shadowing   if impl(ghc >= 8.0)     ghc-options:       -Wcompat@@ -349,8 +347,11 @@   ghc-options:        -threaded   default-extensions: CPP   main-is:            doctests.hs-  build-depends:      base, doctest >= 0.8, filepath, BNFC-    -- The dependency BNFC ensures the build of the library first-    -- and hence, the presence of Build_doctests.-    -- See https://hackage.haskell.org/package/cabal-doctest+  build-depends:      base+    , filepath+    , BNFC+      -- The dependency BNFC ensures the build of the library first+      -- and hence, the presence of Build_doctests.+      -- See https://hackage.haskell.org/package/cabal-doctest+    , doctest >= 0.8   hs-source-dirs:     test
CHANGELOG.md view
@@ -1,13 +1,25 @@-# 2.9.3.1+# 2.9.4 -Andreas Abel <andreas.abel@gu.se>  Jan 2026+Andreas Abel <andreas.abel@gu.se>,  February 2022 -* Cabal 3.12 compatibility: remove generated `Lex.hs` and `Par.hs` from source tarball-* Build tested with GHC 8.0 - 9.12.2+* LBNF: empty tokens types are now forbidden [#388]+* Agda: support position information via `--functor` [#405]+* C/C++: use `size_t` and `-Wsign-conversion` [#391]+* C++: repair broken `--line-numbers` [#390], regression in 2.9.2 by [#349]+* Haskell: fix a problem with layout stop words and top-level layout [#399,#413]+* Haskell: generated test parser can parse several files now [#400]+* Java: use _L_`.valueOf()` instead of deprecated `new `_L_`()` for literal classes _L_ [#402]+* Ocaml: non-terminals in generated parser are now type-annotated [#407]+* Ocaml: sanitize bound variables in `define`+* Ocaml/Menhir: update parse error mechanism to Menhir 2021/12/30 [#414] +Contributors:+* Michał Radwański [#390,#391]+* Beatrice Vergani [#399,#400]+ # 2.9.3 -Andreas Abel <andreas.abel@gu.se>  September 2021+Andreas Abel <andreas.abel@gu.se>,  September 2021  * BNFC now uniformly signs generated files with its version number [#373] * C/C++: include `stdio.h` in parser header files [#381]@@ -18,7 +30,7 @@  # 2.9.2 -Andreas Abel <andreas.abel@gu.se>  June 2021+Andreas Abel <andreas.abel@gu.se>,  June 2021  ## Major improvements @@ -46,9 +58,10 @@  * C/C++: instead of `_SYMB_nnn`, more readable token names in lexer & parser + # 2.9.1 -Andreas Abel <andreas.abel@gu.se>  March 2021+Andreas Abel <andreas.abel@gu.se>,  March 2021  ## Main new feature @@ -68,7 +81,7 @@  # 2.9.0 -Andreas Abel <andreas.abel@gu.se>  December 2020+Andreas Abel <andreas.abel@gu.se>,  December 2020  ## Major changes @@ -90,7 +103,7 @@  # 2.8.4 -Andreas Abel <andreas.abel@gu.se>  October 2020+Andreas Abel <andreas.abel@gu.se>,  October 2020  * GHC versions 7.10 - 8.10 supported, dropped GHC 7.6 and 7.8 * LBNF: whitespace list separators are now accepted; treated like "" [#70]@@ -113,7 +126,7 @@  # 2.8.3 -Andreas Abel <andreas.abel@gu.se>  August 2019+Andreas Abel <andreas.abel@gu.se>,  August 2019  * GHC 8.8 compatibility * Stack installation supported by provided .yaml files [#198]@@ -133,7 +146,7 @@  # 2.8.2 -Andreas Abel <andreas.abel@gu.se>  November 2018+Andreas Abel <andreas.abel@gu.se>,  November 2018  * GHC 8.4 compatibility [#227,#236] * bnfc now puts current timestamp on all created files, even unchanged ones [#219]@@ -158,14 +171,14 @@  # 2.8.1 -Grégoire Détrez <gregoire.detrez@gu.se>  February 2016+Grégoire Détrez <gregoire.detrez@gu.se>,  February 2016  * Fix compatibility with GHC 7.10.2 and Alex 3.14 * Fixed #160  # 2.8 -Grégoire Détrez <gregoire.detrez@gu.se>  May 2015+Grégoire Détrez <gregoire.detrez@gu.se>,  May 2015  * Builds with ghc 7.10.1 * Add support for JFlex (java)@@ -176,7 +189,7 @@  # 2.7.1 -Grégoire Détrez <gregoire.detrez@gu.se> October 2014+Grégoire Détrez <gregoire.detrez@gu.se>, October 2014  * Generated haskell code is now warning free * Removed unused terminal in happy@@ -187,7 +200,7 @@  # 2.7.0.0 -Grégoire Détrez <gregoire.detrez@gu.se> September 2014+Grégoire Détrez <gregoire.detrez@gu.se>, September 2014  * Add token support for Ocaml * New option parser@@ -202,3 +215,23 @@ * Remove the coupling between building the parser and the pdf from latex * Improvement to the CNF Backend * Bug fixes #92, #21, #34, #33, #90, #30, #60++# 2.5.0++Grégoire Détrez, April 2013++# 2.6.0.3++Grégoire Détrez, January 2013++# 2.4.2.1++Andreas Abel <andreas.abel@ifi.lmu.de>, July 2012++# 2.4.2.0++Thomas Hallgren, September 2010++# 2.4.1.1++Markus Forsberg, September 2010
README.md view
@@ -1,5 +1,4 @@-[![Hackage version](https://img.shields.io/hackage/v/BNFC.svg?label=Hackage)](http://hackage.haskell.org/package/BNFC)-[![Hackage CI](https://matrix.hackage.haskell.org/api/v2/packages/BNFC/badge)](https://matrix.hackage.haskell.org/package/BNFC)+[![Hackage version](https://img.shields.io/hackage/v/BNFC.svg?label=Hackage)](http://hackage.haskell.org/package/BNFC) <!-- [![Hackage CI](https://matrix.hackage.haskell.org/api/v2/packages/BNFC/badge)](https://matrix.hackage.haskell.org/package/BNFC) --> [![BNFC on Stackage Nightly](https://stackage.org/package/BNFC/badge/nightly)](https://stackage.org/nightly/package/BNFC) [![Stackage LTS version](https://www.stackage.org/package/BNFC/badge/lts?label=Stackage)](https://www.stackage.org/package/BNFC) [![Build status](https://github.com/BNFC/bnfc/workflows/Haskell-CI/badge.svg)](https://github.com/BNFC/bnfc/actions)@@ -12,10 +11,10 @@ --------------------------  The BNF Converter (bnfc) is a compiler construction tool generating a compiler-front-end from a Labelled BNF grammar. It is currently able to generate Haskell,+front-end from a Labelled BNF (LBNF) grammar. It is currently able to generate Haskell, Agda, C, C++, Java, and OCaml, as well as XML representations. -Given a Labelled BNF grammar the tool produces:+Given a LBNF grammar the tool produces: - an abstract syntax implementation - a case skeleton for the abstract syntax in the same language - an Alex, Ocamllex, JLex, or Flex lexer generator file@@ -150,3 +149,12 @@  BNFC versions until 2.8.4 released under the [GNU General Public License](https://www.gnu.org/licenses/gpl-2.0.html).++Example uses of the BNF Converter+---------------------------------++In research:+- NASA's [OGMA](https://github.com/nasa/ogma) tool uses LBNF for its grammars, e.g. for a [subset of C 99](https://github.com/nasa/ogma/blob/49e78e4d6fa7558d09d36a284648087df48714e4/ogma-language-c/grammar/C.cf).++In teaching:+- Course [Programming Language Technology](http://www.cse.chalmers.se/edu/course/DAT151/) at Chalmers / Gothenburg University.
src/BNFC/Backend/Agda.hs view
@@ -5,9 +5,9 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TupleSections #-} -#if __GLASGOW_HASKELL__ >= 800-{-# OPTIONS_GHC -fno-warn-unused-top-binds #-}-#endif+-- #if __GLASGOW_HASKELL__ >= 800+-- {-# OPTIONS_GHC -fno-warn-unused-top-binds #-}+-- #endif  -- | Agda backend. --@@ -123,6 +123,7 @@  import Prelude hiding ((<>)) import Control.Monad.State hiding (when)+import Data.Bifunctor (second) import Data.Char import Data.Function (on) import qualified Data.List as List@@ -136,12 +137,13 @@ import Data.String (IsString)  import BNFC.CF-import BNFC.Backend.Base           (Backend, mkfile)+import BNFC.Backend.Base                 (Backend, mkfile) import BNFC.Backend.Haskell.HsOpts-import BNFC.Backend.Haskell.Utils  (parserName, catToType, mkDefName, typeToHaskell', comment)-import BNFC.Options                (SharedOptions, TokenText(..), tokenText)+import BNFC.Backend.Haskell.CFtoAbstract (DefCfg(..), definedRules')+import BNFC.Backend.Haskell.Utils        (parserName, catToType, comment)+import BNFC.Options                      (SharedOptions, TokenText(..), tokenText, functor) import BNFC.PrettyPrint-import BNFC.Utils                  (ModuleName, replace, when, table)+import BNFC.Utils                        (ModuleName, replace, when, table)  -- | How to print the types of constructors in Agda? @@ -166,7 +168,7 @@ makeAgda time opts cf = do   -- Generate AST bindings.   mkfile (agdaASTFile opts) comment $-    cf2AgdaAST time (tokenText opts) (agdaASTFileM opts) (absFileM opts) (printerFileM opts) cf+    cf2AgdaAST time (functor opts) (tokenText opts) (agdaASTFileM opts) (absFileM opts) (printerFileM opts) cf   -- Generate parser bindings.   mkfile (agdaParserFile opts) comment $     cf2AgdaParser time (tokenText opts) (agdaParserFileM opts) (agdaASTFileM opts) (errFileM opts) (happyFileM opts)@@ -193,25 +195,27 @@ -- cf2AgdaAST   :: String  -- ^ Current time.+  -> Bool    -- ^ Include positions information in the AST? (`--functor`)   -> TokenText   -> String  -- ^ Module name.   -> String  -- ^ Haskell Abs module name.   -> String  -- ^ Haskell Print module name.   -> CF      -- ^ Grammar.   -> Doc-cf2AgdaAST time tokenText mod amod pmod cf = vsep $+cf2AgdaAST time havePos tokenText mod amod pmod cf = vsep $   [ preamble time "abstract syntax data types"   , hsep [ "module", text mod, "where" ]-  , imports YesImportNumeric False usesPos+  , imports YesImportNumeric False usesPos havePos   , when usesString $ hsep [ "String", equals, listT, charT ]   , importPragmas tokenText usesPos       [ unwords [ "qualified", amod ]       , unwords [ pmod, "(printTree)" ]       ]   , when usesPos defineIntAndPair+  , when havePos defineBNFCPosition   , vsep $ map (uncurry $ prToken amod tokenText) tcats-  , absyn amod NamedArg dats-  , definedRules cf+  , absyn amod havePos NamedArg dats+  , definedRules havePos cf   -- , allTokenCats printToken tcats  -- seem to be included in printerCats   , printers amod printerCats   , empty -- Make sure we terminate the file with a new line.@@ -232,14 +236,14 @@     , map TokenCat $ List.nub $ cfgLiterals cf ++ map fst tcats     ]   usesString = "String" `elem` cfgLiterals cf-  usesPos    = hasPositionTokens cf+  usesPos    = havePos || hasPositionTokens cf   defineIntAndPair = vsep     [ vcat $ concat       [ [ "postulate" ]       , map (nest 2 . text) $ table " "         [ [ intT,      ":", "Set" ]-        , [ intToNatT, ":", intT, arrow , natT ]-        , [ natToIntT, ":", natT, arrow , intT ]+        , [ intToNatT, ":", intT, uArrow , natT ]+        , [ natToIntT, ":", natT, uArrow , intT ]         ]       ]     , vcat $ map (\ s -> hsep [ "{-#", "COMPILE", "GHC", text s, "#-}" ]) $@@ -254,6 +258,8 @@       ]     , "{-# COMPILE GHC #Pair = data (,) ((,)) #-}"     ]+  defineBNFCPosition =+    hsep [ posT, equals, maybeT, parens intPairT ]  -- | Generate parser bindings for Agda. --@@ -271,7 +277,7 @@ cf2AgdaParser time tokenText mod astmod emod pmod layoutMod cats = vsep $   [ preamble time "parsers"   , hsep [ "module", text mod, "where" ]-  , imports NoImportNumeric (isJust layoutMod) False+  , imports NoImportNumeric (isJust layoutMod) False False   , importCats astmod (List.nub cs)   , importPragmas tokenText False $ [ qual emod, pmod] ++ maybeToList (qual <$> layoutMod)   , "-- Error monad of BNFC"@@ -293,20 +299,30 @@   qual m = "qualified " ++ m  -- We prefix the Agda types with "#" to not conflict with user-provided nonterminals.-arrow, charT, integerT, listT, intT, natT, intToNatT, natToIntT, stringT, stringFromListT :: IsString a => a-arrow = "→"+uArrow, charT, integerT, doubleT, boolT, listT, maybeT, nothingT, justT,+  intT, natT, intToNatT, natToIntT, pairT, posT, stringT, stringFromListT+  :: IsString a => a+uArrow           = "→" charT           = "Char"     -- This is the BNFC name for token type Char! integerT        = "Integer"  -- This is the BNFC name for token type Integer! doubleT         = "Double"   -- This is the BNFC name for token type Double! boolT           = "#Bool" listT           = "#List"+maybeT          = "#Maybe"+nothingT        = "#nothing"+justT           = "#just" intT            = "#Int"     -- Int is the type used by the Haskell backend for line and column positions. natT            = "#Nat" intToNatT       = "#intToNat" natToIntT       = "#natToInt"+pairT           = "#Pair"+posT            = "#BNFCPosition" stringT         = "#String" stringFromListT = "#stringFromList" +intPairT :: Doc+intPairT = hsep [ pairT, intT, intT ]+ -- | Preamble: introductory comments.  preamble@@ -324,14 +340,17 @@ imports   :: ImportNumeric -- ^ Import also numeric types?   -> Bool          -- ^ If have layout, import booleans.-  -> Bool          -- ^ If have position tokens, import natural numbers.+  -> Bool          -- ^ If have position information, import natural numbers.+  -> Bool          -- ^ Do we need @Maybe@?   -> Doc-imports numeric layout pos = vcat . map prettyImport . concat $+imports numeric layout pos needMaybe = vcat . map prettyImport . concat $   [ when layout     [ ("Agda.Builtin.Bool",   [],            [("Bool", boolT)]) ]   , [ ("Agda.Builtin.Char",   [charT],       []               ) ]   , when (numeric == YesImportNumeric) importNumeric   , [ ("Agda.Builtin.List",   ["[]", "_∷_"], [("List", listT)]) ]+  , when needMaybe+    [ ("Agda.Builtin.Maybe",  [], [("Maybe", maybeT), ("nothing", nothingT), ("just", justT)]) ]   , when pos     [ ("Agda.Builtin.Nat",    [],            [("Nat" , natT )]) ]   , [ ("Agda.Builtin.String", [], [("String", stringT), ("primStringFromList", stringFromListT) ]) ]@@ -377,7 +396,7 @@ -- importPragmas   :: TokenText-  -> Bool      -- ^ Do we use position tokens?+  -> Bool      -- ^ Do we use position information?   -> [String]  -- ^ Haskell modules to import.   -> Doc importPragmas tokenText pos mods = vcat $ map imp $ base ++ mods@@ -411,13 +430,14 @@       , nest 2 $ hsep           [ text $ agdaLower t           , ":"-          , "#Pair (#Pair #Int #Int)"+          , pairT+          , parens intPairT           , prettyCat typ-          , arrow, text t+          , uArrow, text t           ]       ]     else prettyData UnnamedArg t [(agdaLower t, [ typ ])]-  , pragmaData amod t [(t, [])]+  , pragmaData amod t t [(t, [])]   ]   where   typ = case tokenText of@@ -431,13 +451,13 @@ --   strongly-connected component analysis and topological --   sort by dependency order. ---absyn :: ModuleName -> ConstructorStyle -> [Data] -> Doc-absyn _amod _style [] = empty-absyn  amod  style ds = vsep . ("mutual" :) . concatMap (map (nest 2) . prData amod style) $ ds+absyn :: ModuleName -> Bool -> ConstructorStyle -> [Data] -> Doc+absyn _amod _havePos _style [] = empty+absyn  amod  havePos  style ds = vsep . ("mutual" :) . concatMap (map (nest 2) . prData amod havePos style) $ ds  -- | Pretty-print Agda data types and pragmas for AST. ----- >>> vsep $ prData "Foo" UnnamedArg (Cat "Nat", [ ("Zero", []), ("Suc", [Cat "Nat"]) ])+-- >>> vsep $ prData "Foo" False UnnamedArg (Cat "Nat", [ ("Zero", []), ("Suc", [Cat "Nat"]) ]) -- data Nat : Set where --   zero : Nat --   suc  : Nat → Nat@@ -447,7 +467,19 @@ --   | Foo.Suc --   ) #-} ----- >>> vsep $ prData "Bar" UnnamedArg (Cat "C", [ ("C1", []), ("C2", [Cat "C"]) ])+-- >>> vsep $ prData "Foo" True UnnamedArg (Cat "Nat", [ ("Zero", []), ("Suc", [Cat "Nat"]) ])+-- Nat = Nat' #BNFCPosition+-- <BLANKLINE>+-- data Nat' Pos# : Set where+--   zero : Pos# → Nat' Pos#+--   suc  : Pos# → Nat' Pos# → Nat' Pos#+-- <BLANKLINE>+-- {-# COMPILE GHC Nat' = data Foo.Nat'+--   ( Foo.Zero+--   | Foo.Suc+--   ) #-}+--+-- >>> vsep $ prData "Bar" False UnnamedArg (Cat "C", [ ("C1", []), ("C2", [Cat "C"]) ]) -- data C : Set where --   c1 : C --   c2 : C → C@@ -464,31 +496,51 @@ -- This is a bit of a design problem of the pretty print library: -- there is no native concept of a blank line; @text ""@ is a bad hack. ---prData :: ModuleName -> ConstructorStyle -> Data -> [Doc]-prData amod style (Cat d, cs) = prData' amod style d cs-prData _    _     (c    , _ ) = error $ "prData: unexpected category " ++ prettyShow c+prData :: ModuleName -> Bool -> ConstructorStyle -> Data -> [Doc]+prData amod True  style (Cat d, cs) = concat+    [ [ hsep [ text d, equals, text (sanitize primed), posT ] ]+    , prData' amod style (addP d) primed cs'+    ]+  where+  -- Replace _ by - in Agda names to avoid illegal names like Foo_'.+  sanitize = replace '_' '-'+  primed   = d ++ "'"+  param    = "Pos#"+  addP c   = concat [sanitize c, "' ", param]+  cs'      = map (second $ \ cats -> Cat param : map addParam cats) cs+  addParam :: Cat -> Cat+  addParam = \case+    Cat c     -> Cat $ addP c+    ListCat c -> ListCat $ addParam c+    c         -> c +prData amod False style (Cat d, cs) = prData' amod style d d cs+prData _    _     _     (c    , _ ) = error $ "prData: unexpected category " ++ prettyShow c+ -- | Pretty-print Agda data types and pragmas. ----- >>> vsep $ prData' "ErrM" UnnamedArg "Err A" [ ("Ok", [Cat "A"]), ("Bad", [ListCat $ Cat "Char"]) ]+-- >>> vsep $ prData' "ErrM" UnnamedArg "Err A" "Err_" [ ("Ok", [Cat "A"]), ("Bad", [ListCat $ Cat "Char"]) ] -- data Err A : Set where --   ok  : A → Err A --   bad : #List Char → Err A -- <BLANKLINE>--- {-# COMPILE GHC Err = data ErrM.Err+-- {-# COMPILE GHC Err = data ErrM.Err_ --   ( ErrM.Ok --   | ErrM.Bad --   ) #-} ---prData' :: ModuleName -> ConstructorStyle -> String -> [(Fun, [Cat])] -> [Doc]-prData' amod style d cs = [ prettyData style d cs , pragmaData amod (head $ words d) cs ]+prData' :: ModuleName -> ConstructorStyle -> String -> String -> [(Fun, [Cat])] -> [Doc]+prData' amod style d haskellDataName cs =+  [ prettyData style d cs+  , pragmaData amod (head $ words d) haskellDataName cs+  ]  -- | Pretty-print Agda binding for the BNFC Err monad. -- -- Note: we use "Err" here since a category "Err" would also conflict -- with BNFC's error monad in the Haskell backend. prErrM :: ModuleName -> Doc-prErrM emod = vsep $ prData' emod UnnamedArg "Err A"+prErrM emod = vsep $ prData' emod UnnamedArg "Err A" "Err"   [ ("Ok" , [Cat "A"])   , ("Bad", [ListCat $ Cat "Char"])   ]@@ -539,20 +591,24 @@  -- | Generate pragmas to bind Haskell AST to Agda. ----- >>> pragmaData "Foo" "Empty" []--- {-# COMPILE GHC Empty = data Foo.Empty () #-}+-- >>> pragmaData "Foo" "Empty" "Bar" []+-- {-# COMPILE GHC Empty = data Foo.Bar () #-} ----- >>> pragmaData "Foo" "Nat" [ ("zero", []), ("suc", [Cat "Nat"]) ]--- {-# COMPILE GHC Nat = data Foo.Nat+-- >>> pragmaData "Foo" "Nat" "Natty" [ ("zero", []), ("suc", [Cat "Nat"]) ]+-- {-# COMPILE GHC Nat = data Foo.Natty --   ( Foo.zero --   | Foo.suc --   ) #-} ---pragmaData :: ModuleName -> String -> [(Fun, [Cat])] -> Doc-pragmaData amod d cs = prettyList 2 pre lparen (rparen <+> "#-}") "|" $-  map (prettyFun amod . fst) cs+pragmaData :: ModuleName -> String -> String -> [(Fun, [Cat])] -> Doc+pragmaData amod d haskellDataName cs =+  prettyList 2 pre lparen (rparen <+> "#-}") "|" $+    map (prettyFun amod . fst) cs   where-  pre = hsep [ "{-#", "COMPILE", "GHC", text d, equals, "data", text $ concat [ amod, ".", d ] ]+  pre = hsep+    [ "{-#", "COMPILE", "GHC", text d, equals, "data"+    , text $ concat [ amod, ".", haskellDataName ]+    ]  -- | Pretty-print since rule as Agda constructor declaration. --@@ -566,7 +622,7 @@ prettyConstructor :: ConstructorStyle -> String -> (Fun,[Cat]) -> (Doc,Doc) prettyConstructor style d (c, as) = (prettyCon c,) $ if null as then text d else hsep $   [ prettyConstructorArgs style as-  , arrow+  , uArrow   , text d   ] @@ -581,7 +637,7 @@ prettyConstructorArgs :: ConstructorStyle -> [Cat] -> Doc prettyConstructorArgs style as =   case style of-    UnnamedArg -> hsep $ List.intersperse arrow ts+    UnnamedArg -> hsep $ List.intersperse uArrow ts     NamedArg   -> hsep $ map (\ (x :| xs, t) -> parens (hsep [x, hsep xs, colon, t])) tel   where   ts  = map prettyCat as@@ -651,46 +707,39 @@  -- * Generate the defined constructors. +agdaDefCfg :: DefCfg+agdaDefCfg = DefCfg+  { sanitizeName = agdaLower+  , hasType      = ":"+  , arrow        = uArrow+  , lambda       = "λ"+  , cons         = "_∷_"+  , convTok      = agdaLower+  , convLitInt   = \ e -> App "#pos" dummyType [e]+  , polymorphism = (BaseT "{a : Set}" :)+  }+ -- | Generate Haskell code for the @define@d constructors.-definedRules :: CF -> Doc-definedRules cf = vsep $ map mkDef $ definitions cf-  where-    mkDef (Define f args e _) = vcat $ concat-      [ [ text $ unwords [ mkDefName f, ":", typeToHaskell' "→" $ wpThing t ]-        | t <- maybeToList $ sigLookup f cf-        ]-      , [ hsep $ concat-          [ [ text (mkDefName f), "=", "λ" ]-          , map (text . agdaLower . fst) args-          , [ "→", pretty $ sanitize e ]-          ]-        ]-      ]-    sanitize = \case-      App "(:)" t es-> App "_∷_" t $ map sanitize es-      App x t es    -> App (agdaLower x) t $ map sanitize es-      Var x         -> Var $ agdaLower x-      e@LitInt{}    -> App "#pos" dummyType [e]-      e@LitDouble{} -> e-      e@LitChar{}   -> e-      e@LitString{} -> e+definedRules :: Bool -> CF -> Doc+definedRules havePos = vsep . definedRules' agdaDefCfg havePos  -- * Generate bindings for the pretty printers --- | Generate Agda code to print tokens.------ >>> printToken "Ident"--- printIdent : Ident → #String--- printIdent (ident s) = #stringFromList s----printToken :: String -> Doc-printToken t = vcat-  [ hsep [ f, colon, text t, arrow, stringT ]-  , hsep [ f, lparen <> c <+> "s" <> rparen, equals, stringFromListT, "s" ]-  ]-  where-  f = text $ "print" ++ t-  c = text $ agdaLower t+-- UNUSED+-- -- | Generate Agda code to print tokens.+-- --+-- -- >>> printToken "Ident"+-- -- printIdent : Ident → #String+-- -- printIdent (ident s) = #stringFromList s+-- --+-- printToken :: String -> Doc+-- printToken t = vcat+--   [ hsep [ f, colon, text t, uArrow, stringT ]+--   , hsep [ f, lparen <> c <+> "s" <> rparen, equals, stringFromListT, "s" ]+--   ]+--   where+--   f = text $ "print" ++ t+--   c = text $ agdaLower t  -- | Generate Agda bindings to printers for AST. --@@ -712,7 +761,7 @@   , vcat $ map pragmaBind cats   ]   where-  prettyTySig c = (agdaPrinterName c, hsep [ prettyCat c, arrow, stringT ])+  prettyTySig c = (agdaPrinterName c, hsep [ prettyCat c, uArrow, stringT ])   pragmaBind  c = hsep     [ "{-#", "COMPILE", "GHC", agdaPrinterName c, equals, "\\", y, "->"     , "Data.Text.pack", parens ("printTree" <+> parens (y <+> "::" <+> t)), "#-}"@@ -751,8 +800,8 @@   prettyTySig :: Cat -> Doc   prettyTySig c = hsep . concat $    [ [ agdaParserName c, colon ]-   , when layout [ boolT, arrow ]-   , [ stringT, arrow, "Err", prettyCatParens c ]+   , when layout [ boolT, uArrow ]+   , [ stringT, uArrow, "Err", prettyCatParens c ]    ]   pragmaBind :: Cat -> Doc   pragmaBind c = hsep . concat $@@ -775,15 +824,16 @@  -- * Auxiliary functions --- | Concatenate documents created from token categories,---   separated by blank lines.------ >>> allTokenCats text ["T", "U"]--- T--- <BLANKLINE>--- U-allTokenCats :: (TokenCat -> Doc) -> [TokenCat] -> Doc-allTokenCats f = vsep . map f+-- UNUSED+-- -- | Concatenate documents created from token categories,+-- --   separated by blank lines.+-- --+-- -- >>> allTokenCats text ["T", "U"]+-- -- T+-- -- <BLANKLINE>+-- -- U+-- allTokenCats :: (TokenCat -> Doc) -> [TokenCat] -> Doc+-- allTokenCats f = vsep . map f  -- | Pretty-print a rule name for Haskell. prettyFun :: ModuleName -> Fun -> Doc@@ -850,6 +900,7 @@ -- | Is the Agda type corresponding to 'Cat' composite (or atomic)? compositeCat :: Cat -> Bool compositeCat = \case+  Cat c     -> any isSpace c   ListCat{} -> True   _         -> False 
src/BNFC/Backend/Base.hs view
@@ -16,7 +16,6 @@   ) where  import Control.Arrow    ( (&&&) )-import Control.Monad import Control.Monad.Writer  import Data.Char        ( isSpace )
src/BNFC/Backend/C.hs view
@@ -62,7 +62,7 @@ makefile :: String -> String -> String -> Doc makefile name prefix basename = vcat     [ "CC = gcc -g"-    , "CCFLAGS = --ansi -W -Wall -Wno-unused-parameter -Wno-unused-function -Wno-unneeded-internal-declaration ${CC_OPTS}"+    , "CCFLAGS = --ansi -W -Wall -Wsign-conversion -Wno-unused-parameter -Wno-unused-function -Wno-unneeded-internal-declaration ${CC_OPTS}"     -- The @#define _POSIX_C_SOURCE 200809L@ is now placed locally in     -- the generated lexer.     -- , "CCFLAGS = --ansi -W -Wall -Wno-unused-parameter -Wno-unused-function -Wno-unneeded-internal-declaration -D_POSIX_C_SOURCE=200809L ${CC_OPTS}"@@ -110,6 +110,8 @@       [ "${FLEX} ${FLEX_OPTS} -oLexer.c " ++ name ++ ".l" ]     , Makefile.mkRule "Parser.c Bison.h" [ name ++ ".y" ]       [ "${BISON} ${BISON_OPTS} " ++ name ++ ".y -o Parser.c" ]+    , Makefile.mkRule "Lexer.o" [ "CCFLAGS+=-Wno-sign-conversion" ]+        []     , Makefile.mkRule "Lexer.o" [ "Lexer.c", "Bison.h" ]       [ "${CC} ${CCFLAGS} -c Lexer.c " ]     , Makefile.mkRule "Parser.o" ["Parser.c", "Absyn.h", "Bison.h" ]
src/BNFC/Backend/C/CFtoCAbs.hs view
@@ -172,7 +172,7 @@       -- Subsequent uses are cloned.       True  -> case lookup x args of         Just t -> return $ cloner (toCat t) x-        -- pattern match left incomplete on purpose+        Nothing -> undefined -- impossible      -- Andreas, 2021-02-13, issue #338     -- Token categories are just @typedef@s in C, so no constructor needed.@@ -238,10 +238,11 @@   where     prParamsH :: [(String, a)] -> String     prParamsH [] = "void"-    prParamsH ps = intercalate ", " $ zipWith par ps [0..]+    prParamsH ps = intercalate ", " $ zipWith par ps [0::Int ..]       where par (t, _) n = t ++ " p" ++ show n  -- typedefs in the Header make generation much nicer.+prTypeDefs :: [String] -> String prTypeDefs user = unlines $ concat   [ [ "/********************   TypeDef Section    ********************/"     , ""@@ -537,7 +538,7 @@ -- } prRuleC :: Cat -> (String, [Cat]) -> Doc prRuleC _ (fun, _) | isNilFun fun || isOneFun fun = empty-prRuleC cat (fun, _) | isConsFun fun = vcat'+prRuleC cat@(ListCat c') (fun, _) | isConsFun fun = vcat'     [ "/********************   " <> c <> "    ********************/"     , ""     , c <+> "make_" <> c <> parens (text m <+> "p1" <> "," <+> c <+> "p2")@@ -558,8 +559,6 @@     icat = identCat (normCat cat)     c = text icat     v = text (map toLower icat ++ "_")-    ListCat c' = cat            -- We're making a list constructor, so we-                                -- expect a list category     m = identCat (normCat c')     m' = map toLower m ++ "_" prRuleC c (fun, cats) = vcat'@@ -610,7 +609,7 @@ -- >>> prParams [Cat "O", Cat "E"] -- [(O,p1),(E,p2)] prParams :: [Cat] -> [(Doc, Doc)]-prParams = zipWith prParam [1..]+prParams = zipWith prParam [1::Int ..]   where     prParam n c = (text (identCat c), text ("p" ++ show n)) @@ -631,4 +630,5 @@  {- **** Helper Functions **** -} +memName :: String -> String memName s = map toLower s ++ "_"
src/BNFC/Backend/C/CFtoCPrinter.hs view
@@ -155,6 +155,7 @@       "/*** Pretty Printer and Abstract Syntax Viewer ***/",       "",       "#include <ctype.h>   /* isspace */",+      "#include <stddef.h>  /* size_t */",       "#include <stdio.h>",       "#include <string.h>",       "#include <stdlib.h>",@@ -164,8 +165,8 @@       "",       "int _n_;",       "char *buf_;",-      "int cur_;",-      "int buf_size;",+      "size_t cur_;",+      "size_t buf_size;",       ""      ]     printBasics = unlines@@ -266,8 +267,8 @@      [       "void bufAppendS(const char *s)",       "{",-      "  int len = strlen(s);",-      "  int n;",+      "  size_t len = strlen(s);",+      "  size_t n;",       "  while (cur_ + len >= buf_size)",       "  {",       "    buf_size *= 2; /* Double the buffer size */",@@ -314,7 +315,7 @@       "  buf_ = temp;",       "}",       "char *buf_;",-      "int cur_, buf_size;",+      "size_t cur_, buf_size;",       ""      ] 
src/BNFC/Backend/C/CFtoFlexC.hs view
@@ -297,7 +297,7 @@  -- | If we have several block comments, we need different COMMENT lexing states. commentStates :: [String]-commentStates = map ("COMMENT" ++) $ "" : map show [1..]+commentStates = map ("COMMENT" ++) $ "" : map show [1::Int ..]  -- | Create a lexer rule for single-line comments. -- The first argument is -- an optional c++ namespace
src/BNFC/Backend/CPP/Makefile.hs view
@@ -8,7 +8,7 @@ makefile :: String -> String -> String -> Doc makefile prefix name basename = vcat     [ mkVar "CC" "g++ -g"-    , mkVar "CCFLAGS" "--ansi -W -Wall -Wno-unused-parameter -Wno-unused-function -Wno-unneeded-internal-declaration"+    , mkVar "CCFLAGS" "--ansi -W -Wall -Wsign-conversion -Wno-unused-parameter -Wno-unused-function -Wno-unneeded-internal-declaration"     , ""     , mkVar "FLEX" "flex"     , mkVar "FLEX_OPTS" ("-P" ++ prefix)@@ -50,6 +50,8 @@         [ "${FLEX} ${FLEX_OPTS} -oLexer.C " ++ name ++ ".l" ]     , mkRule "Parser.C Bison.H" [ name ++ ".y" ]       [ "${BISON} ${BISON_OPTS} " ++ name ++ ".y -o Parser.C" ]+    , mkRule "Lexer.o" [ "CCFLAGS+=-Wno-sign-conversion" ]+        []     , mkRule "Lexer.o" [ "Lexer.C", "Bison.H" ]         [ "${CC} ${CCFLAGS} -c Lexer.C " ]     , mkRule "Parser.o" [ "Parser.C", "Absyn.H", "Bison.H" ]
src/BNFC/Backend/CPP/NoSTL.hs view
@@ -6,7 +6,6 @@ module BNFC.Backend.CPP.NoSTL (makeCppNoStl) where  import Data.Foldable (toList)-import qualified Data.Map as Map  import BNFC.Utils import BNFC.CF@@ -33,7 +32,7 @@     mkCppFileWithHint (name ++ ".l") flex     mkCppFileWithHint (name ++ ".y") $ cf2Bison (linenumbers opts) parserMode cf env     mkCppFile "Parser.H" $-      mkHeaderFile cf (allParserCats cf) (toList $ allEntryPoints cf) (Map.elems env)+      mkHeaderFile (toList $ allEntryPoints cf)     let (skelH, skelC) = cf2CVisitSkel False Nothing cf     mkCppFile "Skeleton.H" skelH     mkCppFile "Skeleton.C" skelC@@ -127,7 +126,8 @@    dat = identCat $ normCat cat    def = identCat cat -mkHeaderFile _cf _cats eps _env = unlines $ concat+mkHeaderFile :: [Cat] -> String+mkHeaderFile eps = unlines $ concat   [ [ "#ifndef PARSER_HEADER_FILE"     , "#define PARSER_HEADER_FILE"     , ""
src/BNFC/Backend/CPP/NoSTL/CFtoCPPAbs.hs view
@@ -182,6 +182,7 @@    prVisitFun _ = ""  --typedefs in the Header make generation much nicer.+prTypeDefs :: [String] -> String prTypeDefs user = unlines   [    "/********************   TypeDef Section    ********************/",@@ -247,6 +248,7 @@ prDataC user (cat, rules) = concatMap (prRuleC user cat) rules  --Classes for rules vary based on the type of rule.+prRuleC :: [UserDef] -> Cat -> (String, [Cat]) -> String prRuleC user c (fun, cats) =     if isNilFun fun || isOneFun fun     then ""  --these are not represented in the AbSyn
src/BNFC/Backend/CPP/PrettyPrinter.hs view
@@ -69,6 +69,7 @@     "",     "#include \"Absyn.H\"",     "#include <stdio.h>",+    "#include <stddef.h>",     "#include <string.h>",     "#include <stdlib.h>",     "",@@ -111,11 +112,11 @@    [     " protected:",     "  char *buf_;",-    "  int cur_, buf_size;",+    "  size_t cur_, buf_size;",     "",     "  void inline bufAppend(const char *s)",     "  {",-    "    int end = cur_ + strlen(s);",+    "    size_t end = cur_ + strlen(s);",     "    if (end >= buf_size) {",     "      do buf_size *= 2; /* Double the buffer size */",     "      while (end >= buf_size);",@@ -139,29 +140,20 @@     if useStl then render (nest 2 bufAppendString) else "",     "  void inline bufReset(void)",     "  {",-    "    if (buf_) free(buf_);",+    "    if (buf_) delete[] buf_;",     "    buf_size = " ++ nsDefine inPackage "BUFFER_INITIAL" ++ ";",-    "    buf_ = (char *) malloc(buf_size);",-    "    if (!buf_) {",-    "      fprintf(stderr, \"Error: Out of memory while allocating buffer!\\n\");",-    "      exit(1);",-    "    }",+    "    buf_ = new char[buf_size];",     "    memset(buf_, 0, buf_size);",     "    cur_ = 0;",     "  }",     "",     "  void inline resizeBuffer(void)",     "  {",-    "    char *temp = (char *) malloc(buf_size);",-    "    if (!temp)",-    "    {",-    "      fprintf(stderr, \"Error: Out of memory while attempting to grow buffer!\\n\");",-    "      exit(1);",-    "    }",+    "    char *temp = new char[buf_size];",     "    if (buf_)",     "    {",     "      strcpy(temp, buf_);",-    "      free(buf_);",+    "      delete[] buf_;",     "    }",     "    buf_ = temp;",     "  }",@@ -663,8 +655,8 @@ {- **** Helper Functions Section **** -}  -- from ListIdent to Ident+baseName :: [a] -> [a] baseName = drop 4-  --Just sets the coercion level for parentheses in the Pretty Printer. setI :: Integer -> String
src/BNFC/Backend/CPP/STL.hs view
@@ -10,7 +10,6 @@ module BNFC.Backend.CPP.STL (makeCppStl,) where  import Data.Foldable (toList)-import qualified Data.Map as Map  import BNFC.Utils import BNFC.CF@@ -38,7 +37,7 @@     mkCppFileWithHint (name ++ ".l") flex     mkCppFileWithHint (name ++ ".y") $ cf2Bison (linenumbers opts) parserMode cf env     mkCppFile "Parser.H" $-      mkHeaderFile (inPackage opts) cf (allParserCats cf) (toList $ allEntryPoints cf) (Map.elems env)+      mkHeaderFile (inPackage opts) (toList $ allEntryPoints cf)     mkCppFile "ParserError.H" $ printParseErrHeader (inPackage opts)     let (skelH, skelC) = cf2CVisitSkel True (inPackage opts) cf     mkCppFile "Skeleton.H" skelH@@ -165,7 +164,8 @@    def = identCat cat    scope = nsScope inPackage -mkHeaderFile inPackage _cf _cats eps _env = unlines $ concat+mkHeaderFile :: Maybe String -> [Cat] -> String+mkHeaderFile inPackage eps = unlines $ concat   [ [ "#ifndef " ++ hdef     , "#define " ++ hdef     , ""
src/BNFC/Backend/CPP/STL/CFtoCVisitSkelSTL.hs view
@@ -102,6 +102,7 @@        | otherwise = "visit" ++ cat ++ "(" ++ field ++ ");"        where field = v ++ "->" ++ var +headerC :: String headerC = unlines [       "/*** Visitor Design Pattern Skeleton. ***/",       "/* This implements the common visitor design pattern.",@@ -113,6 +114,7 @@       ""       ] +prBasic :: String -> String prBasic c = unlines [   "void Skeleton::visit" ++ c ++ "(" ++ c ++ " x)",   "{",@@ -120,6 +122,7 @@   "}"   ] +prList :: Bool -> (String, Bool) -> String prList True (cl,b) = unlines [   "void Skeleton::visit" ++ cl ++ "("++ cl +++ "*" ++ vname ++ ")",   "{",
src/BNFC/Backend/CPP/STL/CFtoSTLAbs.hs view
@@ -117,7 +117,7 @@   "{",   "public:",   "  virtual " ++ c ++ " *clone() const = 0;",-  if rp == RecordPositions then "  int line_number;" else "",+  if rp == RecordPositions then "  int line_number, char_number;" else "",   "};"   ] @@ -140,7 +140,7 @@   ]  where    conargs = concat $ intersperse ", "-     [x +++ pointerIf st ("p" ++ show i) | ((x,st,_),i) <- zip cs [1..]]+     [x +++ pointerIf st ("p" ++ show i) | ((x,st,_),i) <- zip cs [1::Int ..]]  prList :: (String, Bool) -> String prList (c, b) = unlines@@ -239,7 +239,7 @@   ]  where    cvs = [c | (_,_,c) <- cs]-   pvs = ['p' : show i | ((_,_,_),i) <- zip cs [1..]]+   pvs = ['p' : show i | ((_,_,_),i) <- zip cs [1::Int ..]]    conargs = intercalate ", "      [x +++ pointerIf st v | ((x,st,_),v) <- zip cs pvs] 
src/BNFC/Backend/Common.hs view
@@ -13,7 +13,7 @@  import Prelude hiding ((<>)) -import Data.Bifunctor   ( second )+-- import Data.Bifunctor   ( second ) import Data.Char  import BNFC.CF@@ -35,29 +35,30 @@ flexEps :: String flexEps = "[^.\\n]?" --- | Helper function for c-like languages that generates the code printing--- the list separator according to the given precedence level:------ >>> let my_render c = "my_render(\"" <> text c <> "\")"--- >>> renderListSepByPrecedence "x" my_render []--- <BLANKLINE>------ >>> renderListSepByPrecedence "x" my_render [(0,",")]--- my_render(",");------ >>> renderListSepByPrecedence "x" my_render [(3,";"), (1, "--")]--- switch(x)--- {---   case 3: my_render(";"); break;---   case 1: my_render("--"); break;--- }-renderListSepByPrecedence-  :: Doc                 -- ^ Name of the coercion level variable-  -> (String -> Doc)     -- ^ render function-  -> [(Integer, String)] -- ^ separators by precedence-  -> Doc-renderListSepByPrecedence var render =-  vcat . switchByPrecedence var . map (second $ render >.> (<> ";"))+-- UNUSED+-- -- | Helper function for c-like languages that generates the code printing+-- -- the list separator according to the given precedence level:+-- --+-- -- >>> let my_render c = "my_render(\"" <> text c <> "\")"+-- -- >>> renderListSepByPrecedence "x" my_render []+-- -- <BLANKLINE>+-- --+-- -- >>> renderListSepByPrecedence "x" my_render [(0,",")]+-- -- my_render(",");+-- --+-- -- >>> renderListSepByPrecedence "x" my_render [(3,";"), (1, "--")]+-- -- switch(x)+-- -- {+-- --   case 3: my_render(";"); break;+-- --   case 1: my_render("--"); break;+-- -- }+-- renderListSepByPrecedence+--   :: Doc                 -- ^ Name of the coercion level variable+--   -> (String -> Doc)     -- ^ render function+--   -> [(Integer, String)] -- ^ separators by precedence+--   -> Doc+-- renderListSepByPrecedence var render =+--   vcat . switchByPrecedence var . map (second $ render >.> (<> ";"))  -- Note (Andreas, 2021-05-02): -- @renderListSepByPrecedence@ did not account for mixfix lists (issue #358)
src/BNFC/Backend/Common/NamedVariables.hs view
@@ -146,9 +146,11 @@     else (normCat cat, fixCoercion cat top) : fixAll top cats  --A generic variable name for C-like languages.+varName :: String -> String varName c = map toLower c ++ "_"  --this makes var names a little cleaner.+showNum :: Int -> String showNum n = if n == 0 then "" else show n  -- Makes the first letter a lowercase.
src/BNFC/Backend/Common/OOAbstract.hs view
@@ -86,6 +86,7 @@       0             -> v         : vars (v:seen) vs       n             -> (v ++ show (n+1)) : vars (v:seen) vs +basetypes :: [ (String, String) ] basetypes = [   ("Integer","int"),   ("Char",   "char"),
src/BNFC/Backend/Haskell.hs view
@@ -169,9 +169,11 @@   alsoBak s = [ s, s <.> "bak" ]  makefileHeader :: Options -> Doc-makefileHeader Options{ glr } = vcat+makefileHeader Options{ agda, glr } = vcat   [ "# Makefile for building the parser and test program."   , ""+  , when agda $+    "AGDA       = agda"   , "GHC        = ghc"   , "HAPPY      = happy"   , hsep $ concat@@ -277,7 +279,7 @@    -- | Rule to build Agda parser.   agdaRule :: Doc-  agdaRule = Makefile.mkRule "Main" deps [ "agda --no-libraries --ghc --ghc-flag=-Wwarn $<" ]+  agdaRule = Makefile.mkRule "Main" deps [ "${AGDA} --no-libraries --ghc --ghc-flag=-Wwarn $<" ]     where     deps = map ($ opts) $ concat       [ [ agdaMainFile  -- must be first!@@ -325,7 +327,7 @@         , "import qualified Data.ByteString.Char8 as BS"         ]   , [ "import System.Environment ( getArgs )"-    , "import System.Exit        ( exitFailure, exitSuccess )"+    , "import System.Exit        ( exitFailure )"     , "import Control.Monad      ( when )"     , ""     ]@@ -370,7 +372,6 @@     , "    , \"  (files)         Parse content of files verbosely.\""     , "    , \"  -s (files)      Silent mode. Parse content of files silently.\""     , "    ]"-    , "  exitFailure"     , ""     , "main :: IO ()"     , "main = do"@@ -407,7 +408,7 @@     (hasTopLevelLayout, layoutKeywords, _) = layoutPragmas cf     useTopLevelLayout = isJust hasTopLevelLayout -+runStd :: Bool -> (String -> String) -> String runStd xml myLLexer = unlines $ concat  [ [ "run v p s ="    , "  case p ts of"@@ -423,13 +424,13 @@    , "      showTree v tree"    ]  , [ "      putStrV v $ \"\\n[XML]\\n\\n\" ++ printXML tree" | xml ]- , [ "      exitSuccess"-   , "  where"+ , [ "  where"    , "  ts = " ++ myLLexer "s"    , "  showPosToken ((l,c),t) = concat [ show l, \":\", show c, \"\\t\", show t ]"    ]  ] +runGlr :: (String -> String) -> String runGlr myLLexer  = unlines    [ "run v p s"@@ -456,7 +457,7 @@    , "     ]"    ] -+liftParser :: String liftParser  = unlines    [ "type Forest = Data.Map.Map ForestId [Branch]      -- omitted in ParX export."
src/BNFC/Backend/Haskell/CFtoAbstract.hs view
@@ -7,8 +7,12 @@ {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE RecordWildCards #-} -module BNFC.Backend.Haskell.CFtoAbstract (cf2Abstract, definedRules) where+module BNFC.Backend.Haskell.CFtoAbstract+  ( cf2Abstract+  , DefCfg(..), definedRules', definedRules+  ) where  import Prelude hiding ((<>)) import Data.Either (isRight)@@ -18,11 +22,11 @@ import BNFC.CF import BNFC.Options               ( SharedOptions(..), TokenText(..) ) import BNFC.PrettyPrint-import BNFC.Utils                 ( when )+import BNFC.Utils                 ( when, applyWhen )  import BNFC.Backend.Haskell.Utils   ( avoidReservedWords, catToType, mkDefName-  , tokenTextImport, tokenTextType, typeToHaskell+  , tokenTextImport, tokenTextType, typeToHaskell'   , posType, posConstr, noPosConstr   , hasPositionClass, hasPositionMethod   )@@ -288,42 +292,71 @@   where   t = text cat +-- | Parametrize 'definedRules' so that it can be used for Agda as well. +data DefCfg = DefCfg+  { sanitizeName :: String -> String+  , hasType      :: String+  , arrow        :: String+  , lambda       :: String+  , cons         :: String+  , convTok      :: String -> String+  , convLitInt   :: Exp -> Exp+  , polymorphism :: [Base] -> [Base]+  }++haskellDefCfg :: DefCfg+haskellDefCfg = DefCfg+  { sanitizeName = avoidReservedWords []+  , hasType      = "::"+  , arrow        = "->"+  , lambda       = "\\"+  , cons         = "(:)"+  , convTok      = id+  , convLitInt   = id+  , polymorphism = id+  }+ -- | Generate Haskell code for the @define@d constructors. definedRules :: Bool -> CF -> [Doc]-definedRules functor cf = map mkDef $ definitions cf+definedRules = definedRules' haskellDefCfg++-- | Generate Haskell/Agda code for the @define@d constructors.+definedRules' :: DefCfg -> Bool -> CF -> [Doc]+definedRules' DefCfg{..} functor cf = map mkDef $ definitions cf   where   mkDef (Define f args e _) = vcat $ concat-    [ [ text $ unwords [ fName, "::", typ $ wpThing t ]+    [ [ text $ unwords [ fName, hasType, typeToHaskell' arrow $ typ $ wpThing t ]       | t <- maybeToList $ sigLookup f cf       ]-    , [ hsep $ map text (fName : xs') ++ [ "=", pretty $ sanitize e ] ]+    , [ hsep $ concat+        [ map text [ fName, "=", lambda ]+        , map text $ addFunctorArg id $ map (sanitizeName . fst) args+        , [ text arrow, pretty $ sanitize e ]+        ]+      ]     ]     where     fName = mkDefName f-    xs    = map fst args-    avoidReserved = avoidReservedWords [fName]-    xs' = addFunctorArg id $ map avoidReserved xs-    typ (FunT ts t) | functor = List.intercalate " -> " $ "a" : (map funBase $ ts ++ [t])-    typ t = typeToHaskell t+    typ :: Type -> Type+    typ = applyWhen functor $ \ (FunT ts t) ->+            FunT (polymorphism $ BaseT "a" : map addParam ts) $ addParam t+    addParam :: Base -> Base+    addParam = fmap $ \ x -> if tokTyp x then x else x ++ "' a"+    tokTyp :: String -> Bool+    tokTyp = (`elem` literals cf)+    sanitize :: Exp -> Exp     sanitize = \case       App x t es-        | isNilCons x -> App x t $ map sanitize es-        | tokTyp x    -> App x t $ map sanitize es-        | otherwise   -> App x t $ addFunctorArg (\ e -> App e dummyType []) $ map sanitize es-      Var x         -> Var $ avoidReserved x-      e@LitInt{}    -> e+        | isConsFun x -> App cons t $ map sanitize es+        | isNilFun x  -> App x t $ map sanitize es+        | tokTyp x    -> App (convTok x) t $ map sanitize es+        | otherwise   -> App (sanitizeName x) t $ addFunctorArg (\ x -> App x dummyType []) $ map sanitize es+      Var x         -> Var $ sanitizeName x+      e@LitInt{}    -> convLitInt e       e@LitDouble{} -> e       e@LitChar{}   -> e       e@LitString{} -> e     -- Functor argument-    addFunctorArg g-      | functor = (g "_a" :)-      | otherwise = id-    funBase :: Base -> String-    funBase = \case-      BaseT x-        | tokTyp x  -> x-        | otherwise -> x ++ "' a"-      ListT b -> concat [ "[", funBase b, "]" ]-    tokTyp = (`elem` literals cf)+    addFunctorArg :: (String -> a) -> [a] -> [a]+    addFunctorArg g = applyWhen functor (g "_a" :)
src/BNFC/Backend/Haskell/CFtoHappy.hs view
@@ -30,7 +30,8 @@  -- default naming -tokenName   = "Token"+tokenName :: String+tokenName = "Token"  -- | Generate a happy parser file from a grammar. 
src/BNFC/Backend/Haskell/CFtoLayout.hs view
@@ -73,9 +73,27 @@     , render $ prettyList 2 "parenOpen  =" "[" "]" "," $ map (text . show) parenOpen     , render $ prettyList 2 "parenClose =" "[" "]" "," $ map (text . show) parenClose     , ""+    , "-- | Report an error during layout resolution."+    , "layoutError"+    , "   :: [Token]  -- ^ Remaining tokens."+    , "   -> String   -- ^ Error message."+    , "   -> a"+    , "layoutError ts msg"+    , "  | null ts   = error $ concat [ \"Layout error: \", msg, \".\" ]"+    , "  | otherwise = error $ unlines"+    , "      [ concat [ \"Layout error at \", tokenPos ts, \": \", msg, \".\" ]"+    , "      , unwords $ concat"+    , "         [ [ \"Remaining tokens:\" ]"+    , "         , map prToken $ take 10 ts"+    , "         , [ \"...\" | not $ null $ drop 10 ts ]"+    , "         ]"+    , "      ]"+    , ""     , "-- | Replace layout syntax with explicit layout tokens."-    , "resolveLayout :: Bool    -- ^ Whether to use top-level layout."-    , "              -> [Token] -> [Token]"+    , "resolveLayout"+    , "  :: Bool      -- ^ Whether to use top-level layout."+    , "  -> [Token]   -- ^ Token stream before layout resolution."+    , "  -> [Token]   -- ^ Token stream after layout resolution."     ]   , caseMaybe topDelim     -- No top-level layout@@ -96,7 +114,7 @@     , "      -> [Token] -> [Token]"     , ""     , "  -- The stack should never be empty."-    , "  res _ [] ts = error $ \"Layout error: stack empty. Tokens: \" ++ show ts"+    , "  res _ [] ts = layoutError ts \"layout stack empty\""     , ""     , "  -- Handling explicit blocks:"     , "  res _ st (t0 : ts)"@@ -112,14 +130,18 @@     , "      , let (imps, rest) = span isImplicit st"     , "      , let st' = drop 1 rest"     , "      = if null st'"-    , "        then error $ unwords"-    , "          [ \"Layout error: Found\", prToken t0, \"at\" , tokenPos [t0]"-    , "          , \"without an explicit layout block.\""+    , "        then layoutError ts $ unwords"+    , "          [ \"found\", prToken t0, \"at\" , tokenPos [t0]"+    , "          , \"without an explicit layout block\""     , "          ]"-    , "        else map (closingToken (tokenPosn t0)) imps ++ t0 : res (Just t0) st' ts"+    , "        else map (closingToken ts (tokenPosn t0)) imps ++ t0 : res (Just t0) st' ts"     , ""     , "  -- Ending or confirming implicit layout blocks:"     , "  res pt (b@(Implicit delim status col) : bs) (t0 : ts)"+    , "    "+    , "      -- Do not end top-level layout block by layout stop word."+    , "    | isStop t0,  col <= 1"+    , "      = t0 : res (Just t0) (b : bs) ts"     , ""     , "      -- End of implicit block by a layout stop word."     , "    | isStop t0"@@ -127,14 +149,14 @@     , "           -- more indented than the current token."     , "      , let (ebs, st') = span ((column t0 <) . indentation) bs"     , "           -- Insert block-closers after the previous token."-    , "      = map (closingToken (afterPrev pt)) (b : ebs) ++ t0 : res (Just t0) st' ts"+    , "      = map (closingToken ts (afterPrev pt)) (b : ebs) ++ t0 : res (Just t0) st' ts"     , ""     , "    -- End of an implicit layout block by dedentation."     , "    | newLine pt t0"     , "      , column t0 < col"     , "           -- Insert a block closer after the previous token."     , "           -- Repeat, with the current block removed from the stack."-    , "      , let c = closingToken (afterPrev pt) b"+    , "      , let c = closingToken ts (afterPrev pt) b"     , "      = c : res (Just c) bs (t0 : ts)"     , ""     , "    -- If we are on a newline, confirm the last tentative blocks."@@ -203,9 +225,10 @@     , "      -> (sToken (afterPrev pt) sep :)"     , "    _ -> id"     , ""-    , "  closingToken :: Position -> Block -> Token"-    , "  closingToken pos = sToken pos . \\case"+    , "  closingToken :: [Token] -> Position -> Block -> Token"+    , "  closingToken ts pos = sToken pos . \\case"     , "    Implicit (LayoutDelimiters _ _ (Just sy)) _ _ -> sy"+    , "    _ -> layoutError ts \"trying to close a top level block\""     , ""     , "type Position = Posn"     , "type Line     = Int"
src/BNFC/Backend/Haskell/HsOpts.hs view
@@ -12,10 +12,12 @@  alexFile, alexFileHs, alexFileM,  composOpFile, composOpFileM,  happyFile, happyFileHs, happyFileM,+ txtFile,  errFile, errFileM,  templateFile, templateFileM,  printerFile, printerFileM,  layoutFile, layoutFileM,+ xmlFile, xmlFileM,  tFile, tFileExe :: Options -> String absFile       = mkFile withLang "Abs" "hs" absFileM      = mkMod  withLang "Abs"
src/BNFC/Backend/HaskellGADT/CFtoAbstractGADT.hs view
@@ -169,7 +169,7 @@     , "  compare x y = P.compare (index x) (index y) `P.mappend` compareSame x y"     ]   , [ "", "index :: Tree c -> P.Int" ]-  , zipWith mkIndex cs [0..]+  , zipWith mkIndex cs [0::Int ..]   , when (null cs) [ "index = P.undefined" ]   , [ "", "compareSame :: Tree c -> Tree c -> P.Ordering" ]   , map mkCompareSame cs
src/BNFC/Backend/Java.hs view
@@ -535,6 +535,7 @@     }   where app x = x pbase pabsyn cf +inputfile :: MakeFileDetails -> String inputfile x   | null (fileextension x) = filename x   | otherwise              = filename x <.> fileextension x
src/BNFC/Backend/Java/CFtoJLex15.hs view
@@ -159,9 +159,9 @@     , ifC catString strStates     , ifC catChar chStates     , ifC catDouble-        "<YYINITIAL>{DIGIT}+\".\"{DIGIT}+(\"e\"(\\-)?{DIGIT}+)? { return cf.newSymbol(\"\", sym._DOUBLE_, left_loc(), right_loc(), new Double(yytext())); }"+        "<YYINITIAL>{DIGIT}+\".\"{DIGIT}+(\"e\"(\\-)?{DIGIT}+)? { return cf.newSymbol(\"\", sym._DOUBLE_, left_loc(), right_loc(), Double.valueOf(yytext())); }"     , ifC catInteger-        "<YYINITIAL>{DIGIT}+ { return cf.newSymbol(\"\", sym._INTEGER_, left_loc(), right_loc(), new Integer(yytext())); }"+        "<YYINITIAL>{DIGIT}+ { return cf.newSymbol(\"\", sym._INTEGER_, left_loc(), right_loc(), Integer.valueOf(yytext())); }"     , ifC catIdent         "<YYINITIAL>{LETTER}{IDENT}* { return cf.newSymbol(\"\", sym._IDENT_, left_loc(), right_loc(), yytext().intern()); }"     , "<YYINITIAL>[ \\t\\r\\n\\f] { /* ignore white space. */ }"@@ -207,17 +207,17 @@     chStates = vcat --These handle escaped characters in Chars.         [ "<YYINITIAL>\"'\" { left = left_loc(); yybegin(CHAR); }"         , "<CHAR>\\\\ { yybegin(CHARESC); }"-        , "<CHAR>[^'] { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), new Character(yytext().charAt(0))); }"+        , "<CHAR>[^'] { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), Character.valueOf(yytext().charAt(0))); }"         , "<CHAR>\\r\\n|\\r|\\n { throw new Error(\"Unterminated character literal on line \" + left.getLine() " <>           (if jflex == JFlexCup then "+ \" beginning at column \" + left.getColumn()" else "") <> "); }"         , if jflex == JFlexCup           then "<CHAR><<EOF>> { throw new Error(\"Unterminated character literal at EOF, beginning at \" + left.getLine() + \":\" + left.getColumn()); }"           else ""-        , "<CHARESC>n { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), new Character('\\n')); }"-        , "<CHARESC>t { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), new Character('\\t')); }"-        , "<CHARESC>r { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), new Character('\\r')); }"-        , "<CHARESC>f { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), new Character('\\f')); }"-        , "<CHARESC>. { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), new Character(yytext().charAt(0))); }"+        , "<CHARESC>n { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), Character.valueOf('\\n')); }"+        , "<CHARESC>t { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), Character.valueOf('\\t')); }"+        , "<CHARESC>r { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), Character.valueOf('\\r')); }"+        , "<CHARESC>f { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), Character.valueOf('\\f')); }"+        , "<CHARESC>. { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), Character.valueOf(yytext().charAt(0))); }"         , "<CHARESC>\\r\\n|\\r|\\n { throw new Error(\"Unterminated character literal on line \" + left.getLine() " <>           (if jflex == JFlexCup then "+ \" beginning at column \" + left.getColumn()" else "") <> "); }"         , if jflex == JFlexCup
src/BNFC/Backend/Java/CFtoJavaAbs15.hs view
@@ -101,6 +101,7 @@        javaType = \case            ListT (BaseT x) -> concat [ packageAbsyn, ".List", x ]            BaseT x         -> typename packageAbsyn (ctxTokens ctx) x+           ListT ListT{}   -> undefined            -- ListT t         -> javaType t -- undefined         javaArg :: (String, Base) -> String@@ -118,10 +119,10 @@              | isUpper (head x) -> callQ x es              | otherwise        -> call (sanitize x) es             -- -- | x `elem` args    -> call x es-           LitInt n             -> "new Integer(" ++ show n ++ ")"-           LitDouble x          -> "new Double(" ++ show x ++ ")"-           LitChar c            -> "new Character(" ++ show c ++ ")"-           LitString s          -> "new String(" ++ show s ++ ")"+           LitInt n             -> "Integer.valueOf(" ++ show n ++ ")"+           LitDouble x          -> "Double.valueOf(" ++ show x ++ ")"+           LitChar c            -> "Character.valueOf(" ++ show c ++ ")"+           LitString s          -> "String.valueOf(" ++ show s ++ ")"          where          call x es = x ++ "(" ++ intercalate ", " (map (javaExp args) es) ++ ")"          callQ     = call . qualify@@ -227,10 +228,10 @@                             "}"                            ]   where-  aPrime = 37-  hashKids [] = show aPrime+  aPrime = "37"+  hashKids [] = aPrime   hashKids (v:vs) = hashKids_ (hashKid v) vs-  hashKids_ = foldl (\r v -> show aPrime ++ "*" ++ "(" ++ r ++ ")+" ++ hashKid v)+  hashKids_ = foldl (\r v -> aPrime ++ "*" ++ "(" ++ r ++ ")+" ++ hashKid v)   hashKid iv = "this." ++ render (iVarName iv) ++ ".hashCode()"  
src/BNFC/Backend/Java/Utils.hs view
@@ -9,6 +9,7 @@ comment :: String -> String comment = ("// " ++) +javaReserved :: [String] javaReserved =   [ "abstract"   , "assert"
src/BNFC/Backend/Latex.hs view
@@ -137,6 +137,7 @@     ]   _ -> [] +prtOwnToken :: (String, Reg) -> String prtOwnToken (name,reg) = unlines   [ name +++ "literals are recognized by the regular expression",    "\\(" ++
src/BNFC/Backend/OCaml.hs view
@@ -20,6 +20,7 @@ import BNFC.Backend.OCaml.CFtoOCamlTemplate import BNFC.Backend.OCaml.CFtoOCamlTest     (ocamlTestfile) import BNFC.Backend.OCaml.CFtoOCamlYacc+import BNFC.Backend.OCaml.OCamlUtil import BNFC.Backend.XML                     (makeXML) import BNFC.CF import BNFC.Options@@ -56,6 +57,7 @@  absFile, absFileM, ocamllexFile, ocamllexFileM, ocamlyaccFile, ocamlyaccFileM,   utilFile, templateFile, templateFileM, printerFile, printerFileM,+  showFile, showFileM,   tFile :: SharedOptions -> String absFile       = mkFile withLang "Abs" "ml" absFileM      = mkMod  withLang "Abs"@@ -83,11 +85,12 @@     mkfile (absFile opts)       comment $ cf2Abstract absMod cf     mkfile (ocamllexFile opts)  comment $ cf2ocamllex lexMod parMod cf     mkfile (ocamlyaccFile opts) C.comment $-      cf2ocamlyacc (ocamlParser opts) parMod absMod lexMod  cf+      cf2ocamlyacc (ocamlParser opts) absMod cf     mkfile (templateFile opts)  comment $ cf2Template (templateFileM opts) absMod cf     mkfile (printerFile opts)   comment $ cf2Printer prMod absMod cf     mkfile (showFile opts)      comment $ cf2show showMod absMod cf-    mkfile (tFile opts)         comment $ ocamlTestfile absMod lexMod parMod prMod showMod cf+    mkfile (tFile opts)         comment $+      ocamlTestfile (ocamlParser opts) absMod lexMod parMod prMod showMod cf     mkfile (utilFile opts)      comment $ utilM     mkMakefile opts $ makefile opts     case xml opts of@@ -110,9 +113,7 @@ makefile :: SharedOptions -> String -> Doc makefile opts basename = vcat     [ mkVar "OCAMLC" "ocamlc"-    , mkVar "OCAMLYACC" $ case ocamlParser opts of-        OCamlYacc -> "ocamlyacc"-        Menhir    -> "menhir"+    , mkVar "OCAMLYACC" $ ocamlParserName opts     , mkVar "OCAMLLEX" "ocamllex"     , mkVar "OCAMLCFLAGS" ""     , mkRule "all" []
src/BNFC/Backend/OCaml/CFtoOCamlAbs.hs view
@@ -38,11 +38,11 @@ definedRules cf = map mkDef $ definitions cf   where     mkDef (Define f args e _) =-      "let " ++ sanitizeOcaml (funName f) ++ " " ++ mkTuple (map fst args) ++ " = " ++ ocamlExp False e+      "let " ++ sanitizeOcaml (funName f) ++ " " ++ mkTuple (map (sanitizeOcaml . fst) args) ++ " = " ++ ocamlExp False e      ocamlExp :: Bool -> Exp -> String     ocamlExp p = \case-      Var s       -> s+      Var s       -> sanitizeOcaml s       App "(:)" _ [e1, e2] -> parensIf p $ unwords [ ocamlExp True e1, "::", ocamlExp False e2 ]       App s _ []  -> sanitizeOcaml s       App s _ [e] -> parensIf p $ sanitizeOcaml s ++ ' ' : ocamlExp True e@@ -68,8 +68,9 @@   concat (intersperse "\n | " (map prRule rules)) ++   "\n" -prRule (fun,[])   = fun-prRule (fun,cats) = fun +++ "of" +++ render (mkTupleType cats)+prRule :: (String, [Cat]) -> String+prRule (fun, [])   = fun+prRule (fun, cats) = fun +++ "of" +++ render (mkTupleType cats)  -- | Creates an OCaml type tuple by intercalating * between type names -- >>> mkTupleType [Cat "A"]
src/BNFC/Backend/OCaml/CFtoOCamlPrinter.hs view
@@ -103,30 +103,35 @@   ""   ] +charRule :: CF -> String charRule cf = unlines [     "let rec prtChar (_:int) (c:char) : doc = render (\"'\" ^ Char.escaped c ^ \"'\")",     ifList cf (TokenCat catChar),     ""     ] +integerRule :: CF -> String integerRule cf = unlines [     "let rec prtInt (_:int) (i:int) : doc = render (string_of_int i)",     ifList cf (TokenCat catInteger),     ""     ] +doubleRule :: CF -> String doubleRule cf = unlines [     "let rec prtFloat (_:int) (f:float) : doc = render (sprintf \"%.15g\" f)",     ifList cf (TokenCat catDouble),     ""     ] +stringRule :: CF -> String stringRule cf = unlines [     "let rec prtString (_:int) (s:string) : doc = render (\"\\\"\" ^ String.escaped s ^ \"\\\"\")",     ifList cf (TokenCat catString),     ""     ] +identRule :: ModuleName -> CF -> String identRule absMod cf = ownPrintRule absMod cf catIdent  ownPrintRule :: ModuleName -> CF -> TokenCat -> String@@ -154,7 +159,12 @@    var xs   = map toLower (catToStr xs)    ruleOf s = fromJust $ lookupRule (noPosition s) (cfgRules cf) ---- case_fun :: Cat -> [(Constructor,Rule)] -> String+-- case_fun :: Cat -> [(Constructor,Rule)] -> String+case_fun+  :: String+  -> Cat+  -> [((String, [String]), (Cat, [Either Cat String]))]+  -> String case_fun absMod cat xs = unlines [ --  "instance Print" +++ cat +++ "where",   prtFun cat +++"(i:int)" +++ "(e : " ++ fixTypeQual absMod cat ++ ") : doc = match e with",@@ -233,6 +243,7 @@     body = text $ mkRhs ["x", "xs"] rhs mkPrtListCase _ _ = error "mkPrtListCase undefined for non-list categories" +mkRhs :: [String] -> [Either Cat String] -> [Char] mkRhs args its =   "(concatD [" ++ unwords (intersperse ";" (mk args its)) ++ "])"  where
src/BNFC/Backend/OCaml/CFtoOCamlShow.hs view
@@ -68,11 +68,13 @@   ""   ] +integerRule :: String integerRule = "let showInt (i:int) : showable = s2s (string_of_int i)" +doubleRule :: String doubleRule = "let showFloat (f:float) : showable = s2s (string_of_float f)" -+identRule :: ModuleName -> CF -> String identRule absMod cf = ownPrintRule absMod cf catIdent  ownPrintRule :: ModuleName -> CF -> TokenCat -> String@@ -107,6 +109,8 @@    ruleOf s = fromJust $ lookupRule (noPosition s) (cfgRules cf)  -- case_fun :: Cat -> [(Constructor,Rule)] -> String+case_fun :: String+         -> Cat -> [((String, [String]), (a, [Either Cat t]))] -> String case_fun absMod cat xs = unlines [   showsFun cat +++ "(e : " ++ fixTypeQual absMod cat ++ ") : showable = match e with",   unlines $ insertBar $ map (\ ((c,xx),r) ->@@ -117,7 +121,7 @@     xs   ] -+mkRhs :: [String] -> [Either Cat t] -> String mkRhs args its =   case unwords (intersperse " >> s2s \", \" >> " (mk args its)) of     [] -> ""
src/BNFC/Backend/OCaml/CFtoOCamlTest.hs view
@@ -14,6 +14,7 @@ import Text.PrettyPrint  import BNFC.CF+import BNFC.Options                        (OCamlParser(..)) import BNFC.Backend.OCaml.OCamlUtil import BNFC.Backend.OCaml.CFtoOCamlYacc    (epName) import BNFC.Backend.OCaml.CFtoOCamlPrinter (prtFun)@@ -26,8 +27,8 @@ comment d = "(*" <+> d <+> "*)"  -- | Generate a test program in OCaml-ocamlTestfile :: String -> String -> String -> String -> String -> CF -> Doc-ocamlTestfile absM lexM parM printM showM cf =+ocamlTestfile :: OCamlParser -> String -> String -> String -> String -> String -> CF -> Doc+ocamlTestfile ocamlParser absM lexM parM printM showM cf =     let         cat         = firstEntry cf         qualify q x = concat [ q, ".", x ]@@ -40,11 +41,26 @@           , parens $ text (showsFunQual (qualify showM) cat) <+> "x"           ]         topType     = text (fixTypeQual absM $ normCat cat)+        exc         = case ocamlParser of+          OCamlYacc -> "Parsing.Parse_error"+          Menhir    -> text $ qualify parM "Error"     in vcat         [ "open Lexing"         , ""         , "let parse (c : in_channel) :" <+> topType <+> "="-        , nest 4 (parserName <+> lexerName <+> "(Lexing.from_channel c)")+        , nest 4 $ vcat+            [ "let lexbuf = Lexing.from_channel c"+            , "in"+            , "try"+            , nest 2 $ hsep [ parserName, lexerName, "lexbuf" ]+            , "with"+            , nest 2 $ hsep [ exc, "->" ]+            , nest 4 $ vcat+                [ "let start_pos = Lexing.lexeme_start_p lexbuf"+                , "and end_pos   = Lexing.lexeme_end_p   lexbuf"+                , "in  raise (BNFC_Util.Parse_error (start_pos, end_pos))"+                ]+            ]         , ";;"         , ""         , "let showTree (t : " <> topType <> ") : string ="
src/BNFC/Backend/OCaml/CFtoOCamlYacc.hs view
@@ -15,11 +15,12 @@         where  import Data.Char-import Data.Foldable (toList)+import Data.Foldable ( toList )+import Data.List     ( intercalate )  import BNFC.CF-import BNFC.Options ( OCamlParser(..) )-import BNFC.Utils   ( (+++) )+import BNFC.Options  ( OCamlParser(..) )+import BNFC.Utils    ( (+++), mapHead, table ) import BNFC.Backend.Common import BNFC.Backend.OCaml.OCamlUtil @@ -31,42 +32,46 @@  -- The main function, that given a CF -- generates a ocamlyacc module.-cf2ocamlyacc :: OCamlParser -> String -> String -> String -> CF -> String-cf2ocamlyacc ocamlParser name absName lexName cf- = unlines-    [header name absName lexName cf,-    declarations absName cf,-    "%%",-    rules ocamlParser cf-    ]+cf2ocamlyacc :: OCamlParser -> String -> CF -> String+cf2ocamlyacc ocamlParser absName cf = unlines+  [ header ocamlParser absName+  , declarations absName cf+  , "%%"+  , ""+  , rules ocamlParser cf+  ]  -header :: String -> String -> String -> CF -> String-header _ absName _ _ = unlines-         ["/* Parser definition for use with ocamlyacc */",-          "%{",-          "open " ++ absName,-          "open Lexing",-          "",-          "%}"-         ]+header :: OCamlParser -> String -> String+header ocamlParser absName = unlines+  [ unwords [ "/* Parser definition for use with", ocamlParserName ocamlParser, "*/" ]+  , ""+  , "%{"+  , "open " ++ absName+  , "open Lexing"+  , "%}"+  ]  declarations :: String -> CF -> String declarations absName cf =-  unlines+  unlines $ intercalate [""]     [ tokens (unicodeAndSymbols cf) (asciiKeywords cf)     , specialTokens cf     , entryPoints absName cf+    , map (catTyping . fst)      $ ruleGroups cf+    , map (catTyping . TokenCat) $ literals cf     ]+  where+    catTyping c = typing absName c (nonterminal c)  -- | Declare keyword and symbol tokens. -tokens :: [String] -> [String] -> String+tokens :: [String] -> [String] -> [String] tokens symbols reswords =-  unlines $ concat+  concat     [ [ unwords $ "%token" : map ("KW_" ++) reswords | hasReserved ]     , [ "" | hasReserved ]-    , (`map` zip symbols [1..]) $ \ (s, n) ->+    , (`map` zip symbols [1::Int ..]) $ \ (s, n) ->         "%token SYMB" ++ show n +++ "/*" +++ s +++ "*/"     ]   where@@ -81,7 +86,7 @@     -- so just writing @terminal cf s = ...@ could result in computing     -- kws for every @s@ anew.     if s `elem` kws then "KW_" ++ s-    else case lookup s (zip (unicodeAndSymbols cf) [1..]) of+    else case lookup s (zip (unicodeAndSymbols cf) [1::Int ..]) of       Just i -> "SYMB" ++ show i       Nothing -> error $ "CFtoOCamlYacc: terminal " ++ show s ++ " not defined in CF."   where@@ -93,33 +98,37 @@     where spaceToUnderscore ' ' = '_'           spaceToUnderscore x = x -specialTokens :: CF -> String-specialTokens cf = unlines $ concat $+specialTokens :: CF -> [String]+specialTokens cf = concat $   [ [ "%token TOK_EOF" ]-  , [ prToken (ty n)      n | n                 <- specialCatsP  ]-  , [ prToken (posTy pos) n | TokenReg n0 pos _ <- cfgPragmas cf, let n = wpThing n0 ]+  , table " " [ prToken (ty n)      n | n                 <- specialCatsP  ]+  , table " " [ prToken (posTy pos) n | TokenReg n0 pos _ <- cfgPragmas cf, let n = wpThing n0 ]   ]   where-  prToken t n = "%token" +++ t +++ "TOK_" ++ n+  prToken t n = [ "%token" +++ t, "TOK_" ++ n ]   ty = \case     "Ident"   -> "<string>"     "String"  -> "<string>"     "Integer" -> "<int>"     "Double"  -> "<float>"     "Char"    -> "<char>"+    _ -> undefined   posTy = \case     True  -> "<(int * int) * string>"     False -> "<string>" +entryPoints :: String -> CF -> [String]+entryPoints absName cf =+  concat+    [ [ unwords $ "%start" : map epName eps ]+    , map (\ c -> typing absName c (epName c)) eps+    ]+  where+    eps = toList $ allEntryPoints cf -entryPoints :: String -> CF -> String-entryPoints absName cf = unlines $-    ("%start" +++ unwords (map epName eps))-    :-    (map typing eps)-    where eps = toList $ allEntryPoints cf-          typing :: Cat -> String-          typing c = "%type" +++ "<" ++ qualify (normCat c) ++ ">" +++ epName c+typing :: String -> Cat -> String -> String+typing absName c s = "%type" +++ "<" ++ qualify (normCat c) ++ ">" +++ s+    where           qualify c = if c `elem` [ TokenCat "Integer", TokenCat "Double", TokenCat "Char",                                     TokenCat "String", ListCat (TokenCat "Integer"),                                     ListCat (TokenCat "Double"),@@ -129,52 +138,56 @@                       else absName ++ "." ++ fixType c  epName :: Cat -> String-epName c = "p" ++ capitalize (nonterminal c)-            where capitalize s = case s of-                    [] -> []-                    c:cs -> toUpper c : cs+epName c = "p" ++ mapHead toUpper (nonterminal c) -entryPointRules :: OCamlParser -> CF -> String+entryPointRules :: OCamlParser -> CF -> [String] entryPointRules ocamlParser cf =-  unlines $ map mkRule $ toList $ allEntryPoints cf+  map (unlines . mkRule) $ toList $ allEntryPoints cf   where-  mkRule :: Cat -> String-  mkRule s = unlines-    [ epName s ++ " : " ++ nonterminal s ++ " TOK_EOF { $1 }"-    , concat-      [ "  | error { raise (BNFC_Util.Parse_error ("-        -- Andreas, 2021-09-16, issue #380-        -- menhir has dedicated macros for position info,-        -- the use of the @Parsing@ structure is deprecated-        -- (and does not seem to work).-      , case ocamlParser of-          OCamlYacc -> "Parsing.symbol_start_pos ()"-          Menhir    -> "$symbolstartpos"-      , ", "-      , case ocamlParser of-          OCamlYacc -> "Parsing.symbol_end_pos ()"-          Menhir    -> "$endpos"-      , ")) };"+  mkRule :: Cat -> [String]+  mkRule = case ocamlParser of+    Menhir    -> \ cat ->+      [ epRule cat ++ ";" ]+    OCamlYacc -> \ cat ->+      [ epRule cat+          -- Andreas, 2022-02-10, issue 414:+          -- We keep the 'error' token rule, throwing BNFC_Util.Parse_error,+          -- for API stability.+          -- It would be more uniform with the Menhir backend to just drop this rule+          -- and let the user catch the Parsing.Parse_error exception.+      , "  /* Delete this error clause to get a Parsing.Parse_error exception instead: */"+      , ocamlYaccErrorCase+      , "  ;"       ]-    ]+  epRule :: Cat -> String+  epRule cat = epName cat ++ " : " ++ nonterminal cat ++ " TOK_EOF { $1 }" +ocamlYaccErrorCase :: String+ocamlYaccErrorCase = concat+  [ "  | error { raise (BNFC_Util.Parse_error ("+  , "Parsing.symbol_start_pos ()"+  , ", "+  , "Parsing.symbol_end_pos ()"+  , ")) }"+  ]+ rules :: OCamlParser -> CF -> String-rules ocamlParser cf = unlines [-    entryPointRules ocamlParser cf,-    (unlines $ map (prOne . mkOne) (ruleGroups cf)),-    specialRules cf+rules ocamlParser cf = unlines $ concat+    [ entryPointRules ocamlParser cf+    , map (prOne . mkOne) $ ruleGroups cf+    , specialRules cf     ]-    where-        mkOne (cat,rules) = (cat, constructRule (terminal cf) rules cat)-        prOne (_,[]) = [] -- nt has only internal use-        prOne (nt,((p,a):ls)) =-          unwords [nt', ":" , p, "{", a, "}", "\n" ++ pr ls] ++ ";\n"-         where-           nt' = nonterminal nt-           pr [] = []-           pr ((p,a):ls) =-             unlines [ unwords [ "  |", p, "{", a , "}" ] ] ++ pr ls-+  where+    mkOne (cat,rules) = (cat, constructRule (terminal cf) rules cat)+    prOne (_  , []  ) = [] -- nt has only internal use+    prOne (cat, l:ls) = unlines $ concat+        [ [ unwords [ nt, ":", rule l ] ]+        , map (("  | " ++) . rule) ls+        , [ "  ;" ]+        ]+      where+        rule (p,a) = unwords [ p, "{", a , "}" ]+        nt = nonterminal cat   -- For every non-terminal, we construct a set of rules. A rule is a sequence of@@ -210,8 +223,8 @@      Right s -> terminal s    metas its = [ ('$': show i) | (i, Left _c) <- zip [1 ::Int ..] its ] -specialRules :: CF -> String-specialRules cf = unlines $ (`map` literals cf) $ \case+specialRules :: CF -> [String]+specialRules cf = (`map` literals cf) $ \case   "Ident"   -> "ident : TOK_Ident  { Ident $1 };"   "String"  -> "string : TOK_String { $1 };"   "Integer" -> "int :  TOK_Integer  { $1 };"
src/BNFC/Backend/OCaml/OCamlUtil.hs view
@@ -8,9 +8,24 @@  module BNFC.Backend.OCaml.OCamlUtil where +import Data.Char (toLower, toUpper)+ import BNFC.CF+import BNFC.Options import BNFC.Utils-import Data.Char (toLower, toUpper)++-- | Name of the parser generator.++class OCamlParserName a where+  ocamlParserName :: a -> String++instance OCamlParserName OCamlParser where+  ocamlParserName = \case+    OCamlYacc -> "ocamlyacc"+    Menhir    -> "menhir"++instance OCamlParserName SharedOptions where+  ocamlParserName = ocamlParserName . ocamlParser  -- Translate Haskell types to OCaml types -- Note: OCaml (data-)types start with lowercase letter
src/BNFC/Backend/Txt2Tag.hs view
@@ -48,6 +48,7 @@   , prtComments $ comments cf   ] +identSection :: CFG f -> String identSection cf = if not (hasIdent cf) then [] else                     unlines [                                "===Identifiers===",@@ -87,6 +88,7 @@                ""]   _ -> [] +prtOwnToken :: (String, Reg) -> String prtOwnToken (name,reg) = unlines   [name +++ "literals are recognized by the regular expression",    "```" ++@@ -227,6 +229,7 @@     RAny  -> "char"   ifPar i j s = if i > j then "(" ++ s ++ ")" else s +quote :: String -> String quote s = "``" ++ s ++ "``"  t2tComment :: String -> String
src/BNFC/Backend/XML.hs view
@@ -7,6 +7,8 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE PatternSynonyms #-} +{-# OPTIONS_GHC -fno-warn-missing-signatures #-}+ module BNFC.Backend.XML ---- (cf2DTD, cf2XML)   where @@ -85,7 +87,11 @@ -- lengthy, but validation guarantees type correctness -- flag -xmlt elemDataConstrs cf (cat,fcs) = elemc cat [(f,rhsCat cf f cs) | (f,cs) <- fcs]++efunDefConstrs :: String efunDefConstrs = "elemFun i t x = [P.replicate (i+i) ' ' ++ tag t ++ \" \" ++ etag x]"++endtagDefConstrs :: String endtagDefConstrs = "endtag _ c = tag (\"/\" ++ c)"  -- coding 1:
src/BNFC/CF.hs view
@@ -112,9 +112,12 @@ type Signature = Map String (WithPosition Type)  -- | Type of a non-terminal.-data Base = BaseT String-          | ListT Base-    deriving (Eq, Ord)+type Base = Base' String++data Base' a+  = BaseT a+  | ListT (Base' a)+    deriving (Eq, Ord, Functor)  -- | Type of a rule label. data Type = FunT [Base] Base
src/BNFC/GetCF.hs view
@@ -47,6 +47,7 @@ -- Local imports:  import qualified BNFC.Abs as Abs+import BNFC.Abs (Reg(RAlts)) import BNFC.Par  import BNFC.CF@@ -287,7 +288,7 @@   where     notIdent s       = null s || not (isAlpha (head s)) || any (not . isIdentRest) s     isIdentRest c    = isAlphaNum c || c == '_' || c == '\''-    revs cf@CFG{..} =+    revs cf =         cf{ cfgReversibleCats = findAllReversibleCats cf }  -- | This function goes through each rule of a grammar and replace Cat "X" with@@ -537,9 +538,16 @@   where   prags = cfgPragmas cf --- | Check if any of the user-defined terminal categories is nullable.+-- | Check if any of the user-defined terminal categories is nullable or empty. checkTokens :: CFG f -> Maybe String-checkTokens cf+checkTokens cf =+  case catMaybes [ checkTokensEmpty cf, checkTokensNullable cf ] of+    [] -> Nothing+    ss -> Just $ concat ss++-- | Check if any of the user-defined terminal categories is nullable.+checkTokensNullable :: CFG f -> Maybe String+checkTokensNullable cf   | null pxs  = Nothing   | otherwise = Just $ unlines $ concat       [ [ "ERROR: The following tokens accept the empty string:" ]@@ -547,6 +555,18 @@       ]   where     pxs = [ px | TokenReg px _ regex <- cfgPragmas cf, nullable regex ]++-- | Check if any of the user-defined terminal categories is nullable.+checkTokensEmpty :: CFG f -> Maybe String+checkTokensEmpty cf+  | null pxs  = Nothing+  | otherwise = Just $ unlines $ concat+      [ [ "ERROR: The following tokens accept nothing:" ]+      , printNames pxs+      ]+  where+    -- The regular expression is already simplified, so we match against 0 directly.+    pxs = [ px | TokenReg px _ (RAlts "") <- cfgPragmas cf ]   -- we should actually check that
+ src/BNFC/Lex.hs view
@@ -0,0 +1,596 @@+{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-}+{-# LANGUAGE CPP,MagicHash #-}+{-# LINE 4 "BNFC/Lex.x" #-}++{-# OPTIONS -fno-warn-incomplete-patterns #-}+{-# OPTIONS_GHC -w #-}++{-# LANGUAGE PatternSynonyms #-}++module BNFC.Lex where++import Prelude++import qualified Data.Bits+import Data.Char     (ord)+import Data.Function (on)+import Data.Word     (Word8)++#if __GLASGOW_HASKELL__ >= 603+#include "ghcconfig.h"+#elif defined(__GLASGOW_HASKELL__)+#include "config.h"+#endif+#if __GLASGOW_HASKELL__ >= 503+import Data.Array+#else+import Array+#endif+#if __GLASGOW_HASKELL__ >= 503+import Data.Array.Base (unsafeAt)+import GHC.Exts+#else+import GlaExts+#endif+alex_tab_size :: Int+alex_tab_size = 8+alex_base :: AlexAddr+alex_base = AlexA#+  "\xf8\xff\xff\xff\x49\x00\x00\x00\xc9\xff\xff\xff\xe0\xff\xff\xff\xc9\x00\x00\x00\x9c\x01\x00\x00\x2d\x00\x00\x00\x1c\x02\x00\x00\x9c\x02\x00\x00\x1c\x03\x00\x00\x9c\x03\x00\x00\x1c\x04\x00\x00\x9c\x04\x00\x00\x0d\x05\x00\x00\x00\x00\x00\x00\x8d\x05\x00\x00\x00\x00\x00\x00\xfe\x05\x00\x00\x00\x00\x00\x00\x6f\x06\x00\x00\x00\x00\x00\x00\x0b\x01\x00\x00\x00\x00\x00\x00\xb0\x06\x00\x00\x00\x00\x00\x00\xf1\x06\x00\x00\xf1\x07\x00\x00\xb1\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x08\x00\x00\x22\x09\x00\x00\xe2\x08\x00\x00\x00\x00\x00\x00\xbb\x09\x00\x00\xbb\x0a\x00\x00\xc1\x09\x00\x00\x7b\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x0a\x00\x00\xdb\xff\xff\xff\x47\x00\x00\x00\x72\x00\x00\x00\xb2\x0b\x00\x00\x3d\x0b\x00\x00\x32\x0c\x00\x00\xf2\x0c\x00\x00\xb2\x0c\x00\x00\x00\x00\x00\x00\xa8\x0d\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\xdc\xff\xff\xff\xdd\xff\xff\xff\x00\x00\x00\x00\xdf\xff\xff\xff\x81\x0e\x00\x00\xe4\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\xb9\x09\x00\x00\x8c\x00\x00\x00"#++alex_table :: AlexAddr+alex_table = AlexA#+  "\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x37\x00\x3c\x00\x2b\x00\x32\x00\x05\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x34\x00\x02\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x35\x00\x37\x00\x00\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x38\x00\x37\x00\x00\x00\x37\x00\x00\x00\x37\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x37\x00\x03\x00\x37\x00\x00\x00\x37\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x36\x00\x37\x00\x37\x00\x01\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x2a\x00\x00\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x3f\x00\x33\x00\x00\x00\x00\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\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\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\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\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\xff\xff\x1a\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1b\x00\x0a\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0f\x00\x0e\x00\x0e\x00\x0e\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x01\x00\x1b\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\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x00\x00\x00\x00\x00\x00\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\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\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\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\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\xff\xff\x1a\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1b\x00\x0a\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x0f\x00\x0e\x00\x0e\x00\x0e\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x23\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x1f\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x1a\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x08\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x09\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x15\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\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\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\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\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\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x17\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\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\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\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\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\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\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\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\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\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\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\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\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\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\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\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\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\xff\xff\x1f\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x20\x00\x09\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x17\x00\x0c\x00\x10\x00\x10\x00\x10\x00\x11\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\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\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\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\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\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\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3b\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x00\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\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\x00\x00\x00\x00\x00\x00\x00\x00\x24\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\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\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\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\xff\xff\x23\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x25\x00\x08\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x19\x00\x0b\x00\x12\x00\x12\x00\x12\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\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\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\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\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\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\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\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\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\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\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\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\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\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\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\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\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\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\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\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\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\xff\xff\x2f\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x30\x00\x04\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x28\x00\x07\x00\x1d\x00\x1d\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\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\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x2e\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\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\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\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\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\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\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\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++alex_check :: AlexAddr+alex_check = AlexA#+  "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x3d\x00\x27\x00\x2d\x00\x2d\x00\x2d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\x20\x00\x3a\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x27\x00\x5d\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x2d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\x74\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xc3\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2d\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x27\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x22\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\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\xff\xff\xff\xff\xff\xff\xff\xff\x5c\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\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\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\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\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\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\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\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\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\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\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\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\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\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\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\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\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_deflt :: AlexAddr+alex_deflt = AlexA#+  "\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x14\x00\xff\xff\x16\x00\x16\x00\x18\x00\x18\x00\x1c\x00\x1c\x00\x21\x00\x21\x00\x26\x00\x26\x00\x05\x00\x05\x00\x05\x00\x27\x00\x27\x00\x03\x00\x03\x00\x03\x00\x03\x00\x2c\x00\xff\xff\x2c\x00\x2c\x00\x31\x00\x31\x00\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\xff\xff\x32\x00\x32\x00\x32\x00\x32\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"#++alex_accept = listArray (0 :: Int, 63)+  [ AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccNone+  , AlexAccSkip+  , AlexAccSkip+  , AlexAccSkip+  , AlexAcc 10+  , AlexAcc 9+  , AlexAcc 8+  , AlexAcc 7+  , AlexAcc 6+  , AlexAcc 5+  , AlexAcc 4+  , AlexAcc 3+  , AlexAcc 2+  , AlexAcc 1+  , AlexAcc 0+  ]++alex_actions = array (0 :: Int, 11)+  [ (10,alex_action_3)+  , (9,alex_action_3)+  , (8,alex_action_3)+  , (7,alex_action_3)+  , (6,alex_action_4)+  , (5,alex_action_5)+  , (4,alex_action_6)+  , (3,alex_action_7)+  , (2,alex_action_8)+  , (1,alex_action_9)+  , (0,alex_action_9)+  ]++{-# LINE 72 "BNFC/Lex.x" #-}++-- | Create a token with position.+tok :: (String -> Tok) -> (Posn -> String -> Token)+tok f p = PT p . f++-- | Token without position.+data Tok+  = TK {-# UNPACK #-} !TokSymbol  -- ^ Reserved word or symbol.+  | TL !String                    -- ^ String literal.+  | TI !String                    -- ^ Integer literal.+  | TV !String                    -- ^ Identifier.+  | TD !String                    -- ^ Float literal.+  | TC !String                    -- ^ Character literal.+  | T_Identifier !String+  deriving (Eq, Show, Ord)++-- | Smart constructor for 'Tok' for the sake of backwards compatibility.+pattern TS :: String -> Int -> Tok+pattern TS t i = TK (TokSymbol t i)++-- | Keyword or symbol tokens have a unique ID.+data TokSymbol = TokSymbol+  { tsText :: String+      -- ^ Keyword or symbol text.+  , tsID   :: !Int+      -- ^ Unique ID.+  } deriving (Show)++-- | Keyword/symbol equality is determined by the unique ID.+instance Eq  TokSymbol where (==)    = (==)    `on` tsID++-- | Keyword/symbol ordering is determined by the unique ID.+instance Ord TokSymbol where compare = compare `on` tsID++-- | Token with position.+data Token+  = PT  Posn Tok+  | Err Posn+  deriving (Eq, Show, Ord)++-- | Pretty print a position.+printPosn :: Posn -> String+printPosn (Pn _ l c) = "line " ++ show l ++ ", column " ++ show c++-- | Pretty print the position of the first token in the list.+tokenPos :: [Token] -> String+tokenPos (t:_) = printPosn (tokenPosn t)+tokenPos []    = "end of file"++-- | Get the position of a token.+tokenPosn :: Token -> Posn+tokenPosn (PT p _) = p+tokenPosn (Err p)  = p++-- | Get line and column of a token.+tokenLineCol :: Token -> (Int, Int)+tokenLineCol = posLineCol . tokenPosn++-- | Get line and column of a position.+posLineCol :: Posn -> (Int, Int)+posLineCol (Pn _ l c) = (l,c)++-- | Convert a token into "position token" form.+mkPosToken :: Token -> ((Int, Int), String)+mkPosToken t = (tokenLineCol t, tokenText t)++-- | Convert a token to its text.+tokenText :: Token -> String+tokenText t = case t of+  PT _ (TS s _) -> s+  PT _ (TL s)   -> show s+  PT _ (TI s)   -> s+  PT _ (TV s)   -> s+  PT _ (TD s)   -> s+  PT _ (TC s)   -> s+  Err _         -> "#error"+  PT _ (T_Identifier s) -> s++-- | Convert a token to a string.+prToken :: Token -> String+prToken t = tokenText t++-- | Finite map from text to token organized as binary search tree.+data BTree+  = N -- ^ Nil (leaf).+  | B String Tok BTree BTree+      -- ^ Binary node.+  deriving (Show)++-- | Convert potential keyword into token or use fallback conversion.+eitherResIdent :: (String -> Tok) -> String -> Tok+eitherResIdent tv s = treeFind resWords+  where+  treeFind N = tv s+  treeFind (B a t left right) =+    case compare s a of+      LT -> treeFind left+      GT -> treeFind right+      EQ -> t++-- | The keywords and symbols of the language organized as binary search tree.+resWords :: BTree+resWords =+  b "delimiters" 20+    (b ";" 10+       (b "," 5+          (b "*" 3 (b ")" 2 (b "(" 1 N N) N) (b "+" 4 N N))+          (b ":" 8 (b "." 7 (b "-" 6 N N) N) (b "::=" 9 N N)))+       (b "_" 15+          (b "[" 13 (b "?" 12 (b "=" 11 N N) N) (b "]" 14 N N))+          (b "comment" 18+             (b "coercions" 17 (b "char" 16 N N) N) (b "define" 19 N N))))+    (b "rules" 30+       (b "layout" 25+          (b "eps" 23+             (b "entrypoints" 22 (b "digit" 21 N N) N) (b "internal" 24 N N))+          (b "nonempty" 28+             (b "lower" 27 (b "letter" 26 N N) N) (b "position" 29 N N)))+       (b "toplevel" 35+          (b "terminator" 33+             (b "stop" 32 (b "separator" 31 N N) N) (b "token" 34 N N))+          (b "|" 38 (b "{" 37 (b "upper" 36 N N) N) (b "}" 39 N N))))+  where+  b s n = B bs (TS bs n)+    where+    bs = s++-- | Unquote string literal.+unescapeInitTail :: String -> String+unescapeInitTail = id . unesc . tail . id+  where+  unesc s = case s of+    '\\':c:cs | elem c ['\"', '\\', '\''] -> c : unesc cs+    '\\':'n':cs  -> '\n' : unesc cs+    '\\':'t':cs  -> '\t' : unesc cs+    '\\':'r':cs  -> '\r' : unesc cs+    '\\':'f':cs  -> '\f' : unesc cs+    '"':[]       -> []+    c:cs         -> c : unesc cs+    _            -> []++-------------------------------------------------------------------+-- Alex wrapper code.+-- A modified "posn" wrapper.+-------------------------------------------------------------------++data Posn = Pn !Int !Int !Int+  deriving (Eq, Show, Ord)++alexStartPos :: Posn+alexStartPos = Pn 0 1 1++alexMove :: Posn -> Char -> Posn+alexMove (Pn a l c) '\t' = Pn (a+1)  l     (((c+7) `div` 8)*8+1)+alexMove (Pn a l c) '\n' = Pn (a+1) (l+1)   1+alexMove (Pn a l c) _    = Pn (a+1)  l     (c+1)++type Byte = Word8++type AlexInput = (Posn,     -- current position,+                  Char,     -- previous char+                  [Byte],   -- pending bytes on the current char+                  String)   -- current input string++tokens :: String -> [Token]+tokens str = go (alexStartPos, '\n', [], str)+    where+      go :: AlexInput -> [Token]+      go inp@(pos, _, _, str) =+               case alexScan inp 0 of+                AlexEOF                   -> []+                AlexError (pos, _, _, _)  -> [Err pos]+                AlexSkip  inp' len        -> go inp'+                AlexToken inp' len act    -> act pos (take len str) : (go inp')++alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)+alexGetByte (p, c, (b:bs), s) = Just (b, (p, c, bs, s))+alexGetByte (p, _, [], s) =+  case s of+    []  -> Nothing+    (c:s) ->+             let p'     = alexMove p c+                 (b:bs) = utf8Encode c+              in p' `seq` Just (b, (p', c, bs, s))++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (p, c, bs, s) = c++-- | Encode a Haskell String to a list of Word8 values, in UTF8 format.+utf8Encode :: Char -> [Word8]+utf8Encode = map fromIntegral . go . ord+  where+  go oc+   | oc <= 0x7f       = [oc]++   | oc <= 0x7ff      = [ 0xc0 + (oc `Data.Bits.shiftR` 6)+                        , 0x80 + oc Data.Bits..&. 0x3f+                        ]++   | oc <= 0xffff     = [ 0xe0 + (oc `Data.Bits.shiftR` 12)+                        , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)+                        , 0x80 + oc Data.Bits..&. 0x3f+                        ]+   | otherwise        = [ 0xf0 + (oc `Data.Bits.shiftR` 18)+                        , 0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)+                        , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)+                        , 0x80 + oc Data.Bits..&. 0x3f+                        ]++alex_action_3 =  tok (eitherResIdent TV) +alex_action_4 =  tok (eitherResIdent T_Identifier) +alex_action_5 =  tok (eitherResIdent TV) +alex_action_6 =  tok (TL . unescapeInitTail) +alex_action_7 =  tok TC +alex_action_8 =  tok TI +alex_action_9 =  tok TD +{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- -----------------------------------------------------------------------------+-- ALEX TEMPLATE+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.++-- -----------------------------------------------------------------------------+-- INTERNALS and main scanner engine+++++++++++++++++++-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#if __GLASGOW_HASKELL__ > 706+#define GTE(n,m) (tagToEnum# (n >=# m))+#define EQ(n,m) (tagToEnum# (n ==# m))+#else+#define GTE(n,m) (n >=# m)+#define EQ(n,m) (n ==# m)+#endif++++++++++++++++++++data AlexAddr = AlexA# Addr#+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#if __GLASGOW_HASKELL__ < 503+uncheckedShiftL# = shiftL#+#endif++{-# INLINE alexIndexInt16OffAddr #-}+alexIndexInt16OffAddr :: AlexAddr -> Int# -> Int#+alexIndexInt16OffAddr (AlexA# arr) off =+#ifdef WORDS_BIGENDIAN+  narrow16Int# i+  where+        i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)+        high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+        low  = int2Word# (ord# (indexCharOffAddr# arr off'))+        off' = off *# 2#+#else+#if __GLASGOW_HASKELL__ >= 901+  int16ToInt#+#endif+    (indexInt16OffAddr# arr off)+#endif++++++{-# INLINE alexIndexInt32OffAddr #-}+alexIndexInt32OffAddr :: AlexAddr -> Int# -> Int#+alexIndexInt32OffAddr (AlexA# arr) off =+#ifdef WORDS_BIGENDIAN+  narrow32Int# i+  where+   i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`+                     (b2 `uncheckedShiftL#` 16#) `or#`+                     (b1 `uncheckedShiftL#` 8#) `or#` b0)+   b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))+   b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))+   b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+   b0   = int2Word# (ord# (indexCharOffAddr# arr off'))+   off' = off *# 4#+#else+#if __GLASGOW_HASKELL__ >= 901+  int32ToInt#+#endif+    (indexInt32OffAddr# arr off)+#endif+++++++#if __GLASGOW_HASKELL__ < 503+quickIndex arr i = arr ! i+#else+-- GHC >= 503, unsafeAt is available from Data.Array.Base.+quickIndex = unsafeAt+#endif+++++-- -----------------------------------------------------------------------------+-- Main lexing routines++data AlexReturn a+  = AlexEOF+  | AlexError  !AlexInput+  | AlexSkip   !AlexInput !Int+  | AlexToken  !AlexInput !Int a++-- alexScan :: AlexInput -> StartCode -> AlexReturn a+alexScan input__ (I# (sc))+  = alexScanUser undefined input__ (I# (sc))++alexScanUser user__ input__ (I# (sc))+  = case alex_scan_tkn user__ input__ 0# input__ sc AlexNone of+  (AlexNone, input__') ->+    case alexGetByte input__ of+      Nothing ->++++                                   AlexEOF+      Just _ ->++++                                   AlexError input__'++  (AlexLastSkip input__'' len, _) ->++++    AlexSkip input__'' len++  (AlexLastAcc k input__''' len, _) ->++++    AlexToken input__''' len (alex_actions ! k)+++-- Push the input through the DFA, remembering the most recent accepting+-- state it encountered.++alex_scan_tkn user__ orig_input len input__ s last_acc =+  input__ `seq` -- strict in the input+  let+  new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))+  in+  new_acc `seq`+  case alexGetByte input__ of+     Nothing -> (new_acc, input__)+     Just (c, new_input) ->++++      case fromIntegral c of { (I# (ord_c)) ->+        let+                base   = alexIndexInt32OffAddr alex_base s+                offset = (base +# ord_c)+                check  = alexIndexInt16OffAddr alex_check offset++                new_s = if GTE(offset,0#) && EQ(check,ord_c)+                          then alexIndexInt16OffAddr alex_table offset+                          else alexIndexInt16OffAddr alex_deflt s+        in+        case new_s of+            -1# -> (new_acc, input__)+                -- on an error, we want to keep the input *before* the+                -- character that failed, not after.+            _ -> alex_scan_tkn user__ orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)+                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)+                        new_input new_s new_acc+      }+  where+        check_accs (AlexAccNone) = last_acc+        check_accs (AlexAcc a  ) = AlexLastAcc a input__ (I# (len))+        check_accs (AlexAccSkip) = AlexLastSkip  input__ (I# (len))++++++++++++++data AlexLastAcc+  = AlexNone+  | AlexLastAcc !Int !AlexInput !Int+  | AlexLastSkip     !AlexInput !Int++data AlexAcc user+  = AlexAccNone+  | AlexAcc Int+  | AlexAccSkip+++++++++++++++++++++++++++++
src/BNFC/Lexing.hs view
@@ -1,9 +1,9 @@ {-# LANGUAGE PatternGuards #-}  module BNFC.Lexing-    ( mkLexer, LexType(..), mkRegMultilineComment ) where--import Prelude hiding ((<>))+    ( mkLexer, LexType(..), mkRegMultilineComment+    , debugPrint -- to avoid warning about unused definition+    ) where  -- import Control.Arrow ( (&&&) ) import Data.List     ( inits, tails )@@ -14,6 +14,7 @@ import BNFC.Regex    ( simpReg ) import BNFC.Utils    ( unless  ) +-- Used in test suite debugPrint :: Reg -> IO () debugPrint = putStrLn . concat . words . printTree @@ -40,8 +41,10 @@     ]   ] +(<&>) :: Reg -> Reg -> Reg+(<&>) = RSeq -(<>) = RSeq+(<|>) :: Reg -> Reg -> Reg (<|>) = RAlt  -- Bult-in tokens@@ -51,7 +54,7 @@ -- >>> debugPrint regIdent -- letter(letter|digit|'_'|'\'')* regIdent :: Reg-regIdent = RLetter <> RStar (RLetter <|> RDigit <|> RChar '_' <|> RChar '\'')+regIdent = RLetter <&> RStar (RLetter <|> RDigit <|> RChar '_' <|> RChar '\'')  -- | Integer regex -- >>> debugPrint regInteger@@ -64,30 +67,30 @@ -- '"'(char-["\"\\"]|'\\'["\"\\nt"])*'"' regString :: Reg regString = RChar '"'-            <> RStar ((RAny `RMinus` RAlts "\"\\")-                       <|> (RChar '\\' <> RAlts "\"\\nt"))-            <> RChar '"'+            <&> RStar ((RAny `RMinus` RAlts "\"\\")+                       <|> (RChar '\\' <&> RAlts "\"\\nt"))+            <&> RChar '"'  -- | Char regex -- >>> debugPrint regChar -- '\''(char-["'\\"]|'\\'["'\\nt"])'\'' regChar :: Reg regChar = RChar '\''-          <> (RMinus RAny (RAlts "'\\") <|> (RChar '\\' <> RAlts "'\\nt"))-          <> RChar '\''+          <&> (RMinus RAny (RAlts "'\\") <|> (RChar '\\' <&> RAlts "'\\nt"))+          <&> RChar '\''  -- | Double regex -- >>> debugPrint regDouble -- digit+'.'digit+('e''-'?digit+)? regDouble :: Reg-regDouble = RPlus RDigit <> RChar '.' <> RPlus RDigit-            <> ROpt (RChar 'e' <> ROpt (RChar '-') <> RPlus RDigit)+regDouble = RPlus RDigit <&> RChar '.' <&> RPlus RDigit+            <&> ROpt (RChar 'e' <&> ROpt (RChar '-') <&> RPlus RDigit)  -- | Create regex for single line comments -- >>> debugPrint $ mkRegSingleLineComment "--" -- {"--"}char*'\n' mkRegSingleLineComment :: String -> Reg-mkRegSingleLineComment s = RSeqs s <> RStar RAny <> RChar '\n'+mkRegSingleLineComment s = RSeqs s <&> RStar RAny <&> RChar '\n'   -- -- | Create regex for multiline comments.
src/BNFC/Options.hs view
@@ -4,6 +4,8 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TupleSections #-} +{-# OPTIONS_GHC -fno-warn-orphans #-}+ module BNFC.Options   ( Mode(..), Target(..), Backend   , parseMode, usage, help, versionString@@ -26,7 +28,9 @@ import qualified Data.Map  as Map -- import qualified Data.List as List import Data.Maybe      (fromMaybe, maybeToList)-import Data.Semigroup  (Semigroup(..))  -- for ghc 7.10+#if !MIN_VERSION_base(4,11,0)+import Data.Semigroup  (Semigroup(..))  -- for ghc 7.10 - 8.2+#endif import Data.Version    (showVersion )  import System.Console.GetOpt
+ src/BNFC/Par.hs view
@@ -0,0 +1,1613 @@+{-# OPTIONS_GHC -w #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE MagicHash #-}+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE FlexibleInstances #-}+#if __GLASGOW_HASKELL__ >= 710+{-# LANGUAGE PartialTypeSignatures #-}+#endif+{-# OPTIONS_GHC -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-}+{-# LANGUAGE PatternSynonyms #-}++module BNFC.Par+  ( happyError+  , myLexer+  , pGrammar+  , pListDef+  , pDef+  , pItem+  , pListItem+  , pCat+  , pListCat+  , pLabel+  , pArg+  , pListArg+  , pSeparation+  , pListString+  , pExp+  , pExp1+  , pExp2+  , pListExp+  , pListExp2+  , pRHS+  , pListRHS+  , pMinimumSize+  , pReg+  , pReg1+  , pReg2+  , pReg3+  ) where++import Prelude++import qualified BNFC.Abs+import BNFC.Lex+import qualified Data.Array as Happy_Data_Array+import qualified Data.Bits as Bits+import qualified GHC.Exts as Happy_GHC_Exts+import Control.Applicative(Applicative(..))+import Control.Monad (ap)++-- parser produced by Happy Version 1.21.0++newtype HappyAbsSyn  = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+newtype HappyWrap27 = HappyWrap27 (Char)+happyIn27 :: (Char) -> (HappyAbsSyn )+happyIn27 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap27 x)+{-# INLINE happyIn27 #-}+happyOut27 :: (HappyAbsSyn ) -> HappyWrap27+happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut27 #-}+newtype HappyWrap28 = HappyWrap28 (Double)+happyIn28 :: (Double) -> (HappyAbsSyn )+happyIn28 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap28 x)+{-# INLINE happyIn28 #-}+happyOut28 :: (HappyAbsSyn ) -> HappyWrap28+happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut28 #-}+newtype HappyWrap29 = HappyWrap29 (Integer)+happyIn29 :: (Integer) -> (HappyAbsSyn )+happyIn29 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap29 x)+{-# INLINE happyIn29 #-}+happyOut29 :: (HappyAbsSyn ) -> HappyWrap29+happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut29 #-}+newtype HappyWrap30 = HappyWrap30 (String)+happyIn30 :: (String) -> (HappyAbsSyn )+happyIn30 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap30 x)+{-# INLINE happyIn30 #-}+happyOut30 :: (HappyAbsSyn ) -> HappyWrap30+happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut30 #-}+newtype HappyWrap31 = HappyWrap31 (BNFC.Abs.Identifier)+happyIn31 :: (BNFC.Abs.Identifier) -> (HappyAbsSyn )+happyIn31 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap31 x)+{-# INLINE happyIn31 #-}+happyOut31 :: (HappyAbsSyn ) -> HappyWrap31+happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut31 #-}+newtype HappyWrap32 = HappyWrap32 (BNFC.Abs.Grammar)+happyIn32 :: (BNFC.Abs.Grammar) -> (HappyAbsSyn )+happyIn32 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap32 x)+{-# INLINE happyIn32 #-}+happyOut32 :: (HappyAbsSyn ) -> HappyWrap32+happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut32 #-}+newtype HappyWrap33 = HappyWrap33 ([BNFC.Abs.Def])+happyIn33 :: ([BNFC.Abs.Def]) -> (HappyAbsSyn )+happyIn33 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap33 x)+{-# INLINE happyIn33 #-}+happyOut33 :: (HappyAbsSyn ) -> HappyWrap33+happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut33 #-}+newtype HappyWrap34 = HappyWrap34 (BNFC.Abs.Def)+happyIn34 :: (BNFC.Abs.Def) -> (HappyAbsSyn )+happyIn34 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap34 x)+{-# INLINE happyIn34 #-}+happyOut34 :: (HappyAbsSyn ) -> HappyWrap34+happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut34 #-}+newtype HappyWrap35 = HappyWrap35 (BNFC.Abs.Item)+happyIn35 :: (BNFC.Abs.Item) -> (HappyAbsSyn )+happyIn35 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap35 x)+{-# INLINE happyIn35 #-}+happyOut35 :: (HappyAbsSyn ) -> HappyWrap35+happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut35 #-}+newtype HappyWrap36 = HappyWrap36 ([BNFC.Abs.Item])+happyIn36 :: ([BNFC.Abs.Item]) -> (HappyAbsSyn )+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap36 x)+{-# INLINE happyIn36 #-}+happyOut36 :: (HappyAbsSyn ) -> HappyWrap36+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut36 #-}+newtype HappyWrap37 = HappyWrap37 (BNFC.Abs.Cat)+happyIn37 :: (BNFC.Abs.Cat) -> (HappyAbsSyn )+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap37 x)+{-# INLINE happyIn37 #-}+happyOut37 :: (HappyAbsSyn ) -> HappyWrap37+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut37 #-}+newtype HappyWrap38 = HappyWrap38 ([BNFC.Abs.Cat])+happyIn38 :: ([BNFC.Abs.Cat]) -> (HappyAbsSyn )+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap38 x)+{-# INLINE happyIn38 #-}+happyOut38 :: (HappyAbsSyn ) -> HappyWrap38+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut38 #-}+newtype HappyWrap39 = HappyWrap39 (BNFC.Abs.Label)+happyIn39 :: (BNFC.Abs.Label) -> (HappyAbsSyn )+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap39 x)+{-# INLINE happyIn39 #-}+happyOut39 :: (HappyAbsSyn ) -> HappyWrap39+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut39 #-}+newtype HappyWrap40 = HappyWrap40 (BNFC.Abs.Arg)+happyIn40 :: (BNFC.Abs.Arg) -> (HappyAbsSyn )+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap40 x)+{-# INLINE happyIn40 #-}+happyOut40 :: (HappyAbsSyn ) -> HappyWrap40+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut40 #-}+newtype HappyWrap41 = HappyWrap41 ([BNFC.Abs.Arg])+happyIn41 :: ([BNFC.Abs.Arg]) -> (HappyAbsSyn )+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap41 x)+{-# INLINE happyIn41 #-}+happyOut41 :: (HappyAbsSyn ) -> HappyWrap41+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut41 #-}+newtype HappyWrap42 = HappyWrap42 (BNFC.Abs.Separation)+happyIn42 :: (BNFC.Abs.Separation) -> (HappyAbsSyn )+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap42 x)+{-# INLINE happyIn42 #-}+happyOut42 :: (HappyAbsSyn ) -> HappyWrap42+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut42 #-}+newtype HappyWrap43 = HappyWrap43 ([String])+happyIn43 :: ([String]) -> (HappyAbsSyn )+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap43 x)+{-# INLINE happyIn43 #-}+happyOut43 :: (HappyAbsSyn ) -> HappyWrap43+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut43 #-}+newtype HappyWrap44 = HappyWrap44 (BNFC.Abs.Exp)+happyIn44 :: (BNFC.Abs.Exp) -> (HappyAbsSyn )+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap44 x)+{-# INLINE happyIn44 #-}+happyOut44 :: (HappyAbsSyn ) -> HappyWrap44+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut44 #-}+newtype HappyWrap45 = HappyWrap45 (BNFC.Abs.Exp)+happyIn45 :: (BNFC.Abs.Exp) -> (HappyAbsSyn )+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap45 x)+{-# INLINE happyIn45 #-}+happyOut45 :: (HappyAbsSyn ) -> HappyWrap45+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut45 #-}+newtype HappyWrap46 = HappyWrap46 (BNFC.Abs.Exp)+happyIn46 :: (BNFC.Abs.Exp) -> (HappyAbsSyn )+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap46 x)+{-# INLINE happyIn46 #-}+happyOut46 :: (HappyAbsSyn ) -> HappyWrap46+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut46 #-}+newtype HappyWrap47 = HappyWrap47 ([BNFC.Abs.Exp])+happyIn47 :: ([BNFC.Abs.Exp]) -> (HappyAbsSyn )+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap47 x)+{-# INLINE happyIn47 #-}+happyOut47 :: (HappyAbsSyn ) -> HappyWrap47+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut47 #-}+newtype HappyWrap48 = HappyWrap48 ([BNFC.Abs.Exp])+happyIn48 :: ([BNFC.Abs.Exp]) -> (HappyAbsSyn )+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap48 x)+{-# INLINE happyIn48 #-}+happyOut48 :: (HappyAbsSyn ) -> HappyWrap48+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut48 #-}+newtype HappyWrap49 = HappyWrap49 (BNFC.Abs.RHS)+happyIn49 :: (BNFC.Abs.RHS) -> (HappyAbsSyn )+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap49 x)+{-# INLINE happyIn49 #-}+happyOut49 :: (HappyAbsSyn ) -> HappyWrap49+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut49 #-}+newtype HappyWrap50 = HappyWrap50 ([BNFC.Abs.RHS])+happyIn50 :: ([BNFC.Abs.RHS]) -> (HappyAbsSyn )+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap50 x)+{-# INLINE happyIn50 #-}+happyOut50 :: (HappyAbsSyn ) -> HappyWrap50+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut50 #-}+newtype HappyWrap51 = HappyWrap51 (BNFC.Abs.MinimumSize)+happyIn51 :: (BNFC.Abs.MinimumSize) -> (HappyAbsSyn )+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap51 x)+{-# INLINE happyIn51 #-}+happyOut51 :: (HappyAbsSyn ) -> HappyWrap51+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut51 #-}+newtype HappyWrap52 = HappyWrap52 (BNFC.Abs.Reg)+happyIn52 :: (BNFC.Abs.Reg) -> (HappyAbsSyn )+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap52 x)+{-# INLINE happyIn52 #-}+happyOut52 :: (HappyAbsSyn ) -> HappyWrap52+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut52 #-}+newtype HappyWrap53 = HappyWrap53 (BNFC.Abs.Reg)+happyIn53 :: (BNFC.Abs.Reg) -> (HappyAbsSyn )+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap53 x)+{-# INLINE happyIn53 #-}+happyOut53 :: (HappyAbsSyn ) -> HappyWrap53+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut53 #-}+newtype HappyWrap54 = HappyWrap54 (BNFC.Abs.Reg)+happyIn54 :: (BNFC.Abs.Reg) -> (HappyAbsSyn )+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap54 x)+{-# INLINE happyIn54 #-}+happyOut54 :: (HappyAbsSyn ) -> HappyWrap54+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut54 #-}+newtype HappyWrap55 = HappyWrap55 (BNFC.Abs.Reg)+happyIn55 :: (BNFC.Abs.Reg) -> (HappyAbsSyn )+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# (HappyWrap55 x)+{-# INLINE happyIn55 #-}+happyOut55 :: (HappyAbsSyn ) -> HappyWrap55+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut55 #-}+happyInTok :: (Token) -> (HappyAbsSyn )+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn ) -> (Token)+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyExpList :: HappyAddr+happyExpList = HappyA# "\x00\x00\x00\x00\x00\x00\x80\x00\xa9\xd7\xb8\x01\x04\x00\x00\x00\x00\x00\x00\x08\x90\x7a\x8d\x1b\x40\x00\x00\x00\x00\x00\x00\x80\x00\xa8\xd7\xb8\x01\x04\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x08\x80\x02\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x80\x00\x08\x00\x00\xc0\x07\x00\x00\x00\x00\x00\x00\x08\x80\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x80\x00\x08\x00\x00\xc0\x07\x00\x00\x00\x00\x00\x00\x08\x80\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x80\x00\x08\x00\x00\xc0\x07\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x48\x28\x03\x4c\x00\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\xc0\x04\x00\x00\x00\x00\x00\x00\x80\x00\x48\x28\x03\x4c\x00\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\xc0\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\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\x00\x00\x00\x00\x00\x60\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x48\x28\x03\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\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\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\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\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\xc0\x04\x00\x00\x00\x00\x00\x00\x00\x06\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x48\x28\x03\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x10\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x60\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x04\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\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\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\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\x08\x80\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x80\x00\x08\x00\x00\xc0\x07\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\x00\x00\x00\x00\x08\x80\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\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\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\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x08\x80\x02\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x02\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\xa9\xd7\xb8\x01\x04\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\xa9\xd7\xb8\x01\x04\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\xc0\x04\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\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\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x08\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\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\x02\x00\x00\x00\x00\x00\x00\x08\x80\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x80\x00\x08\x00\x00\xc0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\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\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x48\x28\x03\x4c\x00\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\xc0\x04\x00\x00\x00\x00\x00\x00\x00\x06\x04\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\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\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x10\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\xc0\x04\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\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\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\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\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\xc0\x04\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\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\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\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x10\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\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\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x06\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"#++{-# NOINLINE happyExpListPerState #-}+happyExpListPerState st =+    token_strs_expected+  where token_strs = ["error","%dummy","%start_pGrammar","%start_pListDef","%start_pDef","%start_pItem","%start_pListItem","%start_pCat","%start_pListCat","%start_pLabel","%start_pArg","%start_pListArg","%start_pSeparation","%start_pListString","%start_pExp","%start_pExp1","%start_pExp2","%start_pListExp","%start_pListExp2","%start_pRHS","%start_pListRHS","%start_pMinimumSize","%start_pReg","%start_pReg1","%start_pReg2","%start_pReg3","Char","Double","Integer","String","Identifier","Grammar","ListDef","Def","Item","ListItem","Cat","ListCat","Label","Arg","ListArg","Separation","ListString","Exp","Exp1","Exp2","ListExp","ListExp2","RHS","ListRHS","MinimumSize","Reg","Reg1","Reg2","Reg3","'('","')'","'*'","'+'","','","'-'","'.'","':'","'::='","';'","'='","'?'","'['","']'","'_'","'char'","'coercions'","'comment'","'define'","'delimiters'","'digit'","'entrypoints'","'eps'","'internal'","'layout'","'letter'","'lower'","'nonempty'","'position'","'rules'","'separator'","'stop'","'terminator'","'token'","'toplevel'","'upper'","'{'","'|'","'}'","L_charac","L_doubl","L_integ","L_quoted","L_Identifier","%eof"]+        bit_start = st Prelude.* 100+        bit_end = (st Prelude.+ 1) Prelude.* 100+        read_bit = readArrayBit happyExpList+        bits = Prelude.map read_bit [bit_start..bit_end Prelude.- 1]+        bits_indexed = Prelude.zip bits [0..99]+        token_strs_expected = Prelude.concatMap f bits_indexed+        f (Prelude.False, _) = []+        f (Prelude.True, nr) = [token_strs Prelude.!! nr]++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x1e\x00\x1e\x00\x40\x00\xf6\xff\xf6\xff\xf4\xff\xf4\xff\x2b\x00\x18\x00\x18\x00\x2f\x00\xe0\xff\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\xf6\xff\xf6\xff\x4c\x00\x59\x00\x59\x00\x59\x00\x59\x00\x45\x00\x00\x00\x00\x00\x06\x00\x59\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x01\x00\xb6\x00\x11\x00\x59\x00\xdf\xff\x7a\x00\x55\x00\x00\x00\x00\x00\x00\x00\xf6\xff\x00\x00\x00\x00\x61\x00\x74\x00\xf4\xff\x00\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x00\x74\x00\x1d\x00\x1d\x00\x00\x00\x00\x00\x1d\x00\x9e\x00\xb0\x00\x00\x00\x79\x00\x79\x00\x79\x00\x79\x00\xba\x00\xa1\x00\xa1\x00\xac\x00\xac\x00\x00\x00\xb5\x00\xaf\x00\xaf\x00\x00\x00\xaf\x00\xd6\x00\xda\x00\x00\x00\xfb\x00\xe7\x00\xe7\x00\xe7\x00\xe7\x00\xe7\x00\xef\x00\xe9\x00\xfe\x00\x07\x01\xf4\xff\xf4\xff\x2b\x00\x85\x00\x1d\x01\x1b\x01\x36\x01\x36\x01\x30\x01\x31\x01\x67\x01\x1e\x00\x46\x01\x00\x00\x00\x00\x1e\x00\x59\x00\xf4\xff\xf4\xff\x69\x01\x48\x01\x00\x00\x4a\x01\x00\x00\x6f\x01\x00\x00\x4c\x01\x4e\x01\x51\x01\x4f\x01\xf4\xff\xf4\xff\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x52\x01\x1d\x00\x1d\x00\x00\x00\x6a\x01\x79\x01\x00\x00\x70\x01\xf6\xff\x00\x00\x59\x00\x59\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x58\x01\x72\x01\x13\x00\x00\x00\x00\x00\x00\x00\x7b\x01\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x01\x00\x00\x7a\x01\x00\x00\x00\x00\x7c\x01\x5a\x01\xf4\xff\x00\x00\x59\x00\xf6\xff\x5a\x01\x5a\x01\x5e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x01\x7d\x01\x2f\x00\x1d\x00\xf6\xff\x86\x01\x00\x00\x00\x00\x00\x00\x6d\x01\xf6\xff\x00\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\xf5\x00\x24\x01\x35\x01\x50\x01\x3a\x01\x2a\x01\x55\x01\x5f\x00\x48\x00\x57\x00\x7e\x01\x03\x00\xec\x00\x0f\x01\x23\x01\xaa\x00\x8f\x00\x16\x01\xc9\x00\x73\x01\x5c\x00\x72\x00\x08\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x87\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x01\x4b\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x01\x00\x00\x00\x00\x00\x00\x00\x00\x61\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x00\x00\xf1\x00\xb2\x00\x00\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x01\x8c\x01\x00\x00\xb3\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\x00\x00\x8d\x01\x8f\x01\x90\x01\x62\x01\x57\x01\x29\x01\x04\x00\x00\x00\x91\x01\x78\x01\x7f\x01\x92\x01\x00\x00\x00\x00\x2b\x01\x00\x00\x00\x00\x00\x00\x34\x01\x6a\x00\x63\x01\x64\x01\x00\x00\x94\x01\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x96\x01\xd9\x00\x97\x01\x99\x01\x65\x01\x59\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x05\x01\xc7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x00\x00\x27\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\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\x00\x00\x9a\x01\x66\x01\x00\x00\x6f\x00\xe1\x00\x9b\x01\x9c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x01\x0a\x01\x45\x01\x00\x00\x00\x00\x00\x00\x00\x00\x88\x01\x4d\x01\x00\x00\x00\x00\x00\x00"#++happyAdjustOffset :: Happy_GHC_Exts.Int# -> Happy_GHC_Exts.Int#+happyAdjustOffset off = off++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\xe1\xff\xe1\xff\x00\x00\x00\x00\xcb\xff\x00\x00\xc7\xff\x00\x00\x00\x00\xbe\xff\xbc\xff\x00\x00\x00\x00\x00\x00\x00\x00\xac\xff\x00\x00\xcb\xff\xcb\xff\xa3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\xff\x98\xff\x00\x00\x00\x00\x00\x00\x91\xff\x95\xff\x99\xff\x94\xff\x92\xff\x93\xff\x00\x00\x00\x00\x9d\xff\x00\x00\x9f\xff\x00\x00\xa1\xff\x00\x00\xa4\xff\xcd\xff\xc8\xff\xcb\xff\xa7\xff\xcc\xff\xa6\xff\x00\x00\x00\x00\xe4\xff\xe3\xff\x00\x00\xb1\xff\xaf\xff\xb2\xff\xb0\xff\xb3\xff\xa9\xff\x00\x00\x00\x00\xac\xff\xe6\xff\xe5\xff\xb3\xff\xab\xff\xb6\xff\xb4\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb9\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbf\xff\xbe\xff\x00\x00\x00\x00\xc4\xff\x00\x00\x00\x00\x00\x00\xc3\xff\xc6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa3\xff\xa3\xff\x00\x00\x00\x00\xe0\xff\xe1\xff\x00\x00\xe2\xff\xde\xff\xe1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xff\x00\x00\xce\xff\x00\x00\xd7\xff\x00\x00\xbe\xff\xdc\xff\x00\x00\x00\x00\xc7\xff\xc2\xff\x00\x00\xbd\xff\xbb\xff\xba\xff\x00\x00\x00\x00\xac\xff\xb5\xff\x00\x00\x00\x00\xa8\xff\x00\x00\xcb\xff\xca\xff\x00\x00\x00\x00\x9e\xff\x9c\xff\x9b\xff\x9a\xff\x00\x00\x00\x00\x00\x00\x90\xff\x97\xff\x96\xff\xa2\xff\xa0\xff\xa5\xff\xc9\xff\xad\xff\xae\xff\xaa\xff\xb7\xff\xb8\xff\xc1\xff\x00\x00\xc5\xff\x00\x00\xd3\xff\xdb\xff\x00\x00\x00\x00\x00\x00\xcf\xff\x00\x00\xcb\xff\x00\x00\x00\x00\xd9\xff\xdf\xff\xd5\xff\xd6\xff\xd2\xff\xd8\xff\x00\x00\xbc\xff\x00\x00\xcb\xff\x00\x00\xc0\xff\xdd\xff\xd1\xff\xa3\xff\xcb\xff\xda\xff\xd4\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x0d\x00\x01\x00\x0d\x00\x02\x00\x26\x00\x03\x00\x03\x00\x00\x00\x03\x00\x04\x00\x2b\x00\x2d\x00\x03\x00\x0d\x00\x0d\x00\x03\x00\x10\x00\x0c\x00\x10\x00\x10\x00\x02\x00\x15\x00\x06\x00\x17\x00\x00\x00\x10\x00\x1a\x00\x1b\x00\x10\x00\x01\x00\x01\x00\x2c\x00\x2b\x00\x2c\x00\x1b\x00\x1c\x00\x24\x00\x25\x00\x00\x00\x0a\x00\x28\x00\x0d\x00\x0d\x00\x01\x00\x0f\x00\x2d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x2d\x00\x16\x00\x1c\x00\x18\x00\x19\x00\x0d\x00\x26\x00\x0f\x00\x1d\x00\x1e\x00\x1f\x00\x2d\x00\x21\x00\x22\x00\x01\x00\x1b\x00\x1c\x00\x2c\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2c\x00\x00\x00\x04\x00\x0d\x00\x1f\x00\x0f\x00\x21\x00\x11\x00\x12\x00\x13\x00\x14\x00\x0d\x00\x16\x00\x2c\x00\x18\x00\x19\x00\x01\x00\x04\x00\x00\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x21\x00\x22\x00\x04\x00\x0d\x00\x0e\x00\x0d\x00\x1c\x00\x1c\x00\x10\x00\x00\x00\x0c\x00\x2c\x00\x28\x00\x15\x00\x00\x00\x17\x00\x2b\x00\x00\x00\x1a\x00\x1b\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x24\x00\x25\x00\x00\x00\x06\x00\x28\x00\x2d\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x26\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1a\x00\x1b\x00\x1c\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x1b\x00\x1c\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x2d\x00\x13\x00\x05\x00\x15\x00\x20\x00\x2d\x00\x13\x00\x23\x00\x15\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x13\x00\x2b\x00\x15\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x04\x00\x08\x00\x03\x00\x04\x00\x11\x00\x12\x00\x13\x00\x14\x00\x05\x00\x0d\x00\x0e\x00\x0c\x00\x11\x00\x12\x00\x13\x00\x14\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x03\x00\x04\x00\x2d\x00\x03\x00\x04\x00\x08\x00\x09\x00\x0a\x00\x08\x00\x09\x00\x0a\x00\x2b\x00\x11\x00\x12\x00\x13\x00\x14\x00\x2d\x00\x04\x00\x08\x00\x16\x00\x17\x00\x2c\x00\x16\x00\x17\x00\x03\x00\x04\x00\x0d\x00\x0e\x00\x0e\x00\x08\x00\x09\x00\x0a\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x07\x00\x16\x00\x17\x00\x04\x00\x05\x00\x06\x00\x07\x00\x11\x00\x12\x00\x13\x00\x05\x00\x0c\x00\x11\x00\x12\x00\x13\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x2d\x00\x2c\x00\x11\x00\x12\x00\x13\x00\x03\x00\x04\x00\x11\x00\x12\x00\x13\x00\x08\x00\x09\x00\x0a\x00\x12\x00\x13\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x04\x00\x2b\x00\x06\x00\x07\x00\x16\x00\x04\x00\x04\x00\x04\x00\x0c\x00\x06\x00\x07\x00\x2c\x00\x0a\x00\x0c\x00\x13\x00\x0c\x00\x04\x00\x04\x00\x06\x00\x07\x00\x07\x00\x03\x00\x04\x00\x22\x00\x0c\x00\x0c\x00\x08\x00\x09\x00\x0a\x00\x03\x00\x04\x00\x2c\x00\x03\x00\x04\x00\x08\x00\x09\x00\x0a\x00\x08\x00\x09\x00\x0a\x00\x03\x00\x04\x00\x1c\x00\x03\x00\x04\x00\x08\x00\x09\x00\x0a\x00\x08\x00\x04\x00\x0a\x00\x04\x00\x2c\x00\x04\x00\x2d\x00\x0a\x00\x0b\x00\x0a\x00\x0b\x00\x0a\x00\x0b\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x09\x00\x2d\x00\x2c\x00\x2b\x00\x07\x00\x2b\x00\x0e\x00\x2a\x00\x2c\x00\x02\x00\x2b\x00\x2b\x00\x0e\x00\x27\x00\x0e\x00\x06\x00\x0e\x00\x09\x00\x26\x00\x2b\x00\x09\x00\x0b\x00\x02\x00\x1c\x00\x03\x00\x18\x00\x03\x00\x0f\x00\x03\x00\x03\x00\x18\x00\x04\x00\x03\x00\x0f\x00\x04\x00\x04\x00\x04\x00\x18\x00\x04\x00\x03\x00\x03\x00\x02\x00\xff\xff\x03\x00\x03\x00\x03\x00\x18\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++happyTable :: HappyAddr+happyTable = HappyA# "\x00\x00\x35\x00\x1d\x00\x35\x00\xa8\x00\x94\x00\x4b\x00\x4b\x00\x1a\x00\x96\x00\x97\x00\x36\x00\xff\xff\x4b\x00\x1e\x00\xa9\x00\x4b\x00\x1f\x00\x98\x00\x4c\x00\x78\x00\x9c\x00\x20\x00\x93\x00\x21\x00\x1a\x00\xb0\x00\x22\x00\x23\x00\xa6\x00\x40\x00\x57\x00\x37\x00\x36\x00\x37\x00\x25\x00\x26\x00\x24\x00\x25\x00\x1a\x00\x6f\x00\x1a\x00\x41\x00\x58\x00\x57\x00\x59\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\xff\xff\x65\x00\x1b\x00\x66\x00\x67\x00\x58\x00\x94\x00\x59\x00\x68\x00\x69\x00\x6a\x00\xff\xff\x6b\x00\x6c\x00\x57\x00\x9f\x00\x26\x00\x37\x00\x1a\x00\x42\x00\x43\x00\x36\x00\x37\x00\x37\x00\x1a\x00\x50\x00\x58\x00\x4f\x00\x59\x00\x50\x00\x61\x00\x62\x00\x63\x00\x64\x00\x53\x00\x65\x00\x37\x00\x66\x00\x67\x00\x1d\x00\x50\x00\x1a\x00\x68\x00\x69\x00\x6a\x00\x1a\x00\x6b\x00\x6c\x00\x54\x00\x51\x00\x52\x00\x1e\x00\x94\x00\x2d\x00\x1f\x00\x1a\x00\x55\x00\x37\x00\x1a\x00\x20\x00\x1a\x00\x21\x00\x36\x00\x1a\x00\x22\x00\x23\x00\x29\x00\x2a\x00\x28\x00\x26\x00\x9a\x00\x2a\x00\x28\x00\x26\x00\x24\x00\x25\x00\x1a\x00\x93\x00\x1a\x00\xff\xff\xb5\x00\x2a\x00\x28\x00\x26\x00\x91\x00\xba\x00\x2a\x00\x28\x00\x26\x00\x27\x00\x28\x00\x26\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x9e\x00\x28\x00\x26\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3d\x00\x8b\x00\x3e\x00\x7a\x00\xff\xff\x3d\x00\x7b\x00\x8e\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x43\x00\x3d\x00\x36\x00\x8b\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x43\x00\x50\x00\x8a\x00\x96\x00\x97\x00\x44\x00\x45\x00\x46\x00\x47\x00\x89\x00\x51\x00\x85\x00\x98\x00\x44\x00\x45\x00\x46\x00\x8c\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x43\x00\x2d\x00\x2e\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x2f\x00\x30\x00\x31\x00\x36\x00\x44\x00\x45\x00\x46\x00\xa4\x00\xff\xff\x50\x00\x85\x00\x32\x00\x33\x00\x37\x00\x32\x00\xa0\x00\x2d\x00\x2e\x00\x51\x00\xad\x00\x84\x00\x2f\x00\x30\x00\x31\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x43\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x43\x00\x82\x00\x32\x00\xb9\x00\x54\x00\x6f\x00\x70\x00\x6d\x00\x4a\x00\x45\x00\x46\x00\x83\x00\x5f\x00\x8d\x00\x45\x00\x46\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x43\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x43\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x43\x00\xff\xff\x37\x00\xa5\x00\x45\x00\x46\x00\x2d\x00\x2e\x00\xc2\x00\x45\x00\x46\x00\x2f\x00\x30\x00\x31\x00\x49\x00\x46\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x54\x00\x36\x00\x6c\x00\x6d\x00\x37\x00\x54\x00\x2e\x00\x54\x00\x5f\x00\x71\x00\x6d\x00\x37\x00\x5b\x00\x7b\x00\x48\x00\x5f\x00\x54\x00\x54\x00\xb6\x00\x6d\x00\x5e\x00\x2d\x00\x2e\x00\x78\x00\x5f\x00\x5f\x00\x2f\x00\x5c\x00\x31\x00\x2d\x00\x2e\x00\x37\x00\x2d\x00\x2e\x00\x2f\x00\x91\x00\x31\x00\x2f\x00\xc1\x00\x31\x00\x2d\x00\x2e\x00\x2d\x00\x2d\x00\x2e\x00\x2f\x00\xc5\x00\x31\x00\x5d\x00\x2e\x00\x31\x00\x2e\x00\x37\x00\x2e\x00\xff\xff\x59\x00\x5a\x00\x59\x00\x7c\x00\x59\x00\xa9\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x8f\x00\x7d\x00\xb4\x00\xb3\x00\xaa\x00\xbb\x00\x73\x00\xb3\x00\xff\xff\x37\x00\x36\x00\xb0\x00\x36\x00\xa4\x00\x43\x00\x37\x00\xa3\x00\x36\x00\x36\x00\xa2\x00\x9e\x00\x9d\x00\x93\x00\xc0\x00\xbf\x00\x94\x00\x36\x00\xc5\x00\xbe\x00\xc1\x00\x2d\x00\x99\x00\x2b\x00\x98\x00\x4d\x00\x87\x00\x86\x00\x75\x00\x80\x00\x7f\x00\xc3\x00\x7e\x00\x76\x00\x73\x00\x74\x00\xb1\x00\xae\x00\xac\x00\xab\x00\x00\x00\xbc\x00\xb8\x00\xb7\x00\xc6\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\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyReduceArr = Happy_Data_Array.array (24, 111) [+	(24 , happyReduce_24),+	(25 , happyReduce_25),+	(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),+	(48 , happyReduce_48),+	(49 , happyReduce_49),+	(50 , happyReduce_50),+	(51 , happyReduce_51),+	(52 , happyReduce_52),+	(53 , happyReduce_53),+	(54 , happyReduce_54),+	(55 , happyReduce_55),+	(56 , happyReduce_56),+	(57 , happyReduce_57),+	(58 , happyReduce_58),+	(59 , happyReduce_59),+	(60 , happyReduce_60),+	(61 , happyReduce_61),+	(62 , happyReduce_62),+	(63 , happyReduce_63),+	(64 , happyReduce_64),+	(65 , happyReduce_65),+	(66 , happyReduce_66),+	(67 , happyReduce_67),+	(68 , happyReduce_68),+	(69 , happyReduce_69),+	(70 , happyReduce_70),+	(71 , happyReduce_71),+	(72 , happyReduce_72),+	(73 , happyReduce_73),+	(74 , happyReduce_74),+	(75 , happyReduce_75),+	(76 , happyReduce_76),+	(77 , happyReduce_77),+	(78 , happyReduce_78),+	(79 , happyReduce_79),+	(80 , happyReduce_80),+	(81 , happyReduce_81),+	(82 , happyReduce_82),+	(83 , happyReduce_83),+	(84 , happyReduce_84),+	(85 , happyReduce_85),+	(86 , happyReduce_86),+	(87 , happyReduce_87),+	(88 , happyReduce_88),+	(89 , happyReduce_89),+	(90 , happyReduce_90),+	(91 , happyReduce_91),+	(92 , happyReduce_92),+	(93 , happyReduce_93),+	(94 , happyReduce_94),+	(95 , happyReduce_95),+	(96 , happyReduce_96),+	(97 , happyReduce_97),+	(98 , happyReduce_98),+	(99 , happyReduce_99),+	(100 , happyReduce_100),+	(101 , happyReduce_101),+	(102 , happyReduce_102),+	(103 , happyReduce_103),+	(104 , happyReduce_104),+	(105 , happyReduce_105),+	(106 , happyReduce_106),+	(107 , happyReduce_107),+	(108 , happyReduce_108),+	(109 , happyReduce_109),+	(110 , happyReduce_110),+	(111 , happyReduce_111)+	]++happy_n_terms = 46 :: Prelude.Int+happy_n_nonterms = 29 :: Prelude.Int++happyReduce_24 = happySpecReduce_1  0# happyReduction_24+happyReduction_24 happy_x_1+	 =  case happyOutTok happy_x_1 of { (PT _ (TC happy_var_1)) -> +	happyIn27+		 ((read happy_var_1) :: Char+	)}++happyReduce_25 = happySpecReduce_1  1# happyReduction_25+happyReduction_25 happy_x_1+	 =  case happyOutTok happy_x_1 of { (PT _ (TD happy_var_1)) -> +	happyIn28+		 ((read happy_var_1) :: Double+	)}++happyReduce_26 = happySpecReduce_1  2# happyReduction_26+happyReduction_26 happy_x_1+	 =  case happyOutTok happy_x_1 of { (PT _ (TI happy_var_1)) -> +	happyIn29+		 ((read happy_var_1) :: Integer+	)}++happyReduce_27 = happySpecReduce_1  3# happyReduction_27+happyReduction_27 happy_x_1+	 =  case happyOutTok happy_x_1 of { (PT _ (TL happy_var_1)) -> +	happyIn30+		 (happy_var_1+	)}++happyReduce_28 = happySpecReduce_1  4# happyReduction_28+happyReduction_28 happy_x_1+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> +	happyIn31+		 (BNFC.Abs.Identifier (mkPosToken happy_var_1)+	)}++happyReduce_29 = happySpecReduce_1  5# happyReduction_29+happyReduction_29 happy_x_1+	 =  case happyOut33 happy_x_1 of { (HappyWrap33 happy_var_1) -> +	happyIn32+		 (BNFC.Abs.Grammar happy_var_1+	)}++happyReduce_30 = happySpecReduce_0  6# happyReduction_30+happyReduction_30  =  happyIn33+		 ([]+	)++happyReduce_31 = happySpecReduce_1  6# happyReduction_31+happyReduction_31 happy_x_1+	 =  case happyOut34 happy_x_1 of { (HappyWrap34 happy_var_1) -> +	happyIn33+		 ((:[]) happy_var_1+	)}++happyReduce_32 = happySpecReduce_3  6# happyReduction_32+happyReduction_32 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut34 happy_x_1 of { (HappyWrap34 happy_var_1) -> +	case happyOut33 happy_x_3 of { (HappyWrap33 happy_var_3) -> +	happyIn33+		 ((:) happy_var_1 happy_var_3+	)}}++happyReduce_33 = happySpecReduce_2  6# happyReduction_33+happyReduction_33 happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_2 of { (HappyWrap33 happy_var_2) -> +	happyIn33+		 (happy_var_2+	)}++happyReduce_34 = happyReduce 5# 7# happyReduction_34+happyReduction_34 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut39 happy_x_1 of { (HappyWrap39 happy_var_1) -> +	case happyOut37 happy_x_3 of { (HappyWrap37 happy_var_3) -> +	case happyOut36 happy_x_5 of { (HappyWrap36 happy_var_5) -> +	happyIn34+		 (BNFC.Abs.Rule happy_var_1 happy_var_3 happy_var_5+	) `HappyStk` happyRest}}}++happyReduce_35 = happySpecReduce_2  7# happyReduction_35+happyReduction_35 happy_x_2+	happy_x_1+	 =  case happyOut30 happy_x_2 of { (HappyWrap30 happy_var_2) -> +	happyIn34+		 (BNFC.Abs.Comment happy_var_2+	)}++happyReduce_36 = happySpecReduce_3  7# happyReduction_36+happyReduction_36 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut30 happy_x_2 of { (HappyWrap30 happy_var_2) -> +	case happyOut30 happy_x_3 of { (HappyWrap30 happy_var_3) -> +	happyIn34+		 (BNFC.Abs.Comments happy_var_2 happy_var_3+	)}}++happyReduce_37 = happyReduce 6# 7# happyReduction_37+happyReduction_37 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut39 happy_x_2 of { (HappyWrap39 happy_var_2) -> +	case happyOut37 happy_x_4 of { (HappyWrap37 happy_var_4) -> +	case happyOut36 happy_x_6 of { (HappyWrap36 happy_var_6) -> +	happyIn34+		 (BNFC.Abs.Internal happy_var_2 happy_var_4 happy_var_6+	) `HappyStk` happyRest}}}++happyReduce_38 = happySpecReduce_3  7# happyReduction_38+happyReduction_38 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut31 happy_x_2 of { (HappyWrap31 happy_var_2) -> +	case happyOut52 happy_x_3 of { (HappyWrap52 happy_var_3) -> +	happyIn34+		 (BNFC.Abs.Token happy_var_2 happy_var_3+	)}}++happyReduce_39 = happyReduce 4# 7# happyReduction_39+happyReduction_39 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut31 happy_x_3 of { (HappyWrap31 happy_var_3) -> +	case happyOut52 happy_x_4 of { (HappyWrap52 happy_var_4) -> +	happyIn34+		 (BNFC.Abs.PosToken happy_var_3 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_40 = happySpecReduce_2  7# happyReduction_40+happyReduction_40 happy_x_2+	happy_x_1+	 =  case happyOut38 happy_x_2 of { (HappyWrap38 happy_var_2) -> +	happyIn34+		 (BNFC.Abs.Entryp happy_var_2+	)}++happyReduce_41 = happyReduce 4# 7# happyReduction_41+happyReduction_41 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> +	case happyOut37 happy_x_3 of { (HappyWrap37 happy_var_3) -> +	case happyOut30 happy_x_4 of { (HappyWrap30 happy_var_4) -> +	happyIn34+		 (BNFC.Abs.Separator happy_var_2 happy_var_3 happy_var_4+	) `HappyStk` happyRest}}}++happyReduce_42 = happyReduce 4# 7# happyReduction_42+happyReduction_42 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut51 happy_x_2 of { (HappyWrap51 happy_var_2) -> +	case happyOut37 happy_x_3 of { (HappyWrap37 happy_var_3) -> +	case happyOut30 happy_x_4 of { (HappyWrap30 happy_var_4) -> +	happyIn34+		 (BNFC.Abs.Terminator happy_var_2 happy_var_3 happy_var_4+	) `HappyStk` happyRest}}}++happyReduce_43 = happyReduce 6# 7# happyReduction_43+happyReduction_43 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut37 happy_x_2 of { (HappyWrap37 happy_var_2) -> +	case happyOut30 happy_x_3 of { (HappyWrap30 happy_var_3) -> +	case happyOut30 happy_x_4 of { (HappyWrap30 happy_var_4) -> +	case happyOut42 happy_x_5 of { (HappyWrap42 happy_var_5) -> +	case happyOut51 happy_x_6 of { (HappyWrap51 happy_var_6) -> +	happyIn34+		 (BNFC.Abs.Delimiters happy_var_2 happy_var_3 happy_var_4 happy_var_5 happy_var_6+	) `HappyStk` happyRest}}}}}++happyReduce_44 = happySpecReduce_3  7# happyReduction_44+happyReduction_44 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut31 happy_x_2 of { (HappyWrap31 happy_var_2) -> +	case happyOut29 happy_x_3 of { (HappyWrap29 happy_var_3) -> +	happyIn34+		 (BNFC.Abs.Coercions happy_var_2 happy_var_3+	)}}++happyReduce_45 = happyReduce 4# 7# happyReduction_45+happyReduction_45 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut31 happy_x_2 of { (HappyWrap31 happy_var_2) -> +	case happyOut50 happy_x_4 of { (HappyWrap50 happy_var_4) -> +	happyIn34+		 (BNFC.Abs.Rules happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_46 = happyReduce 5# 7# happyReduction_46+happyReduction_46 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut31 happy_x_2 of { (HappyWrap31 happy_var_2) -> +	case happyOut41 happy_x_3 of { (HappyWrap41 happy_var_3) -> +	case happyOut44 happy_x_5 of { (HappyWrap44 happy_var_5) -> +	happyIn34+		 (BNFC.Abs.Function happy_var_2 happy_var_3 happy_var_5+	) `HappyStk` happyRest}}}++happyReduce_47 = happySpecReduce_2  7# happyReduction_47+happyReduction_47 happy_x_2+	happy_x_1+	 =  case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> +	happyIn34+		 (BNFC.Abs.Layout happy_var_2+	)}++happyReduce_48 = happySpecReduce_3  7# happyReduction_48+happyReduction_48 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut43 happy_x_3 of { (HappyWrap43 happy_var_3) -> +	happyIn34+		 (BNFC.Abs.LayoutStop happy_var_3+	)}++happyReduce_49 = happySpecReduce_2  7# happyReduction_49+happyReduction_49 happy_x_2+	happy_x_1+	 =  happyIn34+		 (BNFC.Abs.LayoutTop+	)++happyReduce_50 = happySpecReduce_1  8# happyReduction_50+happyReduction_50 happy_x_1+	 =  case happyOut30 happy_x_1 of { (HappyWrap30 happy_var_1) -> +	happyIn35+		 (BNFC.Abs.Terminal happy_var_1+	)}++happyReduce_51 = happySpecReduce_1  8# happyReduction_51+happyReduction_51 happy_x_1+	 =  case happyOut37 happy_x_1 of { (HappyWrap37 happy_var_1) -> +	happyIn35+		 (BNFC.Abs.NTerminal happy_var_1+	)}++happyReduce_52 = happySpecReduce_0  9# happyReduction_52+happyReduction_52  =  happyIn36+		 ([]+	)++happyReduce_53 = happySpecReduce_2  9# happyReduction_53+happyReduction_53 happy_x_2+	happy_x_1+	 =  case happyOut35 happy_x_1 of { (HappyWrap35 happy_var_1) -> +	case happyOut36 happy_x_2 of { (HappyWrap36 happy_var_2) -> +	happyIn36+		 ((:) happy_var_1 happy_var_2+	)}}++happyReduce_54 = happySpecReduce_3  10# happyReduction_54+happyReduction_54 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut37 happy_x_2 of { (HappyWrap37 happy_var_2) -> +	happyIn37+		 (BNFC.Abs.ListCat happy_var_2+	)}++happyReduce_55 = happySpecReduce_1  10# happyReduction_55+happyReduction_55 happy_x_1+	 =  case happyOut31 happy_x_1 of { (HappyWrap31 happy_var_1) -> +	happyIn37+		 (BNFC.Abs.IdCat happy_var_1+	)}++happyReduce_56 = happySpecReduce_0  11# happyReduction_56+happyReduction_56  =  happyIn38+		 ([]+	)++happyReduce_57 = happySpecReduce_1  11# happyReduction_57+happyReduction_57 happy_x_1+	 =  case happyOut37 happy_x_1 of { (HappyWrap37 happy_var_1) -> +	happyIn38+		 ((:[]) happy_var_1+	)}++happyReduce_58 = happySpecReduce_3  11# happyReduction_58+happyReduction_58 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut37 happy_x_1 of { (HappyWrap37 happy_var_1) -> +	case happyOut38 happy_x_3 of { (HappyWrap38 happy_var_3) -> +	happyIn38+		 ((:) happy_var_1 happy_var_3+	)}}++happyReduce_59 = happySpecReduce_1  12# happyReduction_59+happyReduction_59 happy_x_1+	 =  case happyOut31 happy_x_1 of { (HappyWrap31 happy_var_1) -> +	happyIn39+		 (BNFC.Abs.Id happy_var_1+	)}++happyReduce_60 = happySpecReduce_1  12# happyReduction_60+happyReduction_60 happy_x_1+	 =  happyIn39+		 (BNFC.Abs.Wild+	)++happyReduce_61 = happySpecReduce_2  12# happyReduction_61+happyReduction_61 happy_x_2+	happy_x_1+	 =  happyIn39+		 (BNFC.Abs.ListE+	)++happyReduce_62 = happySpecReduce_3  12# happyReduction_62+happyReduction_62 happy_x_3+	happy_x_2+	happy_x_1+	 =  happyIn39+		 (BNFC.Abs.ListCons+	)++happyReduce_63 = happyReduce 5# 12# happyReduction_63+happyReduction_63 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = happyIn39+		 (BNFC.Abs.ListOne+	) `HappyStk` happyRest++happyReduce_64 = happySpecReduce_1  13# happyReduction_64+happyReduction_64 happy_x_1+	 =  case happyOut31 happy_x_1 of { (HappyWrap31 happy_var_1) -> +	happyIn40+		 (BNFC.Abs.Arg happy_var_1+	)}++happyReduce_65 = happySpecReduce_0  14# happyReduction_65+happyReduction_65  =  happyIn41+		 ([]+	)++happyReduce_66 = happySpecReduce_2  14# happyReduction_66+happyReduction_66 happy_x_2+	happy_x_1+	 =  case happyOut40 happy_x_1 of { (HappyWrap40 happy_var_1) -> +	case happyOut41 happy_x_2 of { (HappyWrap41 happy_var_2) -> +	happyIn41+		 ((:) happy_var_1 happy_var_2+	)}}++happyReduce_67 = happySpecReduce_0  15# happyReduction_67+happyReduction_67  =  happyIn42+		 (BNFC.Abs.SepNone+	)++happyReduce_68 = happySpecReduce_2  15# happyReduction_68+happyReduction_68 happy_x_2+	happy_x_1+	 =  case happyOut30 happy_x_2 of { (HappyWrap30 happy_var_2) -> +	happyIn42+		 (BNFC.Abs.SepTerm happy_var_2+	)}++happyReduce_69 = happySpecReduce_2  15# happyReduction_69+happyReduction_69 happy_x_2+	happy_x_1+	 =  case happyOut30 happy_x_2 of { (HappyWrap30 happy_var_2) -> +	happyIn42+		 (BNFC.Abs.SepSepar happy_var_2+	)}++happyReduce_70 = happySpecReduce_1  16# happyReduction_70+happyReduction_70 happy_x_1+	 =  case happyOut30 happy_x_1 of { (HappyWrap30 happy_var_1) -> +	happyIn43+		 ((:[]) happy_var_1+	)}++happyReduce_71 = happySpecReduce_3  16# happyReduction_71+happyReduction_71 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut30 happy_x_1 of { (HappyWrap30 happy_var_1) -> +	case happyOut43 happy_x_3 of { (HappyWrap43 happy_var_3) -> +	happyIn43+		 ((:) happy_var_1 happy_var_3+	)}}++happyReduce_72 = happySpecReduce_3  17# happyReduction_72+happyReduction_72 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut45 happy_x_1 of { (HappyWrap45 happy_var_1) -> +	case happyOut44 happy_x_3 of { (HappyWrap44 happy_var_3) -> +	happyIn44+		 (BNFC.Abs.Cons happy_var_1 happy_var_3+	)}}++happyReduce_73 = happySpecReduce_1  17# happyReduction_73+happyReduction_73 happy_x_1+	 =  case happyOut45 happy_x_1 of { (HappyWrap45 happy_var_1) -> +	happyIn44+		 (happy_var_1+	)}++happyReduce_74 = happySpecReduce_2  18# happyReduction_74+happyReduction_74 happy_x_2+	happy_x_1+	 =  case happyOut31 happy_x_1 of { (HappyWrap31 happy_var_1) -> +	case happyOut48 happy_x_2 of { (HappyWrap48 happy_var_2) -> +	happyIn45+		 (BNFC.Abs.App happy_var_1 happy_var_2+	)}}++happyReduce_75 = happySpecReduce_1  18# happyReduction_75+happyReduction_75 happy_x_1+	 =  case happyOut46 happy_x_1 of { (HappyWrap46 happy_var_1) -> +	happyIn45+		 (happy_var_1+	)}++happyReduce_76 = happySpecReduce_1  19# happyReduction_76+happyReduction_76 happy_x_1+	 =  case happyOut31 happy_x_1 of { (HappyWrap31 happy_var_1) -> +	happyIn46+		 (BNFC.Abs.Var happy_var_1+	)}++happyReduce_77 = happySpecReduce_1  19# happyReduction_77+happyReduction_77 happy_x_1+	 =  case happyOut29 happy_x_1 of { (HappyWrap29 happy_var_1) -> +	happyIn46+		 (BNFC.Abs.LitInt happy_var_1+	)}++happyReduce_78 = happySpecReduce_1  19# happyReduction_78+happyReduction_78 happy_x_1+	 =  case happyOut27 happy_x_1 of { (HappyWrap27 happy_var_1) -> +	happyIn46+		 (BNFC.Abs.LitChar happy_var_1+	)}++happyReduce_79 = happySpecReduce_1  19# happyReduction_79+happyReduction_79 happy_x_1+	 =  case happyOut30 happy_x_1 of { (HappyWrap30 happy_var_1) -> +	happyIn46+		 (BNFC.Abs.LitString happy_var_1+	)}++happyReduce_80 = happySpecReduce_1  19# happyReduction_80+happyReduction_80 happy_x_1+	 =  case happyOut28 happy_x_1 of { (HappyWrap28 happy_var_1) -> +	happyIn46+		 (BNFC.Abs.LitDouble happy_var_1+	)}++happyReduce_81 = happySpecReduce_3  19# happyReduction_81+happyReduction_81 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut47 happy_x_2 of { (HappyWrap47 happy_var_2) -> +	happyIn46+		 (BNFC.Abs.List happy_var_2+	)}++happyReduce_82 = happySpecReduce_3  19# happyReduction_82+happyReduction_82 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut44 happy_x_2 of { (HappyWrap44 happy_var_2) -> +	happyIn46+		 (happy_var_2+	)}++happyReduce_83 = happySpecReduce_0  20# happyReduction_83+happyReduction_83  =  happyIn47+		 ([]+	)++happyReduce_84 = happySpecReduce_1  20# happyReduction_84+happyReduction_84 happy_x_1+	 =  case happyOut44 happy_x_1 of { (HappyWrap44 happy_var_1) -> +	happyIn47+		 ((:[]) happy_var_1+	)}++happyReduce_85 = happySpecReduce_3  20# happyReduction_85+happyReduction_85 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut44 happy_x_1 of { (HappyWrap44 happy_var_1) -> +	case happyOut47 happy_x_3 of { (HappyWrap47 happy_var_3) -> +	happyIn47+		 ((:) happy_var_1 happy_var_3+	)}}++happyReduce_86 = happySpecReduce_1  21# happyReduction_86+happyReduction_86 happy_x_1+	 =  case happyOut46 happy_x_1 of { (HappyWrap46 happy_var_1) -> +	happyIn48+		 ((:[]) happy_var_1+	)}++happyReduce_87 = happySpecReduce_2  21# happyReduction_87+happyReduction_87 happy_x_2+	happy_x_1+	 =  case happyOut46 happy_x_1 of { (HappyWrap46 happy_var_1) -> +	case happyOut48 happy_x_2 of { (HappyWrap48 happy_var_2) -> +	happyIn48+		 ((:) happy_var_1 happy_var_2+	)}}++happyReduce_88 = happySpecReduce_1  22# happyReduction_88+happyReduction_88 happy_x_1+	 =  case happyOut36 happy_x_1 of { (HappyWrap36 happy_var_1) -> +	happyIn49+		 (BNFC.Abs.RHS happy_var_1+	)}++happyReduce_89 = happySpecReduce_1  23# happyReduction_89+happyReduction_89 happy_x_1+	 =  case happyOut49 happy_x_1 of { (HappyWrap49 happy_var_1) -> +	happyIn50+		 ((:[]) happy_var_1+	)}++happyReduce_90 = happySpecReduce_3  23# happyReduction_90+happyReduction_90 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut49 happy_x_1 of { (HappyWrap49 happy_var_1) -> +	case happyOut50 happy_x_3 of { (HappyWrap50 happy_var_3) -> +	happyIn50+		 ((:) happy_var_1 happy_var_3+	)}}++happyReduce_91 = happySpecReduce_1  24# happyReduction_91+happyReduction_91 happy_x_1+	 =  happyIn51+		 (BNFC.Abs.MNonempty+	)++happyReduce_92 = happySpecReduce_0  24# happyReduction_92+happyReduction_92  =  happyIn51+		 (BNFC.Abs.MEmpty+	)++happyReduce_93 = happySpecReduce_3  25# happyReduction_93+happyReduction_93 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut52 happy_x_1 of { (HappyWrap52 happy_var_1) -> +	case happyOut53 happy_x_3 of { (HappyWrap53 happy_var_3) -> +	happyIn52+		 (BNFC.Abs.RAlt happy_var_1 happy_var_3+	)}}++happyReduce_94 = happySpecReduce_1  25# happyReduction_94+happyReduction_94 happy_x_1+	 =  case happyOut53 happy_x_1 of { (HappyWrap53 happy_var_1) -> +	happyIn52+		 (happy_var_1+	)}++happyReduce_95 = happySpecReduce_3  26# happyReduction_95+happyReduction_95 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut53 happy_x_1 of { (HappyWrap53 happy_var_1) -> +	case happyOut54 happy_x_3 of { (HappyWrap54 happy_var_3) -> +	happyIn53+		 (BNFC.Abs.RMinus happy_var_1 happy_var_3+	)}}++happyReduce_96 = happySpecReduce_1  26# happyReduction_96+happyReduction_96 happy_x_1+	 =  case happyOut54 happy_x_1 of { (HappyWrap54 happy_var_1) -> +	happyIn53+		 (happy_var_1+	)}++happyReduce_97 = happySpecReduce_2  27# happyReduction_97+happyReduction_97 happy_x_2+	happy_x_1+	 =  case happyOut54 happy_x_1 of { (HappyWrap54 happy_var_1) -> +	case happyOut55 happy_x_2 of { (HappyWrap55 happy_var_2) -> +	happyIn54+		 (BNFC.Abs.RSeq happy_var_1 happy_var_2+	)}}++happyReduce_98 = happySpecReduce_1  27# happyReduction_98+happyReduction_98 happy_x_1+	 =  case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> +	happyIn54+		 (happy_var_1+	)}++happyReduce_99 = happySpecReduce_2  28# happyReduction_99+happyReduction_99 happy_x_2+	happy_x_1+	 =  case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> +	happyIn55+		 (BNFC.Abs.RStar happy_var_1+	)}++happyReduce_100 = happySpecReduce_2  28# happyReduction_100+happyReduction_100 happy_x_2+	happy_x_1+	 =  case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> +	happyIn55+		 (BNFC.Abs.RPlus happy_var_1+	)}++happyReduce_101 = happySpecReduce_2  28# happyReduction_101+happyReduction_101 happy_x_2+	happy_x_1+	 =  case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> +	happyIn55+		 (BNFC.Abs.ROpt happy_var_1+	)}++happyReduce_102 = happySpecReduce_1  28# happyReduction_102+happyReduction_102 happy_x_1+	 =  happyIn55+		 (BNFC.Abs.REps+	)++happyReduce_103 = happySpecReduce_1  28# happyReduction_103+happyReduction_103 happy_x_1+	 =  case happyOut27 happy_x_1 of { (HappyWrap27 happy_var_1) -> +	happyIn55+		 (BNFC.Abs.RChar happy_var_1+	)}++happyReduce_104 = happySpecReduce_3  28# happyReduction_104+happyReduction_104 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut30 happy_x_2 of { (HappyWrap30 happy_var_2) -> +	happyIn55+		 (BNFC.Abs.RAlts happy_var_2+	)}++happyReduce_105 = happySpecReduce_3  28# happyReduction_105+happyReduction_105 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut30 happy_x_2 of { (HappyWrap30 happy_var_2) -> +	happyIn55+		 (BNFC.Abs.RSeqs happy_var_2+	)}++happyReduce_106 = happySpecReduce_1  28# happyReduction_106+happyReduction_106 happy_x_1+	 =  happyIn55+		 (BNFC.Abs.RDigit+	)++happyReduce_107 = happySpecReduce_1  28# happyReduction_107+happyReduction_107 happy_x_1+	 =  happyIn55+		 (BNFC.Abs.RLetter+	)++happyReduce_108 = happySpecReduce_1  28# happyReduction_108+happyReduction_108 happy_x_1+	 =  happyIn55+		 (BNFC.Abs.RUpper+	)++happyReduce_109 = happySpecReduce_1  28# happyReduction_109+happyReduction_109 happy_x_1+	 =  happyIn55+		 (BNFC.Abs.RLower+	)++happyReduce_110 = happySpecReduce_1  28# happyReduction_110+happyReduction_110 happy_x_1+	 =  happyIn55+		 (BNFC.Abs.RAny+	)++happyReduce_111 = happySpecReduce_3  28# happyReduction_111+happyReduction_111 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut52 happy_x_2 of { (HappyWrap52 happy_var_2) -> +	happyIn55+		 (happy_var_2+	)}++happyNewToken action sts stk [] =+	happyDoAction 45# notHappyAtAll action sts stk []++happyNewToken action sts stk (tk:tks) =+	let cont i = happyDoAction i tk action sts stk tks in+	case tk of {+	PT _ (TS _ 1) -> cont 1#;+	PT _ (TS _ 2) -> cont 2#;+	PT _ (TS _ 3) -> cont 3#;+	PT _ (TS _ 4) -> cont 4#;+	PT _ (TS _ 5) -> cont 5#;+	PT _ (TS _ 6) -> cont 6#;+	PT _ (TS _ 7) -> cont 7#;+	PT _ (TS _ 8) -> cont 8#;+	PT _ (TS _ 9) -> cont 9#;+	PT _ (TS _ 10) -> cont 10#;+	PT _ (TS _ 11) -> cont 11#;+	PT _ (TS _ 12) -> cont 12#;+	PT _ (TS _ 13) -> cont 13#;+	PT _ (TS _ 14) -> cont 14#;+	PT _ (TS _ 15) -> cont 15#;+	PT _ (TS _ 16) -> cont 16#;+	PT _ (TS _ 17) -> cont 17#;+	PT _ (TS _ 18) -> cont 18#;+	PT _ (TS _ 19) -> cont 19#;+	PT _ (TS _ 20) -> cont 20#;+	PT _ (TS _ 21) -> cont 21#;+	PT _ (TS _ 22) -> cont 22#;+	PT _ (TS _ 23) -> cont 23#;+	PT _ (TS _ 24) -> cont 24#;+	PT _ (TS _ 25) -> cont 25#;+	PT _ (TS _ 26) -> cont 26#;+	PT _ (TS _ 27) -> cont 27#;+	PT _ (TS _ 28) -> cont 28#;+	PT _ (TS _ 29) -> cont 29#;+	PT _ (TS _ 30) -> cont 30#;+	PT _ (TS _ 31) -> cont 31#;+	PT _ (TS _ 32) -> cont 32#;+	PT _ (TS _ 33) -> cont 33#;+	PT _ (TS _ 34) -> cont 34#;+	PT _ (TS _ 35) -> cont 35#;+	PT _ (TS _ 36) -> cont 36#;+	PT _ (TS _ 37) -> cont 37#;+	PT _ (TS _ 38) -> cont 38#;+	PT _ (TS _ 39) -> cont 39#;+	PT _ (TC happy_dollar_dollar) -> cont 40#;+	PT _ (TD happy_dollar_dollar) -> cont 41#;+	PT _ (TI happy_dollar_dollar) -> cont 42#;+	PT _ (TL happy_dollar_dollar) -> cont 43#;+	PT _ (T_Identifier _) -> cont 44#;+	_ -> happyError' ((tk:tks), [])+	}++happyError_ explist 45# tk tks = happyError' (tks, explist)+happyError_ explist _ tk tks = happyError' ((tk:tks), explist)++happyThen :: () => Err a -> (a -> Err b) -> Err b+happyThen = ((>>=))+happyReturn :: () => a -> Err a+happyReturn = (return)+happyThen1 m k tks = ((>>=)) m (\a -> k a tks)+happyReturn1 :: () => a -> b -> Err a+happyReturn1 = \a tks -> (return) a+happyError' :: () => ([(Token)], [Prelude.String]) -> Err a+happyError' = (\(tokens, _) -> happyError tokens)+pGrammar tks = happySomeParser where+ happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (let {(HappyWrap32 x') = happyOut32 x} in x'))++pListDef tks = happySomeParser where+ happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (let {(HappyWrap33 x') = happyOut33 x} in x'))++pDef tks = happySomeParser where+ happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (let {(HappyWrap34 x') = happyOut34 x} in x'))++pItem tks = happySomeParser where+ happySomeParser = happyThen (happyParse 3# tks) (\x -> happyReturn (let {(HappyWrap35 x') = happyOut35 x} in x'))++pListItem tks = happySomeParser where+ happySomeParser = happyThen (happyParse 4# tks) (\x -> happyReturn (let {(HappyWrap36 x') = happyOut36 x} in x'))++pCat tks = happySomeParser where+ happySomeParser = happyThen (happyParse 5# tks) (\x -> happyReturn (let {(HappyWrap37 x') = happyOut37 x} in x'))++pListCat tks = happySomeParser where+ happySomeParser = happyThen (happyParse 6# tks) (\x -> happyReturn (let {(HappyWrap38 x') = happyOut38 x} in x'))++pLabel tks = happySomeParser where+ happySomeParser = happyThen (happyParse 7# tks) (\x -> happyReturn (let {(HappyWrap39 x') = happyOut39 x} in x'))++pArg tks = happySomeParser where+ happySomeParser = happyThen (happyParse 8# tks) (\x -> happyReturn (let {(HappyWrap40 x') = happyOut40 x} in x'))++pListArg tks = happySomeParser where+ happySomeParser = happyThen (happyParse 9# tks) (\x -> happyReturn (let {(HappyWrap41 x') = happyOut41 x} in x'))++pSeparation tks = happySomeParser where+ happySomeParser = happyThen (happyParse 10# tks) (\x -> happyReturn (let {(HappyWrap42 x') = happyOut42 x} in x'))++pListString tks = happySomeParser where+ happySomeParser = happyThen (happyParse 11# tks) (\x -> happyReturn (let {(HappyWrap43 x') = happyOut43 x} in x'))++pExp tks = happySomeParser where+ happySomeParser = happyThen (happyParse 12# tks) (\x -> happyReturn (let {(HappyWrap44 x') = happyOut44 x} in x'))++pExp1 tks = happySomeParser where+ happySomeParser = happyThen (happyParse 13# tks) (\x -> happyReturn (let {(HappyWrap45 x') = happyOut45 x} in x'))++pExp2 tks = happySomeParser where+ happySomeParser = happyThen (happyParse 14# tks) (\x -> happyReturn (let {(HappyWrap46 x') = happyOut46 x} in x'))++pListExp tks = happySomeParser where+ happySomeParser = happyThen (happyParse 15# tks) (\x -> happyReturn (let {(HappyWrap47 x') = happyOut47 x} in x'))++pListExp2 tks = happySomeParser where+ happySomeParser = happyThen (happyParse 16# tks) (\x -> happyReturn (let {(HappyWrap48 x') = happyOut48 x} in x'))++pRHS tks = happySomeParser where+ happySomeParser = happyThen (happyParse 17# tks) (\x -> happyReturn (let {(HappyWrap49 x') = happyOut49 x} in x'))++pListRHS tks = happySomeParser where+ happySomeParser = happyThen (happyParse 18# tks) (\x -> happyReturn (let {(HappyWrap50 x') = happyOut50 x} in x'))++pMinimumSize tks = happySomeParser where+ happySomeParser = happyThen (happyParse 19# tks) (\x -> happyReturn (let {(HappyWrap51 x') = happyOut51 x} in x'))++pReg tks = happySomeParser where+ happySomeParser = happyThen (happyParse 20# tks) (\x -> happyReturn (let {(HappyWrap52 x') = happyOut52 x} in x'))++pReg1 tks = happySomeParser where+ happySomeParser = happyThen (happyParse 21# tks) (\x -> happyReturn (let {(HappyWrap53 x') = happyOut53 x} in x'))++pReg2 tks = happySomeParser where+ happySomeParser = happyThen (happyParse 22# tks) (\x -> happyReturn (let {(HappyWrap54 x') = happyOut54 x} in x'))++pReg3 tks = happySomeParser where+ happySomeParser = happyThen (happyParse 23# tks) (\x -> happyReturn (let {(HappyWrap55 x') = happyOut55 x} in x'))++happySeq = happyDontSeq+++type Err = Either String++happyError :: [Token] -> Err a+happyError ts = Left $+  "syntax error at " ++ tokenPos ts +++  case ts of+    []      -> []+    [Err _] -> " due to lexer error"+    t:_     -> " before `" ++ (prToken t) ++ "'"++myLexer :: String -> [Token]+myLexer = tokens+#define HAPPY_ARRAY 1+#define HAPPY_GHC 1+#define HAPPY_COERCE 1+-- $Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp $++#ifdef HAPPY_GHC+#  if !defined(__GLASGOW_HASKELL__)+#    error `HAPPY_GHC` is defined but this code isn't being built with GHC.+#  endif+#  define ILIT(n) n#+#  define IBOX(n) (Happy_GHC_Exts.I# (n))+#  define FAST_INT Happy_GHC_Exts.Int#+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.+#  if __GLASGOW_HASKELL__ > 706+#    define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Prelude.Bool)+#    define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Prelude.Bool)+#    define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Prelude.Bool)+#  else+#    define LT(n,m) (n Happy_GHC_Exts.<# m)+#    define GTE(n,m) (n Happy_GHC_Exts.>=# m)+#    define EQ(n,m) (n Happy_GHC_Exts.==# m)+#  endif+#  define PLUS(n,m) (n Happy_GHC_Exts.+# m)+#  define MINUS(n,m) (n Happy_GHC_Exts.-# m)+#  define TIMES(n,m) (n Happy_GHC_Exts.*# m)+#  define NEGATE(n) (Happy_GHC_Exts.negateInt# (n))+#  define IF_GHC(x) (x)+#else+#  define ILIT(n) (n)+#  define IBOX(n) (n)+#  define FAST_INT Prelude.Int+#  define LT(n,m) (n Prelude.< m)+#  define GTE(n,m) (n Prelude.>= m)+#  define EQ(n,m) (n Prelude.== m)+#  define PLUS(n,m) (n Prelude.+ m)+#  define MINUS(n,m) (n Prelude.- m)+#  define TIMES(n,m) (n Prelude.* m)+#  define NEGATE(n) (Prelude.negate (n))+#  define IF_GHC(x)+#endif++data Happy_IntList = HappyCons FAST_INT Happy_IntList++#if defined(HAPPY_ARRAY)+#  define CONS(h,t) (HappyCons (h) (t))+#else+#  define CONS(h,t) ((h):(t))+#endif++#if defined(HAPPY_ARRAY)+#  define ERROR_TOK ILIT(0)+#  define DO_ACTION(state,i,tk,sts,stk) happyDoAction i tk state sts (stk)+#  define HAPPYSTATE(i) (i)+#  define GOTO(action) happyGoto+#  define IF_ARRAYS(x) (x)+#else+#  define ERROR_TOK ILIT(1)+#  define DO_ACTION(state,i,tk,sts,stk) state i i tk HAPPYSTATE(state) sts (stk)+#  define HAPPYSTATE(i) (HappyState (i))+#  define GOTO(action) action+#  define IF_ARRAYS(x)+#endif++#if defined(HAPPY_COERCE)+#  if !defined(HAPPY_GHC)+#    error `HAPPY_COERCE` requires `HAPPY_GHC`+#  endif+#  define GET_ERROR_TOKEN(x)  (case Happy_GHC_Exts.unsafeCoerce# x of { IBOX(i) -> i })+#  define MK_ERROR_TOKEN(i)   (Happy_GHC_Exts.unsafeCoerce# IBOX(i))+#  define MK_TOKEN(x)         (happyInTok (x))+#else+#  define GET_ERROR_TOKEN(x)  (case x of { HappyErrorToken IBOX(i) -> i })+#  define MK_ERROR_TOKEN(i)   (HappyErrorToken IBOX(i))+#  define MK_TOKEN(x)         (HappyTerminal (x))+#endif++#if defined(HAPPY_DEBUG)+#  define DEBUG_TRACE(s)    (happyTrace (s)) $+happyTrace string expr = Happy_System_IO_Unsafe.unsafePerformIO $ do+    Happy_System_IO.hPutStr Happy_System_IO.stderr string+    return expr+#else+#  define DEBUG_TRACE(s)    {- nothing -}+#endif++infixr 9 `HappyStk`+data HappyStk a = HappyStk a (HappyStk a)++-----------------------------------------------------------------------------+-- starting the parse++happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll++-----------------------------------------------------------------------------+-- Accepting the parse++-- If the current token is ERROR_TOK, it means we've just accepted a partial+-- parse (a %partial parser).  We must ignore the saved token on the top of+-- the stack in this case.+happyAccept ERROR_TOK tk st sts (_ `HappyStk` ans `HappyStk` _) =+        happyReturn1 ans+happyAccept j tk st sts (HappyStk ans _) =+        IF_GHC(happyTcHack j IF_ARRAYS(happyTcHack st)) (happyReturn1 ans)++-----------------------------------------------------------------------------+-- Arrays only: do the next action++#if defined(HAPPY_ARRAY)++happyDoAction i tk st+        = DEBUG_TRACE("state: " ++ show IBOX(st) +++                      ",\ttoken: " ++ show IBOX(i) +++                      ",\taction: ")+          case action of+                ILIT(0)           -> DEBUG_TRACE("fail.\n")+                                     happyFail (happyExpListPerState (IBOX(st) :: Prelude.Int)) i tk st+                ILIT(-1)          -> DEBUG_TRACE("accept.\n")+                                     happyAccept i tk st+                n | LT(n,(ILIT(0) :: FAST_INT)) -> DEBUG_TRACE("reduce (rule " ++ show rule+                                                               ++ ")")+                                                   (happyReduceArr Happy_Data_Array.! rule) i tk st+                                                   where rule = IBOX(NEGATE(PLUS(n,(ILIT(1) :: FAST_INT))))+                n                 -> DEBUG_TRACE("shift, enter state "+                                                 ++ show IBOX(new_state)+                                                 ++ "\n")+                                     happyShift new_state i tk st+                                     where new_state = MINUS(n,(ILIT(1) :: FAST_INT))+   where off    = happyAdjustOffset (indexShortOffAddr happyActOffsets st)+         off_i  = PLUS(off, i)+         check  = if GTE(off_i,(ILIT(0) :: FAST_INT))+                  then EQ(indexShortOffAddr happyCheck off_i, i)+                  else Prelude.False+         action+          | check     = indexShortOffAddr happyTable off_i+          | Prelude.otherwise = indexShortOffAddr happyDefActions st++#endif /* HAPPY_ARRAY */++#ifdef HAPPY_GHC+indexShortOffAddr (HappyA# arr) off =+        Happy_GHC_Exts.narrow16Int# i+  where+        i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)+        high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))+        low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))+        off' = off Happy_GHC_Exts.*# 2#+#else+indexShortOffAddr arr off = arr Happy_Data_Array.! off+#endif++{-# INLINE happyLt #-}+happyLt x y = LT(x,y)++#ifdef HAPPY_GHC+readArrayBit arr bit =+    Bits.testBit IBOX(indexShortOffAddr arr ((unbox_int bit) `Happy_GHC_Exts.iShiftRA#` 4#)) (bit `Prelude.mod` 16)+  where unbox_int (Happy_GHC_Exts.I# x) = x+#else+readArrayBit arr bit =+    Bits.testBit IBOX(indexShortOffAddr arr (bit `Prelude.div` 16)) (bit `Prelude.mod` 16)+#endif++#ifdef HAPPY_GHC+data HappyAddr = HappyA# Happy_GHC_Exts.Addr#+#endif++-----------------------------------------------------------------------------+-- HappyState data type (not arrays)++#if !defined(HAPPY_ARRAY)++newtype HappyState b c = HappyState+        (FAST_INT ->                    -- token number+         FAST_INT ->                    -- token number (yes, again)+         b ->                           -- token semantic value+         HappyState b c ->              -- current state+         [HappyState b c] ->            -- state stack+         c)++#endif++-----------------------------------------------------------------------------+-- Shifting a token++happyShift new_state ERROR_TOK tk st sts stk@(x `HappyStk` _) =+     let i = GET_ERROR_TOKEN(x) in+--     trace "shifting the error token" $+     DO_ACTION(new_state,i,tk,CONS(st,sts),stk)++happyShift new_state i tk st sts stk =+     happyNewToken new_state CONS(st,sts) (MK_TOKEN(tk)`HappyStk`stk)++-- happyReduce is specialised for the common cases.++happySpecReduce_0 i fn ERROR_TOK tk st sts stk+     = happyFail [] ERROR_TOK tk st sts stk+happySpecReduce_0 nt fn j tk st@(HAPPYSTATE(action)) sts stk+     = GOTO(action) nt j tk st CONS(st,sts) (fn `HappyStk` stk)++happySpecReduce_1 i fn ERROR_TOK tk st sts stk+     = happyFail [] ERROR_TOK tk st sts stk+happySpecReduce_1 nt fn j tk _ sts@(CONS(st@HAPPYSTATE(action),_)) (v1`HappyStk`stk')+     = let r = fn v1 in+       happySeq r (GOTO(action) nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_2 i fn ERROR_TOK tk st sts stk+     = happyFail [] ERROR_TOK tk st sts stk+happySpecReduce_2 nt fn j tk _ CONS(_,sts@(CONS(st@HAPPYSTATE(action),_))) (v1`HappyStk`v2`HappyStk`stk')+     = let r = fn v1 v2 in+       happySeq r (GOTO(action) nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_3 i fn ERROR_TOK tk st sts stk+     = happyFail [] ERROR_TOK tk st sts stk+happySpecReduce_3 nt fn j tk _ CONS(_,CONS(_,sts@(CONS(st@HAPPYSTATE(action),_)))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')+     = let r = fn v1 v2 v3 in+       happySeq r (GOTO(action) nt j tk st sts (r `HappyStk` stk'))++happyReduce k i fn ERROR_TOK tk st sts stk+     = happyFail [] ERROR_TOK tk st sts stk+happyReduce k nt fn j tk st sts stk+     = case happyDrop MINUS(k,(ILIT(1) :: FAST_INT)) sts of+         sts1@(CONS(st1@HAPPYSTATE(action),_)) ->+                let r = fn stk in  -- it doesn't hurt to always seq here...+                happyDoSeq r (GOTO(action) nt j tk st1 sts1 r)++happyMonadReduce k nt fn ERROR_TOK tk st sts stk+     = happyFail [] ERROR_TOK tk st sts stk+happyMonadReduce k nt fn j tk st sts stk =+      case happyDrop k CONS(st,sts) of+        sts1@(CONS(st1@HAPPYSTATE(action),_)) ->+          let drop_stk = happyDropStk k stk in+          happyThen1 (fn stk tk) (\r -> GOTO(action) nt j tk st1 sts1 (r `HappyStk` drop_stk))++happyMonad2Reduce k nt fn ERROR_TOK tk st sts stk+     = happyFail [] ERROR_TOK tk st sts stk+happyMonad2Reduce k nt fn j tk st sts stk =+      case happyDrop k CONS(st,sts) of+        sts1@(CONS(st1@HAPPYSTATE(action),_)) ->+         let drop_stk = happyDropStk k stk+#if defined(HAPPY_ARRAY)+             off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st1)+             off_i = PLUS(off, nt)+             new_state = indexShortOffAddr happyTable off_i+#else+             _ = nt :: FAST_INT+             new_state = action+#endif+          in+          happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))++happyDrop ILIT(0) l = l+happyDrop n CONS(_,t) = happyDrop MINUS(n,(ILIT(1) :: FAST_INT)) t++happyDropStk ILIT(0) l = l+happyDropStk n (x `HappyStk` xs) = happyDropStk MINUS(n,(ILIT(1)::FAST_INT)) xs++-----------------------------------------------------------------------------+-- Moving to a new state after a reduction++#if defined(HAPPY_ARRAY)+happyGoto nt j tk st =+   DEBUG_TRACE(", goto state " ++ show IBOX(new_state) ++ "\n")+   happyDoAction j tk new_state+   where off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st)+         off_i = PLUS(off, nt)+         new_state = indexShortOffAddr happyTable off_i+#else+happyGoto action j tk st = action j j tk (HappyState action)+#endif++-----------------------------------------------------------------------------+-- Error recovery (ERROR_TOK is the error token)++-- parse error if we are in recovery and we fail again+happyFail explist ERROR_TOK tk old_st _ stk@(x `HappyStk` _) =+     let i = GET_ERROR_TOKEN(x) in+--      trace "failing" $+        happyError_ explist i tk++{-  We don't need state discarding for our restricted implementation of+    "error".  In fact, it can cause some bogus parses, so I've disabled it+    for now --SDM++-- discard a state+happyFail  ERROR_TOK tk old_st CONS(HAPPYSTATE(action),sts)+                                                (saved_tok `HappyStk` _ `HappyStk` stk) =+--      trace ("discarding state, depth " ++ show (length stk))  $+        DO_ACTION(action,ERROR_TOK,tk,sts,(saved_tok`HappyStk`stk))+-}++-- Enter error recovery: generate an error token,+--                       save the old token and carry on.+happyFail explist i tk HAPPYSTATE(action) sts stk =+--      trace "entering error recovery" $+        DO_ACTION(action,ERROR_TOK,tk,sts, MK_ERROR_TOKEN(i) `HappyStk` stk)++-- Internal happy errors:++notHappyAtAll :: a+notHappyAtAll = Prelude.error "Internal Happy error\n"++-----------------------------------------------------------------------------+-- Hack to get the typechecker to accept our action functions++#if defined(HAPPY_GHC)+happyTcHack :: Happy_GHC_Exts.Int# -> a -> a+happyTcHack x y = y+{-# INLINE happyTcHack #-}+#endif++-----------------------------------------------------------------------------+-- Seq-ing.  If the --strict flag is given, then Happy emits+--      happySeq = happyDoSeq+-- otherwise it emits+--      happySeq = happyDontSeq++happyDoSeq, happyDontSeq :: a -> b -> b+happyDoSeq   a b = a `Prelude.seq` b+happyDontSeq a b = b++-----------------------------------------------------------------------------+-- Don't inline any functions from the template.  GHC has a nasty habit+-- of deciding to inline happyGoto everywhere, which increases the size of+-- the generated parser quite a bit.++#if defined(HAPPY_ARRAY)+{-# NOINLINE happyDoAction #-}+{-# NOINLINE happyTable #-}+{-# NOINLINE happyCheck #-}+{-# NOINLINE happyActOffsets #-}+{-# NOINLINE happyGotoOffsets #-}+{-# NOINLINE happyDefActions #-}+#endif+{-# NOINLINE happyShift #-}+{-# NOINLINE happySpecReduce_0 #-}+{-# NOINLINE happySpecReduce_1 #-}+{-# NOINLINE happySpecReduce_2 #-}+{-# NOINLINE happySpecReduce_3 #-}+{-# NOINLINE happyReduce #-}+{-# NOINLINE happyMonadReduce #-}+{-# NOINLINE happyGoto #-}+{-# NOINLINE happyFail #-}++-- end of Happy Template.
src/BNFC/Regex.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE PatternGuards #-} @@ -5,7 +6,9 @@  module BNFC.Regex ( nullable, simpReg ) where +#if !MIN_VERSION_base(4,11,0) import Data.Semigroup (Semigroup(..))+#endif import Data.Set (Set) import qualified Data.Set as Set import qualified Data.List as List@@ -74,7 +77,7 @@ -- We represent character classes as a difference of unions of atomic -- character classes. -data CharClass = CMinus { ccYes, ccNo :: CharClassUnion }+data CharClass = CMinus { _ccYes, _ccNo :: CharClassUnion }   deriving (Eq, Ord, Show)  data CharClassUnion
src/BNFC/TypeChecker.hs view
@@ -12,7 +12,6 @@   ( -- * Type checker entry point     runTypeChecker   , checkDefinitions-  , Base(..)     -- * Backdoor for rechecking defined syntax constructors for list types   , checkDefinition'   , buildSignature, buildContext, ctxTokens, isToken
src/BNFC/Utils.hs view
@@ -1,14 +1,10 @@-{--    BNF Converter: Abstract syntax-    Copyright (C) 2004  Author:  Aarne Ranta---}- {-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE PatternSynonyms #-} +{-# OPTIONS_GHC -fno-warn-orphans #-}  -- ghc 7.10+ module BNFC.Utils     ( ModuleName     , when, unless, unlessNull, unlessNull'@@ -39,7 +35,9 @@ import Data.List          (intercalate) import Data.List.NonEmpty (pattern (:|)) import Data.Map           (Map)+#if !MIN_VERSION_base(4,11,0) import Data.Semigroup     (Semigroup(..))+#endif import Data.Time  import qualified Data.Foldable      as Fold@@ -267,8 +265,10 @@  truncateZonedTimeToSeconds :: ZonedTime -> ZonedTime truncateZonedTimeToSeconds (ZonedTime (LocalTime day (TimeOfDay h m s)) zone) =-  ZonedTime (LocalTime day (TimeOfDay h m s')) zone-  where s' = fromIntegral $ truncate s+  ZonedTime (LocalTime day (TimeOfDay h m $ fromIntegral sec)) zone+  where+  sec :: Int+  sec = truncate s  getZonedTimeTruncatedToSeconds :: IO ZonedTime getZonedTimeTruncatedToSeconds = truncateZonedTimeToSeconds <$> getZonedTime@@ -363,21 +363,18 @@ mkName :: [String] -> NameStyle -> String -> String mkName reserved style s = notReserved name'   where-    notReserved s-      | s `elem` reserved = notReserved (s ++ "_")-      | otherwise = s+    notReserved name+      | name `elem` reserved = notReserved (name ++ "_")+      | otherwise = name     tokens = parseIdent s     name' = case style of-        LowerCase -> map toLower (concat tokens)-        UpperCase -> map toUpper (concat tokens)+        LowerCase -> map toLower $ concat tokens+        UpperCase -> map toUpper $ concat tokens         CamelCase -> concatMap capitalize tokens-        MixedCase -> case concatMap capitalize tokens of-                         "" -> ""-                         c:cs -> toLower c:cs-        SnakeCase -> map toLower (intercalate "_" tokens)+        MixedCase -> mapHead toLower $ concatMap capitalize tokens+        SnakeCase -> map toLower $ intercalate "_" tokens         OrigCase  -> s-    capitalize [] = []-    capitalize (c:cs) = toUpper c:cs+    capitalize = mapHead toUpper  -- | Same as above but accept a list as argument and make sure that the -- names generated are uniques.
+ stack-8.10.2.yaml view
@@ -0,0 +1,3 @@+resolver: nightly-2020-12-14+compiler: ghc-8.10.2+compiler-check: match-exact
+ stack-8.10.3.yaml view
@@ -0,0 +1,3 @@+resolver: lts-17.2+compiler: ghc-8.10.3+compiler-check: match-exact
+ stack-8.10.4.yaml view
@@ -0,0 +1,3 @@+resolver: lts-17.13+compiler: ghc-8.10.4+compiler-check: match-exact
+ stack-8.10.7.yaml view
@@ -0,0 +1,3 @@+resolver: lts-18.10+compiler: ghc-8.10.7+compiler-check: match-exact
− stack-8.10.yaml
@@ -1,3 +0,0 @@-resolver: lts-18.28-compiler: ghc-8.10.7-compiler-check: newer-minor
+ stack-8.2.2.yaml view
@@ -0,0 +1,1 @@+resolver: lts-11.22
− stack-8.2.yaml
@@ -1,1 +0,0 @@-resolver: lts-11.22
+ stack-8.4.4.yaml view
@@ -0,0 +1,1 @@+resolver: lts-12.26
− stack-8.4.yaml
@@ -1,1 +0,0 @@-resolver: lts-12.26
+ stack-8.6.4.yaml view
@@ -0,0 +1,2 @@+resolver: lts-13.19+
+ stack-8.6.5.yaml view
@@ -0,0 +1,1 @@+resolver: lts-14.27
− stack-8.6.yaml
@@ -1,1 +0,0 @@-resolver: lts-14.27
+ stack-8.8.2.yaml view
@@ -0,0 +1,2 @@+resolver: lts-15.3+
+ stack-8.8.3.yaml view
@@ -0,0 +1,2 @@+resolver: lts-15.8+
+ stack-8.8.4.yaml view
@@ -0,0 +1,4 @@+resolver: lts-16.2+compiler: ghc-8.8.4+compiler-check: match-exact+
− stack-8.8.yaml
@@ -1,3 +0,0 @@-resolver: lts-16.31-compiler: ghc-8.8.4-compiler-check: newer-minor
+ stack-9.0.1.yaml view
@@ -0,0 +1,3 @@+resolver: nightly-2022-01-04+compiler: ghc-9.0.1+# compiler-check: match-exact
+ stack-9.0.2.yaml view
@@ -0,0 +1,33 @@+resolver: nightly-2022-01-27+compiler: ghc-9.0.2+# compiler-check: match-exact++# extra-deps:+# - alex-3.2.6+# - cabal-doctest-1.0.8+# - happy-1.20.0+# - string-qq-0.0.4++# # For --test:+# - HUnit-1.6.2.0+# - QuickCheck-2.14.2+# - ansi-terminal-0.11+# - base-compat-0.11.2+# - call-stack-0.4.0+# - clock-0.8.2+# - code-page-0.2.1+# - colour-2.3.5+# - doctest-0.18.1+# - ghc-paths-0.1.0.12@rev:2+# - hspec-2.8.2+# - hspec-core-2.8.2+# - hspec-discover-2.8.2+# - hspec-expectations-0.8.2+# - primitive-0.7.1.0+# - quickcheck-io-0.2.0+# - random-1.2.0+# - setenv-0.1.1.3+# - splitmix-0.1.0.3+# - syb-0.7.2.1+# - temporary-1.3+# - tf-random-0.5
− stack-9.0.yaml
@@ -1,3 +0,0 @@-resolver: lts-19.33-compiler: ghc-9.0.2-compiler-check: newer-minor
− stack-9.10.yaml
@@ -1,1 +0,0 @@-resolver: lts-24.15
− stack-9.12.yaml
@@ -1,3 +0,0 @@-resolver: nightly-2025-10-14-compiler: ghc-9.12.2-compiler-check: newer-minor
+ stack-9.2.1.yaml view
@@ -0,0 +1,33 @@+resolver: ghc-9.2.1+compiler: ghc-9.2.1+# compiler-check: match-exact++extra-deps:+- alex-3.2.6+- cabal-doctest-1.0.9+- happy-1.20.0+- string-qq-0.0.4++# For --test:+- HUnit-1.6.2.0+- QuickCheck-2.14.2+- ansi-terminal-0.11+- base-compat-0.12.1+- call-stack-0.4.0+- clock-0.8.2+- code-page-0.2.1+- colour-2.3.6+- doctest-0.20.0+- ghc-paths-0.1.0.12@rev:3+- hspec-2.9.4+- hspec-core-2.9.4+- hspec-discover-2.9.4+- hspec-expectations-0.8.2+- primitive-0.7.3.0+- quickcheck-io-0.2.0+- random-1.2.1+- setenv-0.1.1.3+- splitmix-0.1.0.4+- syb-0.7.2.1+- temporary-1.3+- tf-random-0.5
− stack-9.2.yaml
@@ -1,3 +0,0 @@-resolver: lts-20.26-compiler: ghc-9.2.8-compiler-check: newer-minor
− stack-9.4.yaml
@@ -1,3 +0,0 @@-resolver: lts-21.25-compiler: ghc-9.4.8-compiler-check: newer-minor
− stack-9.6.yaml
@@ -1,3 +0,0 @@-resolver: lts-22.44-compiler: ghc-9.6.7-compiler-check: newer-minor
− stack-9.8.yaml
@@ -1,6 +0,0 @@-resolver: lts-23.28-compiler: ghc-9.8.4-compiler-check: newer-minor--packages:-- .