packages feed

BNFC 2.9.2.1 → 2.9.3

raw patch · 95 files changed

+2823/−449 lines, 95 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.Backend.Base: GeneratedFile :: FilePath -> MakeComment -> String -> GeneratedFile
+ BNFC.Backend.Base: [fileContent] :: GeneratedFile -> String
+ BNFC.Backend.Base: [fileName] :: GeneratedFile -> FilePath
+ BNFC.Backend.Base: [makeComment] :: GeneratedFile -> MakeComment
+ BNFC.Backend.Base: data GeneratedFile
+ BNFC.Backend.Base: instance GHC.Classes.Eq BNFC.Backend.Base.GeneratedFile
+ BNFC.Backend.Base: instance GHC.Show.Show BNFC.Backend.Base.GeneratedFile
+ BNFC.Backend.Base: type MakeComment = String -> String
+ BNFC.Backend.C: comment :: String -> String
+ BNFC.Backend.C: testfileHeader :: [String]
+ BNFC.Backend.CPP.Common: commentWithEmacsModeHint :: String -> String
+ BNFC.Backend.Haskell.Utils: comment :: String -> String
+ BNFC.Backend.Haskell.Utils: commentWithEmacsModeHint :: String -> String
+ BNFC.Backend.Java.Utils: comment :: String -> String
+ BNFC.Backend.Latex: comment :: String -> String
+ BNFC.Backend.Pygments: comment :: String -> String
+ BNFC.Backend.Txt2Tag: t2tComment :: String -> String
+ BNFC.Backend.XML: comment :: String -> String
+ BNFC.Options: versionString :: String
- BNFC.Backend.Base: execBackend :: MkFiles () -> IO [(FilePath, String)]
+ BNFC.Backend.Base: execBackend :: MkFiles () -> IO [GeneratedFile]
- BNFC.Backend.Base: mkfile :: FileContent c => FilePath -> c -> MkFiles ()
+ BNFC.Backend.Base: mkfile :: FileContent c => FilePath -> MakeComment -> c -> MkFiles ()
- BNFC.Backend.Base: type MkFiles a = WriterT [(FilePath, String)] IO a
+ BNFC.Backend.Base: type MkFiles a = WriterT [GeneratedFile] IO a
- BNFC.Backend.Common.OOAbstract: basetypes :: [(TokenCat, String)]
+ BNFC.Backend.Common.OOAbstract: basetypes :: [([Char], String)]
- BNFC.Backend.OCaml.CFtoOCamlYacc: cf2ocamlyacc :: String -> String -> String -> CF -> String
+ BNFC.Backend.OCaml.CFtoOCamlYacc: cf2ocamlyacc :: OCamlParser -> String -> String -> String -> CF -> String
- 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.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.2.1+Version: 2.9.3 cabal-version: 2.0   -- >=1.24 for the custom-setup section   -- >=2.0  for the build-tools: hspec-discover@@ -27,61 +27,54 @@   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.1+  GHC == 9.2.0.20210821 -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.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.2.1+  tag:      v2.9.3  -- 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 +87,6 @@   other-modules:     -- Generated by cabal     Paths_BNFC-  autogen-modules:-    Paths_BNFC   default-extensions:     -- Keep in alphabetical order.     LambdaCase@@ -125,7 +116,7 @@     , process     , string-qq     , time-  if impl(ghc < 8)+  if impl(ghc < 8.0)     build-depends:       semigroups   build-tool-depends:@@ -133,6 +124,11 @@     happy:happy   hs-source-dirs:     src+  ghc-options:+    -W+  if impl(ghc >= 8.0)+    ghc-options:+      -Wcompat   default-extensions:     -- Keep the list of language extensions in sync with its other occurrences.     -- Keep in alphabetical order.@@ -161,8 +157,6 @@   other-modules:     -- Generated by cabal     Paths_BNFC-  autogen-modules:-    Paths_BNFC   exposed-modules:     -- Generated from LICENSE     BNFC.License@@ -295,7 +289,7 @@     deepseq,     string-qq,     time-  if impl(ghc < 8)+  if impl(ghc < 8.0)     build-depends:       semigroups   build-tool-depends:@@ -308,6 +302,9 @@     test   ghc-options:     -W+  if impl(ghc >= 8.0)+    ghc-options:+      -Wcompat   default-extensions:     -- Keep in alphabetical order.     LambdaCase
CHANGELOG.md view
@@ -1,9 +1,13 @@-# 2.9.2.1+# 2.9.3 -Andreas Abel <andreas.abel@gu.se>  Jan 2026+Andreas Abel <andreas.abel@gu.se>  September 2021 -* Cabal 3.12 compatibility: remove generated `Lex.hs` and `Par.hs` from source tarball-* Build tested with GHC 7.10.3 - 9.12.2+* BNFC now uniformly signs generated files with its version number [#373]+* C/C++: include `stdio.h` in parser header files [#381]+* C++: fixed parser regression in 2.9.2: missing `#include <algorithm>` [#377]+* Ocaml: lex CR as whitespace [see also #376]+* Ocaml: correct position in parse errors [#380]+* Ocaml/Haskell: make printer for lists categories total [#383]  # 2.9.2 @@ -35,12 +39,6 @@  * C/C++: instead of `_SYMB_nnn`, more readable token names in lexer & parser -# 2.9.1.1--Andreas Abel <andreas.abel@gu.se>  Jan 2026--* Cabal 3.12 compatibility: remove generated `Lex.hs` and `Par.hs` from source tarball-* Build tested with GHC 7.10.3 - 9.12.2  # 2.9.1 
src/BNFC/Abs.hs view
@@ -1,5 +1,4 @@--- Haskell data types for the abstract syntax.--- Generated by the BNF converter.+-- File generated by the BNF Converter (bnfc 2.9.3).  {-# LANGUAGE PatternSynonyms #-} 
src/BNFC/Backend/Agda.hs view
@@ -138,7 +138,7 @@ import BNFC.CF import BNFC.Backend.Base           (Backend, mkfile) import BNFC.Backend.Haskell.HsOpts-import BNFC.Backend.Haskell.Utils  (parserName, catToType, mkDefName, typeToHaskell')+import BNFC.Backend.Haskell.Utils  (parserName, catToType, mkDefName, typeToHaskell', comment) import BNFC.Options                (SharedOptions, TokenText(..), tokenText) import BNFC.PrettyPrint import BNFC.Utils                  (ModuleName, replace, when, table)@@ -165,18 +165,18 @@   -> Backend makeAgda time opts cf = do   -- Generate AST bindings.-  mkfile (agdaASTFile opts) $+  mkfile (agdaASTFile opts) comment $     cf2AgdaAST time (tokenText opts) (agdaASTFileM opts) (absFileM opts) (printerFileM opts) cf   -- Generate parser bindings.-  mkfile (agdaParserFile opts) $+  mkfile (agdaParserFile opts) comment $     cf2AgdaParser time (tokenText opts) (agdaParserFileM opts) (agdaASTFileM opts) (errFileM opts) (happyFileM opts)       layoutMod       parserCats   -- Generate an I/O library for the test parser.-  mkfile (agdaLibFile opts) $+  mkfile (agdaLibFile opts) comment $     agdaLibContents (agdaLibFileM opts)   -- Generate test parser.-  mkfile (agdaMainFile opts) $+  mkfile (agdaMainFile opts) comment $     agdaMainContents (agdaMainFileM opts) (agdaLibFileM opts) (agdaASTFileM opts) (agdaParserFileM opts)       (hasLayout cf)       (firstEntry cf)@@ -315,7 +315,6 @@   -> Doc preamble _time what = vcat $   [ hcat [ "-- Agda bindings for the Haskell ", text what, "." ]-  , hcat [ "-- Generated by BNFC." ]   -- -- Time stamp does not work well with BNFC's mkfile logic.   -- , hcat [ "-- Generated by BNFC at "         , text time, "." ]   ]@@ -656,7 +655,7 @@ definedRules :: CF -> Doc definedRules cf = vsep $ map mkDef $ definitions cf   where-    mkDef (Define f args e t) = vcat $ concat+    mkDef (Define f args e _) = vcat $ concat       [ [ text $ unwords [ mkDefName f, ":", typeToHaskell' "→" $ wpThing t ]         | t <- maybeToList $ sigLookup f cf         ]@@ -863,8 +862,7 @@   :: String      -- ^ Name of Agda library module.   -> Doc         -- ^ Contents of Agda library module. agdaLibContents mod = vcat-  [ "-- Generated by BNFC."-  , "-- Basic I/O library."+  [ "-- Basic I/O library."   , ""   , "module" <+> text mod <+> "where"   , ""@@ -930,7 +928,6 @@   -> Doc         -- ^ Contents of Agda main module. agdaMainContents mod lmod amod pmod layout c = vcat   [ "-- Test for Agda binding of parser.  Requires Agda >= 2.5.4."-  , "-- Generated by BNFC."   , ""   , "module" <+> text mod <+> "where"   , when layout "\nopen import Agda.Builtin.Bool using (true)"
src/BNFC/Backend/Base.hs view
@@ -7,24 +7,33 @@ module BNFC.Backend.Base   ( Backend   , MkFiles+  , GeneratedFile(..)+  , MakeComment   , execBackend   , mkfile   , liftIO   , writeFiles   ) where +import Control.Arrow    ( (&&&) ) import Control.Monad.Writer -import Data.Char (isSpace)+import Data.Char        ( isSpace )+import Data.Function    ( on ) import qualified Data.List as List -import System.Directory (createDirectoryIfMissing)-import System.FilePath (dropFileName, (</>))+import System.Directory ( createDirectoryIfMissing )+import System.FilePath  ( dropFileName, takeExtension, (</>) ) +import BNFC.Options     ( versionString ) import BNFC.PrettyPrint-import BNFC.Utils (writeFileRep)+import BNFC.Utils       ( writeFileRep ) --- | Define the type of the backend functions For more purity, instead of+-- | Stamp BNFC puts in the header of each generated file.+msgGenerated :: String+msgGenerated = "File generated by the BNF Converter (bnfc " ++ versionString ++ ")."++-- | Define the type of the backend functions.  For more purity, instead of -- having each backend writing the generated files to disk, they return a list -- of pairs containing the (relative) file path and the file content. This -- allow for 1) easier testing, 2) implement common options like changing the@@ -34,19 +43,40 @@ -- The writer monad provides a more convenient API to generate the list. Note -- that we still use the `IO` monad for now because some backends insist on -- printing stuff to the screen while generating the files.-type MkFiles a = WriterT [(FilePath, String)] IO a+type MkFiles a = WriterT [GeneratedFile] IO a type Backend = MkFiles () +-- | A result file of a backend.+data GeneratedFile = GeneratedFile+  { fileName    :: FilePath+      -- ^ Name of the file to write.+  , makeComment :: MakeComment+      -- ^ Function to generate a comment.+      --   Used to prefix the file with a stamp ("Generated by BNFC").+  , fileContent :: String+      -- ^ Content of the file to write.+  } +-- quick-and-dirty instances for HSpec test-suite++instance Show GeneratedFile where+  show (GeneratedFile x _  y) = unwords [ "GeneratedFile", show x, "_", show y ]++instance Eq GeneratedFile where+  (==) = (==) `on` fileName &&& fileContent++-- | Type of comment-generating functions.+type MakeComment = String -> String+ -- | Named after execWriter, this function execute the given backend -- and returns the generated file paths and contents.-execBackend :: MkFiles () -> IO [(FilePath, String)]+execBackend :: MkFiles () -> IO [GeneratedFile] execBackend = execWriterT  -- | A specialized version of `tell` that adds a file and its content to the -- list of generated files.-mkfile :: (FileContent c) => FilePath -> c -> MkFiles ()-mkfile path content = tell [(path, fileContentToString content)]+mkfile :: FileContent c => FilePath -> MakeComment -> c -> MkFiles ()+mkfile path f content = tell [GeneratedFile path f (fileContentToString content)]  -- | While we are moving to generating `Text.PrettyPrint.Doc` instead of `String`, -- it is nice to be able to use both as argument to 'mkfile'.@@ -70,12 +100,17 @@ -- @$ROOT\/a\/b@) writeFiles :: FilePath -> MkFiles () -> IO () writeFiles root fw = do-  -- First we check that the directory exists+  -- First we check that the directory exists.   fb <- execBackend fw   createDirectoryIfMissing True root-  mapM_ (uncurry writeFile') fb-  where-  writeFile' :: FilePath -> String -> IO ()-  writeFile' path content = do+  forM_ fb $ \ (GeneratedFile path mkComment content) -> do     createDirectoryIfMissing True (root </> dropFileName path)-    writeFileRep (root </> path) content+     -- Then we write the files, adding the BNFC stamp as header.+    writeFileRep (root </> path) $+      -- TODO: the following is a hack, make this more systematic:+      if takeExtension path == ".txt" then+        -- Sign at the end since e.g. txt2tags cannot handle comments at beginning of file.+        unlines [ content, mkComment msgGenerated ]+      else+        -- Sign at the beginning (JFlex cannot handle comments in general, only at beginning).+        mkComment msgGenerated ++ "\n\n" ++ content
src/BNFC/Backend/C.hs view
@@ -1,11 +1,12 @@ {-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}  {-     BNF Converter: C Main file     Copyright (C) 2004  Author:  Michael Pellauer     Copyright (C) 2020  Andreas Abel -}-module BNFC.Backend.C (makeC, bufferC, bufferH) where+module BNFC.Backend.C (makeC, bufferC, bufferH, comment, testfileHeader) where  import Prelude hiding ((<>)) @@ -28,24 +29,23 @@ makeC :: SharedOptions -> CF -> MkFiles () makeC opts cf = do     let (hfile, cfile) = cf2CAbs (linenumbers opts) prefix cf-    mkfile "Absyn.h" hfile-    mkfile "Absyn.c" cfile-    mkfile "Buffer.h" bufferH-    mkfile "Buffer.c" $ bufferC "Buffer.h"+    mkCFile "Absyn.h" hfile+    mkCFile "Absyn.c" cfile+    mkCFile "Buffer.h" bufferH+    mkCFile "Buffer.c" $ bufferC "Buffer.h"     let (flex, env) = cf2flex parserMode cf-    mkfile (name ++ ".l") flex-    let bison = cf2Bison (linenumbers opts) parserMode cf env-    mkfile (name ++ ".y") bison-    let header = mkHeaderFile (linenumbers opts) cf (Map.elems env)-    mkfile "Parser.h" header+    mkfile (name ++ ".l") commentWithEmacsModeHint flex+    mkfile (name ++ ".y") commentWithEmacsModeHint $+      cf2Bison (linenumbers opts) parserMode cf env+    mkCFile "Parser.h" $ mkHeaderFile (linenumbers opts) cf (Map.elems env)     let (skelH, skelC) = cf2CSkel cf-    mkfile "Skeleton.h" skelH-    mkfile "Skeleton.c" skelC+    mkCFile "Skeleton.h" skelH+    mkCFile "Skeleton.c" skelC     let (prinH, prinC) = cf2CPrinter cf-    mkfile "Printer.h" prinH-    mkfile "Printer.c" prinC-    mkfile "Test.c" (ctest cf)-    Makefile.mkMakefile opts (makefile name prefix)+    mkCFile "Printer.h" prinH+    mkCFile "Printer.c" prinC+    mkCFile "Test.c" (ctest cf)+    Makefile.mkMakefile opts $ makefile name prefix   where     name :: String     name = lang opts@@ -56,6 +56,7 @@     prefix = snakeCase_ name ++ "_"     parserMode :: ParserMode     parserMode = CParser False prefix+    mkCFile x = mkfile x comment   makefile :: String -> String -> String -> Doc@@ -120,18 +121,30 @@     ]   where testName = "Test" ++ name +-- | Put string into a block comment.+comment :: String -> String+comment x = unwords ["/*", x, "*/"]++-- | C line comment including mode hint for emacs.+commentWithEmacsModeHint :: String -> String+commentWithEmacsModeHint = comment . ("-*- c -*- " ++)++-- | A heading comment for the generated parser test.+testfileHeader :: [String]+testfileHeader =+  [ "/************************* Compiler Front-End Test *************************/"+  , "/*                                                                         */"+  , "/*  This test will parse a file, print the abstract syntax tree, and then  */"+  , "/*  pretty-print the result.                                               */"+  , "/*                                                                         */"+  , "/***************************************************************************/"+  ]+ -- | Generate a test program that parses stdin and prints the AST and it's -- linearization ctest :: CF -> String-ctest cf =-  unlines+ctest cf = unlines $ testfileHeader ++    [-    "/*** Compiler Front-End Test automatically generated by the BNF Converter ***/",-    "/*                                                                          */",-    "/* This test will parse a file, print the abstract syntax tree, and then    */",-    "/* pretty-print the result.                                                 */",-    "/*                                                                          */",-    "/****************************************************************************/",     "",     "#include <stdio.h>",     "#include <stdlib.h>",@@ -206,10 +219,11 @@   dat = identCat . normCat $ cat  mkHeaderFile :: RecordPositions -> CF -> [String] -> String-mkHeaderFile _ cf env = unlines $ concat+mkHeaderFile _ cf _env = unlines $ concat   [ [ "#ifndef PARSER_HEADER_FILE"     , "#define PARSER_HEADER_FILE"     , ""+    , "#include <stdio.h>"     , "#include \"Absyn.h\""     , ""     ]@@ -232,9 +246,7 @@  bufferH :: String bufferH = unlines-  [ "/* This utility file was automatically generated by BNFC. */"-  , ""-  , "/* A dynamically allocated character buffer that grows as it is appended. */"+  [ "/* A dynamically allocated character buffer that grows as it is appended. */"   , ""   , "#ifndef BUFFER_HEADER"   , "#define BUFFER_HEADER"@@ -276,9 +288,7 @@  bufferC :: String -> String bufferC bufferH = unlines-  [ "/* This utility file was automatically generated by BNFC. */"-  , ""-  , "/* A dynamically allocated character buffer that grows as it is appended. */"+  [ "/* A dynamically allocated character buffer that grows as it is appended. */"   , ""   , "#include <assert.h>  /* assert */"   , "#include <stdlib.h>  /* free, malloc */"
src/BNFC/Backend/C/CFtoBisonC.hs view
@@ -30,7 +30,6 @@ import Data.Char       ( toLower, isUpper ) import Data.Foldable   ( toList ) import Data.List       ( intercalate, nub )-import Data.Maybe import qualified Data.Map as Map import System.FilePath ( (<.>) ) @@ -76,7 +75,6 @@     , nsEnd inPackage     ]   where-  name = parserName mode   inPackage = parserPackage mode   posCats     | stlParser mode = map TokenCat $ positionCats cf@@ -87,7 +85,7 @@  header :: ParserMode -> CF -> String header mode cf = unlines $ concat-  [ [ "/* -*- c -*- This Bison file was machine-generated by BNFC */"+  [ [ "/* Parser definition to be used with Bison. */"     , ""     , "/* Generate header file for lexer. */"     , "%defines \"" ++ ("Bison" <.> h) ++ "\""@@ -115,8 +113,14 @@     , "%{"     , "/* Begin C preamble code */"     , ""+    ]+    -- Andreas, 2021-08-26, issue #377:  Some C++ compilers want "algorithm".+    -- Fixing regression introduced in 2.9.2.+  , when (stlParser mode)+    [ "#include <algorithm> /* for std::reverse */"  -- mandatory e.g. with GNU C++ 11+    ]+  , [ "#include <stdio.h>"     , "#include <stdlib.h>"-    , "#include <stdio.h>"     , "#include <string.h>"     , "#include \"" ++ ("Absyn" <.> h) ++ "\""     , ""@@ -148,12 +152,7 @@     ]   ]   where-  eps = toList (allEntryPoints cf)-     -- Andreas, 2019-04-29, #210: Generate also parsers for CoercCat.-     -- WAS:  (allCatsNorm cf)-     -- Found old comment:-     -- -- M.F. 2004-09-17 changed allEntryPoints to allCatsIdNorm. Seems to fix the [Ty2] bug.-  h = parserHExt mode+  h    = parserHExt mode   name = parserName mode  -- | Code that needs the @YYSTYPE@ defined by the @%union@ pragma.
src/BNFC/Backend/C/CFtoCAbs.hs view
@@ -33,7 +33,7 @@ import BNFC.CF import BNFC.PrettyPrint import BNFC.Options  ( RecordPositions(..) )-import BNFC.Utils    ( (+++), uncurry3, unless )+import BNFC.Utils    ( (+++), unless ) import BNFC.Backend.Common.NamedVariables import BNFC.Backend.C.Common ( posixC ) @@ -66,7 +66,7 @@     , "#include <stddef.h>  /* NULL */"     , "#include <string.h>  /* strdup */"     , ""-    , "/* C++ Abstract Syntax Interface generated by the BNF Converter.*/"+    , "/* C++ Abstract Syntax Interface.*/"     , ""     , prTypeDefs user     , "/********************   Forward Declarations    ***********************/"@@ -186,7 +186,7 @@     LitDouble d -> return $ show d     LitChar   c -> return $ show c     LitString s -> return $ concat [ "strdup(", show s, ")" ]  -- so that free() does not crash!-  con g ~(FunT ts t)+  con g ~(FunT _ts t)     | isConsFun g = identType t     | otherwise   = g   -- If more than one argument, or complex argument, put space before opening parenthesis.@@ -275,7 +275,7 @@  -- | Makes the .C file mkCFile :: [Data] -> CF -> String-mkCFile datas cf = concat+mkCFile datas _cf = concat   [ header   , render $ vsep $ concatMap prDataC datas   , unlines [ "", "" ]@@ -288,7 +288,7 @@   ]   where   header = unlines-    [ "/* C Abstract Syntax Implementation generated by the BNF Converter. */"+    [ "/* C Abstract Syntax Implementation. */"     , ""     , "#include <stdio.h>"     , "#include <stdlib.h>"@@ -475,7 +475,7 @@   -- | This goes on to recurse to the instance variables.    prFreeCat :: String -> (Cat, Doc) -> Maybe String-  prFreeCat fnm (TokenCat c, nt)+  prFreeCat _fnm (TokenCat c, _nt)     | c `elem` ["Char", "Double", "Integer"] = Nothing       -- Only pointer need to be freed.   prFreeCat fnm (cat, nt) = Just $ concat
src/BNFC/Backend/C/CFtoCPrinter.hs view
@@ -26,11 +26,10 @@ import Data.Either    ( lefts ) import Data.Foldable  ( toList ) import Data.List      ( nub )-import Data.Maybe     ( isJust )  import BNFC.CF import BNFC.PrettyPrint-import BNFC.Utils     ( (+++), uniqOn, whenJust, unless, unlessNull )+import BNFC.Utils     ( (+++), uniqOn, unless, unlessNull )  import BNFC.Backend.Common import BNFC.Backend.Common.NamedVariables@@ -153,7 +152,7 @@     eps = nub . map normCat . toList $ allEntryPoints cf     header = unlines      [-      "/*** BNFC-Generated Pretty Printer and Abstract Syntax Viewer ***/",+      "/*** Pretty Printer and Abstract Syntax Viewer ***/",       "",       "#include <ctype.h>   /* isspace */",       "#include <stdio.h>",
src/BNFC/Backend/C/CFtoCSkel.hs view
@@ -86,7 +86,7 @@   where     user = map fst $ tokenPragmas cf     header = unlines [-      "/*** BNFC-Generated Visitor Traversal Skeleton. ***/",+      "/*** Visitor Traversal Skeleton. ***/",       "/* This traverses the abstract syntax tree.",       "   To use, copy Skeleton.h and Skeleton.c to",       "   new files. */",
src/BNFC/Backend/C/CFtoFlexC.hs view
@@ -38,10 +38,9 @@ import BNFC.Backend.C.Common         ( posixC ) import BNFC.Backend.C.RegToFlex import BNFC.Backend.Common.NamedVariables-import BNFC.Backend.CPP.STL.STLUtils ( nsDefine, nsString ) import BNFC.Options                  ( InPackage ) import BNFC.PrettyPrint-import BNFC.Utils                    ( cstring, symbolToName, unless, when, whenJust )+import BNFC.Utils                    ( cstring, symbolToName, unless, when )  data ParserMode   = CParser Bool String    -- ^ @C@ (@False@) or @C++ no STL@ (@True@) mode, with @name@ to use as prefix.@@ -92,7 +91,7 @@  prelude :: Bool -> ParserMode -> String prelude stringLiterals mode = unlines $ concat-  [ [ "/* -*- c -*- This FLex file was machine-generated by the BNF converter */"+  [ [ "/* Lexer definition for use with FLex */"     , ""     -- noinput and nounput are most often unused     -- https://stackoverflow.com/questions/39075510/option-noinput-nounput-what-are-they-for@@ -131,7 +130,7 @@     , "  loc->first_column = loc->last_column;"     , "  int i = 0;"  -- put this here as @for (int i...)@ is only allowed in C99     , "  for (; text[i] != '\\0'; ++i) {"-    , "      if (text[i] == '\\n') {"+    , "      if (text[i] == '\\n') {"        -- Checking for \n is good enough to also support \r\n (but not \r)     , "          ++loc->last_line;"     , "          loc->last_column = 0; "     , "      } else {"@@ -206,7 +205,7 @@          s' = escapeChars s  restOfFlex :: InPackage -> CF -> SymMap -> String-restOfFlex inPackage cf env = unlines $ concat+restOfFlex _inPackage cf env = unlines $ concat   [ [ render $ lexComments $ comments cf     , ""     ]@@ -249,10 +248,12 @@     , "<STRING>\\\\             \t BEGIN ESCAPED;"     , "<STRING>\\\"             \t " ++ yylval ++ "->_string = LITERAL_BUFFER_HARVEST(); BEGIN INITIAL; return " ++ stringToken ++ ";"     , "<STRING>.              \t LITERAL_BUFFER_APPEND_CHAR(yytext[0]);"+    , "<ESCAPED>f             \t LITERAL_BUFFER_APPEND_CHAR('\\f'); BEGIN STRING;"     , "<ESCAPED>n             \t LITERAL_BUFFER_APPEND_CHAR('\\n'); BEGIN STRING;"+    , "<ESCAPED>r             \t LITERAL_BUFFER_APPEND_CHAR('\\r'); BEGIN STRING;"+    , "<ESCAPED>t             \t LITERAL_BUFFER_APPEND_CHAR('\\t'); BEGIN STRING;"     , "<ESCAPED>\\\"            \t LITERAL_BUFFER_APPEND_CHAR('\"');  BEGIN STRING;"     , "<ESCAPED>\\\\            \t LITERAL_BUFFER_APPEND_CHAR('\\\\'); BEGIN STRING;"-    , "<ESCAPED>t             \t LITERAL_BUFFER_APPEND_CHAR('\\t'); BEGIN STRING;"     , "<ESCAPED>.             \t LITERAL_BUFFER_APPEND(yytext);    BEGIN STRING;"     , "<STRING,ESCAPED><<EOF>>\t LITERAL_BUFFER_FREE(); return " ++ errorToken ++ ";"     ]@@ -263,7 +264,9 @@     [ "<INITIAL>\"'\" \tBEGIN CHAR;"     , "<CHAR>\\\\      \t BEGIN CHARESC;"     , "<CHAR>[^']      \t BEGIN CHAREND; " ++ yylval ++ "->_char = yytext[0]; return " ++ charToken ++ ";"+    , "<CHARESC>f      \t BEGIN CHAREND; " ++ yylval ++ "->_char = '\\f';     return " ++ charToken ++ ";"     , "<CHARESC>n      \t BEGIN CHAREND; " ++ yylval ++ "->_char = '\\n';     return " ++ charToken ++ ";"+    , "<CHARESC>r      \t BEGIN CHAREND; " ++ yylval ++ "->_char = '\\r';     return " ++ charToken ++ ";"     , "<CHARESC>t      \t BEGIN CHAREND; " ++ yylval ++ "->_char = '\\t';     return " ++ charToken ++ ";"     , "<CHARESC>.      \t BEGIN CHAREND; " ++ yylval ++ "->_char = yytext[0]; return " ++ charToken ++ ";"     , "<CHAREND>\"'\"      \t BEGIN INITIAL;"
src/BNFC/Backend/CPP/Common.hs view
@@ -5,13 +5,19 @@ module BNFC.Backend.CPP.Common where  import Data.Char  ( isUpper )-import Data.List  ( nub, intercalate )+import Data.List  ( intercalate )  import BNFC.CF import BNFC.TypeChecker +import BNFC.Backend.C          ( comment ) import BNFC.Backend.CPP.Naming +-- | C++ line comment including mode hint for emacs.++commentWithEmacsModeHint :: String -> String+commentWithEmacsModeHint = comment . ("-*- c++ -*- " ++)+ -- | C++ code for the @define@d constructors. -- -- @definedRules Nothing@ only prints the header.@@ -23,14 +29,6 @@     theLines = map rule $ definitions cf      ctx = buildContext cf--    list = LC-      { nil  =  const ("[]", dummyType)-      , cons = \ t -> ("List" ++ unBase t, dummyType)-      }-      where-        unBase (ListT t) = unBase t-        unBase (BaseT x) = x      rule (Define f args e t) =       case mlc of
src/BNFC/Backend/CPP/Makefile.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE OverloadedStrings #-}+ module BNFC.Backend.CPP.Makefile (makefile) where  import BNFC.Backend.Common.Makefile
src/BNFC/Backend/CPP/NoSTL.hs view
@@ -5,18 +5,17 @@  module BNFC.Backend.CPP.NoSTL (makeCppNoStl) where -import Data.Char import Data.Foldable (toList)-import Data.List (nub) import qualified Data.Map as Map  import BNFC.Utils import BNFC.CF import BNFC.Options import BNFC.Backend.Base-import BNFC.Backend.C            (bufferH, bufferC)-import BNFC.Backend.C.CFtoBisonC (cf2Bison)-import BNFC.Backend.C.CFtoFlexC  (cf2flex, ParserMode(..))+import BNFC.Backend.C            ( bufferH, bufferC, comment, testfileHeader )+import BNFC.Backend.C.CFtoBisonC ( cf2Bison )+import BNFC.Backend.C.CFtoFlexC  ( cf2flex, ParserMode(..) )+import BNFC.Backend.CPP.Common   ( commentWithEmacsModeHint ) import BNFC.Backend.CPP.Makefile import BNFC.Backend.CPP.NoSTL.CFtoCPPAbs import BNFC.Backend.CPP.STL.CFtoCVisitSkelSTL@@ -26,23 +25,22 @@ makeCppNoStl :: SharedOptions -> CF -> MkFiles () makeCppNoStl opts cf = do     let (hfile, cfile) = cf2CPPAbs name cf-    mkfile "Absyn.H" hfile-    mkfile "Absyn.C" cfile-    mkfile "Buffer.H" bufferH-    mkfile "Buffer.C" $ bufferC "Buffer.H"+    mkCppFile "Absyn.H" hfile+    mkCppFile "Absyn.C" cfile+    mkCppFile "Buffer.H" bufferH+    mkCppFile "Buffer.C" $ bufferC "Buffer.H"     let (flex, env) = cf2flex parserMode cf-    mkfile (name ++ ".l") flex-    let bison = cf2Bison(linenumbers opts) parserMode cf env-    mkfile (name ++ ".y") bison-    let header = mkHeaderFile cf (allParserCats cf) (toList $ allEntryPoints cf) (Map.elems env)-    mkfile "Parser.H" header+    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)     let (skelH, skelC) = cf2CVisitSkel False Nothing cf-    mkfile "Skeleton.H" skelH-    mkfile "Skeleton.C" skelC+    mkCppFile "Skeleton.H" skelH+    mkCppFile "Skeleton.C" skelC     let (prinH, prinC) = cf2CPPPrinter False Nothing cf-    mkfile "Printer.H" prinH-    mkfile "Printer.C" prinC-    mkfile "Test.C" (cpptest cf)+    mkCppFile "Printer.H" prinH+    mkCppFile "Printer.C" prinC+    mkCppFile "Test.C" (cpptest cf)     Makefile.mkMakefile opts $ makefile prefix name   where     name :: String@@ -54,17 +52,13 @@     prefix = snakeCase_ name ++ "_"     parserMode :: ParserMode     parserMode = CParser True prefix+    mkCppFile         x = mkfile x comment+    mkCppFileWithHint x = mkfile x commentWithEmacsModeHint  cpptest :: CF -> String-cpptest cf =-  unlines-   [-    "/*** Compiler Front-End Test automatically generated by the BNF Converter ***/",-    "/*                                                                          */",-    "/* This test will parse a file, print the abstract syntax tree, and then    */",-    "/* pretty-print the result.                                                 */",-    "/*                                                                          */",-    "/****************************************************************************/",+cpptest cf = unlines $ concat+  [ testfileHeader+  , [ "",     "#include <stdio.h>",     "#include <string.h>",     "#include \"Parser.H\"",@@ -126,16 +120,18 @@     "  return 1;",     "}",     ""-   ]+    ]+  ]   where    cat = firstEntry cf    dat = identCat $ normCat cat    def = identCat cat -mkHeaderFile cf cats eps env = unlines $ concat+mkHeaderFile _cf _cats eps _env = unlines $ concat   [ [ "#ifndef PARSER_HEADER_FILE"     , "#define PARSER_HEADER_FILE"     , ""+    , "#include <stdio.h>"     , "#include \"Absyn.H\""     , ""     ]
src/BNFC/Backend/CPP/NoSTL/CFtoCPPAbs.hs view
@@ -20,7 +20,7 @@  import Prelude hiding ((<>)) -import Data.List  ( findIndices, intersperse )+import Data.List  ( findIndices ) import Data.Char  ( toLower ) import Text.PrettyPrint @@ -66,7 +66,7 @@  where   user = fst (unzip (tokenPragmas cf)) -- includes position tokens   -- user = [ name | TokenReg name False _ <- cfgPragmas cf ]  -- position tokens are in allClasses already-  header = "/* ~~~ C++ Abstract Syntax Interface generated by the BNF Converter.\n ~~~ */"+  header = "/* ~~~ C++ Abstract Syntax Interface.\n ~~~ */"   ca = cf2cabs cf   classes = absclasses ca ++ conclasses ca ++ map fst (listtypes ca)   -- classes = allClasses (cf2cabs cf)  -- includes position tokens
src/BNFC/Backend/CPP/PrettyPrinter.hs view
@@ -25,7 +25,6 @@  import Data.Bifunctor (second) import Data.Char  (toLower)-import Data.Maybe (isJust)  import BNFC.CF import BNFC.Utils@@ -237,7 +236,7 @@   where     header = unlines      [-      "/*** BNFC-Generated Pretty Printer and Abstract Syntax Viewer ***/",+      "/*** Pretty Printer and Abstract Syntax Viewer ***/",       "",       "#include <string>",       "#include \"Printer.H\"",@@ -410,7 +409,7 @@ -- | Generate pretty printer visitor for a list category (STL version). -- genPrintVisitorList :: (Cat, [Rule]) -> Doc-genPrintVisitorList (cat@(ListCat c), rules) = vcat+genPrintVisitorList (cat@(ListCat _), rules) = vcat   [ "void PrintAbsyn::visit" <> lty <> parens (lty <+> "*" <> vname)   , codeblock 2     [ "iter" <> lty <> parens (vname <> "->begin()" <> comma <+> vname <> "->end()") <> semi ]@@ -463,7 +462,7 @@ prListRule_ (Rule _ _ items _) = for items $ \case   Right t       -> "render(" <> text (snd (renderCharOrString t)) <> ");"   Left c-    | Just t <- maybeTokenCat c+    | Just{} <- maybeTokenCat c                 -> "visit" <> dat <> "(*i);"     | isList c  -> "iter" <> dat <> "(i+1, j);"     | otherwise -> "(*i)->accept(this);"@@ -474,7 +473,7 @@ -- between the versions with and without STL. -- The present version has been adapted from CFtoCPrinter. genPrintVisitorListNoStl :: (Cat, [Rule]) -> String-genPrintVisitorListNoStl (cat@(ListCat c), rules) = unlines $ concat+genPrintVisitorListNoStl (cat@(ListCat _), rules) = unlines $ concat   [ [ "void PrintAbsyn::visit" ++ cl ++ "("++ cl ++ " *" ++ vname ++ ")"     , "{"       , "  if (" ++ vname +++ "== 0)"@@ -512,7 +511,7 @@  --Pretty Printer methods for a rule. prPrintRule :: Maybe String -> Rule -> String-prPrintRule inPackage r@(Rule fun _ items _) | isProperLabel fun = unlines $ concat+prPrintRule inPackage r@(Rule fun _ _ _) | isProperLabel fun = unlines $ concat   [ [ "void PrintAbsyn::visit" ++ funName fun ++ "(" ++ funName fun +++ "*" ++ fnm ++ ")"     , "{"     , "  int oldi = _i_;"
src/BNFC/Backend/CPP/STL.hs view
@@ -9,18 +9,17 @@  module BNFC.Backend.CPP.STL (makeCppStl,) where -import Data.Char import Data.Foldable (toList)-import qualified Data.List as List import qualified Data.Map as Map  import BNFC.Utils import BNFC.CF import BNFC.Options import BNFC.Backend.Base-import BNFC.Backend.C            (bufferH, bufferC)-import BNFC.Backend.C.CFtoBisonC (cf2Bison)-import BNFC.Backend.C.CFtoFlexC  (cf2flex, ParserMode(..))+import BNFC.Backend.C            ( bufferH, bufferC, comment, testfileHeader )+import BNFC.Backend.C.CFtoBisonC ( cf2Bison )+import BNFC.Backend.C.CFtoFlexC  ( cf2flex, ParserMode(..) )+import BNFC.Backend.CPP.Common   ( commentWithEmacsModeHint ) import BNFC.Backend.CPP.Makefile import BNFC.Backend.CPP.STL.CFtoSTLAbs import BNFC.Backend.CPP.STL.CFtoCVisitSkelSTL@@ -31,24 +30,23 @@ makeCppStl :: SharedOptions -> CF -> MkFiles () makeCppStl opts cf = do     let (hfile, cfile) = cf2CPPAbs (linenumbers opts) (inPackage opts) name cf-    mkfile "Absyn.H" hfile-    mkfile "Absyn.C" cfile-    mkfile "Buffer.H" bufferH-    mkfile "Buffer.C" $ bufferC "Buffer.H"+    mkCppFile "Absyn.H" hfile+    mkCppFile "Absyn.C" cfile+    mkCppFile "Buffer.H" bufferH+    mkCppFile "Buffer.C" $ bufferC "Buffer.H"     let (flex, env) = cf2flex parserMode cf-    mkfile (name ++ ".l") flex-    let bison = cf2Bison (linenumbers opts) parserMode cf env-    mkfile (name ++ ".y") bison-    let header = mkHeaderFile (inPackage opts) cf (allParserCats cf) (toList $ allEntryPoints cf) (Map.elems env)-    mkfile "Parser.H" header-    mkfile "ParserError.H" $ printParseErrHeader (inPackage opts)+    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)+    mkCppFile "ParserError.H" $ printParseErrHeader (inPackage opts)     let (skelH, skelC) = cf2CVisitSkel True (inPackage opts) cf-    mkfile "Skeleton.H" skelH-    mkfile "Skeleton.C" skelC+    mkCppFile "Skeleton.H" skelH+    mkCppFile "Skeleton.C" skelC     let (prinH, prinC) = cf2CPPPrinter True (inPackage opts) cf-    mkfile "Printer.H" prinH-    mkfile "Printer.C" prinC-    mkfile "Test.C" (cpptest (inPackage opts) cf)+    mkCppFile "Printer.H" prinH+    mkCppFile "Printer.C" prinC+    mkCppFile "Test.C" (cpptest (inPackage opts) cf)     Makefile.mkMakefile opts $ makefile prefix name   where     name :: String@@ -60,6 +58,8 @@     prefix = snakeCase_ name ++ "_"     parserMode :: ParserMode     parserMode = CppParser (inPackage opts) prefix+    mkCppFile         x = mkfile x comment+    mkCppFileWithHint x = mkfile x commentWithEmacsModeHint  printParseErrHeader :: Maybe String -> String printParseErrHeader inPackage =@@ -86,15 +86,9 @@      ]  cpptest :: Maybe String -> CF -> String-cpptest inPackage cf =-  unlines-   [-    "/*** Compiler Front-End Test automatically generated by the BNF Converter ***/",-    "/*                                                                          */",-    "/* This test will parse a file, print the abstract syntax tree, and then    */",-    "/* pretty-print the result.                                                 */",-    "/*                                                                          */",-    "/****************************************************************************/",+cpptest inPackage cf = unlines $ concat+  [ testfileHeader+  , [ "",     "#include <cstdio>",     "#include <string>",     "#include <iostream>",@@ -163,19 +157,21 @@     "  return 1;",     "}",     ""-   ]+    ]+  ]   where    cat = firstEntry cf    dat = identCat $ normCat cat    def = identCat cat    scope = nsScope inPackage -mkHeaderFile inPackage cf cats eps env = unlines $ concat+mkHeaderFile inPackage _cf _cats eps _env = unlines $ concat   [ [ "#ifndef " ++ hdef     , "#define " ++ hdef     , ""     , "#include<vector>"     , "#include<string>"+    , "#include<cstdio>"     , "#include \"Absyn.H\""     , ""     , nsStart inPackage
src/BNFC/Backend/CPP/STL/CFtoCVisitSkelSTL.hs view
@@ -103,7 +103,7 @@        where field = v ++ "->" ++ var  headerC = unlines [-      "/*** BNFC-Generated Visitor Design Pattern Skeleton. ***/",+      "/*** Visitor Design Pattern Skeleton. ***/",       "/* This implements the common visitor design pattern.",       "   Note that this method uses Visitor-traversal of lists, so",       "   List->accept() does NOT traverse the list. This allows different",
src/BNFC/Backend/CPP/STL/CFtoSTLAbs.hs view
@@ -49,7 +49,7 @@   "#include<string>",   "#include<vector>",   "",-  "//C++ Abstract Syntax Interface generated by the BNF Converter.",+  "//C++ Abstract Syntax Interface.",   nsStart inPackage,   "/********************   TypeDef Section    ********************/",   "",@@ -162,7 +162,7 @@  mkCFile :: Maybe String -> CAbs -> CF -> String mkCFile inPackage cabs cf = unlines $ [-  "//C++ Abstract Syntax Implementation generated by the BNF Converter.",+  "//C++ Abstract Syntax Implementation.",   "#include <algorithm>",   "#include <string>",   "#include <vector>",
src/BNFC/Backend/Common/Makefile.hs view
@@ -60,5 +60,5 @@ -- | Create the Makefile file using the name specified in the option record. -- mkMakefile :: SharedOptions -> (String -> Doc) -> Backend-mkMakefile Options{make = Just m } mkContent = mkfile m (mkContent m)+mkMakefile Options{make = Just m } mkContent = mkfile m ("## " ++) (mkContent m) mkMakefile Options{make = Nothing} _         = return ()
src/BNFC/Backend/Haskell.hs view
@@ -4,6 +4,7 @@  -} +{-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-}  module BNFC.Backend.Haskell (makeHaskell, AlexVersion(..), makefile, testfile) where@@ -26,12 +27,15 @@ import BNFC.Backend.Haskell.MkErrM import BNFC.Backend.Haskell.Utils import BNFC.Backend.Txt2Tag-import BNFC.Backend.XML+import BNFC.Backend.XML (makeXML) import qualified BNFC.Backend.Common.Makefile as Makefile  import BNFC.CF-import BNFC.Options hiding (Backend)-import BNFC.Utils (when, unless, table, getZonedTimeTruncatedToSeconds)+import BNFC.Options+  ( SharedOptions(..), TokenText(..), AlexVersion(..), HappyMode(..)+  , isDefault, printOptions+  )+import BNFC.Utils (when, table, getZonedTimeTruncatedToSeconds)   -- | Entrypoint for the Haskell backend.@@ -49,31 +53,31 @@       errMod = errFileM opts   do     -- Generate abstract syntax and pretty printer.-    mkfile (absFile opts) $ cf2Abstract opts absMod cf-    mkfile (printerFile opts) $ cf2Printer (tokenText opts) (functor opts) False prMod absMod cf+    mkfile (absFile opts) comment $ cf2Abstract opts absMod cf+    mkfile (printerFile opts) comment $ cf2Printer (tokenText opts) (functor opts) False prMod absMod cf      -- Generate Alex lexer.  Layout is resolved after lexing.     case alexMode opts of       Alex3 -> do-        mkfile (alexFile opts) $ cf2alex3 lexMod (tokenText opts) cf+        mkfile (alexFile opts) commentWithEmacsModeHint $ cf2alex3 lexMod (tokenText opts) cf         liftIO $ printf "Use Alex 3 to compile %s.\n" (alexFile opts) -    Ctrl.when (hasLayout cf) $ mkfile (layoutFile opts) $+    Ctrl.when (hasLayout cf) $ mkfile (layoutFile opts) comment $       cf2Layout layMod lexMod cf      -- Generate Happy parser and matching test program.     do-      mkfile (happyFile opts) $+      mkfile (happyFile opts) commentWithEmacsModeHint $         cf2Happy parMod absMod lexMod (glr opts) (tokenText opts) (functor opts) cf       -- liftIO $ printf "%s Tested with Happy 1.15\n" (happyFile opts)-      mkfile (tFile opts)        $ testfile opts cf+      mkfile (tFile opts) comment $ testfile opts cf      -- Both Happy parser and skeleton (template) rely on Err.-    mkfile (errFile opts) $ mkErrM errMod-    mkfile (templateFile opts) $ cf2Template (templateFileM opts) absMod (functor opts) cf+    mkfile (errFile opts) comment $ mkErrM errMod+    mkfile (templateFile opts) comment $ cf2Template (templateFileM opts) absMod (functor opts) cf      -- Generate txt2tags documentation.-    mkfile (txtFile opts)      $ cfToTxt (lang opts) cf+    mkfile (txtFile opts) t2tComment $ cfToTxt (lang opts) cf      -- Generate XML and DTD printers.     case xml opts of@@ -166,7 +170,7 @@  makefileHeader :: Options -> Doc makefileHeader Options{ glr } = vcat-  [ "# Makefile generated by BNFC."+  [ "# Makefile for building the parser and test program."   , ""   , "GHC        = ghc"   , "HAPPY      = happy"@@ -292,7 +296,7 @@  testfile :: Options -> CF -> String testfile opts cf = unlines $ concat $-  [ [ "-- Program to test parser, automatically generated by BNF Converter."+  [ [ "-- | Program to test parser."     , ""     , "module Main where"     , ""
src/BNFC/Backend/Haskell/CFtoAbstract.hs view
@@ -38,11 +38,7 @@ -- generic   :: Bool      -- ^ Derive @Data@, Generic@, @Typeable@? -- functor   :: Bool      -- ^ Make the tree a functor? cf2Abstract Options{ lang, tokenText, generic, functor } name cf = vsep . concat $-    [ [ vcat-        [ "-- Haskell data types for the abstract syntax."-        , "-- Generated by the BNF converter."-        ]-      ]+    [ []      -- Modules header     , [ vcat . concat $@@ -297,7 +293,7 @@ definedRules :: Bool -> CF -> [Doc] definedRules functor cf = map mkDef $ definitions cf   where-  mkDef (Define f args e t) = vcat $ concat+  mkDef (Define f args e _) = vcat $ concat     [ [ text $ unwords [ fName, "::", typ $ wpThing t ]       | t <- maybeToList $ sigLookup f cf       ]
src/BNFC/Backend/Haskell/CFtoAlex3.hs view
@@ -6,6 +6,9 @@  -} +{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}+ module BNFC.Backend.Haskell.CFtoAlex3 (cf2alex3) where  import Data.Char@@ -32,8 +35,7 @@  prelude :: String -> TokenText -> [String] prelude name tokenText = concat-  [ [ "-- -*- haskell -*-"-    , "-- This Alex file was machine-generated by the BNF converter"+  [ [ "-- Lexer definition for use with Alex 3"     , "{"     , "{-# OPTIONS -fno-warn-incomplete-patterns #-}"     , "{-# OPTIONS_GHC -w #-}"
src/BNFC/Backend/Haskell/CFtoHappy.hs view
@@ -59,7 +59,7 @@ -- | Construct the header. header :: ModuleName -> ModuleName -> ModuleName -> TokenText -> [Cat] -> String header modName absName lexName tokenText eps = unlines $ concat-  [ [ "-- This Happy file was machine-generated by the BNF converter"+  [ [ "-- Parser definition for use with Happy"     , "{"     , "{-# OPTIONS_GHC -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-}"     , "{-# LANGUAGE PatternSynonyms #-}"@@ -255,7 +255,7 @@ -- Finally, some haskell code.  footer :: ModuleName -> TokenText -> Bool -> [Cat] -> CF -> String-footer absName tokenText functor eps cf = unlines $ concat+footer absName tokenText functor eps _cf = unlines $ concat   [ [ "{"     , ""     , "type Err = Either String"
src/BNFC/Backend/Haskell/CFtoLayout.hs view
@@ -5,12 +5,13 @@  -} +{-# LANGUAGE OverloadedStrings #-}+ module BNFC.Backend.Haskell.CFtoLayout where -import Data.Maybe                 ( fromMaybe )+import Data.Maybe                 ( fromMaybe, mapMaybe )  import BNFC.CF-import BNFC.Options               ( TokenText ) import BNFC.PrettyPrint import BNFC.Utils                 ( caseMaybe, for, whenJust ) @@ -22,9 +23,7 @@  cf2Layout :: String -> String -> CF -> String cf2Layout layName lexName cf = unlines $ concat-  [ [ "-- Generated by the BNF Converter"-    , ""-    , "{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}"+  [ [ "{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}"     , ""     , "{-# LANGUAGE LambdaCase #-}"     , "{-# LANGUAGE PatternGuards #-}"@@ -70,6 +69,10 @@       , [ "map (delimSep . snd) layoutWords" ]       ]     , ""+    , "parenOpen, parenClose :: [TokSymbol]"+    , render $ prettyList 2 "parenOpen  =" "[" "]" "," $ map (text . show) parenOpen+    , render $ prettyList 2 "parenClose =" "[" "]" "," $ map (text . show) parenClose+    , ""     , "-- | Replace layout syntax with explicit layout tokens."     , "resolveLayout :: Bool    -- ^ Whether to use top-level layout."     , "              -> [Token] -> [Token]"@@ -101,11 +104,11 @@     , "    -- put an explicit layout block on the stack."     , "    -- This is done even if there was no layout word,"     , "    -- to keep opening and closing braces."-    , "    | isLayoutOpen t0"+    , "    | isLayoutOpen t0 || isParenOpen t0"     , "      = t0 : res (Just t0) (Explicit : st) ts"     , ""     , "    -- If we encounter a closing brace, exit the first explicit layout block."-    , "    | isLayoutClose t0"+    , "    | isLayoutClose t0 || isParenClose t0"     , "      , let (imps, rest) = span isImplicit st"     , "      , let st' = drop 1 rest"     , "      = if null st'"@@ -332,19 +335,28 @@     , "-- | Check if a token is the layout close token."     , "isLayoutClose :: Token -> Bool"     , "isLayoutClose = isTokenIn layoutClose"+    , ""+    , "-- | Check if a token is an opening parenthesis."+    , "isParenOpen :: Token -> Bool"+    , "isParenOpen = isTokenIn parenOpen"+    , ""+    , "-- | Check if a token is a closing parenthesis."+    , "isParenClose :: Token -> Bool"+    , "isParenClose = isTokenIn parenClose"     ]   ]   where   (top0, lay0, stop0) = layoutPragmas cf-  top      = fmap mkTokSymbol top0+  top      = mkTokSymbol =<< top0   topDelim = fmap (\ sep -> LayoutDelimiters sep Nothing Nothing) top   lay      = for lay0 $ \ (kw, Delimiters sep open close) ->-    ( mkTokSymbol kw-    , LayoutDelimiters (mkTokSymbol sep) (Just $ mkTokSymbol open) (Just $ mkTokSymbol close)+    ( fromMaybe undefined $ mkTokSymbol kw+    , LayoutDelimiters (fromMaybe undefined $ mkTokSymbol sep) (mkTokSymbol open) (mkTokSymbol close)     )-  stop = map mkTokSymbol stop0-  mkTokSymbol :: String -> TokSymbol-  mkTokSymbol x = TokSymbol x n-    where-    n = fromMaybe (-1) $ lookup x tokens+  stop = mapMaybe mkTokSymbol stop0+  mkTokSymbol :: String -> Maybe TokSymbol+  mkTokSymbol x = TokSymbol x <$> lookup x tokens   tokens = cfTokens cf+  -- Extra parentheses to keep track of (#370).+  parenOpen  = mapMaybe mkTokSymbol [ "(", "[" ]+  parenClose = mapMaybe mkTokSymbol [ ")", "]" ]
src/BNFC/Backend/Haskell/CFtoPrinter.hs view
@@ -68,10 +68,10 @@     , "#endif"     ]   , [ ""-    , "{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}"-    , ""+    -- -- WAS: Needed for precedence category lists, e.g. @[Exp2]@:+    -- , "{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}"+    -- , ""     , "-- | Pretty-printer for " ++ takeWhile ('.' /=) name ++ "."-    , "--   Generated by the BNF converter."     , ""     , "module " ++ name +++ "where"     , ""@@ -219,7 +219,7 @@ doubleRule absMod cf = showsPrintRule absMod cf $ TokenCat catDouble  showsPrintRule :: AbsMod -> CF -> Cat -> [Doc]-showsPrintRule absMod cf t =+showsPrintRule absMod _cf t =   [ hsep [ "instance Print" , text (qualifiedCat absMod t) , "where" ]   , "  prt _ x = doc (shows x)"   , ""@@ -293,7 +293,7 @@        -- Special printing of lists (precedence changes concrete syntax!)       if isList cat then-        map mkPrtListCase $ List.sortBy compareRules $ rulesForNormalizedCat cf cat+        listCases $ List.sortBy compareRules $ rulesForNormalizedCat cf cat        -- Ordinary category       else@@ -311,6 +311,20 @@       ListCat c    -> "[" <> type' c <> "]"       c@TokenCat{} -> text (qualifiedCat absMod c)       c            -> text (qualifiedCat absMod c) <> "' a"+    listCases [] = []+    listCases rules = concat+      [ [ "prt _ [] = concatD []" | not $ any isNilFun rules ]+            -- Andreas, 2021-09-22, issue #386+            -- If the list is @nonempty@ according to the grammar, still add a nil case.+            -- In the AST it is simply a list, and the AST could be created+            -- by other means than by parsing.+      , map (mkPrtListCase minPrec) rules+      ]+      where+      -- Andreas, 2021-09-22, issue #384:+      -- The minimum precedence of a rule lhs category in the rules set.+      -- This is considered the default precedence; used to make the printing function total.+      minPrec = minimum $ map precRule rules  -- | When writing the Print instance for a category (in case_fun), we have -- a different case for each constructor for this category.@@ -369,34 +383,38 @@  -- | Pattern match on the list constructor and the coercion level ----- >>> mkPrtListCase (npRule "[]" (ListCat (Cat "Foo")) [] Parsable)+-- >>> mkPrtListCase 0 (npRule "[]" (ListCat (Cat "Foo")) [] Parsable) -- prt _ [] = concatD [] ----- >>> mkPrtListCase (npRule "(:[])" (ListCat (Cat "Foo")) [Left (Cat "FOO")] Parsable)+-- >>> mkPrtListCase 0 (npRule "(:[])" (ListCat (Cat "Foo")) [Left (Cat "FOO")] Parsable) -- prt _ [x] = concatD [prt 0 x] ----- >>> mkPrtListCase (npRule "(:)" (ListCat (Cat "Foo")) [Left (Cat "Foo"), Left (ListCat (Cat "Foo"))] Parsable)+-- >>> mkPrtListCase 0 (npRule "(:)" (ListCat (Cat "Foo")) [Left (Cat "Foo"), Left (ListCat (Cat "Foo"))] Parsable) -- prt _ (x:xs) = concatD [prt 0 x, prt 0 xs] ----- >>> mkPrtListCase (npRule "[]" (ListCat (CoercCat "Foo" 2)) [] Parsable)+-- >>> mkPrtListCase 0 (npRule "[]" (ListCat (CoercCat "Foo" 2)) [] Parsable) -- prt 2 [] = concatD [] ----- >>> mkPrtListCase (npRule "(:[])" (ListCat (CoercCat "Foo" 2)) [Left (CoercCat "Foo" 2)] Parsable)+-- >>> mkPrtListCase 0 (npRule "(:[])" (ListCat (CoercCat "Foo" 2)) [Left (CoercCat "Foo" 2)] Parsable) -- prt 2 [x] = concatD [prt 2 x] ----- >>> mkPrtListCase (npRule "(:)" (ListCat (CoercCat "Foo" 2)) [Left (CoercCat "Foo" 2), Left (ListCat (CoercCat "Foo" 2))] Parsable)--- prt 2 (x:xs) = concatD [prt 2 x, prt 2 xs]+-- >>> mkPrtListCase 2 (npRule "(:)" (ListCat (CoercCat "Foo" 2)) [Left (CoercCat "Foo" 2), Left (ListCat (CoercCat "Foo" 2))] Parsable)+-- prt _ (x:xs) = concatD [prt 2 x, prt 2 xs] ---mkPrtListCase :: Rule -> Doc-mkPrtListCase (Rule f (WithPosition _ (ListCat c)) rhs _internal)+mkPrtListCase+  :: Integer -- ^ The lowest precedence of a lhs in a list rule.  Default: 0.+  -> Rule    -- ^ The list rule.+  -> Doc+mkPrtListCase minPrec (Rule f (WithPosition _ (ListCat c)) rhs _internal)   | isNilFun f = "prt" <+> precPattern <+> "[]" <+> "=" <+> body   | isOneFun f = "prt" <+> precPattern <+> "[x]" <+> "=" <+> body   | isConsFun f = "prt" <+> precPattern <+> "(x:xs)" <+> "=" <+> body   | otherwise = empty -- (++) constructor   where-    precPattern = case precCat c of 0 -> "_" ; p -> integer p+    precPattern = if p <= minPrec then "_" else integer p+    p = precCat c     body = mkRhs ["x", "xs"] rhs-mkPrtListCase _ = error "mkPrtListCase undefined for non-list categories"+mkPrtListCase _ _ = error "mkPrtListCase undefined for non-list categories"   -- | Define an ordering on lists' rules with the following properties:
src/BNFC/Backend/Haskell/CFtoTemplate.hs view
@@ -17,7 +17,7 @@  cf2Template :: ModuleName -> ModuleName -> Bool -> CF -> String cf2Template skelName absName functor cf = unlines $ concat-  [ [ "-- Haskell module generated by the BNF converter"+  [ [ "-- Templates for pattern matching on abstract syntax"     , ""     , noWarnUnusedMatches     , ""
src/BNFC/Backend/Haskell/Utils.hs view
@@ -2,7 +2,8 @@ {-# LANGUAGE OverloadedStrings #-}  module BNFC.Backend.Haskell.Utils-  ( posType, posConstr, noPosConstr+  ( comment, commentWithEmacsModeHint+  , posType, posConstr, noPosConstr   , hasPositionClass, hasPositionMethod   , noWarnUnusedMatches   , parserName@@ -23,6 +24,16 @@ import BNFC.CF      (Cat(..), catToStr, identCat, baseTokenCatNames, Base, Type(FunT), IsFun(..)) import BNFC.Options (TokenText(..)) import BNFC.Utils   (mkNames, NameStyle(..))++-- | Haskell line comments.++comment :: String -> String+comment = ("-- " ++)++-- | Haskell line comment including mode hint for emacs.++commentWithEmacsModeHint :: String -> String+commentWithEmacsModeHint = comment . ("-*- haskell -*- " ++)  -- * GHC pragmas 
src/BNFC/Backend/HaskellGADT.hs view
@@ -12,6 +12,7 @@ import BNFC.Options import BNFC.Backend.Base hiding (Backend) import BNFC.Backend.Haskell.HsOpts+import BNFC.Backend.Haskell.Utils (comment, commentWithEmacsModeHint) import BNFC.CF import BNFC.Backend.Haskell.CFtoHappy import BNFC.Backend.Haskell.CFtoAlex3@@ -19,7 +20,7 @@ import BNFC.Backend.HaskellGADT.CFtoTemplateGADT import BNFC.Backend.Haskell.CFtoPrinter import BNFC.Backend.Haskell.CFtoLayout-import BNFC.Backend.XML+import BNFC.Backend.XML (makeXML) import BNFC.Backend.Haskell.MkErrM import qualified BNFC.Backend.Common.Makefile as Makefile import qualified BNFC.Backend.Haskell as Haskell@@ -37,26 +38,27 @@       layMod = layoutFileM opts       errMod = errFileM opts   do-    mkfile (absFile opts) $ cf2Abstract (tokenText opts) absMod cf composOpMod-    mkfile (composOpFile opts) $ composOp composOpMod-    case alexMode opts of-      Alex3 -> do-        mkfile (alexFile opts) $ cf2alex3 lexMod (tokenText opts) cf-        liftIO $ putStrLn "   (Use Alex 3 to compile.)"-    mkfile (happyFile opts) $+    mkHsFile (absFile opts) $ cf2Abstract (tokenText opts) absMod cf composOpMod+    mkHsFile (composOpFile opts) $ composOp composOpMod+    mkHsFileHint (alexFile opts) $ cf2alex3 lexMod (tokenText opts) cf+    liftIO $ putStrLn "   (Use Alex 3 to compile.)"+    mkHsFileHint (happyFile opts) $       cf2Happy parMod absMod lexMod (glr opts) (tokenText opts) False cf     liftIO $ putStrLn "   (Tested with Happy 1.15 - 1.20)"-    mkfile (templateFile opts) $ cf2Template (templateFileM opts) absMod cf-    mkfile (printerFile opts)  $ cf2Printer StringToken False True prMod absMod cf-    when (hasLayout cf) $ mkfile (layoutFile opts) $+    mkHsFile (templateFile opts) $ cf2Template (templateFileM opts) absMod cf+    mkHsFile (printerFile opts)  $ cf2Printer StringToken False True prMod absMod cf+    when (hasLayout cf) $ mkHsFile (layoutFile opts) $       cf2Layout layMod lexMod cf-    mkfile (tFile opts)        $ Haskell.testfile opts cf-    mkfile (errFile opts) $ mkErrM errMod+    mkHsFile (tFile opts)        $ Haskell.testfile opts cf+    mkHsFile (errFile opts) $ mkErrM errMod     Makefile.mkMakefile opts $ Haskell.makefile opts cf     case xml opts of       2 -> makeXML opts True cf       1 -> makeXML opts False cf       _ -> return ()+  where+  mkHsFile x = mkfile x comment+  mkHsFileHint x = mkfile x commentWithEmacsModeHint  composOp :: String -> String composOp composOpMod = unlines
src/BNFC/Backend/HaskellGADT/CFtoAbstractGADT.hs view
@@ -20,8 +20,7 @@  cf2Abstract :: TokenText -> String -> CF -> String -> String cf2Abstract tokenText name cf composOpMod = unlines $ concat $-  [ [ "-- Haskell module generated by the BNF converter"-    , "-- For GHC version 7.10 or higher"+  [ [ "-- For GHC version 7.10 or higher"     , ""     , "{-# LANGUAGE GADTs, KindSignatures, DataKinds #-}"     ]
src/BNFC/Backend/HaskellGADT/CFtoTemplateGADT.hs view
@@ -22,8 +22,6 @@     , ""     , noWarnUnusedMatches     , ""-    , "-- Haskell module generated by the BNF converter"-    , ""     , "module "++ skelName ++ " where"     , ""     , "import Prelude (Either(..), Show(..), String, ($), (++))"
src/BNFC/Backend/Java.hs view
@@ -1,4 +1,6 @@ {-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}  {-     BNF Converter: Java Top File@@ -82,12 +84,12 @@                 (head $ results lexmake) -- lexer class                 (head $ results parmake) -- parser class             )-        makebnfcfile x = mkfile (javaex (fst $ x bnfcfiles))+        makebnfcfile x = mkfile (javaex (fst $ x bnfcfiles)) comment                                         (snd $ x bnfcfiles)      let absynFiles = remDups $ cf2JavaAbs dirAbsyn packageBase packageAbsyn cf rp         absynFileNames = map fst absynFiles-    mapM_ (\ (n, s) -> mkfile (n <.> "java") s) absynFiles+    mapM_ (\ (n, s) -> mkfile (n <.> "java") comment s) absynFiles     makebnfcfile bprettyprinter     makebnfcfile bskel     makebnfcfile bcompos@@ -97,11 +99,11 @@     makebnfcfile btest     let (lex, env) = lexfun packageBase cf     -- Where the lexer file is created. lex is the content!-    mkfile (dirBase </> inputfile lexmake ) lex+    mkfile (dirBase </> inputfile lexmake ) commentWithEmacsModeHint lex     liftIO $ putStrLn $ "   (Tested with" +++ toolname lexmake                                           +++ toolversion lexmake  ++ ")"     -- where the parser file is created.-    mkfile (dirBase </> inputfile parmake)+    mkfile (dirBase </> inputfile parmake) commentWithEmacsModeHint           $ parsefun packageBase packageAbsyn cf rp env     liftIO $ putStrLn $       if supportsEntryPoints parmake@@ -125,6 +127,7 @@     parmake      = makeparserdetails (parser parselexspec)     lexmake      = makelexerdetails  (lexer parselexspec)     rp           = (Options.linenumbers options)+    commentWithEmacsModeHint = comment . ("-*- Java -*- " ++)  makefile ::  FilePath -> FilePath -> [String] -> ParserLexerSpecification -> String -> Doc makefile  dirBase dirAbsyn absynFileNames jlexpar basename = vcat $
src/BNFC/Backend/Java/CFtoAbstractVisitor.hs view
@@ -15,7 +15,7 @@ cf2AbstractVisitor packageBase packageAbsyn cf = unlines     [ "package" +++ packageBase ++ ";"     , ""-    , "/** BNFC-Generated Abstract Visitor */"+    , "/** Abstract Visitor */"     , ""     , "public class AbstractVisitor<R,A> implements AllVisitor<R,A> {"     , concatMap (prData packageAbsyn user) groups
src/BNFC/Backend/Java/CFtoAllVisitor.hs view
@@ -7,7 +7,7 @@  module BNFC.Backend.Java.CFtoAllVisitor (cf2AllVisitor) where -import Data.List+import Data.List (intercalate) import BNFC.CF import BNFC.Utils ((+++)) import BNFC.Backend.Common.NamedVariables@@ -17,7 +17,7 @@ cf2AllVisitor packageBase packageAbsyn cf = unlines $ concat   [ [ "package" +++ packageBase ++ ";"     , ""-    , "/** BNFC-Generated All Visitor */"+    , "/** All Visitor */"     , ""     , "public interface AllVisitor<R,A>" ++ if null is then "" else " extends"     ]
src/BNFC/Backend/Java/CFtoAntlr4Lexer.hs view
@@ -48,7 +48,7 @@ -- | File prelude prelude ::  String -> Doc prelude packageBase = vcat-    [ "// This Antlr4 file was machine-generated by the BNF converter"+    [ "// Lexer definition for use with Antlr4"     , "lexer grammar" <+> text name <> "Lexer;"     ]     where name = getLastInPackage packageBase
src/BNFC/Backend/Java/CFtoAntlr4Parser.hs view
@@ -61,7 +61,7 @@   where     header :: String     header = unlines-        [ "// -*- Java -*- This ANTLRv4 file was machine-generated by BNFC"+        [ "// Parser definition for use with ANTLRv4"         , "parser grammar" +++ identifier ++ "Parser;"         ]     tokens :: String
src/BNFC/Backend/Java/CFtoComposVisitor.hs view
@@ -36,7 +36,7 @@     is     = map (prInterface packageAbsyn) groups     header = unlines $ concat       [ [ "package" +++ packageBase ++ ";"-        , "/** BNFC-Generated Composition Visitor"+        , "/** Composition Visitor"         , "*/"         , ""         , "public class ComposVisitor<A>" ++ if null is then "" else " implements"
src/BNFC/Backend/Java/CFtoCup15.hs view
@@ -16,7 +16,6 @@  module BNFC.Backend.Java.CFtoCup15 ( cf2Cup ) where -import Data.Char import Data.List (intercalate)  import BNFC.CF@@ -24,7 +23,6 @@ import BNFC.Utils ( (+++) )  import BNFC.Backend.Common.NamedVariables-import BNFC.Backend.Java.CFtoJavaAbs15    ( typename ) import BNFC.Backend.Java.Utils            ( getRuleName )  type Rules   = [(NonTerminal,[(Pattern,Action)])]@@ -46,7 +44,7 @@   where     header :: String     header = unlines-      [ "// -*- Java -*- This Cup file was machine-generated by BNFC"+      [ "// Parser definition for use with Java Cup"       , "package" +++ packageBase ++ ";"       , ""       , "action code {:"
src/BNFC/Backend/Java/CFtoFoldVisitor.hs view
@@ -23,7 +23,7 @@   unlines     ["package" +++ packageBase ++ ";",      "",-     "/** BNFC-Generated Fold Visitor */",+     "/** Fold Visitor */",      "public abstract class FoldVisitor<R,A> implements AllVisitor<R,A> {",      "    public abstract R leaf(A arg);",      "    public abstract R combine(R x, R y, A arg);",
src/BNFC/Backend/Java/CFtoJLex15.hs view
@@ -1,4 +1,6 @@ {-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TupleSections #-}  {-     BNF Converter: Java JLex generator@@ -42,7 +44,7 @@ -- | File prelude. prelude :: JavaLexerParser -> RecordPositions -> String -> Doc prelude jflex rp packageBase = vcat-    [ hsep [ "// This", lexerName, "file was machine-generated by the BNF converter" ]+    [ hsep [ "// Lexer definition for use with", lexerName ]     , "package" <+> text packageBase <> ";"     , ""     , "import java_cup.runtime.*;"
src/BNFC/Backend/Java/CFtoJavaAbs15.hs view
@@ -29,13 +29,13 @@ import Data.Function   ( on ) import Data.List       ( findIndices, intercalate ) import Data.Maybe      ( mapMaybe )-import System.FilePath ( (<.>), (</>) )+import System.FilePath ( (</>) ) import Text.PrettyPrint as P  import BNFC.CF import BNFC.Options     ( RecordPositions(..) ) import BNFC.TypeChecker ( buildContext, ctxTokens, isToken )-import BNFC.Utils       ( (+++), (++++), uncurry3, unless )+import BNFC.Utils       ( (+++), (++++), unless )  import BNFC.Backend.Common.NamedVariables ( UserDef, showNum ) import BNFC.Backend.Java.Utils            ( getRuleName )@@ -61,12 +61,12 @@   , map (first mkPath) $ concatMap (prData rp header packageAbsyn user) rules   ]   where-  header = "package " ++ packageAbsyn ++ "; // Java Package generated by the BNF Converter.\n"+  header = "package " ++ packageAbsyn ++ ";\n"   user   = [ n | (n,_) <- tokenPragmas cf ]   rules  = getAbstractSyntax cf   defs   = definitions cf   deftext= concat-   [ [ "package " ++ packageBase ++ "; // Java Package generated by the BNF Converter."+   [ [ "package " ++ packageBase ++ ";"      , ""      , "public class AbsynDef {"      , ""
src/BNFC/Backend/Java/CFtoJavaPrinter15.hs view
@@ -33,7 +33,6 @@ import Data.Char      ( toLower, isSpace ) import Data.Either    ( lefts ) import Data.List      ( intersperse )-import Data.Maybe     ( isJust )  import BNFC.CF import BNFC.PrettyPrint
src/BNFC/Backend/Java/CFtoVisitSkel15.hs view
@@ -45,7 +45,7 @@     header = unlines [       "package" +++ packageBase ++ ";",       "",-      "/*** BNFC-Generated Visitor Design Pattern Skeleton. ***/",+      "/*** Visitor Design Pattern Skeleton. ***/",       "",       "/* This implements the common visitor design pattern.",       "   Tests show it to be slightly less efficient than the",
src/BNFC/Backend/Java/RegToAntlrLexer.hs view
@@ -2,7 +2,7 @@  -- modified from RegToJLex.hs -import Data.Char (ord, showLitChar)+import Data.Char (ord) import Numeric (showHex)  import BNFC.Abs
src/BNFC/Backend/Java/RegToJLex.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE LambdaCase #-}+ module BNFC.Backend.Java.RegToJLex (printRegJLex, escapeChar) where  import Data.Char           (ord, showLitChar)
src/BNFC/Backend/Java/Utils.hs view
@@ -4,6 +4,11 @@ import BNFC.Utils ( mkName, NameStyle(..)) import BNFC.Backend.Common.NamedVariables +-- | Make a Java line comment++comment :: String -> String+comment = ("// " ++)+ javaReserved =   [ "abstract"   , "assert"
src/BNFC/Backend/Latex.hs view
@@ -24,7 +24,7 @@ makeLatex :: SharedOptions -> CF -> Backend makeLatex opts cf = do     let texfile = name <.> "tex"-    mkfile texfile (cfToLatex name cf)+    mkfile texfile comment (cfToLatex name cf)     Makefile.mkMakefile opts (makefile texfile)   where name = lang opts @@ -58,6 +58,9 @@         auxfile = replaceExtension texfile "aux"         logfile = replaceExtension texfile "log" +comment :: String -> String+comment = ("%% " ++)+ -- | Create content of .tex file. cfToLatex :: String -> CF -> String cfToLatex name cf = unlines@@ -275,8 +278,7 @@  beginDocument :: String -> String beginDocument name = unlines- [ "%This Latex file is machine-generated by the BNF-converter"- , ""+ [ ""  , "\\documentclass[a4paper,11pt]{article}"  , "\\usepackage[T1]{fontenc}"  , "\\usepackage[utf8x]{inputenc}"
src/BNFC/Backend/OCaml.hs view
@@ -11,21 +11,23 @@  import System.FilePath (pathSeparator, (</>)) -import BNFC.Backend.Base hiding (Backend)+import BNFC.Backend.Base                    (MkFiles, mkfile) import BNFC.Backend.Common.Makefile import BNFC.Backend.OCaml.CFtoOCamlAbs import BNFC.Backend.OCaml.CFtoOCamlLex import BNFC.Backend.OCaml.CFtoOCamlPrinter import BNFC.Backend.OCaml.CFtoOCamlShow import BNFC.Backend.OCaml.CFtoOCamlTemplate-import BNFC.Backend.OCaml.CFtoOCamlTest+import BNFC.Backend.OCaml.CFtoOCamlTest     (ocamlTestfile) import BNFC.Backend.OCaml.CFtoOCamlYacc-import BNFC.Backend.XML+import BNFC.Backend.XML                     (makeXML) import BNFC.CF import BNFC.Options import BNFC.PrettyPrint import BNFC.Utils +import qualified BNFC.Backend.C as C+ -- naming conventions  noLang :: SharedOptions -> String -> String@@ -78,21 +80,24 @@       prMod  = printerFileM opts       showMod = showFileM opts   do-    mkfile (absFile opts) $ cf2Abstract absMod cf-    mkfile (ocamllexFile opts) $ cf2ocamllex lexMod parMod cf-    mkfile (ocamlyaccFile opts) $-                 cf2ocamlyacc parMod absMod lexMod  cf-    mkfile (templateFile opts) $ cf2Template (templateFileM opts) absMod cf-    mkfile (printerFile opts)  $ cf2Printer prMod absMod cf-    mkfile (showFile opts)  $ cf2show showMod absMod cf-    mkfile (tFile opts) $ ocamlTestfile absMod lexMod parMod prMod showMod cf-    mkfile (utilFile opts) utilM+    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+    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 (utilFile opts)      comment $ utilM     mkMakefile opts $ makefile opts     case xml opts of       2 -> makeXML opts True cf       1 -> makeXML opts False cf       _ -> return () +comment :: String -> String+comment x = unwords [ "(*", x, "*)" ]+ pkgToDir :: String -> FilePath pkgToDir = replace '.' pathSeparator @@ -140,9 +145,7 @@  utilM :: String utilM = unlines-    ["(* automatically generated by BNFC *)",-     "",-     "open Lexing",+    ["open Lexing",      "",      "(* this should really be in the parser, but ocamlyacc won't put it in the .mli *)",      "exception Parse_error of Lexing.position * Lexing.position"
src/BNFC/Backend/OCaml/CFtoOCamlAbs.hs view
@@ -20,10 +20,7 @@ -- to produce an OCaml module cf2Abstract :: String -> CF -> String cf2Abstract _ cf = unlines $ concat-  [ [ "(* OCaml module generated by the BNF converter *)"-    , ""-    ]-  , mutualRecDefs $ concat+  [ mutualRecDefs $ concat     [ map (prSpecialData cf) (specialCats cf)     , map prData (cf2data cf)     ]@@ -40,7 +37,7 @@ definedRules :: CF -> [String] definedRules cf = map mkDef $ definitions cf   where-    mkDef (Define f args e t) =+    mkDef (Define f args e _) =       "let " ++ sanitizeOcaml (funName f) ++ " " ++ mkTuple (map fst args) ++ " = " ++ ocamlExp False e      ocamlExp :: Bool -> Exp -> String
src/BNFC/Backend/OCaml/CFtoOCamlLex.hs view
@@ -37,7 +37,7 @@  header :: String -> CF -> [String] header parserMod cf = List.intercalate [""] . filter (not . null) $ concat-  [ [ [ "(* This ocamllex file was machine-generated by the BNF converter *)"+  [ [ [ "(* Lexer definition for ocamllex. *)"       , ""       , "(* preamble *)"       , "{"@@ -199,7 +199,7 @@     , ( "'\\'' (([^ '\\\'' '\\\\']) | ('\\\\' ('\\\\' | '\\\'' | 'n' | 't' | 'r'))) '\\\''"       , "TOK_Char (lexeme lexbuf).[1]")     -- spaces-    , ( "[' ' '\\t']", "token lexbuf")+    , ( "[' ' '\\t' '\\r']", "token lexbuf")     -- new lines     , ( "'\\n'", "incr_lineno lexbuf; token lexbuf" )     -- end of file
src/BNFC/Backend/OCaml/CFtoOCamlPrinter.hs view
@@ -39,7 +39,7 @@  prologue :: String prologue = unlines [-  "(* pretty-printer generated by the BNF converter *)",+  "(* pretty-printer *)",   "",   "open Printf",   "",@@ -174,9 +174,10 @@ --   mkListRule rs = unlines $ ("and prt" ++ fixTypeUpper cat ++ "ListBNFC" +++ "_ es : doc = match es with"):rs  ifList :: CF -> Cat -> String-ifList cf cat = render $-  case cases of-    []         -> empty+ifList cf cat+  | null rules = ""+  | otherwise  = render $ case cases of+    []         -> empty  -- IMPOSSIBLE CASE when (rules /= [])     first:rest -> vcat         [ "and prt" <> text (fixTypeUpper cat)  <> "ListBNFC i es : doc = match (i, es) with"         , nest 4 first@@ -184,39 +185,53 @@         ]   where     rules = sortBy compareRules $ rulesForNormalizedCat cf (ListCat cat)-    cases = [ d | r <- rules, let d = mkPrtListCase r, not (isEmpty d) ]-+    cases = concat+      [ [ "(_,[]) -> (concatD [])" | not $ any isNilFun rules ]+            -- Andreas, 2021-09-22, issue #386+            -- If the list is @nonempty@ according to the grammar, still add a nil case.+            -- In the AST it is simply a list, and the AST could be created+            -- by other means than by parsing.+      , [ d | r <- rules, let d = mkPrtListCase minPrec r, not (isEmpty d) ]+      ]+    -- Andreas, 2021-09-22, issue #384:+    -- The minimum precedence of a rule lhs category in the rules set.+    -- This is considered the default precedence; used to make the printing function total.+    minPrec = minimum $ map precRule rules  -- | Pattern match on the list constructor and the coercion level ----- >>> mkPrtListCase (npRule "[]" (ListCat (Cat "Foo")) [] Parsable)+-- >>> mkPrtListCase 0 (npRule "[]" (ListCat (Cat "Foo")) [] Parsable) -- (_,[]) -> (concatD []) ----- >>> mkPrtListCase (npRule "(:[])" (ListCat (Cat "Foo")) [Left (Cat "Foo")] Parsable)+-- >>> mkPrtListCase 0 (npRule "(:[])" (ListCat (Cat "Foo")) [Left (Cat "Foo")] Parsable) -- (_,[x]) -> (concatD [prtFoo 0 x]) ----- >>> mkPrtListCase (npRule "(:)" (ListCat (Cat "Foo")) [Left (Cat "Foo"), Left (ListCat (Cat "Foo"))] Parsable)+-- >>> mkPrtListCase 0 (npRule "(:)" (ListCat (Cat "Foo")) [Left (Cat "Foo"), Left (ListCat (Cat "Foo"))] Parsable) -- (_,x::xs) -> (concatD [prtFoo 0 x ; prtFooListBNFC 0 xs]) ----- >>> mkPrtListCase (npRule "[]" (ListCat (CoercCat "Foo" 2)) [] Parsable)+-- >>> mkPrtListCase 0 (npRule "[]" (ListCat (CoercCat "Foo" 2)) [] Parsable) -- (2,[]) -> (concatD []) ----- >>> mkPrtListCase (npRule "(:[])" (ListCat (CoercCat "Foo" 2)) [Left (CoercCat "Foo" 2)] Parsable)+-- >>> mkPrtListCase 0 (npRule "(:[])" (ListCat (CoercCat "Foo" 2)) [Left (CoercCat "Foo" 2)] Parsable) -- (2,[x]) -> (concatD [prtFoo 2 x]) ----- >>> mkPrtListCase (npRule "(:)" (ListCat (CoercCat "Foo" 2)) [Left (CoercCat "Foo" 2), Left (ListCat (CoercCat "Foo" 2))] Parsable)--- (2,x::xs) -> (concatD [prtFoo 2 x ; prtFooListBNFC 2 xs])+-- >>> mkPrtListCase 2 (npRule "(:)" (ListCat (CoercCat "Foo" 2)) [Left (CoercCat "Foo" 2), Left (ListCat (CoercCat "Foo" 2))] Parsable)+-- (_,x::xs) -> (concatD [prtFoo 2 x ; prtFooListBNFC 2 xs]) ---mkPrtListCase :: Rule -> Doc-mkPrtListCase (Rule f (WithPosition _ (ListCat c)) rhs _)+mkPrtListCase+  :: Integer -- ^ The lowest precedence of a lhs in a list rule.  Default: 0.+  -> Rule    -- ^ The list rule.+  -> Doc+mkPrtListCase minPrec (Rule f (WithPosition _ (ListCat c)) rhs _)   | isNilFun f  = parens (precPattern <> "," <> "[]") <+> "->" <+> body   | isOneFun f  = parens (precPattern <> "," <> "[x]") <+> "->" <+> body   | isConsFun f = parens (precPattern <> "," <>"x::xs") <+> "->" <+> body   | otherwise = empty -- (++) constructor   where-    precPattern = case precCat c of 0 -> "_" ; p -> integer p+    precPattern = if p <= minPrec then "_" else integer p+    p = precCat c     body = text $ mkRhs ["x", "xs"] rhs-mkPrtListCase _ = error "mkPrtListCase undefined for non-list categories"+mkPrtListCase _ _ = error "mkPrtListCase undefined for non-list categories"  mkRhs args its =   "(concatD [" ++ unwords (intersperse ";" (mk args its)) ++ "])"
src/BNFC/Backend/OCaml/CFtoOCamlShow.hs view
@@ -32,7 +32,7 @@  prologue :: String prologue = unlines [-  "(* show functions generated by the BNF converter *)\n",+  "(* show functions *)",   "",   "(* use string buffers for efficient string concatenations *)",   "type showable = Buffer.t -> unit",
src/BNFC/Backend/OCaml/CFtoOCamlTemplate.hs view
@@ -23,7 +23,6 @@ cf2Template skelName absName cf = unlines   [   "module "++ skelName ++ " = struct\n",-  "(* OCaml module generated by the BNF converter *)\n",   "open " ++ absName ++ "\n",   "type result = string\n",   "let failure x = failwith \"Undefined case.\" (* x discarded *)\n",
src/BNFC/Backend/OCaml/CFtoOCamlTest.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}  {-     BNF Converter: Generate main/test module for OCaml@@ -40,9 +41,7 @@           ]         topType     = text (fixTypeQual absM $ normCat cat)     in vcat-        [ comment "automatically generated by the BNF Converter"-        , ""-        , "open Lexing"+        [ "open Lexing"         , ""         , "let parse (c : in_channel) :" <+> topType <+> "="         , nest 4 (parserName <+> lexerName <+> "(Lexing.from_channel c)")@@ -74,8 +73,13 @@             , nest 4 $ vcat                 [ "Printf.printf \"Parse error at %d.%d-%d.%d\\n\""                 , nest 4 $ vcat-                    [ "start_pos.pos_lnum (start_pos.pos_cnum - start_pos.pos_bol)"-                    , "end_pos.pos_lnum (end_pos.pos_cnum - end_pos.pos_bol);" ]+                    -- Andreas, 2021-09-16, issue #380:+                    -- To have column counting start with 1 (and not with 0), we have to+                    -- add 1 to the difference between current offset and the offset of the+                    -- beginning of the line.+                    -- See e.g. https://github.com/let-def/ocamllex/blob/e5c8421f8fe56017e9b4e58c3496356631843802/lexer.mll#L54+                    [ "start_pos.pos_lnum (start_pos.pos_cnum - start_pos.pos_bol + 1)"+                    , "end_pos.pos_lnum (end_pos.pos_cnum - end_pos.pos_bol + 1);" ]                 , "exit 1" ]]         , ";;"         , ""
src/BNFC/Backend/OCaml/CFtoOCamlYacc.hs view
@@ -18,7 +18,8 @@ import Data.Foldable (toList)  import BNFC.CF-import BNFC.Utils ((+++))+import BNFC.Options ( OCamlParser(..) )+import BNFC.Utils   ( (+++) ) import BNFC.Backend.Common import BNFC.Backend.OCaml.OCamlUtil @@ -30,19 +31,19 @@  -- The main function, that given a CF -- generates a ocamlyacc module.-cf2ocamlyacc :: String -> String -> String -> CF -> String-cf2ocamlyacc name absName lexName cf+cf2ocamlyacc :: OCamlParser -> String -> String -> String -> CF -> String+cf2ocamlyacc ocamlParser name absName lexName cf  = unlines     [header name absName lexName cf,     declarations absName cf,     "%%",-    rules cf+    rules ocamlParser cf     ]   header :: String -> String -> String -> CF -> String-header _ absName _ cf = unlines-         ["/* This ocamlyacc file was machine-generated by the BNF converter */",+header _ absName _ _ = unlines+         ["/* Parser definition for use with ocamlyacc */",           "%{",           "open " ++ absName,           "open Lexing",@@ -133,18 +134,33 @@                     [] -> []                     c:cs -> toUpper c : cs -entryPointRules :: CF -> String-entryPointRules cf = unlines $ map mkRule $ toList $ allEntryPoints cf-    where-        mkRule :: Cat -> String-        mkRule s = unlines [-            epName s ++ " : " ++ nonterminal s ++ " TOK_EOF { $1 }",-            "  | error { raise (BNFC_Util.Parse_error (Parsing.symbol_start_pos (), Parsing.symbol_end_pos ())) };"-            ]+entryPointRules :: OCamlParser -> CF -> String+entryPointRules ocamlParser cf =+  unlines $ map 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"+      , ")) };"+      ]+    ] -rules :: CF -> String-rules cf = unlines [-    entryPointRules cf,+rules :: OCamlParser -> CF -> String+rules ocamlParser cf = unlines [+    entryPointRules ocamlParser cf,     (unlines $ map (prOne . mkOne) (ruleGroups cf)),     specialRules cf     ]
src/BNFC/Backend/Pygments.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}  {- Generates a Pygments lexer from a BNF grammar.  -@@ -23,9 +24,12 @@ makePygments opts cf = do     let lexerfile = render (lowerCase name <> "/__init__.py")         setupfile = "setup.py"-    mkfile lexerfile (lexer name cf)-    mkfile setupfile (setup name)+    mkfile lexerfile comment (lexer name cf)+    mkfile setupfile comment (setup name)   where name = lang opts++comment :: String -> String+comment = ("# " ++)  setup :: String -> Doc setup name = vcat
src/BNFC/Backend/Txt2Tag.hs view
@@ -4,8 +4,10 @@  -} -module BNFC.Backend.Txt2Tag (cfToTxt)where+{-# LANGUAGE LambdaCase #-} +module BNFC.Backend.Txt2Tag (cfToTxt, t2tComment) where+ import qualified Data.List as List  import BNFC.Abs (Reg (..))@@ -201,7 +203,6 @@  "BNF Converter",  "",  "",- "%This txt2tags file is machine-generated by the BNF-converter",  "%Process by txt2tags to generate html or latex",  ""  ]@@ -227,3 +228,6 @@   ifPar i j s = if i > j then "(" ++ s ++ ")" else s  quote s = "``" ++ s ++ "``"++t2tComment :: String -> String+t2tComment = ("%% " ++)
src/BNFC/Backend/XML.hs view
@@ -4,6 +4,9 @@  -} +{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}+ module BNFC.Backend.XML ---- (cf2DTD, cf2XML)   where @@ -15,20 +18,21 @@ import BNFC.CF import BNFC.PrettyPrint import BNFC.Utils-import BNFC.Backend.Base-import BNFC.Options hiding ( Backend )+import BNFC.Backend.Base (Backend, mkfile)+import BNFC.Options (SharedOptions(..), pattern TargetHaskellGadt) import BNFC.Backend.Haskell.CFtoTemplate () import BNFC.Backend.Haskell.HsOpts ( xmlFile, xmlFileM, absFileM ) import BNFC.Backend.Haskell.Utils  ( catToVar )+import qualified BNFC.Backend.Haskell.Utils as Haskell  type Coding = Bool ---- change to at least three values  makeXML :: SharedOptions -> Coding -> CF -> Backend makeXML opts typ cf = do   let name = lang opts-  mkfile (name ++ ".dtd") $ cf2DTD typ name cf+  mkfile (name ++ ".dtd") comment $ cf2DTD typ name cf   let absmod = "XML" ++ name-  mkfile (xmlFile opts) $ cf2XMLPrinter typ opts absmod cf+  mkfile (xmlFile opts) Haskell.comment $ cf2XMLPrinter typ opts absmod cf  -- derive a DTD from a BNF grammar. AR 21/8/2004 cf2DTD :: Coding -> String -> CF -> String@@ -44,6 +48,9 @@   "]>"   ] +comment :: String -> String+comment x = unwords [ "<!--", x, "-->" ]+ -- | >>> tag "test" -- "<test>" tag :: String -> String@@ -148,7 +155,7 @@  prologue :: Bool -> SharedOptions -> String -> String prologue b opts _ = unlines [-  "-- pretty-printer generated by the BNF converter",+  "-- Pretty printing to XML",   "",   "module " ++ xmlFileM opts +++ "where",   "",
src/BNFC/CF.hs view
@@ -23,9 +23,9 @@ import Data.Ord      ( Down(..) ) import qualified Data.Either as Either import Data.Function ( on )-import Data.List     ( nub, intersperse, sort, group, intercalate, find )+import Data.List     ( nub, sort, group ) import qualified Data.List as List-import Data.List.NonEmpty (pattern (:|), (<|))+import Data.List.NonEmpty (pattern (:|)) import qualified Data.List.NonEmpty as List1 import Data.Maybe import Data.Map  (Map)@@ -40,7 +40,7 @@ import qualified BNFC.Abs as Abs  import BNFC.PrettyPrint-import BNFC.Utils (headWithDefault, spanEnd)+import BNFC.Utils (spanEnd)  type List1 = List1.NonEmpty 
src/BNFC/Check/EmptyTypes.hs view
@@ -12,11 +12,9 @@  import Data.Maybe import Data.Map (Map)-import Data.Set (Set)  import qualified Data.List as List import qualified Data.Map as Map-import qualified Data.Set as Set  import BNFC.CF 
+ src/BNFC/Lex.hs view
@@ -0,0 +1,596 @@+{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-}+{-# LANGUAGE CPP,MagicHash #-}+{-# LINE 5 "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 73 "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/Lex.x view
@@ -1,5 +1,6 @@--- -*- haskell -*---- This Alex file was machine-generated by the BNF converter+-- -*- haskell -*- File generated by the BNF Converter (bnfc 2.9.3).++-- Lexer definition for use with Alex 3 { {-# OPTIONS -fno-warn-incomplete-patterns #-} {-# OPTIONS_GHC -w #-}
src/BNFC/Options.hs view
@@ -6,7 +6,7 @@  module BNFC.Options   ( Mode(..), Target(..), Backend-  , parseMode, usage, help+  , parseMode, usage, help, versionString   , SharedOptions(..)   , defaultOptions, isDefault, printOptions   , AlexVersion(..), HappyMode(..), OCamlParser(..), JavaLexerParser(..)@@ -394,9 +394,12 @@  -- ~~~ Help strings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +versionString :: String+versionString = showVersion version+ title :: [String] title =-  [ "The BNF Converter, " ++ showVersion version ++ " (c) 2002-today BNFC development team."+  [ "The BNF Converter, " ++ versionString ++ " (c) 2002-today BNFC development team."   , "Free software under the BSD 3-clause license."   , "List of recent contributors at https://github.com/BNFC/bnfc/graphs/contributors."   , "Report bugs at https://github.com/BNFC/bnfc/issues."
+ src/BNFC/Par.hs view
@@ -0,0 +1,1604 @@+{-# OPTIONS_GHC -w #-}+{-# OPTIONS -XMagicHash -XBangPatterns -XTypeSynonymInstances -XFlexibleInstances -cpp #-}+#if __GLASGOW_HASKELL__ >= 710+{-# OPTIONS_GHC -XPartialTypeSignatures #-}+#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.20.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+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- $Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp $++++++++++++++-- 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++++++++++++++++++++data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList+++++++++++++++++++++++++++++++++++++++++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 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =+        happyReturn1 ans+happyAccept j tk st sts (HappyStk ans _) = +        (happyTcHack j (happyTcHack st)) (happyReturn1 ans)++-----------------------------------------------------------------------------+-- Arrays only: do the next action++++happyDoAction i tk st+        = {- nothing -}+          case action of+                0#           -> {- nothing -}+                                     happyFail (happyExpListPerState ((Happy_GHC_Exts.I# (st)) :: Prelude.Int)) i tk st+                -1#          -> {- nothing -}+                                     happyAccept i tk st+                n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}+                                                   (happyReduceArr Happy_Data_Array.! rule) i tk st+                                                   where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))+                n                 -> {- nothing -}+                                     happyShift new_state i tk st+                                     where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))+   where off    = happyAdjustOffset (indexShortOffAddr happyActOffsets st)+         off_i  = (off Happy_GHC_Exts.+# i)+         check  = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#))+                  then EQ(indexShortOffAddr happyCheck off_i, i)+                  else Prelude.False+         action+          | check     = indexShortOffAddr happyTable off_i+          | Prelude.otherwise = indexShortOffAddr happyDefActions st+++++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#+++++{-# INLINE happyLt #-}+happyLt x y = LT(x,y)+++readArrayBit arr bit =+    Bits.testBit (Happy_GHC_Exts.I# (indexShortOffAddr arr ((unbox_int bit) `Happy_GHC_Exts.iShiftRA#` 4#))) (bit `Prelude.mod` 16)+  where unbox_int (Happy_GHC_Exts.I# x) = x+++++++data HappyAddr = HappyA# Happy_GHC_Exts.Addr#+++-----------------------------------------------------------------------------+-- HappyState data type (not arrays)++++++++++++++-----------------------------------------------------------------------------+-- Shifting a token++happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =+     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+--     trace "shifting the error token" $+     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)++happyShift new_state i tk st sts stk =+     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)++-- happyReduce is specialised for the common cases.++happySpecReduce_0 i fn 0# tk st sts stk+     = happyFail [] 0# tk st sts stk+happySpecReduce_0 nt fn j tk st@((action)) sts stk+     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)++happySpecReduce_1 i fn 0# tk st sts stk+     = happyFail [] 0# tk st sts stk+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')+     = let r = fn v1 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_2 i fn 0# tk st sts stk+     = happyFail [] 0# tk st sts stk+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')+     = let r = fn v1 v2 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_3 i fn 0# tk st sts stk+     = happyFail [] 0# tk st sts stk+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')+     = let r = fn v1 v2 v3 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happyReduce k i fn 0# tk st sts stk+     = happyFail [] 0# tk st sts stk+happyReduce k nt fn j tk st sts stk+     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of+         sts1@((HappyCons (st1@(action)) (_))) ->+                let r = fn stk in  -- it doesn't hurt to always seq here...+                happyDoSeq r (happyGoto nt j tk st1 sts1 r)++happyMonadReduce k nt fn 0# tk st sts stk+     = happyFail [] 0# tk st sts stk+happyMonadReduce k nt fn j tk st sts stk =+      case happyDrop k (HappyCons (st) (sts)) of+        sts1@((HappyCons (st1@(action)) (_))) ->+          let drop_stk = happyDropStk k stk in+          happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))++happyMonad2Reduce k nt fn 0# tk st sts stk+     = happyFail [] 0# tk st sts stk+happyMonad2Reduce k nt fn j tk st sts stk =+      case happyDrop k (HappyCons (st) (sts)) of+        sts1@((HappyCons (st1@(action)) (_))) ->+         let drop_stk = happyDropStk k stk++             off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st1)+             off_i = (off Happy_GHC_Exts.+# nt)+             new_state = indexShortOffAddr happyTable off_i+++++          in+          happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))++happyDrop 0# l = l+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t++happyDropStk 0# l = l+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs++-----------------------------------------------------------------------------+-- Moving to a new state after a reduction+++happyGoto nt j tk st = +   {- nothing -}+   happyDoAction j tk new_state+   where off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st)+         off_i = (off Happy_GHC_Exts.+# nt)+         new_state = indexShortOffAddr happyTable off_i+++++-----------------------------------------------------------------------------+-- Error recovery (ERROR_TOK is the error token)++-- parse error if we are in recovery and we fail again+happyFail explist 0# tk old_st _ stk@(x `HappyStk` _) =+     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) 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 (action) sts stk =+--      trace "entering error recovery" $+        happyDoAction 0# tk action sts ((Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (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+++happyTcHack :: Happy_GHC_Exts.Int# -> a -> a+happyTcHack x y = y+{-# INLINE happyTcHack #-}+++-----------------------------------------------------------------------------+-- 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.+++{-# NOINLINE happyDoAction #-}+{-# NOINLINE happyTable #-}+{-# NOINLINE happyCheck #-}+{-# NOINLINE happyActOffsets #-}+{-# NOINLINE happyGotoOffsets #-}+{-# NOINLINE happyDefActions #-}++{-# 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/Par.y view
@@ -1,4 +1,6 @@--- This Happy file was machine-generated by the BNF converter+-- -*- haskell -*- File generated by the BNF Converter (bnfc 2.9.3).++-- Parser definition for use with Happy { {-# OPTIONS_GHC -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-} {-# LANGUAGE PatternSynonyms #-}
src/BNFC/Print.hs view
@@ -1,3 +1,5 @@+-- File generated by the BNF Converter (bnfc 2.9.3).+ {-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE LambdaCase #-}@@ -8,7 +10,6 @@ {-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}  -- | Pretty-printer for BNFC.---   Generated by the BNF converter.  module BNFC.Print where @@ -44,13 +45,14 @@   rend i p = \case       "["      :ts -> char '[' . rend i False ts       "("      :ts -> char '(' . rend i False ts-      "{"      :ts -> onNewLine i     p . showChar '{'    . new (i+1) ts+      "{"      :ts -> onNewLine i     p . showChar   '{'  . new (i+1) ts       "}" : ";":ts -> onNewLine (i-1) p . showString "};" . new (i-1) ts-      "}"      :ts -> onNewLine (i-1) p . showChar '}'    . new (i-1) ts+      "}"      :ts -> onNewLine (i-1) p . showChar   '}'  . new (i-1) ts       [";"]        -> char ';'       ";"      :ts -> char ';' . new i ts-      t  : ts@(s:_) | closingOrPunctuation s -> showString t . rend i False ts-      t        :ts -> pending . space t . rend i False ts+      t  : ts@(s:_) | closingOrPunctuation s+                   -> pending . showString t . rend i False ts+      t        :ts -> pending . space t      . rend i False ts       []           -> id     where     -- Output character after pending indentation.
src/BNFC/Utils.hs view
@@ -37,14 +37,13 @@  import Data.Char import Data.List          (intercalate)-import Data.List.NonEmpty (pattern (:|), (<|))+import Data.List.NonEmpty (pattern (:|)) import Data.Map           (Map) import Data.Semigroup     (Semigroup(..)) import Data.Time  import qualified Data.Foldable      as Fold import qualified Data.Map           as Map-import qualified Data.Set           as Set import qualified Data.List.NonEmpty as List1  import System.IO       (IOMode(ReadMode),hClose,hGetContents,openFile)
+ 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,33 @@+resolver: ghc-9.0.1+compiler: ghc-9.0.1+# 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.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:-- .
test/BNFC/Backend/BaseSpec.hs view
@@ -3,6 +3,8 @@  module BNFC.Backend.BaseSpec where +import Data.List (isInfixOf)+ import System.Directory import System.IO.Temp (withSystemTempDirectory) @@ -14,12 +16,16 @@  spec :: Spec spec = do+  -- -- Andreas, 2021-07-17+  -- -- I don't really believe in these unit tests; important are system tests.+  -- -- So I am not putting in much energy to maintain them.   describe "Backend monad" $ do     it "empty computation generates empty list of files" $       execBackend (return ()) `shouldReturn` []-    it "returns the file created using mkfile" $-      execBackend (mkfile "test.txt" "abcd")-        `shouldReturn` [("test.txt", "abcd\n")]+    -- -- Test broken: mkfile also puts the BNFC signature containing the version number.+    -- it "returns the file created using mkfile" $+    --   execBackend (mkfile "test.txt" "abcd")+    --     `shouldReturn` [("test.txt", "abcd\n")]   describe "writeFiles" $ do     it "creates the root directory if it doesn't exists" $       withSystemTempDirectory "bnfc-test" $ \tmpdir -> do@@ -29,23 +35,23 @@     it "creates a file from the bucket" $       withSystemTempDirectory "bnfc-test" $ \tmpdir -> do         setCurrentDirectory tmpdir-        writeFiles "." (mkfile "file.txt" "")+        writeFiles "." (mkfile "file.txt" id "")         doesFileExist "file.txt"       `shouldReturn` True     it "put the right content in the file" $       withSystemTempDirectory "bnfc-test" $ \tmpdir -> do         setCurrentDirectory tmpdir-        writeFiles "." (mkfile "file.txt" "abcd")-        readFile "file.txt"-      `shouldReturn` "abcd\n"+        writeFiles "." (mkfile "file.txt" id "abcd")+        readFile "file.txt" >>=+          (`shouldSatisfy` isInfixOf "abcd\n")     it "creates subdirectories" $       withSystemTempDirectory "bnfc-test" $ \tmpdir -> do         setCurrentDirectory tmpdir-        writeFiles "." (mkfile "subdir/file.txt" "abcd")+        writeFiles "." (mkfile "subdir/file.txt" id "abcd")         doesDirectoryExist "subdir"       `shouldReturn` True     it "creates files in the root directory" $       withSystemTempDirectory "bnfc-test" $ \tmpdir -> do         setCurrentDirectory tmpdir-        writeFiles "root/" (mkfile "foo/bar.txt" "abcd")+        writeFiles "root/" (mkfile "foo/bar.txt" id "abcd")         doesFileExist "root/foo/bar.txt" `shouldReturn` True
test/BNFC/Backend/Common/MakefileSpec.hs view
@@ -1,8 +1,10 @@+{-# LANGUAGE LambdaCase #-}+ module BNFC.Backend.Common.MakefileSpec where  import Test.Hspec -import BNFC.Backend.Base (execBackend)+import BNFC.Backend.Base (GeneratedFile(..), execBackend) import BNFC.Options (defaultOptions,make) import BNFC.Backend.Common.Makefile -- SUT @@ -11,4 +13,8 @@   describe "mkMakefile" $ do     it "uses the names in the options dictionary" $       let opts = defaultOptions { make = Just "MyMakefile" } in-      execBackend (mkMakefile opts (const "")) `shouldReturn` [("MyMakefile","")]+      execBackend (mkMakefile opts (const "")) >>=+        (`shouldSatisfy` \case+           [ GeneratedFile "MyMakefile" _ "" ] -> True+           _ -> False+        )
test/BNFC/Backend/HaskellSpec.hs view
@@ -23,12 +23,12 @@     it "generates a file called AbsCalc.hs" $ do       calc <- getCalc       files <- execBackend (makeHaskell calcOptions calc)-      map fst files `shouldSatisfy` elem "AbsCalc.hs"+      map fileName files `shouldSatisfy` elem "AbsCalc.hs"      it "generates a file called LexCalc.x" $ do       calc <- getCalc       files <- execBackend (makeHaskell calcOptions calc)-      map fst files `shouldSatisfy` elem "LexCalc.x"+      map fileName files `shouldSatisfy` elem "LexCalc.x"      it "generates a file called ParCalc.y" $ do       calc <- getCalc
test/BNFC/Hspec.hs view
@@ -18,6 +18,6 @@   -> Expectation backend `shouldGenerate` file = do   files <- execBackend backend-  let filenames = map fst files+  let filenames = map fileName files   file `elem` filenames     @? printf "file %s not found in %s" file (show filenames)