packages feed

BNFC 2.8.2 → 2.8.3

raw patch · 91 files changed

+19221/−6269 lines, 91 filesdep +semigroupsdep +timedep ~basedep ~mtlPVP ok

version bump matches the API change (PVP)

Dependencies added: semigroups, time

Dependency ranges changed: base, mtl

API changes (from Hackage documentation)

Files

BNFC.cabal view
@@ -1,9 +1,9 @@ Name: BNFC-Version: 2.8.2+Version: 2.8.3 cabal-version: >= 1.8 build-type: Simple category: Development-Copyright: (c) Andreas Abel, Kyle Butt, Jonas Almström Duregård, Krasimir Angelov, Jean-Philippe Bernardy, Bjorn Bringert, Johan Broberg, Paul Callaghan, Grégoire Détrez, Markus Forsberg, Ola Frid, Peter Gammie, Thomas Hallgren, Pascal Hof, Patrik Jansson, Kristofer Johannisson, Antti-Juhani Kaijanaho, Andreas Lööw, Kent Mein, Ulf Norell, Gabrielle Paganelli, Michael Pellauer and Aarne Ranta 2002 - 2018. Free software under GNU General Public License (GPL).+Copyright: (c) Andreas Abel, Jonas Almström Duregård, Krasimir Angelov, Jean-Philippe Bernardy, Bjorn Bringert, Johan Broberg, Kyle Butt, Paul Callaghan, Grégoire Détrez, Markus Forsberg, Ola Frid, Peter Gammie, Thomas Hallgren, Pascal Hof, Patrik Jansson, Kristofer Johannisson, Antti-Juhani Kaijanaho, Andreas Lööw, Justin Meiners, Kent Mein, Ulf Norell, Gabrielle Paganelli, Michael Pellauer, Fabian Ruch, and Aarne Ranta 2002 - 2019. Free software under GNU General Public License (GPL). License: GPL-2 License-File: LICENSE Maintainer: bnfc-dev@googlegroups.com@@ -12,24 +12,26 @@ Synopsis: A compiler front-end generator. Description:   The BNF Converter is a compiler construction tool generating a compiler front-end-  from a Labelled BNF grammar. It was originally written to generate Haskell,-  but can also be used for generating Java, C, C++, C#, Ocaml and XML.+  from a Labelled BNF grammar. It was originally written to generate Haskell code,+  but can also be used for generating Agda, C, C++, C#, Java, Ocaml and XML code.   .   Given a Labelled BNF grammar the tool produces:-  an abstract syntax as a Haskell, C, C++, C#, Ocaml module or Java directory,+  an abstract syntax as a Haskell, Agda, C, C++, C#, Ocaml module or Java directory,   a case skeleton for the abstract syntax in the same language,   an Alex, JLex, or Flex lexer generator file,   a Happy, CUP, Bison, or Antlr parser generator file,-  a pretty-printer as a Haskell, Java, C, C++, C#, or Ocaml module,+  a pretty-printer as a Haskell, Agda, C, C++, C#, Java, or Ocaml module,   an XML representation,-  a Latex file containing a readable specification of the language.+  a LaTeX file containing a readable specification of the language. tested-with: GHC == 7.6.3            , GHC == 7.8.4            , GHC == 7.10.3            , GHC == 8.0.2            , GHC == 8.2.2            , GHC == 8.4.4-Extra-source-files: src/BNF.cf TODO changelog Makefile+           , GHC == 8.6.5+           , GHC == 8.8.1+Extra-source-files: src/BNF.cf changelog Makefile  Source-repository head   type: git@@ -50,6 +52,7 @@ Executable bnfc   Build-Depends:     base>=4.6 && <5,+    semigroups,     mtl,     directory,     array,@@ -57,7 +60,8 @@     containers,     pretty >=1.1 && <1.2,     filepath,-    deepseq+    deepseq,+    time   build-tools:         alex, happy   Main-is: Main.hs   HS-source-dirs: compat src@@ -145,17 +149,17 @@     BNFC.Backend.C.CFtoBisonC     BNFC.Backend.C.CFtoFlexC     BNFC.Backend.C.CFtoCAbs-    BNFC.Backend.CPP.NoSTL.CFtoCVisitSkel+    BNFC.Backend.C.RegToFlex      -- C++ backend     BNFC.Backend.CPP.PrettyPrinter     BNFC.Backend.CPP.Makefile     BNFC.Backend.CPP.Naming     BNFC.Backend.CPP.NoSTL-    BNFC.Backend.CPP.NoSTL.RegToFlex     BNFC.Backend.CPP.NoSTL.CFtoFlex     BNFC.Backend.CPP.NoSTL.CFtoBison     BNFC.Backend.CPP.NoSTL.CFtoCPPAbs+    BNFC.Backend.CPP.NoSTL.CFtoCVisitSkel      -- C++ STL backend     BNFC.Backend.CPP.STL@@ -198,12 +202,28 @@     -- Pygments backend     BNFC.Backend.Pygments +    -- Agda backend+    BNFC.Backend.Agda+ -- --- Testing -------------------------------------------------------------- Test-suite unit-tests   Type: exitcode-stdio-1.0-  Build-Depends: base>=4 && <5, mtl, directory, array, process, filepath, pretty,-                 hspec, QuickCheck >= 2.5, HUnit,-                 temporary, containers, deepseq+  Build-Depends:+    base>=4 && <5,+    semigroups,+    mtl,+    directory,+    array,+    process,+    filepath,+    pretty,+    hspec,+    QuickCheck >= 2.5,+    HUnit,+    temporary,+    containers,+    deepseq,+    time   Main-is: unit-tests.hs   HS-source-dirs: compat src test   extensions:@@ -311,17 +331,17 @@     BNFC.Backend.C.CFtoBisonC     BNFC.Backend.C.CFtoFlexC     BNFC.Backend.C.CFtoCAbs-    BNFC.Backend.CPP.NoSTL.CFtoCVisitSkel+    BNFC.Backend.C.RegToFlex      -- C++ backend     BNFC.Backend.CPP.PrettyPrinter     BNFC.Backend.CPP.Makefile     BNFC.Backend.CPP.Naming     BNFC.Backend.CPP.NoSTL-    BNFC.Backend.CPP.NoSTL.RegToFlex     BNFC.Backend.CPP.NoSTL.CFtoFlex     BNFC.Backend.CPP.NoSTL.CFtoBison     BNFC.Backend.CPP.NoSTL.CFtoCPPAbs+    BNFC.Backend.CPP.NoSTL.CFtoCVisitSkel      -- C++ STL backend     BNFC.Backend.CPP.STL@@ -363,6 +383,9 @@      -- Pygments backend     BNFC.Backend.Pygments++    -- Agda backend+    BNFC.Backend.Agda   Test-suite bnfc-doctests
Makefile view
@@ -1,31 +1,45 @@+# GHC major.minor+GHC_VERSION := $(shell ghc --numeric-version | cut -d. -f1-2) BNFC_VERSION=$(shell sed -ne "s/^[Vv]ersion: *\([0-9.]*\).*/\1/p" BNFC.cabal)  # Cabal options (to be overwritten from the command line)-CABAL_OPTS=+CABAL_OPTS           =+CABAL_BUILD_OPTS     = --builddir=dist-ghc-$(GHC_VERSION)+CABAL_CONFIGURE_OPTS = --enable-tests+CABAL_INSTALL_OPTS   = $(CABAL_CONFIGURE_OPTS) $(CABAL_BUILD_OPTS)+CABAL_TEST_OPTS      = $(CABAL_BUILD_OPTS) +CABAL                = cabal $(CABAL_OPTS)+CABAL_CONFIGURE      = $(CABAL) configure $(CABAL_CONFIGURE_OPTS)+CABAL_BUILD          = $(CABAL) build     $(CABAL_BUILD_OPTS)+CABAL_INSTALL        = $(CABAL) install   $(CABAL_INSTALL_OPTS)+CABAL_TEST           = $(CABAL) test      $(CABAL_TEST_OPTS)+ # Name for binary distribution (e.g. bnfc-2.4.5-linux32) BDIST_TAG=bnfc-${BNFC_VERSION}-$(shell uname -s)-$(shell uname -m) -.PHONY: build install doc test+.PHONY: default build install doc test bdist show-version debug TAGS -all: build+default: install test  build:-	cabal configure && cabal build+	$(CABAL_CONFIGURE) && $(CABAL_BUILD)  install:-	cabal install+	$(CABAL_INSTALL)  test:-	cabal configure --enable-tests-	cabal test+	$(CABAL_CONFIGURE)+	$(CABAL_TEST)  doc:-	cabal haddock --executables --internal+	$(CABAL) haddock --executables --internal +TAGS :+	hasktags --etags .+ # Binary package (tgz, for linux) bdist: dist/${BDIST_TAG}.tar.gz-.PHONY: bdist  dist/%.tar.gz: 	cabal clean@@ -41,3 +55,8 @@ # Print the bnfc version from the cabal file show-version: 	@echo ${BNFC_VERSION}++debug:+	@echo GHC_VERSION  = $(GHC_VERSION)+	@echo BNFC_VERSION = $(BNFC_VERSION)+# EOF
− TODO
@@ -1,112 +0,0 @@-Build:-- autoconf-  - verify Alex version.-- tidy up Makefiles a bit-  - and the generated ones too.-    - Use "Makefile" everywhere.-  - follow UNIX conventions...--Functionality:--- Add Bool type.--Bugs:-- Strange unicode space.-- Bison only supports 1 parser per input file.-- Write some clear docs on the Java backend.-- Java backend (and probably others)-  - Need to munge Java keywords like "abstract" "private"-    - Alfa.cf, C.cf fail to compile for this reason.-  - I think I fixed this, but it should be verified (peteg)-  - Add a message on how to run the test file (after a succesful compliation), -    e.g. :-    "to run the test, type : java JavaletteLight/Test <filename>"-Compilers:--- write a JavaCup script--Bug Reports:-----------------> Fail: formats/java/CFtoJavaPrinter.hs:269: Non-exhaustive patterns in function> getCons-  on Prolog.cf-  Reason: No separator for a list. The same happens in C and C++.--> In Skeleton.c the visit-functions for lists has the wrong variable for-> visiting the-> list elements. It says "visitNAME(LISTNAME->LISTNAME)" but it should be-> "visitNAME(LISTNAME->NAME)".->-> The parse tree printer and pretty printer writes a newline instead of "\n"-> for-> strings.----------------Java backend--If a terminal and non-terminal have the same name, there is a name clash in-the generarted .java files.--Solution: don't do this.-See C.cf for an example. Alfa.cf doesn't work either.--- "separator", etc. decs don't play nice.-  - the list stuff is emitted before the top-level non-terminal.-- need to specify which non-terminal is the top-level one.-  - i.e. a "start with" line must be present.-  - BNFC now crashes if you don't specify an "entrypoint" pragma,-    or use more than one.--Somewhere along the line of BNFC/jlex/jcup the BNFC comment-instruction-(comment "/*" "*/" ;) seems to fail. A file containing only an opening-of a comment manages to pass the parser without any trouble.-----------------Aarne, Java:--  to get "parse successful" is fast, but then it takes-  quite some time to pretty-print--  the parser gets confused with isolatin characters included-  in string literals--Michael:--http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html#SECTION2.2.14------------------Antti-Juhani Kaijanaho:--- A token UIdent declaration (see report) causes a mysterious parse-  error at end of file / perhaps conflicts with predefined Ident?-- If I use "\\/" in a production, Happy is unhappy (you use \/ as the-  Happy token)-- You generate Alex 1.x source.  Could you make it (optionally?)-  generate Alex 2.x source? <peteg: fixed>--Oh, and bnfc returns an exit code indicating success even when there is-an error.------------------Bjorn Bringert:--- Specifying coercions etc. for non-existing categories should-  probably be an error.-- Repeated identical rules should be an error.-- Java CUP back end does not support multiple entrypoints.------------------Software versions:--ghc 5.04.x--bison 1.875a-flex 2.5.31--alex 2.0-happy 1.13-----------------
changelog view
@@ -1,3 +1,20 @@+2.8.3 Andreas Abel <andreas.abel@gu.se>  August 2019+	* GHC 8.8 compatibility+	* Stack installation supported by provided .yaml files [#198]+	* Unicode support in lexer, excl. C, C++ and Ocaml [#249]+	* LBNF: support \r (carriage return) and \f (form feed) in token declaration [#257]+	* LBNF: allow numbered categories (like Foo2) independent of coercions [#210]+	* Agda: new (experimental) backend, providing bindings to AST/parser/printer of Haskell backend+	* C: supports now the -l option to give error locations [#238]+	* C: correct function names in generated skeletons [#239]+	* C, C++: handle regular expression difference (subtraction) correctly [#237]+	* Haskell: generates now more fine-grained Makefile that invokes bnfc on changed .cf file+	* Haskell: use qualified import of AST in generated printer [#128,#228]+	* Haskell: printer code no longer produces deprecation warning concerning OverlappingInstances [#233]+	* Haskell/CNF: fixed problem with Any type in generated code [#216]+	* Haskell/CNF: generated test program now same name (Test) as w/o --cnf+	* Haskell/GLR: correct module header in .y file [#252]+ 2.8.2 Andreas Abel <andreas.abel@gu.se>  November 2018 	* GHC 8.4 compatibility [#227,#236] 	* bnfc now puts current timestamp on all created files, even unchanged ones [#219]
dist/build/bnfc/bnfc-tmp/LexBNF.hs view
@@ -19,11 +19,11 @@ #endif #if __GLASGOW_HASKELL__ >= 503 import Data.Array-import Data.Array.Base (unsafeAt) #else import Array #endif #if __GLASGOW_HASKELL__ >= 503+import Data.Array.Base (unsafeAt) import GHC.Exts #else import GlaExts@@ -32,21 +32,21 @@ 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\x1c\x03\x00\x00\x0a\x01\x00\x00\x00\x00\x00\x00\x0d\x03\x00\x00\x0d\x04\x00\x00\xcd\x03\x00\x00\xcd\x04\x00\x00\x91\x05\x00\x00\xef\x05\x00\x00\x8d\x04\x00\x00\x00\x00\x00\x00\xa5\x05\x00\x00\xdb\xff\xff\xff\x47\x00\x00\x00\x5a\x00\x00\x00\xa5\x06\x00\x00\xa6\x06\x00\x00\x69\x07\x00\x00\x29\x07\x00\x00\x00\x00\x00\x00\x1f\x08\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\xf8\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x00\x00\xe7\x05\x00\x00\x7c\x00\x00\x00"#+  "\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\xb2\x0c\x00\x00\x72\x0c\x00\x00\x00\x00\x00\x00\x68\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\x41\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\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x21\x00\x25\x00\x16\x00\x1c\x00\x05\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x02\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x1f\x00\x21\x00\x00\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x22\x00\x21\x00\x00\x00\x21\x00\x00\x00\x21\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x21\x00\x03\x00\x21\x00\x00\x00\x21\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x20\x00\x21\x00\x21\x00\x01\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x03\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x03\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\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\x08\x00\x09\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\x19\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x01\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\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\x08\x00\x09\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\x04\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\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\x13\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\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x06\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\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\x0c\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x1a\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\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x00\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x24\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x10\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x00\x00\x0f\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x19\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x1a\x00\x04\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x13\x00\x07\x00\x0a\x00\x0a\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#+  "\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x36\x00\x3a\x00\x2b\x00\x31\x00\x05\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\x33\x00\x02\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x34\x00\x36\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x37\x00\x36\x00\x00\x00\x36\x00\x00\x00\x36\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x36\x00\x03\x00\x36\x00\x00\x00\x36\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x35\x00\x36\x00\x36\x00\x01\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\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\x33\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x2a\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x32\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\x2e\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\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\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x2f\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\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x39\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x2e\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x2f\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\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x20\x00\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x74\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\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\xc3\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\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\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\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\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\xff\xff\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\xff\xff\xff\xff\xc2\x00\xc3\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\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\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\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\xff\xff\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\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\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\xff\xff\xc2\x00\xc3\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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"#+  "\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x05\x00\x05\x00\x12\x00\x12\x00\x03\x00\x03\x00\xff\xff\x17\x00\xff\xff\x17\x00\x1b\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1c\x00\x1c\x00\x1c\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\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\x30\x00\x30\x00\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x31\x00\x31\x00\x31\x00\x31\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"# -alex_accept = listArray (0 :: Int, 40)+alex_accept = listArray (0 :: Int, 61)   [ AlexAccNone   , AlexAccNone   , AlexAccNone@@ -75,6 +75,27 @@   , 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@@ -103,7 +124,7 @@   , (0,alex_action_8)   ] -{-# LINE 39 "src/LexBNF.x" #-}+{-# LINE 45 "src/LexBNF.x" #-}   tok :: (Posn -> String -> Token) -> (Posn -> String -> Token)@@ -179,6 +200,8 @@     '\\':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     _         -> []@@ -258,635 +281,14 @@ alex_action_7 =  tok (\p s -> PT p (TI $ share s))     alex_action_8 =  tok (\p s -> PT p (TD $ share s))  {-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 17 "<built-in>" #-}-{-# LINE 1 "/usr/local/lib/ghc-8.2.1/include/ghcversion.h" #-}-----------------{-# LINE 18 "<built-in>" #-}-{-# LINE 1 "/var/folders/lg/qcd3v89j59l3m6520kr42bdm0000gn/T/ghc7480_0/ghc_2.h" #-}------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-- -----------------------------------------------------------------------------+-- 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   @@ -904,6 +306,14 @@   +-- 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   @@ -923,36 +333,6 @@   -{-# LINE 19 "<built-in>" #-}-{-# 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---{-# LINE 21 "templates/GenericTemplate.hs" #-}-------- 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--{-# LINE 51 "templates/GenericTemplate.hs" #-}-- 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@@ -1087,8 +467,18 @@         check_accs (AlexAcc a  ) = AlexLastAcc a input__ (I# (len))         check_accs (AlexAccSkip) = AlexLastSkip  input__ (I# (len)) -{-# LINE 198 "templates/GenericTemplate.hs" #-} +++++++++++ data AlexLastAcc   = AlexNone   | AlexLastAcc !Int !AlexInput !Int@@ -1098,4 +488,32 @@   = AlexAccNone   | AlexAcc Int   | AlexAccSkip++++++++++++++++++++++++++++ 
dist/build/bnfc/bnfc-tmp/ParBNF.hs view
@@ -1481,11 +1481,11 @@  happyError :: [Token] -> Err a happyError ts =-  Bad $ "syntax error at " ++ tokenPos ts ++ +  Bad $ "syntax error at " ++ tokenPos ts ++   case ts of-    [] -> []+    []      -> []     [Err _] -> " due to lexer error"-    t:_ -> " before `" ++ id(prToken t) ++ "'"+    t:_     -> " before `" ++ id(prToken t) ++ "'"  myLexer = tokens {-# LINE 1 "templates/GenericTemplate.hs" #-}
+ dist/build/unit-tests/unit-tests-tmp/LexBNF.hs view
@@ -0,0 +1,519 @@+{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-}+{-# LANGUAGE CPP,MagicHash #-}+{-# LINE 3 "src/LexBNF.x" #-}++{-# OPTIONS -fno-warn-incomplete-patterns #-}+{-# OPTIONS_GHC -w #-}+module LexBNF where++++import qualified Data.Bits+import Data.Word (Word8)+import Data.Char (ord)++#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\xb2\x0c\x00\x00\x72\x0c\x00\x00\x00\x00\x00\x00\x68\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\x41\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\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x36\x00\x3a\x00\x2b\x00\x31\x00\x05\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\x33\x00\x02\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x36\x00\x36\x00\x36\x00\x36\x00\x36\x00\x34\x00\x36\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x37\x00\x36\x00\x00\x00\x36\x00\x00\x00\x36\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x36\x00\x03\x00\x36\x00\x00\x00\x36\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x35\x00\x36\x00\x36\x00\x01\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\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\x33\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x2a\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x3d\x00\x32\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\x2e\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\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\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x2f\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\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x39\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x2e\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x2f\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\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x00\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x30\x00\x30\x00\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x31\x00\x31\x00\x31\x00\x31\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"#++alex_accept = listArray (0 :: Int, 61)+  [ 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 9+  , AlexAcc 8+  , AlexAcc 7+  , AlexAcc 6+  , AlexAcc 5+  , AlexAcc 4+  , AlexAcc 3+  , AlexAcc 2+  , AlexAcc 1+  , AlexAcc 0+  ]++alex_actions = array (0 :: Int, 10)+  [ (9,alex_action_3)+  , (8,alex_action_3)+  , (7,alex_action_3)+  , (6,alex_action_3)+  , (5,alex_action_4)+  , (4,alex_action_5)+  , (3,alex_action_6)+  , (2,alex_action_7)+  , (1,alex_action_8)+  , (0,alex_action_8)+  ]++{-# LINE 45 "src/LexBNF.x" #-}+++tok :: (Posn -> String -> Token) -> (Posn -> String -> Token)+tok f p s = f p s++share :: String -> String+share = id++data Tok =+   TS !String !Int    -- reserved words and symbols+ | TL !String         -- string literals+ | TI !String         -- integer literals+ | TV !String         -- identifiers+ | TD !String         -- double precision float literals+ | TC !String         -- character literals++ deriving (Eq,Show,Ord)++data Token =+   PT  Posn Tok+ | Err Posn+  deriving (Eq,Show,Ord)++printPosn :: Posn -> String+printPosn (Pn _ l c) = "line " ++ show l ++ ", column " ++ show c++tokenPos :: [Token] -> String+tokenPos (t:_) = printPosn (tokenPosn t)+tokenPos [] = "end of file"++tokenPosn :: Token -> Posn+tokenPosn (PT p _) = p+tokenPosn (Err p) = p++tokenLineCol :: Token -> (Int, Int)+tokenLineCol = posLineCol . tokenPosn++posLineCol :: Posn -> (Int, Int)+posLineCol (Pn _ l c) = (l,c)++mkPosToken :: Token -> ((Int, Int), String)+mkPosToken t@(PT p _) = (posLineCol p, prToken t)++prToken :: Token -> String+prToken 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"+++data BTree = N | B String Tok BTree BTree deriving (Show)++eitherResIdent :: (String -> Tok) -> String -> Tok+eitherResIdent tv s = treeFind resWords+  where+  treeFind N = tv s+  treeFind (B a t left right) | s < a  = treeFind left+                              | s > a  = treeFind right+                              | s == a = t++resWords :: BTree+resWords = b "digit" 21 (b "=" 11 (b "-" 6 (b "*" 3 (b ")" 2 (b "(" 1 N N) N) (b "," 5 (b "+" 4 N N) N)) (b "::=" 9 (b ":" 8 (b "." 7 N N) N) (b ";" 10 N N))) (b "char" 16 (b "]" 14 (b "[" 13 (b "?" 12 N N) N) (b "_" 15 N N)) (b "define" 19 (b "comment" 18 (b "coercions" 17 N N) N) (b "delimiters" 20 N N)))) (b "separator" 31 (b "letter" 26 (b "internal" 24 (b "eps" 23 (b "entrypoints" 22 N N) N) (b "layout" 25 N N)) (b "position" 29 (b "nonempty" 28 (b "lower" 27 N N) N) (b "rules" 30 N N))) (b "upper" 36 (b "token" 34 (b "terminator" 33 (b "stop" 32 N N) N) (b "toplevel" 35 N N)) (b "|" 39 (b "{" 38 (b "views" 37 N N) N) (b "}" 40 N N))))+   where b s n = let bs = id s+                  in B bs (TS bs n)++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 (\p s -> PT p (eitherResIdent (TV . share) s)) +alex_action_4 =  tok (\p s -> PT p (eitherResIdent (TV . share) s)) +alex_action_5 =  tok (\p s -> PT p (TL $ share $ unescapeInitTail s)) +alex_action_6 =  tok (\p s -> PT p (TC $ share s))  +alex_action_7 =  tok (\p s -> PT p (TI $ share s))    +alex_action_8 =  tok (\p s -> PT p (TD $ share s)) +{-# 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 (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+  indexInt16OffAddr# arr off+#endif++++++{-# INLINE alexIndexInt32OffAddr #-}+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+  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+++++++++++++++++++++++++++++
+ dist/build/unit-tests/unit-tests-tmp/ParBNF.hs view
@@ -0,0 +1,2459 @@+{-# 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 #-}+module ParBNF where+import AbsBNF+import LexBNF+import ErrM+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.19.8++newtype HappyAbsSyn  = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn36 :: (Ident) -> (HappyAbsSyn )+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn36 #-}+happyOut36 :: (HappyAbsSyn ) -> (Ident)+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut36 #-}+happyIn37 :: (String) -> (HappyAbsSyn )+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn37 #-}+happyOut37 :: (HappyAbsSyn ) -> (String)+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut37 #-}+happyIn38 :: (Integer) -> (HappyAbsSyn )+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn38 #-}+happyOut38 :: (HappyAbsSyn ) -> (Integer)+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut38 #-}+happyIn39 :: (Char) -> (HappyAbsSyn )+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn39 #-}+happyOut39 :: (HappyAbsSyn ) -> (Char)+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut39 #-}+happyIn40 :: (Double) -> (HappyAbsSyn )+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn40 #-}+happyOut40 :: (HappyAbsSyn ) -> (Double)+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut40 #-}+happyIn41 :: (LGrammar) -> (HappyAbsSyn )+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn41 #-}+happyOut41 :: (HappyAbsSyn ) -> (LGrammar)+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut41 #-}+happyIn42 :: (LDef) -> (HappyAbsSyn )+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn42 #-}+happyOut42 :: (HappyAbsSyn ) -> (LDef)+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut42 #-}+happyIn43 :: ([LDef]) -> (HappyAbsSyn )+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn43 #-}+happyOut43 :: (HappyAbsSyn ) -> ([LDef])+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut43 #-}+happyIn44 :: ([Ident]) -> (HappyAbsSyn )+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn44 #-}+happyOut44 :: (HappyAbsSyn ) -> ([Ident])+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut44 #-}+happyIn45 :: (Grammar) -> (HappyAbsSyn )+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn45 #-}+happyOut45 :: (HappyAbsSyn ) -> (Grammar)+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut45 #-}+happyIn46 :: ([Def]) -> (HappyAbsSyn )+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn46 #-}+happyOut46 :: (HappyAbsSyn ) -> ([Def])+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut46 #-}+happyIn47 :: (Def) -> (HappyAbsSyn )+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn47 #-}+happyOut47 :: (HappyAbsSyn ) -> (Def)+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut47 #-}+happyIn48 :: (Item) -> (HappyAbsSyn )+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn48 #-}+happyOut48 :: (HappyAbsSyn ) -> (Item)+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut48 #-}+happyIn49 :: ([Item]) -> (HappyAbsSyn )+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn49 #-}+happyOut49 :: (HappyAbsSyn ) -> ([Item])+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut49 #-}+happyIn50 :: (Cat) -> (HappyAbsSyn )+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn50 #-}+happyOut50 :: (HappyAbsSyn ) -> (Cat)+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut50 #-}+happyIn51 :: (Label) -> (HappyAbsSyn )+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn51 #-}+happyOut51 :: (HappyAbsSyn ) -> (Label)+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut51 #-}+happyIn52 :: (LabelId) -> (HappyAbsSyn )+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn52 #-}+happyOut52 :: (HappyAbsSyn ) -> (LabelId)+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut52 #-}+happyIn53 :: (ProfItem) -> (HappyAbsSyn )+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn53 #-}+happyOut53 :: (HappyAbsSyn ) -> (ProfItem)+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut53 #-}+happyIn54 :: (IntList) -> (HappyAbsSyn )+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn54 #-}+happyOut54 :: (HappyAbsSyn ) -> (IntList)+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut54 #-}+happyIn55 :: ([Integer]) -> (HappyAbsSyn )+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn55 #-}+happyOut55 :: (HappyAbsSyn ) -> ([Integer])+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut55 #-}+happyIn56 :: ([IntList]) -> (HappyAbsSyn )+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn56 #-}+happyOut56 :: (HappyAbsSyn ) -> ([IntList])+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut56 #-}+happyIn57 :: ([ProfItem]) -> (HappyAbsSyn )+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn57 #-}+happyOut57 :: (HappyAbsSyn ) -> ([ProfItem])+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut57 #-}+happyIn58 :: (Arg) -> (HappyAbsSyn )+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn58 #-}+happyOut58 :: (HappyAbsSyn ) -> (Arg)+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut58 #-}+happyIn59 :: ([Arg]) -> (HappyAbsSyn )+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn59 #-}+happyOut59 :: (HappyAbsSyn ) -> ([Arg])+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut59 #-}+happyIn60 :: (Separation) -> (HappyAbsSyn )+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn60 #-}+happyOut60 :: (HappyAbsSyn ) -> (Separation)+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut60 #-}+happyIn61 :: ([String]) -> (HappyAbsSyn )+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn61 #-}+happyOut61 :: (HappyAbsSyn ) -> ([String])+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut61 #-}+happyIn62 :: (Exp) -> (HappyAbsSyn )+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn62 #-}+happyOut62 :: (HappyAbsSyn ) -> (Exp)+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut62 #-}+happyIn63 :: (Exp) -> (HappyAbsSyn )+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn63 #-}+happyOut63 :: (HappyAbsSyn ) -> (Exp)+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut63 #-}+happyIn64 :: (Exp) -> (HappyAbsSyn )+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn64 #-}+happyOut64 :: (HappyAbsSyn ) -> (Exp)+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut64 #-}+happyIn65 :: ([Exp]) -> (HappyAbsSyn )+happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn65 #-}+happyOut65 :: (HappyAbsSyn ) -> ([Exp])+happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut65 #-}+happyIn66 :: ([Exp]) -> (HappyAbsSyn )+happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn66 #-}+happyOut66 :: (HappyAbsSyn ) -> ([Exp])+happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut66 #-}+happyIn67 :: (RHS) -> (HappyAbsSyn )+happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn67 #-}+happyOut67 :: (HappyAbsSyn ) -> (RHS)+happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut67 #-}+happyIn68 :: ([RHS]) -> (HappyAbsSyn )+happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn68 #-}+happyOut68 :: (HappyAbsSyn ) -> ([RHS])+happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut68 #-}+happyIn69 :: (MinimumSize) -> (HappyAbsSyn )+happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn69 #-}+happyOut69 :: (HappyAbsSyn ) -> (MinimumSize)+happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut69 #-}+happyIn70 :: (Reg) -> (HappyAbsSyn )+happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn70 #-}+happyOut70 :: (HappyAbsSyn ) -> (Reg)+happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut70 #-}+happyIn71 :: (Reg) -> (HappyAbsSyn )+happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn71 #-}+happyOut71 :: (HappyAbsSyn ) -> (Reg)+happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut71 #-}+happyIn72 :: (Reg) -> (HappyAbsSyn )+happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn72 #-}+happyOut72 :: (HappyAbsSyn ) -> (Reg)+happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut72 #-}+happyIn73 :: (Reg) -> (HappyAbsSyn )+happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn73 #-}+happyOut73 :: (HappyAbsSyn ) -> (Reg)+happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut73 #-}+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\x00\x00\x00\x02\xa4\x5e\xe3\x26\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x50\xaf\x71\x13\x01\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\xa9\xd7\xb8\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x40\xea\x35\x6e\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x20\xf5\x1a\x37\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x7a\x8d\x1b\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x0c\x00\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\x01\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x28\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x14\x00\x00\x40\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\x01\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\x40\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\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\x50\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\x10\x00\x01\x00\x00\xf0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x00\x00\x00\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x40\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x20\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x10\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x10\x00\x09\x65\x80\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x84\x32\x40\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x40\x42\x19\xa0\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x20\xa1\x0c\x50\x10\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\x00\x00\x00\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\x04\x12\xca\x00\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\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\x02\x20\xa1\x0c\x50\x10\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\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\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x12\xca\x00\x05\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\x40\x00\x00\x00\x0c\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x20\x00\x00\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\x80\x00\x08\x00\x00\x80\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x04\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x40\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\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\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\x01\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\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\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\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x80\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\x00\x00\x00\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\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\x04\x40\x01\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\x08\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x01\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\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\x02\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x08\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\x00\x00\x00\x00\x01\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\x02\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\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x48\xbd\xc6\x0d\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\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\x02\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\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\x01\x52\xaf\x71\x13\x01\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xa0\x5e\xe3\x06\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x52\xaf\x71\x13\x01\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\x20\x40\xea\x35\x6e\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x09\x65\x80\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x04\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\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\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\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\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\x02\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\x04\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\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x21\x00\x00\x00\x00\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\x08\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\x04\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\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\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x02\x00\x00\xe0\x03\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x00\xf0\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\x80\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x12\xca\x00\x05\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\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\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\x40\x00\x24\x94\x01\x0a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x12\xca\x00\x05\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\x02\x20\xa1\x0c\x50\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x80\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\x02\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\x08\x80\x84\x32\x40\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x00\xf0\x01\x00\x00\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\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\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\x04\x00\x00\xc0\x00\x00\x00\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\x40\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x10\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"#++{-# NOINLINE happyExpListPerState #-}+happyExpListPerState st =+    token_strs_expected+  where token_strs = ["error","%dummy","%start_pLGrammar","%start_pLDef","%start_pListLDef","%start_pListIdent","%start_pGrammar","%start_pListDef","%start_pDef","%start_pItem","%start_pListItem","%start_pCat","%start_pLabel","%start_pLabelId","%start_pProfItem","%start_pIntList","%start_pListInteger","%start_pListIntList","%start_pListProfItem","%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_pReg2","%start_pReg1","%start_pReg3","%start_pReg","Ident","String","Integer","Char","Double","LGrammar","LDef","ListLDef","ListIdent","Grammar","ListDef","Def","Item","ListItem","Cat","Label","LabelId","ProfItem","IntList","ListInteger","ListIntList","ListProfItem","Arg","ListArg","Separation","ListString","Exp","Exp1","Exp2","ListExp","ListExp2","RHS","ListRHS","MinimumSize","Reg2","Reg1","Reg3","Reg","'('","')'","'*'","'+'","','","'-'","'.'","':'","'::='","';'","'='","'?'","'['","']'","'_'","'char'","'coercions'","'comment'","'define'","'delimiters'","'digit'","'entrypoints'","'eps'","'internal'","'layout'","'letter'","'lower'","'nonempty'","'position'","'rules'","'separator'","'stop'","'terminator'","'token'","'toplevel'","'upper'","'views'","'{'","'|'","'}'","L_ident","L_quoted","L_integ","L_charac","L_doubl","%eof"]+        bit_start = st * 119+        bit_end = (st + 1) * 119+        read_bit = readArrayBit happyExpList+        bits = map read_bit [bit_start..bit_end - 1]+        bits_indexed = zip bits [0..118]+        token_strs_expected = concatMap f bits_indexed+        f (False, _) = []+        f (True, nr) = [token_strs !! nr]++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x50\x00\x69\x00\x50\x00\xe7\xff\x82\x00\x82\x00\x9b\x00\xd9\x00\x00\x00\x1c\x00\x2d\x00\x2d\x00\x47\x00\x4e\x00\x59\x00\x90\x00\xb1\x00\xaf\x00\x00\x00\xa4\x01\xe0\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x00\x00\x00\x00\xc6\x00\x29\x00\x29\x00\x29\x00\x29\x00\x0f\x01\x00\x00\x00\x00\x11\x00\x15\x01\x03\x00\x19\x01\x29\x00\x13\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x01\x00\x00\x3e\x00\x30\x01\x01\x00\x25\x01\x00\x00\xd9\x00\x38\x01\x3d\x01\x3d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x3d\x01\x07\x00\x07\x00\x00\x00\x00\x00\x00\x00\x07\x00\x61\x01\x6a\x01\x00\x00\x48\x01\x48\x01\x48\x01\x48\x01\x72\x01\x4c\x01\x4c\x01\x68\x01\x68\x01\x20\x00\x00\x00\x70\x01\xad\x01\x7d\x01\x8a\x01\xb3\x01\x85\x01\x91\x01\xc8\x01\xa0\x01\xa0\x01\xa0\x01\x00\x00\xa0\x01\xc7\x01\xc2\x01\x00\x00\xa3\x01\x4a\x00\x00\x00\xa3\x01\x1c\x00\xf6\xff\x00\x00\xa3\x01\x00\x00\xa3\x01\xcb\x01\xab\x01\xa9\x01\xac\x01\x1c\x00\xac\x01\x98\x00\xa1\x01\xb6\x01\xb0\x01\xba\x01\xba\x01\xb1\x01\xb2\x01\xcd\x01\x82\x00\xb7\x01\x00\x00\xd6\x01\xb8\x01\x05\x00\xd2\x01\xb9\x01\xd5\x01\x00\x00\x50\x00\xbb\x01\xbc\x01\xbc\x01\x00\x00\x00\x00\x00\x00\x9b\x00\x50\x00\xbf\x01\x00\x00\x82\x00\x29\x00\x1c\x00\x1c\x00\xd8\x01\xc0\x01\x00\x00\xc1\x01\x00\x00\xd7\x01\x00\x00\xc3\x01\x00\x00\xc3\x01\xc4\x01\x1c\x00\x00\x00\xd1\x01\xe1\x01\x00\x00\x78\x00\x00\x00\x45\x00\xc5\x01\xde\x01\xe4\x01\xe4\x01\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x01\x07\x00\x07\x00\x00\x00\xe0\x01\xf0\x01\x00\x00\x00\x00\x03\x00\x29\x00\x00\x00\x00\x00\x00\x00\xcc\x01\xe7\x01\xf4\x01\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x01\x00\x00\x00\x00\x00\x00\x00\x00\xea\x01\x00\x00\x00\x00\xda\x01\x00\x00\x00\x00\xfa\xff\xcf\x01\x1c\x00\x00\x00\x29\x00\x00\x00\xcf\x01\xcf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x01\xa4\x01\x07\x00\x00\x00\xf9\x01\xf7\x01\xf2\x01\x00\x00\xd9\x00\x00\x00\xe2\x01\x00\x00\xd9\x00\x00\x00\xd9\x01\xef\x01\xfe\x01\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x5d\x01\x8d\x01\x69\x01\x0b\x00\x96\x01\x99\x01\x73\x01\xaf\x01\xf5\x01\x89\x00\x8b\x01\x09\x00\xf6\x01\xf3\x01\x02\x00\xae\x01\x8d\x00\x77\x00\xec\x01\xee\x01\x37\x00\x1a\x01\x2e\x01\x4b\x01\xf2\x00\xc9\x00\x71\x00\x35\x01\xe8\x01\x3c\x00\xbc\x00\xfe\xff\xa3\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x02\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\xbe\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00\x1f\x01\xf7\x00\x00\x00\x00\x00\x00\x00\xed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x02\x0a\x02\xc3\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x01\x00\x00\x00\x00\xa9\x00\xbe\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x02\x0d\x02\x0f\x02\xc0\x00\x4c\x00\xa7\x01\x52\x00\x00\x00\x10\x02\xf8\x01\xfa\x01\x11\x02\x00\x00\x00\x00\xa2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x01\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x81\x01\x08\x01\x00\x00\xaa\x01\xb2\x00\x07\x01\x5c\x01\x00\x00\x12\x02\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x13\x02\xfc\x01\x14\x02\x0b\x02\x60\x01\x00\x00\x00\x00\x22\x01\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x00\x00\x00\xb4\x01\xb5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x24\x01\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x01\x00\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x17\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x15\x02\x86\x01\x00\x00\xb8\x00\x3b\x01\x16\x02\x17\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x02\x29\x01\x18\x02\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x01\x00\x00\xfb\x01\x19\x02\xbe\x01\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00"#++happyAdjustOffset :: Happy_GHC_Exts.Int# -> Happy_GHC_Exts.Int#+happyAdjustOffset off = off++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\xd5\xff\x00\x00\xd5\xff\x00\x00\xce\xff\xce\xff\x00\x00\x00\x00\xb8\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\xff\xa6\xff\x00\x00\x00\x00\xa0\xff\x9e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x8e\xff\x00\x00\xb8\xff\xb8\xff\x85\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\x7b\xff\x80\xff\x72\xff\x83\xff\x00\x00\x00\x00\x00\x00\x74\xff\x78\xff\x7c\xff\x77\xff\x75\xff\x76\xff\x00\x00\xdb\xff\x00\x00\x00\x00\x00\x00\x00\x00\x86\xff\x89\xff\x88\xff\x00\x00\x00\x00\x95\xff\x92\xff\x94\xff\x93\xff\x91\xff\x8b\xff\x00\x00\x00\x00\x8e\xff\xdd\xff\xdc\xff\xda\xff\x95\xff\x8d\xff\x98\xff\x96\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xff\x00\x00\xa3\xff\x00\x00\x00\x00\xa5\xff\x00\x00\xa9\xff\xa8\xff\x00\x00\x00\x00\x00\x00\xb0\xff\x00\x00\x00\x00\x00\x00\xaf\xff\x00\x00\xb4\xff\xb5\xff\x00\x00\x00\x00\x00\x00\xba\xff\x00\x00\xb9\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\xff\x85\xff\x00\x00\x00\x00\xcd\xff\xce\xff\x00\x00\xcf\xff\xd1\xff\x00\x00\xb0\xff\xd4\xff\x00\x00\x00\x00\xd8\xff\xd5\xff\x00\x00\x00\x00\x00\x00\xd9\xff\xd6\xff\xd2\xff\x00\x00\xd5\xff\x00\x00\xcb\xff\xce\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xff\x00\x00\xbb\xff\x00\x00\xc4\xff\x00\x00\xa0\xff\xc9\xff\x00\x00\x00\x00\xb7\xff\x00\x00\xb1\xff\xb3\xff\x00\x00\xae\xff\x00\x00\xa9\xff\x00\x00\xa6\xff\xa6\xff\xa2\xff\x9f\xff\x9d\xff\x9c\xff\x00\x00\x00\x00\x8e\xff\x97\xff\x00\x00\x00\x00\x8a\xff\xb8\xff\x84\xff\x00\x00\x7f\xff\x7e\xff\x7d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x81\xff\x73\xff\x7a\xff\x79\xff\x82\xff\x87\xff\x8f\xff\x90\xff\x8c\xff\x99\xff\x9a\xff\x00\x00\xa4\xff\xaa\xff\xa7\xff\xad\xff\x00\x00\xb2\xff\xb6\xff\x00\x00\xc0\xff\xc8\xff\x00\x00\x00\x00\x00\x00\xbc\xff\x00\x00\xb8\xff\x00\x00\x00\x00\xc6\xff\xcc\xff\xd0\xff\xd3\xff\xd7\xff\xc2\xff\xc3\xff\xbf\xff\xc5\xff\x00\x00\x9e\xff\x00\x00\xb8\xff\x00\x00\x00\x00\x00\x00\xac\xff\xca\xff\xbe\xff\x85\xff\xb8\xff\xc7\xff\xc1\xff\xa9\xff\x00\x00\x00\x00\xab\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x03\x00\x01\x00\x0d\x00\x02\x00\x0b\x00\x03\x00\x04\x00\x01\x00\x00\x00\x05\x00\x00\x00\x02\x00\x08\x00\x0d\x00\x0c\x00\x29\x00\x10\x00\x01\x00\x08\x00\x0d\x00\x13\x00\x15\x00\x06\x00\x17\x00\x10\x00\x03\x00\x1a\x00\x1b\x00\x13\x00\x0d\x00\x29\x00\x2a\x00\x10\x00\x24\x00\x29\x00\x2e\x00\x24\x00\x15\x00\x26\x00\x17\x00\x0d\x00\x01\x00\x1a\x00\x1b\x00\x2c\x00\x01\x00\x2e\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x24\x00\x0d\x00\x26\x00\x01\x00\x10\x00\x0d\x00\x24\x00\x0f\x00\x2c\x00\x15\x00\x03\x00\x17\x00\x03\x00\x04\x00\x1a\x00\x1b\x00\x29\x00\x03\x00\x02\x00\x01\x00\x29\x00\x0c\x00\x01\x00\x00\x00\x24\x00\x2e\x00\x26\x00\x19\x00\x01\x00\x0d\x00\x01\x00\x08\x00\x2c\x00\x29\x00\x0d\x00\x01\x00\x0f\x00\x0a\x00\x0d\x00\x01\x00\x0d\x00\x22\x00\x0f\x00\x24\x00\x11\x00\x12\x00\x13\x00\x14\x00\x22\x00\x16\x00\x24\x00\x18\x00\x19\x00\x01\x00\x19\x00\x2e\x00\x1d\x00\x1e\x00\x1f\x00\x19\x00\x21\x00\x22\x00\x29\x00\x19\x00\x25\x00\x0d\x00\x00\x00\x0f\x00\x29\x00\x11\x00\x12\x00\x13\x00\x14\x00\x0d\x00\x16\x00\x08\x00\x18\x00\x19\x00\x01\x00\x2b\x00\x0d\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x21\x00\x22\x00\x0a\x00\x16\x00\x25\x00\x0d\x00\x1f\x00\x0f\x00\x29\x00\x11\x00\x12\x00\x13\x00\x14\x00\x0e\x00\x16\x00\x01\x00\x18\x00\x19\x00\x01\x00\x0d\x00\x11\x00\x1d\x00\x1e\x00\x1f\x00\x15\x00\x21\x00\x22\x00\x0d\x00\x03\x00\x0f\x00\x0d\x00\x00\x00\x0f\x00\x29\x00\x11\x00\x12\x00\x13\x00\x14\x00\x03\x00\x16\x00\x01\x00\x18\x00\x19\x00\x03\x00\x00\x00\x0e\x00\x1d\x00\x1e\x00\x1f\x00\x03\x00\x21\x00\x22\x00\x08\x00\x03\x00\x00\x00\x29\x00\x03\x00\x00\x00\x29\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x0e\x00\x22\x00\x23\x00\x24\x00\x25\x00\x02\x00\x22\x00\x23\x00\x24\x00\x25\x00\x29\x00\x16\x00\x22\x00\x23\x00\x24\x00\x25\x00\x22\x00\x23\x00\x24\x00\x22\x00\x1c\x00\x24\x00\x13\x00\x1c\x00\x0d\x00\x1e\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\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x11\x00\x29\x00\x2a\x00\x1c\x00\x15\x00\x1e\x00\x00\x00\x00\x00\x1c\x00\x2a\x00\x1e\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x08\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x0e\x00\x1a\x00\x1b\x00\x1c\x00\x1d\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\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x11\x00\x1a\x00\x1b\x00\x1c\x00\x15\x00\x29\x00\x1a\x00\x1b\x00\x1c\x00\x27\x00\x2a\x00\x1a\x00\x1b\x00\x1c\x00\x00\x00\x0d\x00\x1a\x00\x1b\x00\x1c\x00\x0d\x00\x2e\x00\x0d\x00\x1b\x00\x1c\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x02\x00\x10\x00\x11\x00\x2e\x00\x1f\x00\x20\x00\x15\x00\x27\x00\x1f\x00\x20\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x2e\x00\x27\x00\x00\x00\x13\x00\x05\x00\x06\x00\x07\x00\x08\x00\x05\x00\x1c\x00\x0b\x00\x00\x00\x0e\x00\x2e\x00\x0f\x00\x10\x00\x0e\x00\x06\x00\x07\x00\x08\x00\x08\x00\x00\x00\x0b\x00\x00\x00\x2e\x00\x05\x00\x0f\x00\x10\x00\x2e\x00\x06\x00\x07\x00\x08\x00\x0b\x00\x00\x00\x0b\x00\x00\x00\x0f\x00\x10\x00\x0f\x00\x10\x00\x00\x00\x06\x00\x07\x00\x08\x00\x0b\x00\x00\x00\x0b\x00\x00\x00\x0f\x00\x10\x00\x0f\x00\x10\x00\x2a\x00\x06\x00\x0e\x00\x08\x00\x00\x00\x0d\x00\x0b\x00\x00\x00\x0f\x00\x10\x00\x0f\x00\x10\x00\x2e\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x0a\x00\x0b\x00\x0f\x00\x10\x00\x00\x00\x0f\x00\x10\x00\x00\x00\x2e\x00\x0a\x00\x0b\x00\x01\x00\x00\x00\x01\x00\x0f\x00\x10\x00\x2e\x00\x0a\x00\x0b\x00\x0f\x00\x10\x00\x05\x00\x0f\x00\x10\x00\x0c\x00\x2b\x00\x0e\x00\x00\x00\x01\x00\x12\x00\x20\x00\x14\x00\x1f\x00\x23\x00\x21\x00\x12\x00\x12\x00\x14\x00\x14\x00\x0c\x00\x2a\x00\x0e\x00\x05\x00\x2e\x00\x08\x00\x0e\x00\x2e\x00\x07\x00\x2a\x00\x29\x00\x29\x00\x1c\x00\x0a\x00\x22\x00\x29\x00\x29\x00\x05\x00\x0a\x00\x08\x00\x07\x00\x0e\x00\x2e\x00\x09\x00\x01\x00\x09\x00\x29\x00\x2e\x00\x2e\x00\x2e\x00\x29\x00\x29\x00\x2e\x00\x2a\x00\x0e\x00\x2a\x00\x0e\x00\x2b\x00\x2b\x00\x0d\x00\x02\x00\x2a\x00\x28\x00\x0e\x00\x02\x00\x0e\x00\x0e\x00\x2a\x00\x09\x00\x02\x00\x05\x00\x0e\x00\x1c\x00\x0d\x00\x02\x00\x01\x00\x0d\x00\x17\x00\x2b\x00\x12\x00\x18\x00\x11\x00\x01\x00\x21\x00\x01\x00\x01\x00\x00\x00\x02\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x21\x00\x18\x00\x21\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0d\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x23\x00\x29\x00\x6b\x00\x5d\x00\xee\x00\xbe\x00\xbf\x00\x43\x00\x61\x00\x93\x00\x82\x00\x5d\x00\xd1\xff\x2a\x00\xc0\x00\x23\x00\x2b\x00\x29\x00\x83\x00\x44\x00\x5e\x00\x2c\x00\xc4\x00\x2d\x00\x62\x00\x23\x00\x2e\x00\x2f\x00\xac\x00\x2a\x00\x23\x00\x45\x00\x2b\x00\x32\x00\x23\x00\xff\xff\x30\x00\x2c\x00\x31\x00\x2d\x00\x6b\x00\x29\x00\x2e\x00\x2f\x00\x32\x00\x64\x00\xff\xff\x23\x00\x45\x00\x46\x00\x32\x00\x47\x00\x30\x00\x2a\x00\x31\x00\x4f\x00\x2b\x00\x65\x00\xbb\x00\x66\x00\x32\x00\x2c\x00\x23\x00\x2d\x00\xbe\x00\xbf\x00\x2e\x00\x2f\x00\x23\x00\x23\x00\xd4\x00\x5a\x00\x23\x00\xc0\x00\xa9\x00\x82\x00\x30\x00\xff\xff\x31\x00\x50\x00\x64\x00\xd5\x00\x4f\x00\x9e\x00\x32\x00\x23\x00\x65\x00\x4f\x00\x66\x00\x8a\x00\x5d\x00\x4f\x00\x65\x00\x34\x00\x66\x00\x26\x00\x72\x00\x73\x00\x74\x00\x75\x00\xc8\x00\x76\x00\x26\x00\x77\x00\x78\x00\x64\x00\x9a\x00\xff\xff\x79\x00\x7a\x00\x7b\x00\xdd\x00\x7c\x00\x7d\x00\x23\x00\xce\x00\x8b\x00\x65\x00\x55\x00\x66\x00\x23\x00\x72\x00\x73\x00\x74\x00\x75\x00\x37\x00\x76\x00\xab\x00\x77\x00\x78\x00\x64\x00\x46\x00\xaf\x00\x79\x00\x7a\x00\x7b\x00\x68\x00\x7c\x00\x7d\x00\x80\x00\x56\x00\x8b\x00\x65\x00\x3a\x00\x66\x00\x23\x00\x72\x00\x73\x00\x74\x00\x75\x00\x69\x00\x76\x00\x64\x00\x77\x00\x78\x00\x64\x00\x5d\x00\x57\x00\x79\x00\x7a\x00\x7b\x00\x58\x00\x7c\x00\x7d\x00\x65\x00\x23\x00\x66\x00\x65\x00\x68\x00\x66\x00\x23\x00\x72\x00\x73\x00\x74\x00\x75\x00\x23\x00\x76\x00\x5a\x00\x77\x00\x78\x00\x23\x00\x82\x00\xa5\x00\x79\x00\x7a\x00\x7b\x00\x23\x00\x7c\x00\x7d\x00\x8e\x00\x23\x00\x68\x00\x23\x00\x23\x00\x55\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x9f\x00\x24\x00\x25\x00\x26\x00\xc2\x00\x5d\x00\x24\x00\x25\x00\x26\x00\xe2\x00\x23\x00\xb0\x00\x24\x00\x25\x00\x26\x00\xea\x00\x24\x00\x33\x00\x26\x00\xc4\x00\x37\x00\x26\x00\xd2\x00\x40\x00\x6b\x00\x41\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x47\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x47\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x47\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x57\x00\x23\x00\x45\x00\x40\x00\xaf\x00\xb9\x00\x68\x00\x82\x00\x40\x00\x45\x00\xb6\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\xe4\x00\x48\x00\x49\x00\x4a\x00\xb7\x00\xe1\x00\x48\x00\x49\x00\x4a\x00\xcc\x00\x47\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x47\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x47\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x47\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x47\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x57\x00\x4e\x00\x49\x00\x4a\x00\xd5\x00\x23\x00\xb8\x00\x49\x00\x4a\x00\xbd\x00\x45\x00\xcd\x00\x49\x00\x4a\x00\x61\x00\x37\x00\xf4\x00\x49\x00\x4a\x00\x37\x00\xff\xff\x37\x00\x4d\x00\x4a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x5d\x00\xa6\x00\x57\x00\xff\xff\x38\x00\x39\x00\xa7\x00\xbd\x00\x38\x00\xc9\x00\x38\x00\xe9\x00\x68\x00\x84\x00\xff\xff\xbb\x00\x68\x00\xfa\x00\x8c\x00\x85\x00\x8d\x00\x87\x00\xb6\x00\x4c\x00\x88\x00\x84\x00\xe0\x00\xff\xff\x70\x00\x67\x00\xd7\x00\x85\x00\x86\x00\x87\x00\xb5\x00\x61\x00\x88\x00\x84\x00\xff\xff\xb4\x00\x70\x00\x67\x00\xff\xff\x85\x00\x8f\x00\x87\x00\x6f\x00\x61\x00\x88\x00\x84\x00\x70\x00\x67\x00\x70\x00\x67\x00\x68\x00\x85\x00\xe5\x00\x87\x00\xe6\x00\x61\x00\x88\x00\x84\x00\x70\x00\x67\x00\x70\x00\x67\x00\x45\x00\x8b\x00\xeb\x00\x87\x00\x61\x00\xaf\x00\x88\x00\x61\x00\x66\x00\x67\x00\x70\x00\x67\x00\xff\xff\x80\x00\x81\x00\x7e\x00\x61\x00\x7d\x00\x7e\x00\x70\x00\x67\x00\x61\x00\x70\x00\x67\x00\x61\x00\xff\xff\x93\x00\x7e\x00\x5a\x00\x68\x00\x6c\x00\x70\x00\x67\x00\xff\xff\xe3\x00\x7e\x00\x9d\x00\x67\x00\xae\x00\x70\x00\x67\x00\x6d\x00\x46\x00\x6e\x00\x68\x00\x6c\x00\x5a\x00\x9c\x00\x5b\x00\x53\x00\x9d\x00\x54\x00\x5a\x00\x5a\x00\xd0\x00\xcf\x00\xa4\x00\x45\x00\x6e\x00\xac\x00\xff\xff\xab\x00\xaa\x00\xff\xff\xa4\x00\x45\x00\x23\x00\x23\x00\x37\x00\x95\x00\x9a\x00\x23\x00\x23\x00\x93\x00\x92\x00\x91\x00\xdd\x00\xd7\x00\xff\xff\xe0\x00\x5a\x00\xef\x00\x23\x00\xff\xff\xff\xff\xff\xff\x23\x00\x23\x00\xff\xff\x45\x00\xd2\x00\x45\x00\xcc\x00\x46\x00\x46\x00\x5d\x00\xcb\x00\x45\x00\xc8\x00\xc7\x00\xc6\x00\xf1\x00\xf0\x00\x45\x00\xf7\x00\xf3\x00\xf2\x00\xfc\x00\x37\x00\xfa\x00\xfd\x00\xc1\x00\x6b\x00\x54\x00\x46\x00\x5f\x00\x51\x00\x60\x00\xc0\x00\x35\x00\xb2\x00\xb1\x00\xa2\x00\xd8\x00\xa1\x00\xa0\x00\x98\x00\x95\x00\xde\x00\xda\x00\xdb\x00\xd9\x00\xec\x00\xe8\x00\xe7\x00\x97\x00\xf5\x00\x96\x00\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x00\xf7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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 (33, 141) [+	(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),+	(112 , happyReduce_112),+	(113 , happyReduce_113),+	(114 , happyReduce_114),+	(115 , happyReduce_115),+	(116 , happyReduce_116),+	(117 , happyReduce_117),+	(118 , happyReduce_118),+	(119 , happyReduce_119),+	(120 , happyReduce_120),+	(121 , happyReduce_121),+	(122 , happyReduce_122),+	(123 , happyReduce_123),+	(124 , happyReduce_124),+	(125 , happyReduce_125),+	(126 , happyReduce_126),+	(127 , happyReduce_127),+	(128 , happyReduce_128),+	(129 , happyReduce_129),+	(130 , happyReduce_130),+	(131 , happyReduce_131),+	(132 , happyReduce_132),+	(133 , happyReduce_133),+	(134 , happyReduce_134),+	(135 , happyReduce_135),+	(136 , happyReduce_136),+	(137 , happyReduce_137),+	(138 , happyReduce_138),+	(139 , happyReduce_139),+	(140 , happyReduce_140),+	(141 , happyReduce_141)+	]++happy_n_terms = 47 :: Int+happy_n_nonterms = 38 :: Int++happyReduce_33 = happySpecReduce_1  0# happyReduction_33+happyReduction_33 happy_x_1+	 =  case happyOutTok happy_x_1 of { (PT _ (TV happy_var_1)) -> +	happyIn36+		 (Ident happy_var_1+	)}++happyReduce_34 = happySpecReduce_1  1# happyReduction_34+happyReduction_34 happy_x_1+	 =  case happyOutTok happy_x_1 of { (PT _ (TL happy_var_1)) -> +	happyIn37+		 (happy_var_1+	)}++happyReduce_35 = happySpecReduce_1  2# happyReduction_35+happyReduction_35 happy_x_1+	 =  case happyOutTok happy_x_1 of { (PT _ (TI happy_var_1)) -> +	happyIn38+		 ((read ( happy_var_1)) :: Integer+	)}++happyReduce_36 = happySpecReduce_1  3# happyReduction_36+happyReduction_36 happy_x_1+	 =  case happyOutTok happy_x_1 of { (PT _ (TC happy_var_1)) -> +	happyIn39+		 ((read ( happy_var_1)) :: Char+	)}++happyReduce_37 = happySpecReduce_1  4# happyReduction_37+happyReduction_37 happy_x_1+	 =  case happyOutTok happy_x_1 of { (PT _ (TD happy_var_1)) -> +	happyIn40+		 ((read ( happy_var_1)) :: Double+	)}++happyReduce_38 = happySpecReduce_1  5# happyReduction_38+happyReduction_38 happy_x_1+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> +	happyIn41+		 (AbsBNF.LGr happy_var_1+	)}++happyReduce_39 = happySpecReduce_1  6# happyReduction_39+happyReduction_39 happy_x_1+	 =  case happyOut47 happy_x_1 of { happy_var_1 -> +	happyIn42+		 (AbsBNF.DefAll happy_var_1+	)}++happyReduce_40 = happySpecReduce_3  6# happyReduction_40+happyReduction_40 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	case happyOut47 happy_x_3 of { happy_var_3 -> +	happyIn42+		 (AbsBNF.DefSome happy_var_1 happy_var_3+	)}}++happyReduce_41 = happySpecReduce_2  6# happyReduction_41+happyReduction_41 happy_x_2+	happy_x_1+	 =  case happyOut44 happy_x_2 of { happy_var_2 -> +	happyIn42+		 (AbsBNF.LDefView happy_var_2+	)}++happyReduce_42 = happySpecReduce_0  7# happyReduction_42+happyReduction_42  =  happyIn43+		 ([]+	)++happyReduce_43 = happySpecReduce_1  7# happyReduction_43+happyReduction_43 happy_x_1+	 =  case happyOut42 happy_x_1 of { happy_var_1 -> +	happyIn43+		 ((:[]) happy_var_1+	)}++happyReduce_44 = happySpecReduce_3  7# happyReduction_44+happyReduction_44 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut42 happy_x_1 of { happy_var_1 -> +	case happyOut43 happy_x_3 of { happy_var_3 -> +	happyIn43+		 ((:) happy_var_1 happy_var_3+	)}}++happyReduce_45 = happySpecReduce_2  7# happyReduction_45+happyReduction_45 happy_x_2+	happy_x_1+	 =  case happyOut43 happy_x_2 of { happy_var_2 -> +	happyIn43+		 (happy_var_2+	)}++happyReduce_46 = happySpecReduce_1  8# happyReduction_46+happyReduction_46 happy_x_1+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> +	happyIn44+		 ((:[]) happy_var_1+	)}++happyReduce_47 = happySpecReduce_3  8# happyReduction_47+happyReduction_47 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> +	case happyOut44 happy_x_3 of { happy_var_3 -> +	happyIn44+		 ((:) happy_var_1 happy_var_3+	)}}++happyReduce_48 = happySpecReduce_1  9# happyReduction_48+happyReduction_48 happy_x_1+	 =  case happyOut46 happy_x_1 of { happy_var_1 -> +	happyIn45+		 (AbsBNF.Grammar happy_var_1+	)}++happyReduce_49 = happySpecReduce_0  10# happyReduction_49+happyReduction_49  =  happyIn46+		 ([]+	)++happyReduce_50 = happySpecReduce_1  10# happyReduction_50+happyReduction_50 happy_x_1+	 =  case happyOut47 happy_x_1 of { happy_var_1 -> +	happyIn46+		 ((:[]) happy_var_1+	)}++happyReduce_51 = happySpecReduce_3  10# happyReduction_51+happyReduction_51 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut47 happy_x_1 of { happy_var_1 -> +	case happyOut46 happy_x_3 of { happy_var_3 -> +	happyIn46+		 ((:) happy_var_1 happy_var_3+	)}}++happyReduce_52 = happySpecReduce_2  10# happyReduction_52+happyReduction_52 happy_x_2+	happy_x_1+	 =  case happyOut46 happy_x_2 of { happy_var_2 -> +	happyIn46+		 (happy_var_2+	)}++happyReduce_53 = happyReduce 5# 11# happyReduction_53+happyReduction_53 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut51 happy_x_1 of { happy_var_1 -> +	case happyOut50 happy_x_3 of { happy_var_3 -> +	case happyOut49 happy_x_5 of { happy_var_5 -> +	happyIn47+		 (AbsBNF.Rule happy_var_1 happy_var_3 (reverse happy_var_5)+	) `HappyStk` happyRest}}}++happyReduce_54 = happySpecReduce_2  11# happyReduction_54+happyReduction_54 happy_x_2+	happy_x_1+	 =  case happyOut37 happy_x_2 of { happy_var_2 -> +	happyIn47+		 (AbsBNF.Comment happy_var_2+	)}++happyReduce_55 = happySpecReduce_3  11# happyReduction_55+happyReduction_55 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut37 happy_x_2 of { happy_var_2 -> +	case happyOut37 happy_x_3 of { happy_var_3 -> +	happyIn47+		 (AbsBNF.Comments happy_var_2 happy_var_3+	)}}++happyReduce_56 = happyReduce 6# 11# happyReduction_56+happyReduction_56 (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 happyOut51 happy_x_2 of { happy_var_2 -> +	case happyOut50 happy_x_4 of { happy_var_4 -> +	case happyOut49 happy_x_6 of { happy_var_6 -> +	happyIn47+		 (AbsBNF.Internal happy_var_2 happy_var_4 (reverse happy_var_6)+	) `HappyStk` happyRest}}}++happyReduce_57 = happySpecReduce_3  11# happyReduction_57+happyReduction_57 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut36 happy_x_2 of { happy_var_2 -> +	case happyOut73 happy_x_3 of { happy_var_3 -> +	happyIn47+		 (AbsBNF.Token happy_var_2 happy_var_3+	)}}++happyReduce_58 = happyReduce 4# 11# happyReduction_58+happyReduction_58 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut36 happy_x_3 of { happy_var_3 -> +	case happyOut73 happy_x_4 of { happy_var_4 -> +	happyIn47+		 (AbsBNF.PosToken happy_var_3 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_59 = happySpecReduce_2  11# happyReduction_59+happyReduction_59 happy_x_2+	happy_x_1+	 =  case happyOut44 happy_x_2 of { happy_var_2 -> +	happyIn47+		 (AbsBNF.Entryp happy_var_2+	)}++happyReduce_60 = happyReduce 4# 11# happyReduction_60+happyReduction_60 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut69 happy_x_2 of { happy_var_2 -> +	case happyOut50 happy_x_3 of { happy_var_3 -> +	case happyOut37 happy_x_4 of { happy_var_4 -> +	happyIn47+		 (AbsBNF.Separator happy_var_2 happy_var_3 happy_var_4+	) `HappyStk` happyRest}}}++happyReduce_61 = happyReduce 4# 11# happyReduction_61+happyReduction_61 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut69 happy_x_2 of { happy_var_2 -> +	case happyOut50 happy_x_3 of { happy_var_3 -> +	case happyOut37 happy_x_4 of { happy_var_4 -> +	happyIn47+		 (AbsBNF.Terminator happy_var_2 happy_var_3 happy_var_4+	) `HappyStk` happyRest}}}++happyReduce_62 = happyReduce 6# 11# happyReduction_62+happyReduction_62 (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 happyOut50 happy_x_2 of { happy_var_2 -> +	case happyOut37 happy_x_3 of { happy_var_3 -> +	case happyOut37 happy_x_4 of { happy_var_4 -> +	case happyOut60 happy_x_5 of { happy_var_5 -> +	case happyOut69 happy_x_6 of { happy_var_6 -> +	happyIn47+		 (AbsBNF.Delimiters happy_var_2 happy_var_3 happy_var_4 happy_var_5 happy_var_6+	) `HappyStk` happyRest}}}}}++happyReduce_63 = happySpecReduce_3  11# happyReduction_63+happyReduction_63 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut36 happy_x_2 of { happy_var_2 -> +	case happyOut38 happy_x_3 of { happy_var_3 -> +	happyIn47+		 (AbsBNF.Coercions happy_var_2 happy_var_3+	)}}++happyReduce_64 = happyReduce 4# 11# happyReduction_64+happyReduction_64 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut36 happy_x_2 of { happy_var_2 -> +	case happyOut68 happy_x_4 of { happy_var_4 -> +	happyIn47+		 (AbsBNF.Rules happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_65 = happyReduce 5# 11# happyReduction_65+happyReduction_65 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut36 happy_x_2 of { happy_var_2 -> +	case happyOut59 happy_x_3 of { happy_var_3 -> +	case happyOut62 happy_x_5 of { happy_var_5 -> +	happyIn47+		 (AbsBNF.Function happy_var_2 (reverse happy_var_3) happy_var_5+	) `HappyStk` happyRest}}}++happyReduce_66 = happySpecReduce_2  11# happyReduction_66+happyReduction_66 happy_x_2+	happy_x_1+	 =  case happyOut61 happy_x_2 of { happy_var_2 -> +	happyIn47+		 (AbsBNF.Layout happy_var_2+	)}++happyReduce_67 = happySpecReduce_3  11# happyReduction_67+happyReduction_67 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut61 happy_x_3 of { happy_var_3 -> +	happyIn47+		 (AbsBNF.LayoutStop happy_var_3+	)}++happyReduce_68 = happySpecReduce_2  11# happyReduction_68+happyReduction_68 happy_x_2+	happy_x_1+	 =  happyIn47+		 (AbsBNF.LayoutTop+	)++happyReduce_69 = happySpecReduce_1  12# happyReduction_69+happyReduction_69 happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	happyIn48+		 (AbsBNF.Terminal happy_var_1+	)}++happyReduce_70 = happySpecReduce_1  12# happyReduction_70+happyReduction_70 happy_x_1+	 =  case happyOut50 happy_x_1 of { happy_var_1 -> +	happyIn48+		 (AbsBNF.NTerminal happy_var_1+	)}++happyReduce_71 = happySpecReduce_0  13# happyReduction_71+happyReduction_71  =  happyIn49+		 ([]+	)++happyReduce_72 = happySpecReduce_2  13# happyReduction_72+happyReduction_72 happy_x_2+	happy_x_1+	 =  case happyOut49 happy_x_1 of { happy_var_1 -> +	case happyOut48 happy_x_2 of { happy_var_2 -> +	happyIn49+		 (flip (:) happy_var_1 happy_var_2+	)}}++happyReduce_73 = happySpecReduce_3  14# happyReduction_73+happyReduction_73 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut50 happy_x_2 of { happy_var_2 -> +	happyIn50+		 (AbsBNF.ListCat happy_var_2+	)}++happyReduce_74 = happySpecReduce_1  14# happyReduction_74+happyReduction_74 happy_x_1+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> +	happyIn50+		 (AbsBNF.IdCat happy_var_1+	)}++happyReduce_75 = happySpecReduce_1  15# happyReduction_75+happyReduction_75 happy_x_1+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> +	happyIn51+		 (AbsBNF.LabNoP happy_var_1+	)}++happyReduce_76 = happySpecReduce_2  15# happyReduction_76+happyReduction_76 happy_x_2+	happy_x_1+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> +	case happyOut57 happy_x_2 of { happy_var_2 -> +	happyIn51+		 (AbsBNF.LabP happy_var_1 happy_var_2+	)}}++happyReduce_77 = happySpecReduce_3  15# happyReduction_77+happyReduction_77 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> +	case happyOut52 happy_x_2 of { happy_var_2 -> +	case happyOut57 happy_x_3 of { happy_var_3 -> +	happyIn51+		 (AbsBNF.LabPF happy_var_1 happy_var_2 happy_var_3+	)}}}++happyReduce_78 = happySpecReduce_2  15# happyReduction_78+happyReduction_78 happy_x_2+	happy_x_1+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> +	case happyOut52 happy_x_2 of { happy_var_2 -> +	happyIn51+		 (AbsBNF.LabF happy_var_1 happy_var_2+	)}}++happyReduce_79 = happySpecReduce_1  16# happyReduction_79+happyReduction_79 happy_x_1+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> +	happyIn52+		 (AbsBNF.Id happy_var_1+	)}++happyReduce_80 = happySpecReduce_1  16# happyReduction_80+happyReduction_80 happy_x_1+	 =  happyIn52+		 (AbsBNF.Wild+	)++happyReduce_81 = happySpecReduce_2  16# happyReduction_81+happyReduction_81 happy_x_2+	happy_x_1+	 =  happyIn52+		 (AbsBNF.ListE+	)++happyReduce_82 = happySpecReduce_3  16# happyReduction_82+happyReduction_82 happy_x_3+	happy_x_2+	happy_x_1+	 =  happyIn52+		 (AbsBNF.ListCons+	)++happyReduce_83 = happyReduce 5# 16# happyReduction_83+happyReduction_83 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = happyIn52+		 (AbsBNF.ListOne+	) `HappyStk` happyRest++happyReduce_84 = happyReduce 9# 17# happyReduction_84+happyReduction_84 (happy_x_9 `HappyStk`+	happy_x_8 `HappyStk`+	happy_x_7 `HappyStk`+	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 happyOut56 happy_x_3 of { happy_var_3 -> +	case happyOut55 happy_x_7 of { happy_var_7 -> +	happyIn53+		 (AbsBNF.ProfIt happy_var_3 happy_var_7+	) `HappyStk` happyRest}}++happyReduce_85 = happySpecReduce_3  18# happyReduction_85+happyReduction_85 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut55 happy_x_2 of { happy_var_2 -> +	happyIn54+		 (AbsBNF.Ints happy_var_2+	)}++happyReduce_86 = happySpecReduce_0  19# happyReduction_86+happyReduction_86  =  happyIn55+		 ([]+	)++happyReduce_87 = happySpecReduce_1  19# happyReduction_87+happyReduction_87 happy_x_1+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> +	happyIn55+		 ((:[]) happy_var_1+	)}++happyReduce_88 = happySpecReduce_3  19# happyReduction_88+happyReduction_88 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> +	case happyOut55 happy_x_3 of { happy_var_3 -> +	happyIn55+		 ((:) happy_var_1 happy_var_3+	)}}++happyReduce_89 = happySpecReduce_0  20# happyReduction_89+happyReduction_89  =  happyIn56+		 ([]+	)++happyReduce_90 = happySpecReduce_1  20# happyReduction_90+happyReduction_90 happy_x_1+	 =  case happyOut54 happy_x_1 of { happy_var_1 -> +	happyIn56+		 ((:[]) happy_var_1+	)}++happyReduce_91 = happySpecReduce_3  20# happyReduction_91+happyReduction_91 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut54 happy_x_1 of { happy_var_1 -> +	case happyOut56 happy_x_3 of { happy_var_3 -> +	happyIn56+		 ((:) happy_var_1 happy_var_3+	)}}++happyReduce_92 = happySpecReduce_1  21# happyReduction_92+happyReduction_92 happy_x_1+	 =  case happyOut53 happy_x_1 of { happy_var_1 -> +	happyIn57+		 ((:[]) happy_var_1+	)}++happyReduce_93 = happySpecReduce_2  21# happyReduction_93+happyReduction_93 happy_x_2+	happy_x_1+	 =  case happyOut53 happy_x_1 of { happy_var_1 -> +	case happyOut57 happy_x_2 of { happy_var_2 -> +	happyIn57+		 ((:) happy_var_1 happy_var_2+	)}}++happyReduce_94 = happySpecReduce_1  22# happyReduction_94+happyReduction_94 happy_x_1+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> +	happyIn58+		 (AbsBNF.Arg happy_var_1+	)}++happyReduce_95 = happySpecReduce_0  23# happyReduction_95+happyReduction_95  =  happyIn59+		 ([]+	)++happyReduce_96 = happySpecReduce_2  23# happyReduction_96+happyReduction_96 happy_x_2+	happy_x_1+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> +	case happyOut58 happy_x_2 of { happy_var_2 -> +	happyIn59+		 (flip (:) happy_var_1 happy_var_2+	)}}++happyReduce_97 = happySpecReduce_0  24# happyReduction_97+happyReduction_97  =  happyIn60+		 (AbsBNF.SepNone+	)++happyReduce_98 = happySpecReduce_2  24# happyReduction_98+happyReduction_98 happy_x_2+	happy_x_1+	 =  case happyOut37 happy_x_2 of { happy_var_2 -> +	happyIn60+		 (AbsBNF.SepTerm happy_var_2+	)}++happyReduce_99 = happySpecReduce_2  24# happyReduction_99+happyReduction_99 happy_x_2+	happy_x_1+	 =  case happyOut37 happy_x_2 of { happy_var_2 -> +	happyIn60+		 (AbsBNF.SepSepar happy_var_2+	)}++happyReduce_100 = happySpecReduce_1  25# happyReduction_100+happyReduction_100 happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	happyIn61+		 ((:[]) happy_var_1+	)}++happyReduce_101 = happySpecReduce_3  25# happyReduction_101+happyReduction_101 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	case happyOut61 happy_x_3 of { happy_var_3 -> +	happyIn61+		 ((:) happy_var_1 happy_var_3+	)}}++happyReduce_102 = happySpecReduce_3  26# happyReduction_102+happyReduction_102 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> +	case happyOut62 happy_x_3 of { happy_var_3 -> +	happyIn62+		 (AbsBNF.Cons happy_var_1 happy_var_3+	)}}++happyReduce_103 = happySpecReduce_1  26# happyReduction_103+happyReduction_103 happy_x_1+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> +	happyIn62+		 (happy_var_1+	)}++happyReduce_104 = happySpecReduce_2  27# happyReduction_104+happyReduction_104 happy_x_2+	happy_x_1+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> +	case happyOut66 happy_x_2 of { happy_var_2 -> +	happyIn63+		 (AbsBNF.App happy_var_1 happy_var_2+	)}}++happyReduce_105 = happySpecReduce_1  27# happyReduction_105+happyReduction_105 happy_x_1+	 =  case happyOut64 happy_x_1 of { happy_var_1 -> +	happyIn63+		 (happy_var_1+	)}++happyReduce_106 = happySpecReduce_1  28# happyReduction_106+happyReduction_106 happy_x_1+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> +	happyIn64+		 (AbsBNF.Var happy_var_1+	)}++happyReduce_107 = happySpecReduce_1  28# happyReduction_107+happyReduction_107 happy_x_1+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> +	happyIn64+		 (AbsBNF.LitInt happy_var_1+	)}++happyReduce_108 = happySpecReduce_1  28# happyReduction_108+happyReduction_108 happy_x_1+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> +	happyIn64+		 (AbsBNF.LitChar happy_var_1+	)}++happyReduce_109 = happySpecReduce_1  28# happyReduction_109+happyReduction_109 happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	happyIn64+		 (AbsBNF.LitString happy_var_1+	)}++happyReduce_110 = happySpecReduce_1  28# happyReduction_110+happyReduction_110 happy_x_1+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> +	happyIn64+		 (AbsBNF.LitDouble happy_var_1+	)}++happyReduce_111 = happySpecReduce_3  28# happyReduction_111+happyReduction_111 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut65 happy_x_2 of { happy_var_2 -> +	happyIn64+		 (AbsBNF.List happy_var_2+	)}++happyReduce_112 = happySpecReduce_3  28# happyReduction_112+happyReduction_112 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut62 happy_x_2 of { happy_var_2 -> +	happyIn64+		 (happy_var_2+	)}++happyReduce_113 = happySpecReduce_0  29# happyReduction_113+happyReduction_113  =  happyIn65+		 ([]+	)++happyReduce_114 = happySpecReduce_1  29# happyReduction_114+happyReduction_114 happy_x_1+	 =  case happyOut62 happy_x_1 of { happy_var_1 -> +	happyIn65+		 ((:[]) happy_var_1+	)}++happyReduce_115 = happySpecReduce_3  29# happyReduction_115+happyReduction_115 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut62 happy_x_1 of { happy_var_1 -> +	case happyOut65 happy_x_3 of { happy_var_3 -> +	happyIn65+		 ((:) happy_var_1 happy_var_3+	)}}++happyReduce_116 = happySpecReduce_1  30# happyReduction_116+happyReduction_116 happy_x_1+	 =  case happyOut64 happy_x_1 of { happy_var_1 -> +	happyIn66+		 ((:[]) happy_var_1+	)}++happyReduce_117 = happySpecReduce_2  30# happyReduction_117+happyReduction_117 happy_x_2+	happy_x_1+	 =  case happyOut64 happy_x_1 of { happy_var_1 -> +	case happyOut66 happy_x_2 of { happy_var_2 -> +	happyIn66+		 ((:) happy_var_1 happy_var_2+	)}}++happyReduce_118 = happySpecReduce_1  31# happyReduction_118+happyReduction_118 happy_x_1+	 =  case happyOut49 happy_x_1 of { happy_var_1 -> +	happyIn67+		 (AbsBNF.RHS (reverse happy_var_1)+	)}++happyReduce_119 = happySpecReduce_1  32# happyReduction_119+happyReduction_119 happy_x_1+	 =  case happyOut67 happy_x_1 of { happy_var_1 -> +	happyIn68+		 ((:[]) happy_var_1+	)}++happyReduce_120 = happySpecReduce_3  32# happyReduction_120+happyReduction_120 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut67 happy_x_1 of { happy_var_1 -> +	case happyOut68 happy_x_3 of { happy_var_3 -> +	happyIn68+		 ((:) happy_var_1 happy_var_3+	)}}++happyReduce_121 = happySpecReduce_1  33# happyReduction_121+happyReduction_121 happy_x_1+	 =  happyIn69+		 (AbsBNF.MNonempty+	)++happyReduce_122 = happySpecReduce_0  33# happyReduction_122+happyReduction_122  =  happyIn69+		 (AbsBNF.MEmpty+	)++happyReduce_123 = happySpecReduce_2  34# happyReduction_123+happyReduction_123 happy_x_2+	happy_x_1+	 =  case happyOut70 happy_x_1 of { happy_var_1 -> +	case happyOut72 happy_x_2 of { happy_var_2 -> +	happyIn70+		 (AbsBNF.RSeq happy_var_1 happy_var_2+	)}}++happyReduce_124 = happySpecReduce_1  34# happyReduction_124+happyReduction_124 happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	happyIn70+		 (happy_var_1+	)}++happyReduce_125 = happySpecReduce_3  35# happyReduction_125+happyReduction_125 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut71 happy_x_1 of { happy_var_1 -> +	case happyOut70 happy_x_3 of { happy_var_3 -> +	happyIn71+		 (AbsBNF.RAlt happy_var_1 happy_var_3+	)}}++happyReduce_126 = happySpecReduce_3  35# happyReduction_126+happyReduction_126 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut70 happy_x_1 of { happy_var_1 -> +	case happyOut70 happy_x_3 of { happy_var_3 -> +	happyIn71+		 (AbsBNF.RMinus happy_var_1 happy_var_3+	)}}++happyReduce_127 = happySpecReduce_1  35# happyReduction_127+happyReduction_127 happy_x_1+	 =  case happyOut70 happy_x_1 of { happy_var_1 -> +	happyIn71+		 (happy_var_1+	)}++happyReduce_128 = happySpecReduce_2  36# happyReduction_128+happyReduction_128 happy_x_2+	happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	happyIn72+		 (AbsBNF.RStar happy_var_1+	)}++happyReduce_129 = happySpecReduce_2  36# happyReduction_129+happyReduction_129 happy_x_2+	happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	happyIn72+		 (AbsBNF.RPlus happy_var_1+	)}++happyReduce_130 = happySpecReduce_2  36# happyReduction_130+happyReduction_130 happy_x_2+	happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	happyIn72+		 (AbsBNF.ROpt happy_var_1+	)}++happyReduce_131 = happySpecReduce_1  36# happyReduction_131+happyReduction_131 happy_x_1+	 =  happyIn72+		 (AbsBNF.REps+	)++happyReduce_132 = happySpecReduce_1  36# happyReduction_132+happyReduction_132 happy_x_1+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> +	happyIn72+		 (AbsBNF.RChar happy_var_1+	)}++happyReduce_133 = happySpecReduce_3  36# happyReduction_133+happyReduction_133 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut37 happy_x_2 of { happy_var_2 -> +	happyIn72+		 (AbsBNF.RAlts happy_var_2+	)}++happyReduce_134 = happySpecReduce_3  36# happyReduction_134+happyReduction_134 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut37 happy_x_2 of { happy_var_2 -> +	happyIn72+		 (AbsBNF.RSeqs happy_var_2+	)}++happyReduce_135 = happySpecReduce_1  36# happyReduction_135+happyReduction_135 happy_x_1+	 =  happyIn72+		 (AbsBNF.RDigit+	)++happyReduce_136 = happySpecReduce_1  36# happyReduction_136+happyReduction_136 happy_x_1+	 =  happyIn72+		 (AbsBNF.RLetter+	)++happyReduce_137 = happySpecReduce_1  36# happyReduction_137+happyReduction_137 happy_x_1+	 =  happyIn72+		 (AbsBNF.RUpper+	)++happyReduce_138 = happySpecReduce_1  36# happyReduction_138+happyReduction_138 happy_x_1+	 =  happyIn72+		 (AbsBNF.RLower+	)++happyReduce_139 = happySpecReduce_1  36# happyReduction_139+happyReduction_139 happy_x_1+	 =  happyIn72+		 (AbsBNF.RAny+	)++happyReduce_140 = happySpecReduce_3  36# happyReduction_140+happyReduction_140 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut73 happy_x_2 of { happy_var_2 -> +	happyIn72+		 (happy_var_2+	)}++happyReduce_141 = happySpecReduce_1  37# happyReduction_141+happyReduction_141 happy_x_1+	 =  case happyOut71 happy_x_1 of { happy_var_1 -> +	happyIn73+		 (happy_var_1+	)}++happyNewToken action sts stk [] =+	happyDoAction 46# 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 _ (TS _ 40) -> cont 40#;+	PT _ (TV happy_dollar_dollar) -> cont 41#;+	PT _ (TL happy_dollar_dollar) -> cont 42#;+	PT _ (TI happy_dollar_dollar) -> cont 43#;+	PT _ (TC happy_dollar_dollar) -> cont 44#;+	PT _ (TD happy_dollar_dollar) -> cont 45#;+	_ -> happyError' ((tk:tks), [])+	}++happyError_ explist 46# tk tks = happyError' (tks, explist)+happyError_ explist _ tk tks = happyError' ((tk:tks), explist)++happyThen :: () => Err a -> (a -> Err b) -> Err b+happyThen = (thenM)+happyReturn :: () => a -> Err a+happyReturn = (returnM)+happyThen1 m k tks = (thenM) m (\a -> k a tks)+happyReturn1 :: () => a -> b -> Err a+happyReturn1 = \a tks -> (returnM) a+happyError' :: () => ([(Token)], [String]) -> Err a+happyError' = (\(tokens, _) -> happyError tokens)+pLGrammar tks = happySomeParser where+ happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut41 x))++pLDef tks = happySomeParser where+ happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut42 x))++pListLDef tks = happySomeParser where+ happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (happyOut43 x))++pListIdent tks = happySomeParser where+ happySomeParser = happyThen (happyParse 3# tks) (\x -> happyReturn (happyOut44 x))++pGrammar tks = happySomeParser where+ happySomeParser = happyThen (happyParse 4# tks) (\x -> happyReturn (happyOut45 x))++pListDef tks = happySomeParser where+ happySomeParser = happyThen (happyParse 5# tks) (\x -> happyReturn (happyOut46 x))++pDef tks = happySomeParser where+ happySomeParser = happyThen (happyParse 6# tks) (\x -> happyReturn (happyOut47 x))++pItem tks = happySomeParser where+ happySomeParser = happyThen (happyParse 7# tks) (\x -> happyReturn (happyOut48 x))++pListItem tks = happySomeParser where+ happySomeParser = happyThen (happyParse 8# tks) (\x -> happyReturn (happyOut49 x))++pCat tks = happySomeParser where+ happySomeParser = happyThen (happyParse 9# tks) (\x -> happyReturn (happyOut50 x))++pLabel tks = happySomeParser where+ happySomeParser = happyThen (happyParse 10# tks) (\x -> happyReturn (happyOut51 x))++pLabelId tks = happySomeParser where+ happySomeParser = happyThen (happyParse 11# tks) (\x -> happyReturn (happyOut52 x))++pProfItem tks = happySomeParser where+ happySomeParser = happyThen (happyParse 12# tks) (\x -> happyReturn (happyOut53 x))++pIntList tks = happySomeParser where+ happySomeParser = happyThen (happyParse 13# tks) (\x -> happyReturn (happyOut54 x))++pListInteger tks = happySomeParser where+ happySomeParser = happyThen (happyParse 14# tks) (\x -> happyReturn (happyOut55 x))++pListIntList tks = happySomeParser where+ happySomeParser = happyThen (happyParse 15# tks) (\x -> happyReturn (happyOut56 x))++pListProfItem tks = happySomeParser where+ happySomeParser = happyThen (happyParse 16# tks) (\x -> happyReturn (happyOut57 x))++pArg tks = happySomeParser where+ happySomeParser = happyThen (happyParse 17# tks) (\x -> happyReturn (happyOut58 x))++pListArg tks = happySomeParser where+ happySomeParser = happyThen (happyParse 18# tks) (\x -> happyReturn (happyOut59 x))++pSeparation tks = happySomeParser where+ happySomeParser = happyThen (happyParse 19# tks) (\x -> happyReturn (happyOut60 x))++pListString tks = happySomeParser where+ happySomeParser = happyThen (happyParse 20# tks) (\x -> happyReturn (happyOut61 x))++pExp tks = happySomeParser where+ happySomeParser = happyThen (happyParse 21# tks) (\x -> happyReturn (happyOut62 x))++pExp1 tks = happySomeParser where+ happySomeParser = happyThen (happyParse 22# tks) (\x -> happyReturn (happyOut63 x))++pExp2 tks = happySomeParser where+ happySomeParser = happyThen (happyParse 23# tks) (\x -> happyReturn (happyOut64 x))++pListExp tks = happySomeParser where+ happySomeParser = happyThen (happyParse 24# tks) (\x -> happyReturn (happyOut65 x))++pListExp2 tks = happySomeParser where+ happySomeParser = happyThen (happyParse 25# tks) (\x -> happyReturn (happyOut66 x))++pRHS tks = happySomeParser where+ happySomeParser = happyThen (happyParse 26# tks) (\x -> happyReturn (happyOut67 x))++pListRHS tks = happySomeParser where+ happySomeParser = happyThen (happyParse 27# tks) (\x -> happyReturn (happyOut68 x))++pMinimumSize tks = happySomeParser where+ happySomeParser = happyThen (happyParse 28# tks) (\x -> happyReturn (happyOut69 x))++pReg2 tks = happySomeParser where+ happySomeParser = happyThen (happyParse 29# tks) (\x -> happyReturn (happyOut70 x))++pReg1 tks = happySomeParser where+ happySomeParser = happyThen (happyParse 30# tks) (\x -> happyReturn (happyOut71 x))++pReg3 tks = happySomeParser where+ happySomeParser = happyThen (happyParse 31# tks) (\x -> happyReturn (happyOut72 x))++pReg tks = happySomeParser where+ happySomeParser = happyThen (happyParse 32# tks) (\x -> happyReturn (happyOut73 x))++happySeq = happyDontSeq+++returnM :: a -> Err a+returnM = return++thenM :: Err a -> (a -> Err b) -> Err b+thenM = (>>=)++happyError :: [Token] -> Err a+happyError ts =+  Bad $ "syntax error at " ++ tokenPos ts +++  case ts of+    []      -> []+    [Err _] -> " due to lexer error"+    t:_     -> " before `" ++ id(prToken t) ++ "'"++myLexer = tokens+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<built-in>" #-}+{-# LINE 18 "<built-in>" #-}+{-# LINE 1 "/usr/local/lib/ghc-8.2.1/include/ghcversion.h" #-}+++++++++++++++++{-# LINE 19 "<built-in>" #-}+{-# LINE 1 "/var/folders/lg/qcd3v89j59l3m6520kr42bdm0000gn/T/ghc7892_0/ghc_2.h" #-}++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++{-# LINE 20 "<built-in>" #-}+{-# 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)) :: Bool)+#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Bool)+#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: 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++{-# LINE 43 "templates/GenericTemplate.hs" #-}++data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList+++++++++{-# LINE 65 "templates/GenericTemplate.hs" #-}+++{-# LINE 75 "templates/GenericTemplate.hs" #-}+++++++++++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 0#, 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)) :: 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 False+         action+          | check     = indexShortOffAddr happyTable off_i+          | 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 `mod` 16)+  where unbox_int (Happy_GHC_Exts.I# x) = x+++++++data HappyAddr = HappyA# Happy_GHC_Exts.Addr#+++-----------------------------------------------------------------------------+-- HappyState data type (not arrays)+++{-# LINE 180 "templates/GenericTemplate.hs" #-}++-----------------------------------------------------------------------------+-- 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 (0# 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  0# tk old_st (HappyCons ((action)) (sts)) +                                                (saved_tok `HappyStk` _ `HappyStk` stk) =+--      trace ("discarding state, depth " ++ show (length stk))  $+        happyDoAction 0# tk action 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 = 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 `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.+
runtime/Data/Matrix/Quad.hs view
@@ -63,19 +63,20 @@ mult p a b = a & b where   infixl 7  &   (&) :: RingP a => Mat x y a -> Mat z x a -> Mat z y (Pair a)-  Zero & x = Zero-  x & Zero = Zero-  One x & One x' = one (mul p x x')-  One x & Row a b = row (One x & a) (One x & b)-  Col a b & One x = col (a & One x) (b & One x)-  Row a b & Col a' b' = a & a' + b & b'-  Col a b & Row a' b' = quad (a & a') (a & b') (b & a') (b & b')-  Row a b & Quad a' b' c' d' = row (a & a' + b & c') (a & b' + b & d')-  Quad a b c d & Col a' c' = col (a & a' + b & c') (c & a' + d & c')+  Zero         & x                = Zero+  x            & Zero             = Zero+  One x        & One x'           = one (mul p x x')+  One x        & Row a b          = row (One x & a) (One x & b)+  Col a b      & One x            = col (a & One x) (b & One x)+  Row a b      & Col a' b'        = a & a' + b & b'+  Col a b      & Row a' b'        = quad (a & a') (a & b') (b & a') (b & b')+  Row a b      & Quad a' b' c' d' = row (a & a' + b & c') (a & b' + b & d')+  Quad a b c d & Col a' c'        = col (a & a' + b & c') (c & a' + d & c')   Quad a b c d & Quad a' b' c' d' =      quad (a & a' + b & c') (a & b' + b & d')           (c & a' + d & c') (c & b' + d & d') +  -- REDUNANT CLAUSE:   x & y = error $ "mult:" ++ intercalate "; " [showR x,showR y]  -- a variant of traverse. The constraint prevents to just use traverse.@@ -296,4 +297,3 @@                      (False , False) -> 'X'  scatterplot (T s (m :/: m')) = concat [show x ++ " " ++ show y ++ "\n" | (x,y,_) <- sparse s s m ++ sparse s s m']-
src/AbsBNF.hs view
@@ -1,14 +1,17 @@+-- Haskell data types for the abstract syntax.+-- Generated by the BNF converter.+ {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-}-module AbsBNF where --- Haskell module generated by the BNF converter-+module AbsBNF where -import Data.Data (Data,Typeable)+import Data.Data    (Data, Typeable) import GHC.Generics (Generic)+ newtype Ident = Ident String   deriving (Eq, Ord, Show, Read, Data, Typeable, Generic)+ data LGrammar = LGr [LDef]   deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) 
+ src/BNFC/Backend/Agda.hs view
@@ -0,0 +1,830 @@+{- |  Agda backend.+Generate bindings to Haskell data types for use in Agda.++Example for abstract syntax generated in Haskell backend:+@@+  newtype Ident = Ident String deriving (Eq, Ord, Show, Read)++  data Def = DFun Type Ident [Arg] [Stm]+    deriving (Eq, Ord, Show, Read)++  data Arg = ADecl Type Ident+    deriving (Eq, Ord, Show, Read)++  data Stm+      = SExp Exp+      | SInit Type Ident Exp+      | SBlock [Stm]+      | SIfElse Exp Stm Stm+    deriving (Eq, Ord, Show, Read)++  data Type = Type_bool | Type_int | Type_double | Type_void+    deriving (Eq, Ord, Show, Read)+@@+This should be accompanied by the following Agda code:+@@+  module <mod> where++  {-# FOREIGN GHC import qualified Data.Text #-}+  {-# FOREIGN GHC import CPP.Abs #-}+  {-# FOREIGN GHC import CPP.Print (printTree) #-}++  data Ident : Set where+    ident : List Char → Ident++  {-# COMPILE GHC Ident = data Ident (Ident) #-}++  data Def : Set where+    dFun : (t : Type) (x : Ident) (as : List Arg) (ss : List Stm) → Def++  {-# COMPILE GHC Def = data Def (DFun) #-}++  data Arg : Set where+    aDecl : (t : Type) (x : Ident) → Arg++  {-# COMPILE GHC Arg = data Arg (ADecl) #-}++  data Stm : Set where+    sExp : (e : Exp) → Stm+    sInit : (t : Type) (x : Ident) (e : Exp) → Stm+    sBlock : (ss : List Stm) → Stm+    sIfElse : (e : Exp) (s s' : Stm) → Stm++  {-# COMPILE GHC Stm = data Stm+    ( SExp+    | SInit+    | SBlock+    | SIfElse+    ) #-}++  data Type : Set where+    typeBool typeInt typeDouble typeVoid : Type++  {-# COMPILE GHC Type = data Type+    ( Type_bool+    | Type_int+    | Type_double+    | Type_void+    ) #-}++  -- Binding the BNFC pretty printers.++  printIdent  : Ident → String+  printIdent (ident s) = String.fromList s++  postulate+    printType    : Type    → String+    printExp     : Exp     → String+    printStm     : Stm     → String+    printArg     : Arg     → String+    printDef     : Def     → String+    printProgram : Program → String++  {-# COMPILE GHC printType    = \ t -> Data.Text.pack (printTree (t :: Type)) #-}+  {-# COMPILE GHC printExp     = \ e -> Data.Text.pack (printTree (e :: Exp))  #-}+  {-# COMPILE GHC printStm     = \ s -> Data.Text.pack (printTree (s :: Stm))  #-}+  {-# COMPILE GHC printArg     = \ a -> Data.Text.pack (printTree (a :: Arg))  #-}+  {-# COMPILE GHC printDef     = \ d -> Data.Text.pack (printTree (d :: Def))  #-}+  {-# COMPILE GHC printProgram = \ p -> Data.Text.pack (printTree (p :: Program)) #-}+@@+-}++{-# LANGUAGE CPP #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE NoImplicitPrelude #-}++#if __GLASGOW_HASKELL__ >= 800+{-# OPTIONS_GHC -fno-warn-unused-top-binds #-}+#endif++module BNFC.Backend.Agda (makeAgda) where++import Prelude'+import Control.Monad.State hiding (when)+import Data.Char+import Data.Function (on)+import Data.Functor  ((<$>))+import qualified Data.List as List+import Data.List.NonEmpty (NonEmpty((:|)))+import qualified Data.List.NonEmpty as NEList+import Data.Map (Map)+import qualified Data.Map as Map+import Data.Maybe (mapMaybe, isJust, fromJust)+import Data.Set (Set)+import qualified Data.Set as Set++import BNFC.CF+import BNFC.Backend.Base           (Backend, mkfile)+import BNFC.Backend.Haskell.HsOpts+import BNFC.Backend.Haskell.Utils  (parserName)+import BNFC.Options                (SharedOptions)+import BNFC.PrettyPrint+import BNFC.Utils                  (replace, when)++type NEList = NEList.NonEmpty++-- | How to print the types of constructors in Agda?++data ConstructorStyle+  = UnnamedArg  -- ^ Simply typed, like @E → S → S → S@.+  | NamedArg    -- ^ Dependently typed, like @(e : E) (s₁ s₂ : S) → S@.++-- | Import the builtin numeric types (content of some token categories)?++data ImportNumeric+  = YesImportNumeric  -- ^ Import the numeric types.+  | NoImportNumeric   -- ^ Don't import the numeric types.+  deriving (Eq)++-- | Entry-point for Agda backend.++makeAgda+  :: String         -- ^ Current time.+  -> SharedOptions  -- ^ Options.+  -> CF             -- ^ Grammar.+  -> Backend+makeAgda time opts cf = do+  -- Generate AST bindings.+  mkfile (agdaASTFile opts) $+    cf2AgdaAST time (agdaASTFileM opts) (absFileM opts) (printerFileM opts) cf+  -- Generate parser bindings.+  mkfile (agdaParserFile opts) $+    cf2AgdaParser time (agdaParserFileM opts) (agdaASTFileM opts) (absFileM opts) (errFileM opts) (happyFileM opts)+      layoutMod+      parserCats+  -- Generate an I/O library for the test parser.+  mkfile (agdaLibFile opts) $+    agdaLibContents (agdaLibFileM opts)+  -- Generate test parser.+  mkfile (agdaMainFile opts) $+    agdaMainContents (agdaMainFileM opts) (agdaLibFileM opts) (agdaASTFileM opts) (agdaParserFileM opts)+      (hasLayout cf)+      entryPoint+  where+  -- | Generate parsers for the following non-terminals.+  --   This includes parsers for 'CoercCat' and 'ListCat'.+  parserCats :: [Cat]+  parserCats =  allEntryPoints cf+  -- | Entrypoint for test parser:+  entryPoint :: Cat+  entryPoint = case parserCats of+    (c:_) -> c+    _     -> error $ "impossible: makeAgda.entryPoint: allEntryPoints cannot be empty"+    -- cannot be empty+  -- | In case the grammar makes use of layout, pass also the generated layout Haskell module.+  layoutMod :: Maybe String+  layoutMod = when (hasLayout cf) $ Just (layoutFileM opts)++-- | Generate AST bindings for Agda.+--+cf2AgdaAST+  :: String  -- ^ Current time.+  -> String  -- ^ Module name.+  -> String  -- ^ Haskell Abs module name.+  -> String  -- ^ Haskell Print module name.+  -> CF      -- ^ Grammar.+  -> Doc+cf2AgdaAST time mod amod pmod cf = vsep $+  [ preamble time "abstract syntax data types"+  , hsep [ "module", text mod, "where" ]+  , imports YesImportNumeric False+  , if usesString then hsep [ "String", equals, listT, charT ] else empty+  , importPragmas [amod, unwords [ pmod, "(printTree)" ]]+  , vsep $ map prToken tcats+  , absyn NamedArg dats+  -- , allTokenCats printToken tcats  -- seem to be included in printerCats+  , printers printerCats+  , empty -- Make sure we terminate the file with a new line.+  ]+  where+  -- The grammar categories (excluding list, coerce, and token categories):+  dats :: [Data]+  dats = cf2data cf+         -- getAbstractSyntax also includes list categories, which isn't what we need+  -- The user-defined token categories (including Ident).+  tcats :: [TokenCat]+  tcats = specialCats cf+  -- Bind printers for the following categories (involves lists and literals).+  printerCats :: [Cat]+  printerCats = map fst (getAbstractSyntax cf) ++ map TokenCat (cfgLiterals cf)+  usesString = "String" `elem` cfgLiterals cf+++-- | Generate parser bindings for Agda.+--+cf2AgdaParser+  :: String  -- ^ Current time.+  -> String  -- ^ Module name.+  -> String  -- ^ Agda AST module name.+  -> String  -- ^ Haskell Abs module name.+  -> String  -- ^ Haskell ErrM module name.+  -> String  -- ^ Haskell Par module name.+  -> Maybe String+             -- ^ Does the grammar use layout?  If yes, Haskell Layout module name.+  -> [Cat]   -- ^ Bind parsers for these non-terminals.+  -> Doc+cf2AgdaParser time mod astmod amod emod pmod layoutMod cats = vsep $+  [ preamble time "parsers"+  , hsep [ "module", text mod, "where" ]+  , imports NoImportNumeric (isJust layoutMod)+  , importCats astmod (List.nub cs)+  , importPragmas $ [amod, emod, pmod] ++ maybe [] (\ m -> ["qualified " ++ m]) layoutMod+  , "-- Error monad of BNFC"+  , prErrM+  , "-- Happy parsers"+  , parsers layoutMod cats+  , empty -- Make sure we terminate the file with a new line.+  ]+  where+  cs :: [String]+  cs = mapMaybe baseCat cats+  baseCat :: Cat -> Maybe String+  baseCat = \case+    Cat s         -> Just s+    CoercCat s _  -> Just s+    TokenCat "Char" -> Nothing+    TokenCat s    -> Just s+    ListCat c     -> baseCat c+    InternalCat{} -> Nothing++-- We prefix the Agda types with "#" to not conflict with user-provided nonterminals.+arrow, charT, intT, listT, stringT, stringFromListT :: Doc+arrow = "→"+charT           = "Char"     -- This is the BNFC name for token type Char!+intT            = "Integer"  -- This is the BNFC name for token type Integer!+doubleT         = "Double"   -- This is the BNFC name for token type Double!+boolT           = "#Bool"+listT           = "#List"+stringT         = "#String"+stringFromListT = "#stringFromList"++-- | Preamble: introductory comments.++preamble+  :: String  -- ^ Time stamp.+  -> String  -- ^ Brief characterization of file content.+  -> 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, "." ]+  ]++-- | Import statements.++imports+  :: ImportNumeric -- ^ Import also numeric types?+  -> Bool          -- ^ If have layout, import booleans.+  -> Doc+imports numeric layout = vcat . map prettyImport . concat $+  [ when layout+    [ ("Agda.Builtin.Bool",   [("Bool", boolT)]) ]+  , [ ("Agda.Builtin.Char",   [("Char", charT)]) ]+  , when (numeric == YesImportNumeric) importNumeric+  , [ ("Agda.Builtin.List",   [("List", listT)])+    , ("Agda.Builtin.String", [("String", stringT), ("primStringFromList", stringFromListT) ])+    ]+  ]+  where+  importNumeric :: [(String, [(String, Doc)])]+  importNumeric =+    [ ("Agda.Builtin.Float public", [("Float", doubleT)])+    , ("Agda.Builtin.Int   public", [("Int", intT)])+    ]+  prettyImport :: (String, [(String, Doc)]) -> Doc+  prettyImport (m, ren) = prettyList 2 pre lparen rparen semi $+    map (\ (x, d) -> hsep [text x, "to", d ]) ren+    where+    pre = hsep [ "open", "import", text m, "using", "()", "renaming" ]++-- | Import Agda AST.+--+importCats+  :: String    -- ^ Module for Agda AST.+  -> [String]  -- ^ Agda data types to import.+  -> Doc+importCats m cs = prettyList 2 pre lparen rparen semi $ map text cs+  where+  pre = hsep [ "open", "import", text m, "using" ]++-- | Import pragmas.+--+-- >>> importPragmas ["Foo.Abs", "Foo.Print (printTree)", "qualified Foo.Layout"]+-- {-# FOREIGN GHC import qualified Data.Text #-}+-- {-# FOREIGN GHC import Foo.Abs #-}+-- {-# FOREIGN GHC import Foo.Print (printTree) #-}+-- {-# FOREIGN GHC import qualified Foo.Layout #-}+--+importPragmas+  :: [String]  -- ^ Haskell modules to import.+  -> Doc+importPragmas mods = vcat $ map imp $ [ "qualified Data.Text" ] ++ mods+  where+  imp s = hsep [ "{-#", "FOREIGN", "GHC", "import", text s, "#-}" ]++-- * Bindings for the AST.++-- | Pretty-print types for token types similar to @Ident@.++prToken :: String -> Doc+prToken t =+  prettyData UnnamedArg t [(agdaLower t, [ListCat (Cat "Char")])]+  $++$+  pragmaData t [(t, [])]++-- | Pretty-print abstract syntax definition in Agda syntax.+--+--   We print this as one big mutual block rather than doing a+--   strongly-connected component analysis and topological+--   sort by dependency order.+--+absyn :: ConstructorStyle -> [Data] -> Doc+absyn _style [] = empty+absyn style  ds = vsep . ("mutual" :) . concatMap (map (nest 2) . prData style) $ ds++-- | Pretty-print Agda data types and pragmas for AST.+--+-- >>> vsep $ prData UnnamedArg (Cat "Nat", [ ("Zero", []), ("Suc", [Cat "Nat"]) ])+-- data Nat : Set where+--   zero : Nat+--   suc : Nat → Nat+-- <BLANKLINE>+-- {-# COMPILE GHC Nat = data Nat+--   ( Zero+--   | Suc+--   ) #-}+--+-- >>> vsep $ prData UnnamedArg (Cat "C", [ ("C1", []), ("C2", [Cat "C"]) ])+-- data C : Set where+--   c1 : C+--   c2 : C → C+-- <BLANKLINE>+-- {-# COMPILE GHC C = data C+--   ( C1+--   | C2+--   ) #-}+--+-- We return a list of 'Doc' rather than a single 'Doc' since want+-- to intersperse empty lines and indent it later.+-- If we intersperse the empty line(s) here to get a single 'Doc',+-- we will produce whitespace lines after applying 'nest'.+-- This is a bit of a design problem of the pretty print library:+-- there is no native concept of a blank line; @text ""@ is a bad hack.+--+prData :: ConstructorStyle -> Data -> [Doc]+prData style (Cat d, cs) = prData' style d cs+prData _     (c    , _ ) = error $ "prData: unexpected category " ++ show c++-- | Pretty-print Agda data types and pragmas.+--+-- >>> vsep $ prData' UnnamedArg "Err A" [ ("Ok", [Cat "A"]), ("Bad", [ListCat $ Cat "Char"]) ]+-- data Err A : Set where+--   ok : A → Err A+--   bad : #List Char → Err A+-- <BLANKLINE>+-- {-# COMPILE GHC Err = data Err+--   ( Ok+--   | Bad+--   ) #-}+--+prData' :: ConstructorStyle -> String -> [(Fun, [Cat])] -> [Doc]+prData' style d cs = [ prettyData style d cs , pragmaData (head $ words d) cs ]++-- | Pretty-print Agda binding for the BNFC Err monad.+--+-- Note: we use "Err" here since a category "Err" would also conflict+-- with BNFC's error monad in the Haskell backend.+prErrM :: Doc+prErrM = vsep $ prData' UnnamedArg "Err A"+  [ ("Ok" , [Cat "A"])+  , ("Bad", [ListCat $ Cat "Char"])+  ]++-- | Pretty-print AST definition in Agda syntax.+--+-- >>> prettyData UnnamedArg "Nat" [ ("zero", []), ("suc", [Cat "Nat"]) ]+-- data Nat : Set where+--   zero : Nat+--   suc : Nat → Nat+--+-- >>> prettyData UnnamedArg "C" [ ("C1", []), ("C2", [Cat "C"]) ]+-- data C : Set where+--   c1 : C+--   c2 : C → C+--+-- >>> :{+--   prettyData UnnamedArg "Stm"+--     [ ("block", [ListCat $ Cat "Stm"])+--     , ("while", [Cat "Exp", Cat "Stm"])+--     ]+-- :}+-- data Stm : Set where+--   block : #List Stm → Stm+--   while : Exp → Stm → Stm+--+-- >>> :{+--   prettyData NamedArg "Stm"+--     [ ("block", [ListCat $ Cat "Stm"])+--     , ("if", [Cat "Exp", Cat "Stm", Cat "Stm"])+--     ]+-- :}+-- data Stm : Set where+--   block : (ss : #List Stm) → Stm+--   if : (e : Exp) (s₁ s₂ : Stm) → Stm+--+prettyData :: ConstructorStyle -> String -> [(Fun, [Cat])] -> Doc+prettyData style d cs = vcat $+  [ hsep [ "data", text d, colon, "Set", "where" ] ] +++  map (nest 2 . prettyConstructor style d) cs++-- | Generate pragmas to bind Haskell AST to Agda.+--+-- >>> pragmaData "Empty" []+-- {-# COMPILE GHC Empty = data Empty () #-}+--+-- >>> pragmaData "Nat" [ ("zero", []), ("suc", [Cat "Nat"]) ]+-- {-# COMPILE GHC Nat = data Nat+--   ( zero+--   | suc+--   ) #-}+--+pragmaData :: String -> [(Fun, [Cat])] -> Doc+pragmaData d cs = prettyList 2 pre lparen (rparen <+> "#-}") "|" $+  map (prettyFun . fst) cs+  where+  pre = hsep [ "{-#", "COMPILE", "GHC", text d, equals, "data", text d ]++-- | Pretty-print since rule as Agda constructor declaration.+--+-- >>> prettyConstructor UnnamedArg "D" ("c", [Cat "A", Cat "B", Cat "C"])+-- c : A → B → C → D+-- >>> prettyConstructor undefined  "D" ("c1", [])+-- c1 : D+-- >>> prettyConstructor NamedArg "Stm" ("SIf", map Cat ["Exp", "Stm", "Stm"])+-- sIf : (e : Exp) (s₁ s₂ : Stm) → Stm+--+prettyConstructor :: ConstructorStyle -> String -> (Fun,[Cat]) -> Doc+prettyConstructor _style d (c, []) = hsep $+  [ prettyCon c+  , colon+  , text d+  ]+prettyConstructor style d (c, as) = hsep $+  [ prettyCon c+  , colon+  , prettyConstructorArgs style as+  , arrow+  , text d+  ]++-- | Print the constructor argument telescope.+--+-- >>> prettyConstructorArgs UnnamedArg [Cat "A", Cat "B", Cat "C"]+-- A → B → C+--+-- >>> prettyConstructorArgs NamedArg (map Cat ["Exp", "Stm", "Stm"])+-- (e : Exp) (s₁ s₂ : Stm)+--+prettyConstructorArgs :: ConstructorStyle -> [Cat] -> Doc+prettyConstructorArgs style as =+  case style of+    UnnamedArg -> hsep $ List.intersperse arrow ts+    NamedArg   -> hsep $ map (\ (x :| xs, t) -> parens (hsep [x, hsep xs, colon, t])) tel+  where+  ts  = map prettyCat as+  ns  = map (text . subscript) $ numberUniquely $ map nameSuggestion as+  tel = aggregateOn (render . snd) $ zip ns ts+  subscript (m, s) = maybe s (\ i -> s ++ [chr (ord '₀' + i)]) m+  -- Aggregate consecutive arguments of the same type.+  aggregateOn :: Eq c => ((a,b) -> c) -> [(a,b)] -> [(NEList a,b)]+  aggregateOn f+    = map (\ p -> (NEList.map fst p, snd (NEList.head p)))+    . NEList.groupBy ((==) `on` f)+    -- . NEList.groupWith f -- Too recent, fails stack-7.8 install++-- | Suggest the name of a bound variable of the given category.+--+-- >>> map nameSuggestion [ ListCat (Cat "Stm"), TokenCat "Var", Cat "Exp" ]+-- ["ss","x","e"]+--+nameSuggestion :: Cat -> String+nameSuggestion = \case+  ListCat c     -> nameSuggestion c ++ "s"+  CoercCat d _  -> nameFor d+  Cat d         -> nameFor d+  TokenCat{}    -> "x"+  InternalCat{} -> error "impossible: Backend.Agda.nameSuggestion: Cat cannot be InternalCat"++-- | Suggest the name of a bound variable of the given base category.+--+-- >>> map nameFor ["Stm","ABC","#String"]+-- ["s","a","s"]+--+nameFor :: String -> String+nameFor d = [ toLower $ head $ dropWhile (== '#') d ]++-- | Number duplicate elements in a list consecutively, starting with 1.+--+-- >>> numberUniquely ["a", "b", "a", "a", "c", "b"]+-- [(Just 1,"a"),(Just 1,"b"),(Just 2,"a"),(Just 3,"a"),(Nothing,"c"),(Just 2,"b")]+--+numberUniquely :: forall a. Ord a => [a] -> [(Maybe Int, a)]+numberUniquely as = mapM step as `evalState` Map.empty+  where+  -- First pass: determine frequency of each element.+  counts :: Frequency a+  counts = foldl (flip incr) Map.empty as+  -- Second pass: consecutively number elements with frequency > 1.+  step :: a -> State (Frequency a) (Maybe Int, a)+  step a = do+    -- If the element has a unique occurrence, we do not need to number it.+    let n = Map.findWithDefault (error "numberUniquelyWith") a counts+    if n == 1 then return (Nothing, a) else do+      -- Otherwise, increase the counter for that element and number it+      -- with the new value.+      modify $ incr a+      (,a) . Map.lookup a <$> get++-- | A frequency map.+--+--   NB: this type synonym should be local to 'numberUniquely', but+--   Haskell lacks local type synonyms.+--   https://gitlab.haskell.org/ghc/ghc/issues/4020+type Frequency a = Map a Int++-- | Increase the frequency of the given key.+incr :: Ord a => a -> Frequency a -> Frequency a+incr = Map.alter $ maybe (Just 1) (Just . succ)++-- * Generate bindings for the pretty printers++-- | Generate Agda code to print tokens.+--+-- >>> printToken "Ident"+-- printIdent : Ident → #String+-- printIdent (ident s) = #stringFromList s+--+printToken :: String -> Doc+printToken t = vcat+  [ hsep [ f, colon, text t, arrow, stringT ]+  , hsep [ f, lparen <> c <+> "s" <> rparen, equals, stringFromListT, "s" ]+  ]+  where+  f = text $ "print" ++ t+  c = text $ agdaLower t++-- | Generate Agda bindings to printers for AST.+--+-- >>> printers $ map Cat [ "Exp", "Stm" ]+-- -- Binding the pretty printers.+-- <BLANKLINE>+-- postulate+--   printExp : Exp → #String+--   printStm : Stm → #String+-- <BLANKLINE>+-- {-# COMPILE GHC printExp = \ e -> Data.Text.pack (printTree (e :: Exp)) #-}+-- {-# COMPILE GHC printStm = \ s -> Data.Text.pack (printTree (s :: Stm)) #-}+--+printers :: [Cat] -> Doc+printers []   = empty+printers cats =+  "-- Binding the pretty printers."+  $++$+  vcat ("postulate" : map (nest 2 . prettyTySig) cats)+  $++$+  vcat (map pragmaBind cats)+  where+  prettyTySig c = hsep [ agdaPrinterName c, colon, prettyCat c, arrow, stringT ]+  pragmaBind  c = hsep+    [ "{-#", "COMPILE", "GHC", agdaPrinterName c, equals, "\\", y, "->"+    , "Data.Text.pack", parens ("printTree" <+> parens (y <+> "::" <+> t)), "#-}"+    ]+    where+    y = text $ nameSuggestion c+    t = text $ show $ normCat c  -- Removes CoercCat.++-- | Bind happy parsers.+--+-- >>> parsers Nothing [ListCat (CoercCat "Exp" 2)]+-- postulate+--   parseListExp2 : #String → Err (#List Exp)+-- <BLANKLINE>+-- {-# COMPILE GHC parseListExp2 = pListExp2 . myLexer . Data.Text.unpack #-}+--+parsers+  :: Maybe String  -- ^ Grammar uses layout?  If yes, Haskell layout module name.+  -> [Cat]         -- ^ Bind parsers for these non-terminals.+  -> Doc+parsers layoutMod cats =+  vcat ("postulate" : map (nest 2 . prettyTySig) cats)+  $++$+  vcat (map pragmaBind cats)+  where+  -- When grammar uses layout, we parametrize the parser by a boolean @tl@+  -- that indicates whether top layout should be used for this parser.+  -- Also, we add @resolveLayout tl@ to the pipeline after lexing.+  prettyTySig :: Cat -> Doc+  prettyTySig c = hsep . concat $+   [ [ agdaParserName c, colon ]+   , when layout [ boolT, arrow ]+   , [ stringT, arrow, "Err", prettyCatParens c ]+   ]+  pragmaBind :: Cat -> Doc+  pragmaBind c = hsep . concat $+    [ [ "{-#", "COMPILE", "GHC", agdaParserName c, equals ]+    , when layout [ "\\", "tl", "->" ]+    , [ parserName c, "." ]+    , when layout [ hcat [ text lmod, ".", "resolveLayout" ], "tl", "." ]+    , [ "myLexer", ".", "Data.Text.unpack", "#-}" ]+    ]+  layout :: Bool+  layout = isJust layoutMod+  lmod :: String+  lmod = fromJust layoutMod++-- * Auxiliary functions++-- | Concatenate documents created from token categories,+--   separated by blank lines.+--+-- >>> allTokenCats text ["T", "U"]+-- T+-- <BLANKLINE>+-- U+allTokenCats :: (TokenCat -> Doc) -> [TokenCat] -> Doc+allTokenCats f = vsep . map f++-- | Pretty-print a rule name for Haskell.+prettyFun :: Fun -> Doc+prettyFun = text++-- | Pretty-print a rule name for Agda.+prettyCon :: Fun -> Doc+prettyCon = text . agdaLower++-- | Turn identifier to non-capital identifier.+--   Needed, since in Agda a constructor cannot overload a data type+--   with the same name.+--+-- >>> map agdaLower ["SFun","foo","ABC","HelloWorld","module","Type_int","C1"]+-- ["sFun","foo","aBC","helloWorld","module'","type-int","c1"]+--+agdaLower :: String -> String+agdaLower = avoidKeywords . updateHead toLower . replace '_' '-'+  -- WAS: replace '_' '\'' . BNFC.Utils.mkName agdaKeywords BNFC.Utils.MixedCase+  where+  updateHead _f []    = []+  updateHead f (x:xs) = f x : xs+  avoidKeywords s+    | s `Set.member` agdaKeywords = s ++ "\'"+    | otherwise = s++-- | A list of Agda keywords that would clash with generated names.+agdaKeywords :: Set String+agdaKeywords = Set.fromList $ words "abstract codata coinductive constructor data do eta-equality field forall hiding import in inductive infix infixl infixr instance let macro module mutual no-eta-equality open overlap pattern postulate primitive private public quote quoteContext quoteGoal quoteTerm record renaming rewrite Set syntax tactic unquote unquoteDecl unquoteDef using variable where with"++-- | Name of Agda parser binding (mentions precedence).+--+-- >>> agdaParserName $ ListCat $ CoercCat "Exp" 2+-- parseListExp2+--+agdaParserName :: Cat -> Doc+agdaParserName c = text $ "parse" ++ identCat c++-- | Name of Agda printer binding (does not mention precedence).+--+-- >>> agdaPrinterName $ ListCat $ CoercCat "Exp" 2+-- printListExp+--+agdaPrinterName :: Cat -> Doc+agdaPrinterName c = text $ "print" ++ identCat (normCat c)++-- | Pretty-print a category as Agda type.+--   Ignores precedence.+--+-- >>> prettyCat $ ListCat (CoercCat "Exp" 2)+-- #List Exp+--+prettyCat :: Cat -> Doc+prettyCat = \case+  Cat s        -> text s+  TokenCat s   -> text s+  CoercCat s _ -> text s+  ListCat c    -> listT <+> prettyCatParens c+  InternalCat  -> error "prettyCat: unexpected case InternalCat"++-- | Pretty-print category in parentheses, if 'compositeCat'.+prettyCatParens :: Cat -> Doc+prettyCatParens c = parensIf (compositeCat c) (prettyCat c)++-- | Is the Agda type corresponding to 'Cat' composite (or atomic)?+compositeCat :: Cat -> Bool+compositeCat = \case+  ListCat{} -> True+  _         -> False+++-- * Agda stub to test parser++-- | Write a simple IO library with fixed contents.++agdaLibContents+  :: String      -- ^ Name of Agda library module.+  -> Doc         -- ^ Contents of Agda library module.+agdaLibContents mod = vcat+  [ "-- Generated by BNFC."+  , "-- Basic I/O library."+  , ""+  , "module" <+> text mod <+> "where"+  , ""+  , "open import Agda.Builtin.IO     public using (IO)"+  , "open import Agda.Builtin.List   public using (List; []; _∷_)"+  , "open import Agda.Builtin.String public using (String)"+  , "  renaming (primStringFromList to stringFromList)"+  , "open import Agda.Builtin.Unit   public using (⊤)"+  , ""+  , "-- I/O monad."+  , ""+  , "postulate"+  , "  return : ∀ {a} {A : Set a} → A → IO A"+  , "  _>>=_  : ∀ {a b} {A : Set a} {B : Set b} → IO A → (A → IO B) → IO B"+  , ""+  , "{-# COMPILE GHC return = \\ _ _ -> return    #-}"+  , "{-# COMPILE GHC _>>=_  = \\ _ _ _ _ -> (>>=) #-}"+  , ""+  , "infixl 1 _>>=_ _>>_"+  , ""+  , "_>>_  : ∀ {b} {B : Set b} → IO ⊤ → IO B → IO B"+  , "_>>_ = λ m m' → m >>= λ _ → m'"+  , ""+  , "-- Co-bind and functoriality."+  , ""+  , "infixr 1 _=<<_ _<$>_"+  , ""+  , "_=<<_  : ∀ {a b} {A : Set a} {B : Set b} → (A → IO B) → IO A → IO B"+  , "k =<< m = m >>= k"+  , ""+  , "_<$>_  : ∀ {a b} {A : Set a} {B : Set b} → (A → B) → IO A → IO B"+  , "f <$> m = do"+  , "  a ← m"+  , "  return (f a)"+  , ""+  , "-- Binding basic I/O functionality."+  , ""+  , "{-# FOREIGN GHC import qualified Data.Text #-}"+  , "{-# FOREIGN GHC import qualified Data.Text.IO #-}"+  , "{-# FOREIGN GHC import qualified System.Exit #-}"+  , "{-# FOREIGN GHC import qualified System.Environment #-}"+  , "{-# FOREIGN GHC import qualified System.IO #-}"+  , ""+  , "postulate"+  , "  exitFailure    : ∀{a} {A : Set a} → IO A"+  , "  getArgs        : IO (List String)"+  , "  putStrLn       : String → IO ⊤"+  , "  readFiniteFile : String → IO String"+  , ""+  , "{-# COMPILE GHC exitFailure    = \\ _ _ -> System.Exit.exitFailure #-}"+  , "{-# COMPILE GHC getArgs        = fmap (map Data.Text.pack) System.Environment.getArgs #-}"+  , "{-# COMPILE GHC putStrLn       = System.IO.putStrLn . Data.Text.unpack #-}"+  , "{-# COMPILE GHC readFiniteFile = Data.Text.IO.readFile . Data.Text.unpack #-}"+  ]++agdaMainContents+  :: String      -- ^ Name of Agda main module.+  -> String      -- ^ Name of Agda library module.+  -> String      -- ^ Name of Agda AST module.+  -> String      -- ^ Name of Agda parser module.+  -> Bool        -- ^ Is the grammar using layout?+  -> Cat         -- ^ Category to parse.+  -> 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)"+  , "open import" <+> text lmod+  , "open import" <+> text amod <+> "using" <+> parens (printer)+  , "open import" <+> text pmod <+> "using" <+> parens ("Err;" <+> parser)+  , ""+  , "main : IO ⊤"+  , "main = do"+  , "  file ∷ [] ← getArgs where"+  , "    _ → do"+  , "      putStrLn \"usage: Main <SourceFile>\""+  , "      exitFailure"+  , "  Err.ok result ←" <+> parseFun <+> "<$> readFiniteFile file where"+  , "    Err.bad msg → do"+  , "      putStrLn \"PARSE FAILED\\n\""+  , "      putStrLn (stringFromList msg)"+  , "      exitFailure"+  , "  putStrLn \"PARSE SUCCESSFUL\\n\""+  , "  putStrLn" <+> parens (printer <+> "result")+  ]+  where+  printer  = agdaPrinterName c+  parser   = agdaParserName c+  parseFun = hsep . concat $ [ [parser], when layout ["true"] ]+    -- Permit use of top-level layout, if any.
src/BNFC/Backend/Base.hs view
@@ -11,6 +11,10 @@   ) where  import Control.Monad.Writer++import Data.Char (isSpace)+import qualified Data.List as List+ import System.Directory (createDirectoryIfMissing) import System.FilePath (dropFileName, (</>)) @@ -42,16 +46,19 @@ mkfile path content = tell [(path, 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--- So we do some typeclass magic+-- it is nice to be able to use both as argument to 'mkfile'.+-- So we do some typeclass magic. class FileContent a where     fileContentToString :: a -> String  instance FileContent [Char] where-    fileContentToString = id+    fileContentToString = deleteTrailingWhiteSpace  instance FileContent Doc where-    fileContentToString = render+    fileContentToString = deleteTrailingWhiteSpace . render++deleteTrailingWhiteSpace :: String -> String+deleteTrailingWhiteSpace = unlines . map (List.dropWhileEnd isSpace) . lines  -- | Write a set of files to disk. the first argument is the root directory -- inside which all the generated files will be written. This root directory
src/BNFC/Backend/C.hs view
@@ -37,14 +37,14 @@  makeC :: SharedOptions -> CF -> MkFiles () makeC opts cf = do-    let (hfile, cfile) = cf2CAbs prefix cf+    let (hfile, cfile) = cf2CAbs (linenumbers opts) prefix cf     mkfile "Absyn.h" hfile     mkfile "Absyn.c" cfile     let (flex, env) = cf2flex prefix cf     mkfile (name ++ ".l") flex-    let bison = cf2Bison prefix cf env+    let bison = cf2Bison (linenumbers opts) prefix cf env     mkfile (name ++ ".y") bison-    let header = mkHeaderFile cf (allCats cf) (allEntryPoints cf) env+    let header = mkHeaderFile (linenumbers opts) cf (allCats cf) (allEntryPoints cf) env     mkfile "Parser.h" header     let (skelH, skelC) = cf2CSkel cf     mkfile "Skeleton.h" skelH@@ -64,8 +64,8 @@         name = lang opts  -makefile :: String -> String -> Doc-makefile name prefix = vcat+makefile :: String -> String -> String -> Doc+makefile name prefix basename = vcat     [ "CC = gcc"     , "CCFLAGS = -g -W -Wall"     , ""@@ -88,8 +88,10 @@     , Makefile.mkRule "distclean" ["clean"]       [ "rm -f " ++ unwords         [ "Absyn.h", "Absyn.c", "Test.c", "Parser.c", "Parser.h", "Lexer.c",-          "Skeleton.c", "Skeleton.h", "Printer.c", "Printer.h", "Makefile " ]-        ++ name ++ ".l " ++ name ++ ".y " ++ name ++ ".tex "]+          "Skeleton.c", "Skeleton.h", "Printer.c", "Printer.h", basename,+          name ++ ".l", name ++ ".y", name ++ ".tex"+        ]+      ]     , Makefile.mkRule testName ["${OBJS}", "Test.o"]       [ "@echo \"Linking " ++ testName ++ "...\""       , "${CC} ${CCFLAGS} ${OBJS} Test.o -o " ++ testName ]@@ -144,7 +146,7 @@     "int main(int argc, char ** argv)",     "{",     "  FILE *input;",-    "  " ++ def ++ " parse_tree;",+    "  " ++ dat ++ " parse_tree;",     "  int quiet = 0;",     "  char *filename = NULL;",     "",@@ -173,12 +175,12 @@     "  parse_tree = p" ++ def ++ "(input);",     "  if (parse_tree)",     "  {",-    "    printf(\"\\nParse Succesful!\\n\");",+    "    printf(\"\\nParse Successful!\\n\");",     "    if (!quiet) {",     "      printf(\"\\n[Abstract Syntax]\\n\");",-    "      printf(\"%s\\n\\n\", show" ++ def ++ "(parse_tree));",+    "      printf(\"%s\\n\\n\", show" ++ dat ++ "(parse_tree));",     "      printf(\"[Linearized Tree]\\n\");",-    "      printf(\"%s\\n\\n\", print" ++ def ++ "(parse_tree));",+    "      printf(\"%s\\n\\n\", print" ++ dat ++ "(parse_tree));",     "    }",     "    return 0;",     "  }",@@ -187,10 +189,15 @@     ""    ]   where-   def = show $ head (allEntryPoints cf)+  cat :: Cat+  cat = head $ allEntryPoints cf+  def :: String+  def = identCat cat+  dat :: String+  dat = identCat . normCat $ cat -mkHeaderFile :: CF -> [Cat] -> [Cat] -> [(a, String)] -> String-mkHeaderFile cf cats eps env = unlines+mkHeaderFile :: RecordPositions -> CF -> [Cat] -> [Cat] -> [(a, String)] -> String+mkHeaderFile _ cf cats eps env = unlines  [   "#ifndef PARSER_HEADER_FILE",   "#define PARSER_HEADER_FILE",@@ -205,8 +212,17 @@   "  char* string_;",   concatMap mkVar cats ++ "} YYSTYPE;",   "",+  -- https://www.gnu.org/software/bison/manual/html_node/Location-Type.html#Location-Type+  "typedef struct YYLTYPE",+  "{",+  "  int first_line;",+  "  int first_column;",+  "  int last_line;",+  "  int last_column;",+  "} YYLTYPE;",   "#define _ERROR_ 258",   mkDefines (259::Int) env,+  "extern YYLTYPE yylloc;",   "extern YYSTYPE yylval;",   concatMap mkFunc eps,   "",@@ -217,20 +233,23 @@   mkVar _ = ""   mkDefines n [] = mkString n   mkDefines n ((_,s):ss) = ("#define " ++ s +++ (show n) ++ "\n") ++ (mkDefines (n+1) ss)-  mkString n =  if isUsedCat cf catString+  mkString n =  if isUsedCat cf (TokenCat catString)    then ("#define _STRING_ " ++ show n ++ "\n") ++ mkChar (n+1)    else mkChar n-  mkChar n =  if isUsedCat cf catChar+  mkChar n =  if isUsedCat cf (TokenCat catChar)    then ("#define _CHAR_ " ++ show n ++ "\n") ++ mkInteger (n+1)    else mkInteger n-  mkInteger n =  if isUsedCat cf catInteger+  mkInteger n =  if isUsedCat cf (TokenCat catInteger)    then ("#define _INTEGER_ " ++ show n ++ "\n") ++ mkDouble (n+1)    else mkDouble n-  mkDouble n =  if isUsedCat cf catDouble+  mkDouble n =  if isUsedCat cf (TokenCat catDouble)    then ("#define _DOUBLE_ " ++ show n ++ "\n") ++ mkIdent(n+1)    else mkIdent n-  mkIdent n =  if isUsedCat cf catIdent+  mkIdent n =  if isUsedCat cf (TokenCat catIdent)    then ("#define _IDENT_ " ++ show n ++ "\n")    else ""-  mkFunc s | normCat s == s = identCat s ++ " p" ++ identCat s ++ "(FILE *inp);\n"-  mkFunc _ = ""+  -- Andreas, 2019-04-29, issue #210: generate parsers also for coercions+  mkFunc c = concat+    [ identCat (normCat c) ++ "  p" ++ identCat c ++ "(FILE *inp);\n"+    , identCat (normCat c) ++ " ps" ++ identCat c ++ "(const char *str);\n"+    ]
src/BNFC/Backend/C/CFtoBisonC.hs view
@@ -41,11 +41,13 @@  module BNFC.Backend.C.CFtoBisonC (cf2Bison, startSymbol) where -import BNFC.CF-import Data.List (intercalate)+import Data.Char (toLower)+import Data.List (intercalate, nub) import Data.Maybe (fromMaybe)++import BNFC.CF import BNFC.Backend.Common.NamedVariables hiding (varName)-import Data.Char (toLower)+import BNFC.Options (RecordPositions(..)) import BNFC.Utils ((+++))  --This follows the basic structure of CFtoHappy.@@ -57,8 +59,8 @@ type MetaVar     = String  --The environment comes from the CFtoFlex-cf2Bison :: String -> CF -> SymEnv -> String-cf2Bison name cf env+cf2Bison :: RecordPositions -> String -> CF -> SymEnv -> String+cf2Bison rp name cf env  = unlines     [header name cf,      union (allCatsNorm cf),@@ -68,61 +70,102 @@      specialToks cf,      startSymbol cf,      "%%",-     prRules (rulesForBison cf env)+     prRules (rulesForBison rp cf env),+     errorHandler name     ]   where    user = fst (unzip (tokenPragmas cf))  header :: String -> CF -> String header name cf = unlines-         ["/* This Bison file was machine-generated by BNFC */",-          "%{",-          "#include <stdlib.h>",-          "#include <stdio.h>",-          "#include <string.h>",-          "#include \"Absyn.h\"",-          "#define initialize_lexer " ++ name ++ "_initialize_lexer",-          "extern int yyparse(void);",-          "extern int yylex(void);",-          "int yy_mylinenumber;",-          "extern int initialize_lexer(FILE * inp);",-          "void yyerror(const char *str)",-          "{",-          "  extern char *" ++ name ++ "text;",-          "  fprintf(stderr,\"error: line %d: %s at %s\\n\",",-          "    yy_mylinenumber + 1, str, " ++ name ++ "text);",-          "}",-          "",-          -- M.F. 2004-09-17 changed allEntryPoints to allCatsIdNorm. Seems to fix the [Ty2] bug.-          unlines $ map parseMethod (allCatsNorm cf), -- (allEntryPoints cf),-          concatMap reverseList (filter isList (allCatsNorm cf)),-          "%}"-          ]+  [ "/* This Bison file was machine-generated by BNFC */"+  , "%locations"+  , "%{"+  , "#include <stdlib.h>"+  , "#include <stdio.h>"+  , "#include <string.h>"+  , "#include \"Absyn.h\""+  , "typedef struct " ++ name ++ "_buffer_state *YY_BUFFER_STATE;"+  , "YY_BUFFER_STATE " ++ name ++ "_scan_string(const char *str);"+  , "void " ++ name ++ "_delete_buffer(YY_BUFFER_STATE buf);"+  , "extern int yyparse(void);"+  , "extern int yylex(void);"+  , "extern int " ++ name ++ "_init_lexer(FILE * inp);"+    -- this must be deferred until yylloc is defined+  , "extern void yyerror(const char *str);"+  , ""+  , unlines $ map parseResult $ nub $ map normCat eps+  , unlines $ map (parseMethod name) eps+  , concatMap reverseList $ filter isList $ allCatsNorm cf+  , "%}"+  ]+  where+  eps = 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. +-- | Generates declaration and initialization of the @YY_RESULT@ for a parser.+--+--   Different parsers (for different precedences of the same category)+--   share such a declaration.+--+--   Expects a normalized category.+parseResult :: Cat -> String+parseResult cat =+  dat +++ resultName dat +++ "= 0;"+  where+  dat = identCat cat++errorHandler :: String -> String+errorHandler name = unlines+  [ "%%"+  , "void yyerror(const char *str)"+  , "{"+  , "  extern char *" ++ name ++ "text;"+  , "  fprintf(stderr,\"error: %d,%d: %s at %s\\n\","+  , "  " ++ name ++ "lloc.first_line, " ++ name ++ "lloc.first_column, str, " ++ name ++ "text);"+  , "}"+  ]+ --This generates a parser method for each entry point.-parseMethod :: Cat -> String-parseMethod cat =---  if normCat cat /= cat      M.F. 2004-09-17 comment. No duplicates from allCatsIdNorm---  then ""---  else-  unlines-  [-   cat' +++ resultName cat' +++ "= 0;",-   cat' ++ " p" ++ cat' ++ "(FILE *inp)",-   "{",-   "  initialize_lexer(inp);",-   "  if (yyparse())",-   "  { /* Failure */",-   "    return 0;",-   "  }",-   "  else",-   "  { /* Success */",-   "    return" +++ resultName cat' ++ ";",-   "  }",-   "}"+parseMethod :: String -> Cat -> String+parseMethod name cat = unlines $+  [ dat ++ " p" ++ parser ++ "(FILE *inp)"+  , "{"+  , "  " ++ name ++ "_init_lexer(inp);"+  , "  int result = yyparse();"+  , "  if (result)"+  , "  { /* Failure */"+  , "    return 0;"+  , "  }"+  , "  else"+  , "  { /* Success */"+  , "    return" +++ res ++ ";"+  , "  }"+  , "}"+  , dat ++ " ps" ++ parser ++ "(const char *str)"+  , "{"+  , "  YY_BUFFER_STATE buf;"+  , "  " ++ name ++ "_init_lexer(0);"+  , "  buf = " ++ name ++ "_scan_string(str);"+  , "  int result = yyparse();"+  , "  " ++ name ++ "_delete_buffer(buf);"+  , "  if (result)"+  , "  { /* Failure */"+  , "    return 0;"+  , "  }"+  , "  else"+  , "  { /* Success */"+  , "    return" +++ res ++ ";"+  , "  }"+  , "}"   ]- where-  cat' = identCat (normCat cat)+  where+  dat    = identCat (normCat cat)+  parser = identCat cat+  res    = resultName dat  --This method generates list reversal functions for each list type. reverseList :: Cat -> String@@ -175,13 +218,24 @@    typeNT _ _ = ""  --declares terminal types.+-- token name "literal"+-- "Syntax error messages passed to yyerror from the parser will reference the literal string instead of the token name."+-- https://www.gnu.org/software/bison/manual/html_node/Token-Decl.html tokens :: [UserDef] -> SymEnv -> String tokens user = concatMap (declTok user)  where-  declTok u (s,r) = if s `elem` map show u-    then "%token<string_> " ++ r ++ "    /*   " ++ s ++ "   */\n"-    else "%token " ++ r ++ "    /*   " ++ s ++ "   */\n"+  declTok u (s,r) = if s `elem` u+    then "%token<string_> " ++ r ++ "    /*   " ++ cStringEscape s ++ "   */\n"+    else "%token " ++ r ++ "    /*   " ++ cStringEscape s ++ "   */\n" +-- | Escape characters inside a C string.+cStringEscape :: String -> String+cStringEscape = concatMap escChar+  where+    escChar c+      | c `elem` ("\"\\" :: String) = '\\':[c]+      | otherwise = [c]+ specialToks :: CF -> String specialToks cf = concat [   ifC catString "%token<string_> _STRING_\n",@@ -191,20 +245,20 @@   ifC catIdent "%token<string_> _IDENT_\n"   ]    where-    ifC cat s = if isUsedCat cf cat then s else ""+    ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""  startSymbol :: CF -> String startSymbol cf = "%start" +++ identCat (firstEntry cf)  --The following functions are a (relatively) straightforward translation --of the ones in CFtoHappy.hs-rulesForBison :: CF -> SymEnv -> Rules-rulesForBison cf env = map mkOne $ ruleGroups cf where-  mkOne (cat,rules) = constructRule cf env rules cat+rulesForBison :: RecordPositions -> CF -> SymEnv -> Rules+rulesForBison rp cf env = map mkOne $ ruleGroups cf where+  mkOne (cat,rules) = constructRule rp cf env rules cat  -- For every non-terminal, we construct a set of rules.-constructRule :: CF -> SymEnv -> [Rule] -> NonTerminal -> (NonTerminal,[(Pattern,Action)])-constructRule cf env rules nt = (nt,[(p, generateAction (identCat (normCat nt)) (funRule r) b m +++ result) |+constructRule :: RecordPositions -> CF -> SymEnv -> [Rule] -> NonTerminal -> (NonTerminal,[(Pattern,Action)])+constructRule rp cf env rules nt = (nt,[(p, generateAction rp (identCat (normCat nt)) (funRule r) b m +++ result) |      r0 <- rules,      let (b,r) = if isConsFun (funRule r0) && elem (valCat r0) revs                    then (True,revSepListRule r0)@@ -217,27 +271,28 @@    result = if isEntry nt then resultName (identCat (normCat nt)) ++ "= $$;" else ""  -- | Generates a string containing the semantic action.--- >>> generateAction "Foo" "Bar" False ["$1"]+-- >>> generateAction NoRecordPositions "Foo" "Bar" False ["$1"] -- "make_Bar($1);"--- >>> generateAction "Foo" "_" False ["$1"]+-- >>> generateAction NoRecordPositions "Foo" "_" False ["$1"] -- "$1;"--- >>> generateAction "ListFoo" "[]" False []+-- >>> generateAction NoRecordPositions "ListFoo" "[]" False [] -- "0;"--- >>> generateAction "ListFoo" "(:[])" False ["$1"]+-- >>> generateAction NoRecordPositions "ListFoo" "(:[])" False ["$1"] -- "make_ListFoo($1, 0);"--- >>> generateAction "ListFoo" "(:)" False ["$1","$2"]+-- >>> generateAction NoRecordPositions "ListFoo" "(:)" False ["$1","$2"] -- "make_ListFoo($1, $2);"--- >>> generateAction "ListFoo" "(:)" True ["$1","$2"]+-- >>> generateAction NoRecordPositions "ListFoo" "(:)" True ["$1","$2"] -- "make_ListFoo($2, $1);"-generateAction :: String -> Fun -> Bool -> [MetaVar] -> Action-generateAction nt f b ms-  | isCoercion f = unwords ms ++ ";"+generateAction :: RecordPositions -> String -> Fun -> Bool -> [MetaVar] -> Action+generateAction rp nt f b ms+  | isCoercion f = unwords ms ++ ";" ++ loc   | isNilFun f   = "0;"   | isOneFun f   = concat ["make_", nt, "(", intercalate ", " ms', ", 0);"]   | isConsFun f  = concat ["make_", nt, "(", intercalate ", " ms', ");"]-  | otherwise    = concat ["make_", f, "(", intercalate ", " ms', ");"]+  | otherwise    = concat ["make_", f, "(", intercalate ", " ms', ");", loc]  where   ms' = if b then reverse ms else ms+  loc = if rp == RecordPositions then " $$->line_number = @$.first_line; $$->char_number = @$.first_column;" else ""  -- Generate patterns and a set of metavariables indicating -- where in the pattern the non-terminal@@ -247,8 +302,9 @@   its -> (unwords (map mkIt its), metas its)  where    mkIt i = case i of-     Left c -> fromMaybe (typeName (identCat c)) (lookup (show c) env)-     Right s -> fromMaybe s (lookup s env)+     Left (TokenCat s) -> fromMaybe (typeName s) $ lookup s env+     Left c  -> identCat c+     Right s -> fromMaybe s $ lookup s env    metas its = [revIf c ('$': show i) | (i,Left c) <- zip [1 :: Int ..] its]    revIf c m = if not (isConsFun (funRule r)) && elem c revs                  then "reverse" ++ identCat (normCat c) ++ "(" ++ m ++ ")"
src/BNFC/Backend/C/CFtoCAbs.hs view
@@ -47,117 +47,114 @@ import BNFC.CF import BNFC.PrettyPrint import BNFC.Utils((+++))+import BNFC.Options (RecordPositions(..)) import BNFC.Backend.Common.NamedVariables import Data.Function (on) import Data.List import Data.Char(toLower)  ---The result is two files (.H file, .C file)-cf2CAbs :: String -> CF -> (String, String)-cf2CAbs _ cf = (mkHFile cf, mkCFile cf)-+-- | The result is two files (.H file, .C file)+cf2CAbs+  :: RecordPositions+  -> String -- ^ Ignored.+  -> CF     -- ^ Grammar.+  -> (String, String) -- ^ @.H@ file, @.C@ file.+cf2CAbs rp _ cf = (mkHFile rp cf, mkCFile cf)  {- **** Header (.H) File Functions **** -} ---Makes the Header file.-mkHFile :: CF -> String-mkHFile cf = unlines- [-  "#ifndef ABSYN_HEADER",-  "#define ABSYN_HEADER",-  "",-  header,-  prTypeDefs user,-  "/********************   Forward Declarations    ********************/\n",-  concatMap prForward classes,-  "",-  "/********************   Abstract Syntax Classes    ********************/\n",-  concatMap prDataH (getAbstractSyntax cf),-  "",-  "#endif"- ]- where+-- | Makes the Header file.++mkHFile :: RecordPositions -> CF -> String+mkHFile rp cf = unlines+    [ "#ifndef ABSYN_HEADER"+    , "#define ABSYN_HEADER"+    , ""+    , header+    , prTypeDefs user+    , "/********************   Forward Declarations    ********************/\n"+    , concatMap prForward classes+    , ""+    , "/********************   Abstract Syntax Classes    ********************/\n"+    , concatMap (prDataH rp) (getAbstractSyntax cf)+    , ""+    , "#endif"+    ]+  where   user = fst (unzip (tokenPragmas cf))   header = "/* C++ Abstract Syntax Interface generated by the BNF Converter.*/\n"+  rules :: [String]   rules = getRules cf-  classes = nub (rules ++ getClasses (allCats cf))+  classes = nub (rules ++ getClasses (allCatsNorm cf))   prForward s | not (isCoercion s) = unlines-    [-     "struct " ++ s ++ "_;",-     "typedef struct " ++ s ++ "_ *" ++ s ++ ";"+    [ "struct " ++ s ++ "_;"+    , "typedef struct " ++ s ++ "_ *" ++ s ++ ";"     ]   prForward _ = ""-  getRules cf = (map testRule (cfgRules cf))-  getClasses = map show . filter (\c -> identCat (normCat c) == show c)-  testRule (Rule f c _) =-   if isList c-   then if isConsFun f-     then identCat (normCat c)-     else "_" --ignore this-   else "_"+  getRules cf = map testRule (cfgRules cf)+  getClasses = map show . filter isDataCat+  testRule (Rule f c _)+    | isList c && isConsFun f = identCat (normCat c)+    | otherwise = "_"  -- | Prints struct definitions for all categories.-prDataH :: Data -> String-prDataH (cat, rules) =-   if isList cat-      then unlines-       [-        "struct " ++ c' ++ "_",-        "{",-        "  " ++ mem +++ varName mem ++ ";",-        "  " ++ c' +++ varName c' ++ ";",-        "};",-        "",-        c' ++ " make_" ++ c' ++ "(" ++ mem ++ " p1, " ++ c' ++ " p2);"-       ]-      else unlines-       [-        "struct " ++ show cat ++ "_",--        "{",-        "  enum { " ++ intercalate ", " (map prKind rules) ++ " } kind;",-        "  union",-        "  {",-        concatMap prUnion rules ++ "  } u;",-        "};",-        "",-        concatMap (prRuleH cat) rules-       ]- where-  c' = identCat (normCat cat)-  mem = identCat (normCatOfList cat)-  prKind (fun, _) = "is_" ++ fun-  prUnion (_, []) = ""-  prUnion (fun, cats) = "    struct { " ++ (render $ prInstVars (getVars cats)) ++ " } " ++ (memName fun) ++ ";\n"+prDataH :: RecordPositions -> Data -> String+prDataH rp (cat, rules)+  | isList cat = unlines+      [ "struct " ++ c' ++ "_"+      , "{"+      , "  " ++ mem +++ varName mem ++ ";"+      , "  " ++ c' +++ varName c' ++ ";"+      , "};"+      , ""+      , c' ++ " make_" ++ c' ++ "(" ++ mem ++ " p1, " ++ c' ++ " p2);"+      ]+  | otherwise = unlines+      [ "struct " ++ show cat ++ "_"+      , "{"+      , if rp == RecordPositions then "  int line_number, char_number;" else ""+      , "  enum { " ++ intercalate ", " (map prKind rules) ++ " } kind;"+      , "  union"+      , "  {"+      , concatMap prUnion rules ++ "  } u;"+      , "};"+      , ""+      , concatMap (prRuleH cat) rules+      ]+  where+    c' = identCat (normCat cat)+    mem = identCat (normCatOfList cat)+    prKind (fun, _) = "is_" ++ fun+    prUnion (_, []) = ""+    prUnion (fun, cats) = "    struct { " ++ (render $ prInstVars (getVars cats)) ++ " } " ++ (memName fun) ++ ";\n"  ---Interface definitions for rules vary on the type of rule.+-- | Interface definitions for rules vary on the type of rule. prRuleH :: Cat -> (Fun, [Cat]) -> String prRuleH c (fun, cats) =     if isNilFun fun || isOneFun fun || isConsFun fun     then ""  --these are not represented in the AbSyn     else --a standard rule       show c ++ " make_" ++ fun ++ "(" ++ (prParamsH 0 (getVars cats)) ++ ");\n"-   where-     prParamsH :: Int -> [(String, a)] -> String-     prParamsH _ [] = "void"-     prParamsH n ((t,_):[]) = t ++ " p" ++ (show n)-     prParamsH n ((t,_):vs) = (t ++ " p" ++ (show n) ++ ", ") ++ (prParamsH (n+1) vs)+  where+    prParamsH :: Int -> [(String, a)] -> String+    prParamsH _ [] = "void"+    prParamsH n ((t,_):[]) = t ++ " p" ++ (show n)+    prParamsH n ((t,_):vs) = (t ++ " p" ++ (show n) ++ ", ") ++ (prParamsH (n+1) vs) ---typedefs in the Header make generation much nicer.+-- typedefs in the Header make generation much nicer. prTypeDefs user = unlines-  [-   "/********************   TypeDef Section    ********************/",-   "typedef int Integer;",-   "typedef char Char;",-   "typedef double Double;",-   "typedef char* String;",-   "typedef char* Ident;",-   concatMap prUserDef user-  ]- where-  prUserDef s = "typedef char* " ++ show s ++ ";\n"+    [ "/********************   TypeDef Section    ********************/"+    , "typedef int Integer;"+    , "typedef char Char;"+    , "typedef double Double;"+    , "typedef char* String;"+    , "typedef char* Ident;"+    , concatMap prUserDef user+    ]+  where+    prUserDef s = "typedef char* " ++ s ++ ";\n"  -- | A class's instance variables. Print the variables declaration by grouping -- together the variables of the same type.@@ -176,28 +173,24 @@  {- **** Implementation (.C) File Functions **** -} ---Makes the .C file+-- | Makes the .C file mkCFile :: CF -> String mkCFile cf = unlines- [-  header,-  concatMap (render . prDataC) (getAbstractSyntax cf)- ]- where+  [ header+  , concatMap (render . prDataC) (getAbstractSyntax cf)+  ]+  where   header = unlines-   [-    "/* C Abstract Syntax Implementation generated by the BNF Converter. */",-    "",-    "#include <stdio.h>",-    "#include <stdlib.h>",-    "#include \"Absyn.h\"",-    ""-   ]+    [ "/* C Abstract Syntax Implementation generated by the BNF Converter. */"+    , ""+    , "#include <stdio.h>"+    , "#include <stdlib.h>"+    , "#include \"Absyn.h\""+    , ""+    ] ---This is not represented in the implementation.---This is not represented in the implementation. prDataC :: Data -> Doc-prDataC (cat, rules) = vsep $ map (prRuleC cat) rules+prDataC (cat, rules) = vcat' $ map (prRuleC cat) rules  -- | Classes for rules vary based on the type of rule. --@@ -206,7 +199,7 @@ -- <BLANKLINE> -- -- * Linked list case. These are all built-in list functions.--- Later we could include things like lookup,insert,delete,etc.+-- Later we could include things like lookup, insert, delete, etc. -- >>> prRuleC (ListCat (Cat "A")) ("(:)", [Cat "A", Cat "B", Cat "B"]) -- /********************   ListA    ********************/ -- ListA make_ListA(A p1, ListA p2)@@ -241,15 +234,15 @@ -- } prRuleC :: Cat -> (String, [Cat]) -> Doc prRuleC _ (fun, _) | isNilFun fun || isOneFun fun = empty-prRuleC cat (fun, _) | isConsFun fun = vsep+prRuleC cat (fun, _) | isConsFun fun = vcat'     [ "/********************   " <> c <> "    ********************/"     , c <+> "make_" <> c <> parens (text m <+> "p1" <> "," <+> c <+> "p2")     , lbrace-    , nest 4 $ vsep+    , nest 4 $ vcat'         [ c <+> "tmp = (" <> c <> ") malloc(sizeof(*tmp));"         , "if (!tmp)"         , lbrace-        , nest 4 $ vsep+        , nest 4 $ vcat'             [ "fprintf(stderr, \"Error: out of memory when allocating " <> c <> "!\\n\");"             , "exit(1);" ]         , rbrace@@ -265,11 +258,11 @@                                 -- expect a list category     m = identCat (normCat c')     m' = map toLower m ++ "_"-prRuleC c (fun, cats) = vsep+prRuleC c (fun, cats) = vcat'     [ text $ "/********************   " ++ fun ++ "    ********************/"     , prConstructorC c fun vs cats ]-   where-     vs = getVars cats+  where+    vs = getVars cats  -- | The constructor just assigns the parameters to the corresponding instance -- variables.@@ -288,14 +281,14 @@ --     return tmp; -- } prConstructorC :: Cat -> String -> [IVar] -> [Cat] -> Doc-prConstructorC cat c vs cats = vsep+prConstructorC cat c vs cats = vcat'     [ text (cat' ++ " make_" ++ c) <> parens args     , lbrace-    , nest 4 $ vsep+    , nest 4 $ vcat'         [ text $ cat' ++ " tmp = (" ++ cat' ++ ") malloc(sizeof(*tmp));"         , text "if (!tmp)"         , lbrace-        , nest 4 $ vsep+        , nest 4 $ vcat'             [ text ("fprintf(stderr, \"Error: out of memory when allocating " ++ c ++ "!\\n\");")             , text "exit(1);" ]         , rbrace@@ -303,10 +296,10 @@         , prAssigns c vs params         , text "return tmp;" ]     , rbrace ]- where-   cat' = identCat (normCat cat)-   (types, params) = unzip (prParams cats)-   args = hsep $ punctuate comma $ zipWith (<+>) types params+  where+    cat' = identCat (normCat cat)+    (types, params) = unzip (prParams cats)+    args = hsep $ punctuate comma $ zipWith (<+>) types params  -- | Prints the constructor's parameters. Returns pairs of type * name -- >>> prParams [Cat "O", Cat "E"]
src/BNFC/Backend/C/CFtoCPrinter.hs view
@@ -77,7 +77,7 @@   footer  ]  where-  eps = allEntryPoints cf+  eps = nub . map normCat $ allEntryPoints cf   prPrints s | normCat s == s = "char *print" ++ s' ++ "(" ++ s' ++ " p);\n"     where       s' = identCat s@@ -165,7 +165,7 @@     footer    ]   where-    eps = allEntryPoints cf+    eps = nub . map normCat $ allEntryPoints cf     header = unlines      [       "/*** BNFC-Generated Pretty Printer and Abstract Syntax Viewer ***/",@@ -375,9 +375,9 @@  ] --Not a list:  else  [-   "void pp" ++ cl ++ "(" ++ cl ++ " _p_, int _i_)",+   "void pp" ++ cl ++ "(" ++ cl ++ " p, int _i_)",    "{",-   "  switch(_p_->kind)",+   "  switch(p->kind)",    "  {",    concatMap prPrintRule rules,    "  default:",@@ -433,9 +433,9 @@ prPrintCat :: String -> Either (Cat, Doc) String -> String prPrintCat fnm (c) = case c of   Right t -> "    " ++ render (renderX t) ++ ";\n"-  Left (cat, nt) | isTokenCat cat -> "    pp" ++ basicFunName (render nt) ++ "(_p_->u." ++ v ++ "_." ++ render nt ++ ", " ++ show (precCat cat) ++ ");\n"+  Left (cat, nt) | isTokenCat cat -> "    pp" ++ basicFunName (render nt) ++ "(p->u." ++ v ++ "_." ++ render nt ++ ", " ++ show (precCat cat) ++ ");\n"   Left (InternalCat, _) -> "    /* Internal Category */\n"-  Left (cat, nt) -> "    pp" ++ identCat (normCat cat) ++ "(_p_->u." ++ v ++ "_." ++ render nt ++ ", " ++ show (precCat cat) ++ ");\n"+  Left (cat, nt) -> "    pp" ++ identCat (normCat cat) ++ "(p->u." ++ v ++ "_." ++ render nt ++ ", " ++ show (precCat cat) ++ ");\n"  where   v = map toLower (normFun fnm) @@ -488,9 +488,9 @@  ] -- Not a list:  else  [-   "void sh" ++ cl ++ "(" ++ cl ++ " _p_)",+   "void sh" ++ cl ++ "(" ++ cl ++ " p)",    "{",-   "  switch(_p_->kind)",+   "  switch(p->kind)",    "  {",    concatMap prShowRule rules,    "  default:",@@ -541,10 +541,10 @@ prShowCat :: Fun -> (Cat, Doc) -> String prShowCat fnm c = case c of     (cat,nt) | isTokenCat cat ->-        "    sh" ++ basicFunName (render nt) ++ "(_p_->u." ++ v ++ "_." ++ render nt ++ ");\n"+        "    sh" ++ basicFunName (render nt) ++ "(p->u." ++ v ++ "_." ++ render nt ++ ");\n"     (InternalCat, _) -> "    /* Internal Category */\n"     (cat,nt) ->-        "    sh" ++ identCat (normCat cat) ++ "(_p_->u." ++ v ++ "_." ++ render nt ++ ");\n"+        "    sh" ++ identCat (normCat cat) ++ "(p->u." ++ v ++ "_." ++ render nt ++ ");\n"   where v = map toLower (normFun fnm)  {- **** Helper Functions Section **** -}
src/BNFC/Backend/C/CFtoCSkel.hs view
@@ -70,7 +70,7 @@   footer  ]  where-  user = fst (unzip (tokenPragmas cf))+  user = map fst $ tokenPragmas cf   header = unlines    [     "#ifndef SKELETON_HEADER",@@ -80,9 +80,7 @@     "#include \"Absyn.h\"",     ""    ]-  prUserH user = "void visit" ++ u' ++ "(" ++ show user ++ " p);"-    where-     u' = let u = show user in toUpper (head u) : map toLower (tail u) --this is a hack to fix a potential capitalization problem.+  prUserH u = "void visit" ++ basicFunNameS u ++ "(" ++ u ++ " p);"   footer = unlines    [     "void visitIdent(Ident i);",@@ -107,14 +105,13 @@ -- | Makes the skeleton's .c File mkCFile :: CF -> [(Cat,[Rule])] -> String mkCFile cf groups = concat-   [-    header,-    concatMap prData groups,-    concatMap (prUser.show) user,-    footer-   ]+  [ header+  , concatMap prData groups+  , concatMap prUser user+  , footer+  ]   where-    user = fst (unzip (tokenPragmas cf))+    user = map fst $ tokenPragmas cf     header = unlines [       "/*** BNFC-Generated Visitor Traversal Skeleton. ***/",       "/* This traverses the abstract syntax tree.",@@ -129,13 +126,11 @@       ]     prUser u = unlines      [-      "void visit" ++ u' ++ "(" ++ u ++ " p)",+      "void visit" ++ basicFunNameS u ++ "(" ++ u ++ " p)",       "{",       "  /* Code for " ++ u ++ " Goes Here */",       "}"      ]-     where-      u' = toUpper (head u) : map toLower (tail u) --this is a hack to fix a potential capitalization problem.     footer = unlines      [       "void visitIdent(Ident i)",@@ -180,9 +175,9 @@       -- Not a list:   | otherwise = unlines                [-                "void visit" ++ cl ++ "(" ++ cl ++ " _p_)",+                "void visit" ++ cl ++ "(" ++ cl ++ " p)",                 "{",-                "  switch(_p_->kind)",+                "  switch(p->kind)",                 "  {",                 concatMap (render . prPrintRule) rules,                 "  default:",@@ -201,22 +196,22 @@ -- >>> prPrintRule (Rule "abc" undefined [Left ab, Left ab]) --   case is_abc: --     /* Code for abc Goes Here */---     visitab(_p_->u.abc_.ab_1);---     visitab(_p_->u.abc_.ab_2);+--     visitab(p->u.abc_.ab_1);+--     visitab(p->u.abc_.ab_2); --     break; -- <BLANKLINE> -- >>> let ab = TokenCat "ab" -- >>> prPrintRule (Rule "abc" undefined [Left ab]) --   case is_abc: --     /* Code for abc Goes Here */---     visitAb(_p_->u.abc_.ab_);+--     visitAb(p->u.abc_.ab_); --     break; -- <BLANKLINE> -- >>> prPrintRule (Rule "abc" undefined [Left ab, Left ab]) --   case is_abc: --     /* Code for abc Goes Here */---     visitAb(_p_->u.abc_.ab_1);---     visitAb(_p_->u.abc_.ab_2);+--     visitAb(p->u.abc_.ab_1);+--     visitAb(p->u.abc_.ab_2); --     break; -- <BLANKLINE> prPrintRule :: Rule -> Doc@@ -238,9 +233,14 @@       let visitf = "visit" <> if isTokenCat cat                        then basicFunName cat                        else text (identCat (normCat cat))-      in visitf <> parens ("_p_->u." <> text v <> "_." <> vname ) <> ";"+      in visitf <> parens ("p->u." <> text v <> "_." <> vname ) <> ";"     where v = map toLower $ normFun fnm ---The visit-function name of a basic type+-- | The visit-function name of a basic type+ basicFunName :: Cat -> Doc-basicFunName c = text (toUpper (head (show c)): tail (show c))+basicFunName = text . basicFunNameS . catToStr++basicFunNameS :: String -> String+basicFunNameS (c:cs) = toUpper c : cs+basicFunNameS []     = error "impossible: empty string in CFtoCSkel.basicFunNameS"
src/BNFC/Backend/C/CFtoFlexC.hs view
@@ -40,11 +40,10 @@ module BNFC.Backend.C.CFtoFlexC (cf2flex, lexComments, cMacros) where  import Prelude'- import Data.Maybe (fromMaybe)  import BNFC.CF-import BNFC.Backend.CPP.NoSTL.RegToFlex+import BNFC.Backend.C.RegToFlex import BNFC.Backend.Common.NamedVariables import BNFC.PrettyPrint import BNFC.Utils (cstring)@@ -68,16 +67,18 @@ prelude name = unlines   [    "/* -*- c -*- This FLex file was machine-generated by the BNF converter */",-   "%option noyywrap",+   -- noinput and nounput are most often unused+   -- https://stackoverflow.com/questions/39075510/option-noinput-nounput-what-are-they-for+   "%option noyywrap noinput nounput",    "%{",    "#define yylval " ++ name ++ "lval",+   "#define yylloc " ++ name ++ "lloc",    "#define YY_BUFFER_APPEND " ++ name ++ "_BUFFER_APPEND",    "#define YY_BUFFER_RESET " ++ name ++ "_BUFFER_RESET",-   "#define initialize_lexer " ++ name ++ "_initialize_lexer",+   "#define init_lexer " ++ name ++ "_init_lexer",    "#include <string.h>",    "#include \"Parser.h\"",    "#define YY_BUFFER_LENGTH 4096",-   "extern int yy_mylinenumber ;",    "char YY_PARSED_STRING[YY_BUFFER_LENGTH];",    "void YY_BUFFER_APPEND(char *s)",    "{",@@ -89,6 +90,24 @@    "  for(x = 0; x < YY_BUFFER_LENGTH; x++)",    "    YY_PARSED_STRING[x] = 0;",    "}",+   -- https://www.gnu.org/software/bison/manual/html_node/Token-Locations.html+   -- Flex is responsible for keeping tracking of the yylloc for Bison.+   -- Flex also doesn't do this automatically so we need this function+   -- https://stackoverflow.com/a/22125500/425756+   "static void update_loc(YYLTYPE* loc, char* text)",+   "{",+   "  loc->first_line = loc->last_line;",+   "  loc->first_column = loc->last_column;",+   "  for (int i = 0; text[i] != '\\0'; ++i) {",+   "      if (text[i] == '\\n') {",+   "          ++loc->last_line;",+   "          loc->last_column = 0; ",+   "      } else {",+   "          ++loc->last_column; ",+   "      }",+   "  }",+   "}",+   "#define YY_USER_ACTION update_loc(&yylloc, yytext);",    "",    "%}"   ]@@ -126,22 +145,19 @@    ifC catDouble  "<YYINITIAL>{DIGIT}+\".\"{DIGIT}+(\"e\"(\\-)?{DIGIT}+)?      \t yylval.double_ = atof(yytext); return _DOUBLE_;\n",    ifC catInteger "<YYINITIAL>{DIGIT}+      \t yylval.int_ = atoi(yytext); return _INTEGER_;\n",    ifC catIdent   "<YYINITIAL>{LETTER}{IDENT}*      \t yylval.string_ = strdup(yytext); return _IDENT_;\n",-   "\\n ++yy_mylinenumber ;\n",    "<YYINITIAL>[ \\t\\r\\n\\f]      \t /* ignore white space. */;\n",    "<YYINITIAL>.      \t return _ERROR_;\n",    "%%\n",    footer   ]   where-   ifC cat s = if isUsedCat cf cat then s else ""+   ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""    userDefTokens = unlines $      ["<YYINITIAL>" ++ printRegFlex exp ++       "     \t yylval.string_ = strdup(yytext); return " ++ sName name ++ ";"        | (name, exp) <- tokenPragmas cf]       where-          sName n = case lookup (show n) env of-              Just x -> x-              Nothing -> show n+        sName n = fromMaybe n $ lookup n env    strStates = unlines --These handle escaped characters in Strings.     [      "<YYINITIAL>\"\\\"\"      \t BEGIN STRING;",@@ -164,7 +180,18 @@      "<CHARESC>.      \t BEGIN CHAREND; yylval.char_ = yytext[0]; return _CHAR_;",      "<CHAREND>\"'\"      \t BEGIN YYINITIAL;"     ]-   footer = "void initialize_lexer(FILE *inp) { yyrestart(inp); BEGIN YYINITIAL; }"+   footer = unlines+    [+     "void init_lexer(FILE *inp)",+     "{",+     "  yyrestart(inp);",+     "  yylloc.first_line = 1;",+     "  yylloc.first_column = 1;",+     "  yylloc.last_line = 1;",+     "  yylloc.last_column = 1;",+     "  BEGIN YYINITIAL;",+     "}"+    ]  -- --------------------------------------------------------------------------- -- Comments@@ -178,32 +205,29 @@ -- delimiters. -- -- >>> lexComments (Just "myns.") ([("{-","-}")],["--"])--- <YYINITIAL>"--"[^\n]*\n ++myns.yy_mylinenumber; // BNFC: comment "--";+-- <YYINITIAL>"--"[^\n]*\n /* skip */; // BNFC: comment "--"; -- <YYINITIAL>"{-" BEGIN COMMENT; // BNFC: comment "{-" "-}"; -- <COMMENT>"-}" BEGIN YYINITIAL; -- <COMMENT>. /* skip */;--- <COMMENT>[\n] ++myns.yy_mylinenumber;+-- <COMMENT>[\n] /* skip */; lexComments :: Maybe String -> ([(String, String)], [String]) -> Doc-lexComments ns (m,s) =-    vcat (map (lexSingleComment ns) s ++ map (lexMultiComment ns) m)+lexComments _ (m,s) =+    vcat (map lexSingleComment s ++ map lexMultiComment m)  -- | Create a lexer rule for single-line comments. -- The first argument is -- an optional c++ namespace -- The second argument is the delimiter that marks the beginning of the -- comment. ----- >>> lexSingleComment (Just "mypackage.") "--"--- <YYINITIAL>"--"[^\n]*\n ++mypackage.yy_mylinenumber; // BNFC: comment "--";------ >>> lexSingleComment Nothing "--"--- <YYINITIAL>"--"[^\n]*\n ++yy_mylinenumber; // BNFC: comment "--";+-- >>> lexSingleComment "--"+-- <YYINITIAL>"--"[^\n]*\n /* skip */; // BNFC: comment "--"; ----- >>> lexSingleComment Nothing "\""--- <YYINITIAL>"\""[^\n]*\n ++yy_mylinenumber; // BNFC: comment "\"";-lexSingleComment :: Maybe String -> String -> Doc-lexSingleComment ns c =+-- >>> lexSingleComment "\""+-- <YYINITIAL>"\""[^\n]*\n /* skip */; // BNFC: comment "\"";+lexSingleComment :: String -> Doc+lexSingleComment c =     "<YYINITIAL>" <> cstring c <> "[^\\n]*\\n"-    <+> "++"<> text (fromMaybe "" ns)<>"yy_mylinenumber;"+    <+> "/* skip */;"     <+> "// BNFC: comment" <+> cstring c <> ";"  -- | Create a lexer rule for multi-lines comments.@@ -214,30 +238,24 @@ -- comments. They could possibly start a comment with one character and end it -- with another.  However this seems rare. ----- >>> lexMultiComment Nothing ("{-", "-}")--- <YYINITIAL>"{-" BEGIN COMMENT; // BNFC: comment "{-" "-}";--- <COMMENT>"-}" BEGIN YYINITIAL;--- <COMMENT>. /* skip */;--- <COMMENT>[\n] ++yy_mylinenumber;------ >>> lexMultiComment (Just "foo.") ("{-", "-}")+-- >>> lexMultiComment ("{-", "-}") -- <YYINITIAL>"{-" BEGIN COMMENT; // BNFC: comment "{-" "-}"; -- <COMMENT>"-}" BEGIN YYINITIAL; -- <COMMENT>. /* skip */;--- <COMMENT>[\n] ++foo.yy_mylinenumber;+-- <COMMENT>[\n] /* skip */; ----- >>> lexMultiComment Nothing ("\"'", "'\"")+-- >>> lexMultiComment ("\"'", "'\"") -- <YYINITIAL>"\"'" BEGIN COMMENT; // BNFC: comment "\"'" "'\""; -- <COMMENT>"'\"" BEGIN YYINITIAL; -- <COMMENT>. /* skip */;--- <COMMENT>[\n] ++yy_mylinenumber;-lexMultiComment :: Maybe String -> (String, String) -> Doc-lexMultiComment ns (b,e) = vcat+-- <COMMENT>[\n] /* skip */;+lexMultiComment :: (String, String) -> Doc+lexMultiComment (b,e) = vcat     [ "<YYINITIAL>" <> cstring b <+> "BEGIN COMMENT;"         <+> "// BNFC: comment" <+> cstring b <+> cstring e <> ";"     , "<COMMENT>" <> cstring e <+> "BEGIN YYINITIAL;"     , "<COMMENT>. /* skip */;"-    , "<COMMENT>[\\n] ++"<> text (fromMaybe "" ns) <>"yy_mylinenumber;"+    , "<COMMENT>[\\n] /* skip */;"     ]  -- --There might be a possible bug here if a language includes 2 multi-line comments.
+ src/BNFC/Backend/C/RegToFlex.hs view
@@ -0,0 +1,82 @@+module BNFC.Backend.C.RegToFlex (printRegFlex) where++-- modified from pretty-printer generated by the BNF converter++import Data.Char (showLitChar)+import AbsBNF++-- the top-level printing method+printRegFlex :: Reg -> String+printRegFlex = render . prt 0++-- you may want to change render and parenth++render :: [String] -> String+render = rend (0::Int) where+  rend i ss = case ss of+    "["      :ts -> cons "["  $ rend i ts+    "("      :ts -> cons "("  $ rend i ts+    t  : "," :ts -> cons t    $ space "," $ rend i ts+    t  : ")" :ts -> cons t    $ cons ")"  $ rend i ts+    t  : "]" :ts -> cons t    $ cons "]"  $ rend i ts+    t        :ts -> space t   $ rend i ts+    _            -> ""+  cons s t  = s ++ t+  space t s = if null s then t else t ++ s++parenth :: [String] -> [String]+parenth ss = ["("] ++ ss ++ [")"]++-- the printer class does the job+class Print a where+  prt :: Int -> a -> [String]+  prtList :: [a] -> [String]+  prtList = concat . map (prt 0)++instance Print a => Print [a] where+  prt _ = prtList++instance Print Char where+  prt _ c = [[c]]+  prtList s = map (concat . prt 0) s++prPrec :: Int -> Int -> [String] -> [String]+prPrec i j = if j<i then parenth else id++instance Print Ident where+  prt _ (Ident i) = [i]++instance Print Reg where+  prt i e = case e of+   RSeq reg0 reg -> prPrec i 2 (concat [prt 2 reg0 , prt 3 reg])+   RAlt reg0 reg -> prPrec i 1 (concat [prt 1 reg0 , ["|"] , prt 2 reg])++   -- Flex does not support set difference. See link for valid patterns.+   -- https://westes.github.io/flex/manual/Patterns.html#Patterns+   -- RMinus reg0 reg -> prPrec i 1 (concat [prt 2 reg0 , ["#"] , prt 2 reg])+   RMinus reg0 REps -> prt i reg0 -- REps is identity for set difference+   RMinus RAny reg@(RChar _) ->  prPrec i 3 (concat [["[^"],prt 0 reg,["]"]])+   RMinus RAny (RAlts str) ->  prPrec i 3 (concat [["[^"],prt 0 $ mkEsc str,["]"]])+   -- FIXME: maybe we could add cases for char - RDigit, RLetter etc.+   RMinus _ _ -> error  "Flex does not support general set difference"++   RStar reg -> prPrec i 3 (concat [prt 3 reg , ["*"]])+   RPlus reg -> prPrec i 3 (concat [prt 3 reg , ["+"]])+   ROpt reg  -> prPrec i 3 (concat [prt 3 reg , ["?"]])+   REps  -> prPrec i 3 (["[^.]"])+   RChar c -> prPrec i 3 (prt 0 [mkEsc [c]])+   RAlts str -> prPrec i 3 (concat [["["], prt 0 $ mkEsc str, ["]"]])+   RSeqs str -> prPrec i 2 (concat (map (prt 0) $ mkEsc str))+   RDigit  -> prPrec i 3 (concat [["{DIGIT}"]])+   RLetter  -> prPrec i 3 (concat [["{LETTER}"]])+   RUpper  -> prPrec i 3 (concat [["{CAPITAL}"]])+   RLower  -> prPrec i 3 (concat [["{SMALL}"]])+   RAny  -> prPrec i 3 (concat [["."]])++-- Handle special characters in regular expressions.+mkEsc :: String -> String+mkEsc = concatMap escChar+  where+    escChar c+      | c `elem` ("$+-*=<>[](){}!?.,;:^~|&%#/\\$_@\"" :: String) = '\\':[c]+      | otherwise = showLitChar c ""
src/BNFC/Backend/CPP/Makefile.hs view
@@ -3,8 +3,8 @@ import BNFC.Backend.Common.Makefile import BNFC.PrettyPrint -makefile :: String -> Doc-makefile name = vcat+makefile :: String -> String -> Doc+makefile name basename = vcat     [ mkVar "CC" "g++"     , mkVar "CCFLAGS" "-g -W -Wall"     , ""@@ -27,8 +27,10 @@     , mkRule "distclean" ["clean"]         [ "rm -f " ++ unwords             [ "Absyn.C", "Absyn.H", "Test.C", "Parser.C", "Parser.H", "Lexer.C",-              "Skeleton.C", "Skeleton.H", "Printer.C", "Printer.H", "Makefile " ]-            ++ name ++ ".l " ++ name ++ ".y " ++ name ++ ".tex "]+              "Skeleton.C", "Skeleton.H", "Printer.C", "Printer.H", basename,+              name ++ ".l", name ++ ".y", name ++ ".tex"+            ]+        ]     , mkRule testName [ "${OBJS}", "Test.o" ]         [ "@echo \"Linking " ++ testName ++ "...\""         , "${CC} ${CCFLAGS} ${OBJS} Test.o -o " ++ testName ]
src/BNFC/Backend/CPP/NoSTL.hs view
@@ -19,6 +19,9 @@  module BNFC.Backend.CPP.NoSTL (makeCppNoStl) where +import Data.Char+import Data.List (nub)+ import BNFC.Utils import BNFC.CF import BNFC.Options@@ -29,7 +32,6 @@ import BNFC.Backend.CPP.NoSTL.CFtoBison import BNFC.Backend.CPP.NoSTL.CFtoCVisitSkel import BNFC.Backend.CPP.PrettyPrinter-import Data.Char import qualified BNFC.Backend.Common.Makefile as Makefile  makeCppNoStl :: SharedOptions -> CF -> MkFiles ()@@ -107,10 +109,10 @@     "    }",     "  } else input = stdin;",     "  /* The default entry point is used. For other options see Parser.H */",-    "  " ++ def ++ " *parse_tree = p" ++ def ++ "(input);",+    "  " ++ dat ++ " *parse_tree = p" ++ def ++ "(input);",     "  if (parse_tree)",     "  {",-    "    printf(\"\\nParse Succesful!\\n\");",+    "    printf(\"\\nParse Successful!\\n\");",     "    if (!quiet) {",     "      printf(\"\\n[Abstract Syntax]\\n\");",     "      ShowAbsyn *s = new ShowAbsyn();",@@ -126,14 +128,16 @@     ""    ]   where-   def = show (head (allEntryPoints cf))+   cat = head (allEntryPoints cf)+   dat = identCat $ normCat cat+   def = identCat cat  mkHeaderFile cf cats eps env = unlines  [   "#ifndef PARSER_HEADER_FILE",   "#define PARSER_HEADER_FILE",   "",-  concatMap mkForwardDec cats,+  concatMap mkForwardDec (nub $ map normCat cats),   "typedef union",   "{",   "  int int_;",@@ -150,26 +154,24 @@   "#endif"  ]  where-  mkForwardDec s | normCat s == s = "class " ++ identCat s ++ ";\n"-  mkForwardDec _ = ""+  mkForwardDec s = "class " ++ identCat s ++ ";\n"   mkVar s | normCat s == s = "  " ++ identCat s ++"*" +++ map toLower (identCat s) ++ "_;\n"   mkVar _ = ""   mkDefines n [] = mkString n   mkDefines n ((_,s):ss) = "#define " ++ s +++ show n ++ "\n" ++ mkDefines (n+1) ss-  mkString n =  if isUsedCat cf catString+  mkString n =  if isUsedCat cf (TokenCat catString)    then ("#define _STRING_ " ++ show n ++ "\n") ++ mkChar (n+1)    else mkChar n-  mkChar n =  if isUsedCat cf catChar+  mkChar n =  if isUsedCat cf (TokenCat catChar)    then ("#define _CHAR_ " ++ show n ++ "\n") ++ mkInteger (n+1)    else mkInteger n-  mkInteger n =  if isUsedCat cf catInteger+  mkInteger n =  if isUsedCat cf (TokenCat catInteger)    then ("#define _INTEGER_ " ++ show n ++ "\n") ++ mkDouble (n+1)    else mkDouble n-  mkDouble n =  if isUsedCat cf catDouble+  mkDouble n =  if isUsedCat cf (TokenCat catDouble)    then ("#define _DOUBLE_ " ++ show n ++ "\n") ++ mkIdent(n+1)    else mkIdent n-  mkIdent n =  if isUsedCat cf catIdent+  mkIdent n =  if isUsedCat cf (TokenCat catIdent)    then "#define _IDENT_ " ++ show n ++ "\n"    else ""-  mkFunc s | normCat s == s = identCat s ++ "*" +++ "p" ++ identCat s ++ "(FILE *inp);\n"-  mkFunc _ = ""+  mkFunc s = identCat (normCat s) ++ "*" +++ "p" ++ identCat s ++ "(FILE *inp);\n"
src/BNFC/Backend/CPP/NoSTL/CFtoBison.hs view
@@ -60,16 +60,19 @@  module BNFC.Backend.CPP.NoSTL.CFtoBison (cf2Bison) where +import Data.Char (toLower, isUpper)+import Data.List (intersperse, nub)+import Data.Maybe (fromMaybe)+ import BNFC.CF-import Data.List (intersperse) import BNFC.Backend.Common.NamedVariables hiding (varName)+import BNFC.Backend.C.CFtoBisonC (startSymbol) import BNFC.Backend.CPP.STL.CFtoBisonSTL (union)-import Data.Char (toLower,isUpper)-import BNFC.Utils ((+++))+import BNFC.PrettyPrint import BNFC.TypeChecker+import BNFC.Utils ((+++), when)+ import ErrM-import BNFC.Backend.C.CFtoBisonC (startSymbol)-import BNFC.PrettyPrint  --This follows the basic structure of CFtoHappy. @@ -120,10 +123,14 @@     , "}"     , ""     , definedRules cf-    , unlines $ map (parseMethod name) (allCatsNorm cf)  -- (allEntryPoints cf), M.F. 2004-09-14 fix of [Ty2] bug.-    , concatMap reverseList (filter isList (allCatsNorm cf))+    , unlines $ map parseResult dats+    , unlines $ map (parseMethod name) eps+    , concatMap reverseList $ filter isList $ allCatsNorm cf     , "%}"     ]+  where+  eps  = allEntryPoints cf+  dats = nub $ map normCat eps  definedRules :: CF -> String definedRules cf = unlines [ rule f xs e | FunDef f xs e <- cfgPragmas cf]@@ -172,16 +179,24 @@         call x es = x ++ "(" ++ concat (intersperse ", " $ map cppExp es) ++ ")"  +-- | Generates declaration and initialization of the @YY_RESULT@ for a parser.+--+--   Different parsers (for different precedences of the same category)+--   share such a declaration.+--+--   Expects a normalized category.+parseResult :: Cat -> String+parseResult cat =+  "static " ++ cat' ++ "*" +++ resultName cat' +++ "= 0;"+  where+  cat' = identCat cat++ --This generates a parser method for each entry point. parseMethod :: String -> Cat -> String-parseMethod _ cat =-  -- if normCat cat /= cat     M.F. 2004-09-17 comment. No duplicates from allCatsIdNorm-  -- then ""-  -- else-  unlines+parseMethod _ cat = unlines   [-   cat' ++ "*" +++ (resultName cat') +++ "= 0;",-   cat' ++"* p" ++ cat' ++ "(FILE *inp)",+   cat' ++"* p" ++ par ++ "(FILE *inp)",    "{",    "  initialize_lexer(inp);",    "  if (yyparse())",@@ -196,6 +211,7 @@   ]  where   cat' = identCat (normCat cat)+  par  = identCat cat  --This method generates list reversal functions for each list type. reverseList :: Cat -> String@@ -228,11 +244,8 @@  --declares terminal types. tokens :: [UserDef] -> SymEnv -> String-tokens user ts = concatMap (declTok user) ts- where-  declTok u (s,r) = if elem s (map show u)-    then "%token<string_> " ++ r ++ "    //   " ++ s ++ "\n"-    else "%token " ++ r ++ "    //   " ++ s ++ "\n"+tokens user = concatMap $ \ (s, r) ->+  concat [ "%token", when (s `elem` user) "<string_>", " ", r, "    //   ", s, "\n" ]  specialToks :: CF -> String specialToks cf = concat [@@ -243,7 +256,7 @@   ifC catIdent "%token<string_> _IDENT_\n"   ]    where-    ifC cat s = if isUsedCat cf cat then s else ""+    ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""  --The following functions are a (relatively) straightforward translation --of the ones in CFtoHappy.hs@@ -290,12 +303,9 @@   its -> (unwords (map mkIt its), metas its)  where    mkIt i = case i of-     Left c -> case lookup (show c) env of-       Just x -> x-       Nothing -> typeName (identCat c)-     Right s -> case lookup s env of-       Just x -> x-       Nothing -> s+     Left (TokenCat s) -> fromMaybe (typeName s) $ lookup s env+     Left  c -> identCat c+     Right s -> fromMaybe s $ lookup s env    metas its = [revIf c ('$': show i) | (i,Left c) <- zip [1 :: Int ..] its]    revIf c m = if (not (isConsFun (funRule r)) && elem c revs)                  then ("reverse" ++ (identCat (normCat c)) ++ "(" ++ m ++ ")")
src/BNFC/Backend/CPP/NoSTL/CFtoCPPAbs.hs view
@@ -206,10 +206,10 @@    concatMap prUserDef user   ]  where-  prUserDef s = "typedef char* " ++ show s ++ ";\n"+  prUserDef s = "typedef char* " ++ s ++ ";\n"  -- | A class's instance variables.--- >>> prInstVars [Cat "MyTokn"] [("MyTokn",1), ("A",1), ("A",2)]+-- >>> prInstVars ["MyTokn"] [("MyTokn",1), ("A",1), ("A",2)] -- MyTokn mytokn_1; -- A *a_1, *a_2; prInstVars :: [UserDef] -> [IVar] -> Doc@@ -336,7 +336,7 @@  -- | The constructor just assigns the parameters to the corresponding instance -- variables.--- >>> prConstructorC [Cat "Integer"] "bla" [("A",1), ("Integer",1), ("A",2)] [Cat "A", Cat "Integer", Cat "A"]+-- >>> prConstructorC ["Integer"] "bla" [("A",1), ("Integer",1), ("A",2)] [Cat "A", Cat "Integer", Cat "A"] -- bla::bla(A *p1, Integer p2, A *p3) { a_1 = p1; integer_ = p2; a_2 = p3; } prConstructorC :: [UserDef] -> String -> [IVar] -> [Cat] -> Doc prConstructorC user c vs cats =@@ -412,7 +412,6 @@  {- **** Helper Functions **** -} ---Checks if something is a basic or user-defined type.+-- | Checks if something is a basic or user-defined type. isBasic :: [UserDef] -> String -> Bool-isBasic user x =-    x `elem` (map show user ++ ["Integer", "Char", "String", "Double", "Ident"])+isBasic user x = x `elem` user || x `elem` specialCatsP
src/BNFC/Backend/CPP/NoSTL/CFtoCVisitSkel.hs view
@@ -67,7 +67,7 @@  [   header,   concatMap prDataH groups,-  concatMap (prUserH.show) user,+  concatMap prUserH user,   footer  ]  where@@ -129,7 +129,7 @@    [     header,     concatMap (prData user) groups,-    concatMap (prUser.show) user,+    concatMap prUser user,     footer    ]   where@@ -258,16 +258,8 @@ --This is because you don't -> a basic non-pointer type. isBasic :: [UserDef] -> String -> Bool isBasic user v =-  if elem (init v) user'-    then True-    else if "integer_" `isPrefixOf` v then True-    else if "char_" `isPrefixOf` v then True-    else if "string_" `isPrefixOf` v then True-    else if "double_" `isPrefixOf` v then True-    else if "ident_" `isPrefixOf` v then True-    else False-  where-   user' = map (map toLower.show) user+  init v `elem` map (map toLower) user+  || any (`isPrefixOf` v) [ "integer_" , "char_" , "string_" , "double_" , "ident_" ]  --The visit-function name of a basic type funName :: String -> String@@ -277,4 +269,4 @@     else if "string_" `isPrefixOf` v then "String"     else if "double_" `isPrefixOf` v then "Double"     else if "ident_" `isPrefixOf` v then "Ident"-    else (toUpper (head v)) : (init (tail v)) --User-defined type+    else toUpper (head v) : init (tail v) -- User-defined type
src/BNFC/Backend/CPP/NoSTL/CFtoFlex.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE NoImplicitPrelude #-}+ {-     BNF Converter: Flex generator     Copyright (C) 2004  Author:  Michael Pellauer@@ -37,12 +39,16 @@ -} module BNFC.Backend.CPP.NoSTL.CFtoFlex (cf2flex) where +import Prelude'+import Data.Maybe (fromMaybe)+ import BNFC.CF-import BNFC.Backend.C.CFtoFlexC (lexComments, cMacros)-import BNFC.Backend.CPP.NoSTL.RegToFlex+import BNFC.Backend.C.CFtoFlexC (cMacros)+import BNFC.Backend.C.RegToFlex import BNFC.Backend.Common.NamedVariables import BNFC.Backend.CPP.STL.STLUtils import BNFC.PrettyPrint+import BNFC.Utils (cstring)  --The environment must be returned for the parser to use. cf2flex :: Maybe String -> String -> CF -> (String, SymEnv)@@ -109,16 +115,14 @@    footer   ]   where-   ifC cat s = if isUsedCat cf cat then s else ""+   ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""    ns = nsString inPackage    userDefTokens = unlines $      ["<YYINITIAL>" ++ printRegFlex exp ++       "     \t " ++ ns ++ "yylval.string_ = strdup(yytext); return " ++ sName name ++ ";"        | (name, exp) <- tokenPragmas cf]       where-          sName n = case lookup (show n) env of-              Just x -> x-              Nothing -> (show n)+          sName n = fromMaybe n $ lookup n env    strStates = unlines --These handle escaped characters in Strings.     [      "<YYINITIAL>\"\\\"\"      \t BEGIN STRING;",@@ -148,6 +152,92 @@     ]  +-- ---------------------------------------------------------------------------+-- Comments++-- | Create flex rules for single-line and multi-lines comments.+-- The first argument is an optional namespace (for C++); the second+-- argument is the set of comment delimiters as returned by BNFC.CF.comments.+--+-- This function is only compiling the results of applying either+-- lexSingleComment or lexMultiComment on each comment delimiter or pair of+-- delimiters.+--+-- >>> lexComments (Just "myns.") ([("{-","-}")],["--"])+-- <YYINITIAL>"--"[^\n]*\n ++myns.yy_mylinenumber; // BNFC: comment "--";+-- <YYINITIAL>"{-" BEGIN COMMENT; // BNFC: comment "{-" "-}";+-- <COMMENT>"-}" BEGIN YYINITIAL;+-- <COMMENT>. /* skip */;+-- <COMMENT>[\n] ++myns.yy_mylinenumber;+lexComments :: Maybe String -> ([(String, String)], [String]) -> Doc+lexComments ns (m,s) =+    vcat (map (lexSingleComment ns) s ++ map (lexMultiComment ns) m)++-- | Create a lexer rule for single-line comments.+-- The first argument is -- an optional c++ namespace+-- The second argument is the delimiter that marks the beginning of the+-- comment.+--+-- >>> lexSingleComment (Just "mypackage.") "--"+-- <YYINITIAL>"--"[^\n]*\n ++mypackage.yy_mylinenumber; // BNFC: comment "--";+--+-- >>> lexSingleComment Nothing "--"+-- <YYINITIAL>"--"[^\n]*\n ++yy_mylinenumber; // BNFC: comment "--";+--+-- >>> lexSingleComment Nothing "\""+-- <YYINITIAL>"\""[^\n]*\n ++yy_mylinenumber; // BNFC: comment "\"";+lexSingleComment :: Maybe String -> String -> Doc+lexSingleComment ns c =+    "<YYINITIAL>" <> cstring c <> "[^\\n]*\\n"+    <+> "++"<> text (fromMaybe "" ns)<>"yy_mylinenumber;"+    <+> "// BNFC: comment" <+> cstring c <> ";"++-- | Create a lexer rule for multi-lines comments.+-- The first argument is -- an optional c++ namespace+-- The second arguments is the pair of delimiter for the multi-lines comment:+-- start deleminiter and end delimiter.+-- There might be a possible bug here if a language includes 2 multi-line+-- comments. They could possibly start a comment with one character and end it+-- with another.  However this seems rare.+--+-- >>> lexMultiComment Nothing ("{-", "-}")+-- <YYINITIAL>"{-" BEGIN COMMENT; // BNFC: comment "{-" "-}";+-- <COMMENT>"-}" BEGIN YYINITIAL;+-- <COMMENT>. /* skip */;+-- <COMMENT>[\n] ++yy_mylinenumber;+--+-- >>> lexMultiComment (Just "foo.") ("{-", "-}")+-- <YYINITIAL>"{-" BEGIN COMMENT; // BNFC: comment "{-" "-}";+-- <COMMENT>"-}" BEGIN YYINITIAL;+-- <COMMENT>. /* skip */;+-- <COMMENT>[\n] ++foo.yy_mylinenumber;+--+-- >>> lexMultiComment Nothing ("\"'", "'\"")+-- <YYINITIAL>"\"'" BEGIN COMMENT; // BNFC: comment "\"'" "'\"";+-- <COMMENT>"'\"" BEGIN YYINITIAL;+-- <COMMENT>. /* skip */;+-- <COMMENT>[\n] ++yy_mylinenumber;+lexMultiComment :: Maybe String -> (String, String) -> Doc+lexMultiComment ns (b,e) = vcat+    [ "<YYINITIAL>" <> cstring b <+> "BEGIN COMMENT;"+        <+> "// BNFC: comment" <+> cstring b <+> cstring e <> ";"+    , "<COMMENT>" <> cstring e <+> "BEGIN YYINITIAL;"+    , "<COMMENT>. /* skip */;"+    , "<COMMENT>[\\n] ++"<> text (fromMaybe "" ns) <>"yy_mylinenumber;"+    ]++-- --There might be a possible bug here if a language includes 2 multi-line comments.+-- --They could possibly start a comment with one character and end it with another.+-- --However this seems rare.+-- --+-- lexMultiComment :: Maybe String -> (String, String) -> String+-- lexMultiComment inPackage (b,e) = unlines [+--   "<YYINITIAL>\"" ++ b ++ "\"      \t BEGIN COMMENT;",+--   "<COMMENT>\"" ++ e ++ "\"      \t BEGIN YYINITIAL;",+--   "<COMMENT>.      \t /* BNFC multi-line comment */;",+--   "<COMMENT>[\\n]   ++" ++ nsString inPackage ++ "yy_mylinenumber ; \t /* BNFC multi-line comment */;"+--  ---- "\\n  ++yy_mylinenumber ;"+--   ] --Helper function that escapes characters in strings escapeChars :: String -> String escapeChars [] = []
− src/BNFC/Backend/CPP/NoSTL/RegToFlex.hs
@@ -1,72 +0,0 @@-module BNFC.Backend.CPP.NoSTL.RegToFlex (printRegFlex) where---- modified from pretty-printer generated by the BNF converter--import AbsBNF---- the top-level printing method-printRegFlex :: Reg -> String-printRegFlex = render . prt 0---- you may want to change render and parenth--render :: [String] -> String-render = rend (0::Int) where-  rend i ss = case ss of-    "["      :ts -> cons "["  $ rend i ts-    "("      :ts -> cons "("  $ rend i ts-    t  : "," :ts -> cons t    $ space "," $ rend i ts-    t  : ")" :ts -> cons t    $ cons ")"  $ rend i ts-    t  : "]" :ts -> cons t    $ cons "]"  $ rend i ts-    t        :ts -> space t   $ rend i ts-    _            -> ""-  cons s t  = s ++ t-  space t s = if null s then t else t ++ s--parenth :: [String] -> [String]-parenth ss = ["("] ++ ss ++ [")"]---- the printer class does the job-class Print a where-  prt :: Int -> a -> [String]-  prtList :: [a] -> [String]-  prtList = concat . map (prt 0)--instance Print a => Print [a] where-  prt _ = prtList--instance Print Char where-  prt _ c = [[c]]-  prtList s = map (concat . prt 0) s--prPrec :: Int -> Int -> [String] -> [String]-prPrec i j = if j<i then parenth else id--instance Print Ident where-  prt _ (Ident i) = [i]--instance Print Reg where-  prt i e = case e of-   RSeq reg0 reg -> prPrec i 2 (concat [prt 2 reg0 , prt 3 reg])-   RAlt reg0 reg -> prPrec i 1 (concat [prt 1 reg0 , ["|"] , prt 2 reg])-   RMinus reg0 reg -> prPrec i 1 (concat [prt 2 reg0 , ["#"] , prt 2 reg])-   RStar reg -> prPrec i 3 (concat [prt 3 reg , ["*"]])-   RPlus reg -> prPrec i 3 (concat [prt 3 reg , ["+"]])-   ROpt reg  -> prPrec i 3 (concat [prt 3 reg , ["?"]])-   REps  -> prPrec i 3 (["[^.]"])-   RChar c -> prPrec i 3 (prt 0 [mkEsc [c]])-   RAlts str -> prPrec i 3 (concat [["["], prt 0 $ mkEsc str, ["]"]])-   RSeqs str -> prPrec i 2 (concat (map (prt 0) $ mkEsc str))-   RDigit  -> prPrec i 3 (concat [["{DIGIT}"]])-   RLetter  -> prPrec i 3 (concat [["{LETTER}"]])-   RUpper  -> prPrec i 3 (concat [["{CAPITAL}"]])-   RLower  -> prPrec i 3 (concat [["{SMALL}"]])-   RAny  -> prPrec i 3 (concat [["."]])---- Handle special characters in regular expressions.-mkEsc :: String -> String-mkEsc = concatMap escChar-  where-    escChar c-      | c `elem` ("$+-*=<>[](){}!?.,;:^~|&%#/\\$_@\"" :: String) = '\\':[c]-      | otherwise = [c]
src/BNFC/Backend/CPP/PrettyPrinter.hs view
@@ -44,8 +44,9 @@  positionRules :: CF -> [(Cat,[Rule])] positionRules cf =-      [(cat,[Rule (show cat) cat [Left catString, Left catInteger]]) |-        cat <- filter (isPositionCat cf) $ fst (unzip (tokenPragmas cf))]+  [ (TokenCat cat, [Rule cat (TokenCat cat) $ map (Left . TokenCat) [catString, catInteger]])+  | cat <- filter (isPositionCat cf) $ map fst (tokenPragmas cf)+  ]  {- **** Header (.H) File Methods **** -} @@ -378,25 +379,26 @@  {- **** Pretty Printer Methods **** -} ---Generates methods for the Pretty Printer+-- | Generates methods for the Pretty Printer. prPrintData :: Bool -> Maybe String -> CF -> (Cat, [Rule]) -> String prPrintData True {- use STL -} _ _ (cat@(ListCat _), rules) =     render $ genPrintVisitorList (cat, rules) prPrintData False {- use STL -} _ _ (cat@(ListCat _), rules) =     genPrintVisitorListNoStl (cat, rules)-prPrintData _ inPackage cf (cat, rules) = -- Not a list- -- a position token- if isPositionCat cf cat then unlines [-   "void PrintAbsyn::visit" ++ show cat ++ "(" ++ show cat ++ " *p)",-   "{",-   "  visitIdent(p->string_);",-   "}",-   ""-   ]- else abstract ++ concatMap (prPrintRule inPackage) rules- where-   cl = identCat (normCat cat)-   abstract = case lookupRule (show cat) rules of+-- Not a list :+prPrintData _ _inPackage cf (TokenCat cat, _rules) | isPositionCat cf cat = unlines $+  -- a position token+  [ "void PrintAbsyn::visit" ++ show cat ++ "(" ++ show cat ++ " *p)"+  , "{"+  , "  visitIdent(p->string_);"+  , "}"+  , ""+  ]+prPrintData _ inPackage _cf (cat, rules) = -- Not a list+    abstract ++ concatMap (prPrintRule inPackage) rules+  where+  cl = identCat (normCat cat)+  abstract = case lookupRule (show cat) rules of     Just _ -> ""     Nothing ->  "void PrintAbsyn::visit" ++ cl ++ "(" ++ cl +++ "*p) {} //abstract class\n\n" 
src/BNFC/Backend/CPP/STL.hs view
@@ -21,6 +21,9 @@  module BNFC.Backend.CPP.STL (makeCppStl,) where +import Data.Char+import Data.List (nub)+ import BNFC.Utils import BNFC.CF import BNFC.Options@@ -32,7 +35,6 @@ import BNFC.Backend.CPP.STL.CFtoCVisitSkelSTL import BNFC.Backend.CPP.PrettyPrinter import BNFC.Backend.CPP.STL.STLUtils-import Data.Char import qualified BNFC.Backend.Common.Makefile as Makefile  makeCppStl :: SharedOptions -> CF -> MkFiles ()@@ -110,10 +112,10 @@     "    }",     "  } else input = stdin;",     "  /* The default entry point is used. For other options see Parser.H */",-    "  " ++ scope ++ def ++ " *parse_tree = " ++ scope ++ "p" ++ def ++ "(input);",+    "  " ++ scope ++ dat ++ " *parse_tree = " ++ scope ++ "p" ++ def ++ "(input);",     "  if (parse_tree)",     "  {",-    "    printf(\"\\nParse Succesful!\\n\");",+    "    printf(\"\\nParse Successful!\\n\");",     "    if (!quiet) {",     "      printf(\"\\n[Abstract Syntax]\\n\");",     "      " ++ scope ++ "ShowAbsyn *s = new " ++ scope ++ "ShowAbsyn();",@@ -129,7 +131,9 @@     ""    ]   where-   def = show (head (allEntryPoints cf))+   cat = head $ allEntryPoints cf+   dat = identCat $ normCat cat+   def = identCat cat    scope = nsScope inPackage  mkHeaderFile inPackage cf cats eps env = unlines@@ -141,7 +145,7 @@   "#include<string>",   "",   nsStart inPackage,-  concatMap mkForwardDec cats,+  concatMap mkForwardDec $ nub $ map normCat cats,   "typedef union",   "{",   "  int int_;",@@ -161,27 +165,25 @@  ]  where   hdef = nsDefine inPackage "PARSER_HEADER_FILE"-  mkForwardDec s | normCat s == s = "class " ++ identCat s ++ ";\n"-  mkForwardDec _ = ""+  mkForwardDec s = "class " ++ identCat s ++ ";\n"   mkVar s | normCat s == s = "  " ++ identCat s ++"*" +++ map toLower (identCat s) ++ "_;\n"   mkVar _ = ""   mkDefines n [] = mkString n   mkDefines n ((_,s):ss) = "#define " ++ s +++ show n ++ "\n" ++ mkDefines (n+1) ss -- "nsDefine inPackage s" not needed (see cf2flex::makeSymEnv)-  mkString n =  if isUsedCat cf catString+  mkString n =  if isUsedCat cf (TokenCat catString)    then ("#define " ++ nsDefine inPackage "_STRING_ " ++ show n ++ "\n") ++ mkChar (n+1)    else mkChar n-  mkChar n =  if isUsedCat cf catChar+  mkChar n =  if isUsedCat cf (TokenCat catChar)    then ("#define " ++ nsDefine inPackage "_CHAR_ " ++ show n ++ "\n") ++ mkInteger (n+1)    else mkInteger n-  mkInteger n =  if isUsedCat cf catInteger+  mkInteger n =  if isUsedCat cf (TokenCat catInteger)    then ("#define " ++ nsDefine inPackage "_INTEGER_ " ++ show n ++ "\n") ++ mkDouble (n+1)    else mkDouble n-  mkDouble n =  if isUsedCat cf catDouble+  mkDouble n =  if isUsedCat cf (TokenCat catDouble)    then ("#define " ++ nsDefine inPackage "_DOUBLE_ " ++ show n ++ "\n") ++ mkIdent(n+1)    else mkIdent n-  mkIdent n =  if isUsedCat cf catIdent+  mkIdent n =  if isUsedCat cf (TokenCat catIdent)    then "#define " ++ nsDefine inPackage "_IDENT_ " ++ show n ++ "\n"    else ""-  mkFuncs s | normCat s == s = identCat s ++ "*" +++ "p" ++ identCat s ++ "(FILE *inp);\n" ++-                               identCat s ++ "*" +++ "p" ++ identCat s ++ "(const char *str);\n"-  mkFuncs _ = ""+  mkFuncs s = identCat (normCat s) ++ "*" +++ "p" ++ identCat s ++ "(FILE *inp);\n" +++              identCat (normCat s) ++ "*" +++ "p" ++ identCat s ++ "(const char *str);\n"
src/BNFC/Backend/CPP/STL/CFtoBisonSTL.hs view
@@ -1,4 +1,6 @@ {-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE TupleSections #-}  {-     BNF Converter: C++ Bison generator@@ -59,7 +61,7 @@ import BNFC.Options (RecordPositions(..)) import BNFC.PrettyPrint import BNFC.TypeChecker-import BNFC.Utils ((+++))+import BNFC.Utils ((+++), when) import ErrM  --This follows the basic structure of CFtoHappy.@@ -75,7 +77,7 @@ cf2Bison rp inPackage name cf env  = unlines     [header inPackage name cf,-     render $ union inPackage (positionCats cf ++ allCats cf),+     render $ union inPackage (map TokenCat (positionCats cf) ++ allCats cf),      maybe "" (\ns -> "%define api.prefix {" ++ ns ++ "yy}") inPackage,      "%token _ERROR_",      tokens user env,@@ -120,12 +122,15 @@     , ""     , definedRules cf     , nsStart inPackage-    , unlines $ map (parseMethod inPackage name) (allCatsNorm cf ++ positionCats cf)  -- (allEntryPoints cf), M.F. 2004-09-14 fix of [Ty2] bug.+    , unlines $ map parseResult dats+    , unlines $ map (parseMethod inPackage name) eps     , nsEnd inPackage     , "%}"     ]   where-   ns = nsString inPackage+    ns   = nsString inPackage+    eps  = allEntryPoints cf ++ map TokenCat (positionCats cf)+    dats = nub $ map normCat eps  definedRules :: CF -> String definedRules cf =@@ -175,16 +180,23 @@         call x es = x ++ "(" ++ intercalate ", " (map cppExp es) ++ ")"  +-- | Generates declaration and initialization of the @YY_RESULT@ for a parser.+--+--   Different parsers (for different precedences of the same category)+--   share such a declaration.+--+--   Expects a normalized category.+parseResult :: Cat -> String+parseResult cat =+  "static " ++ cat' ++ "*" +++ resultName cat' +++ "= 0;"+  where+  cat' = identCat cat+ --This generates a parser method for each entry point. parseMethod :: Maybe String -> String -> Cat -> String-parseMethod inPackage _ cat =-  -- if normCat cat /= cat     M.F. 2004-09-17 comment. No duplicates from allCatsIdNorm-  -- then ""-  -- else-  unlines+parseMethod inPackage _ cat = unlines   [-   "static " ++ cat' ++ "*" +++ resultName cat' +++ "= 0;",-   cat' ++"* p" ++ cat' ++ "(FILE *inp)",+   cat' ++ "* p" ++ par ++ "(FILE *inp)",    "{",    "  " ++ ns ++ "yy_mylinenumber = 1;",       -- O.F.    "  " ++ ns ++ "initialize_lexer(inp);",@@ -197,7 +209,7 @@    "    return" +++ resultName cat' ++ ";",    "  }",    "}",-   cat' ++"* p" ++ cat' ++ "(const char *str)",+   cat' ++ "* p" ++ par ++ "(const char *str)",    "{",    "  YY_BUFFER_STATE buf;",    "  int result;",@@ -218,6 +230,7 @@   ]  where   cat' = identCat (normCat cat)+  par  = identCat cat   ns = nsString inPackage  @@ -267,19 +280,16 @@  --declares non-terminal types. declarations :: CF -> String-declarations cf = concatMap (typeNT cf) (positionCats cf ++ allCats cf)- where --don't define internal rules-   typeNT cf nt | isPositionCat cf nt || rulesForCat cf nt /= [] =-      "%type <" ++ varName nt ++ "> " ++ identCat nt ++ "\n"-   typeNT _ _ = ""+declarations cf = concatMap typeNT $+  map TokenCat (positionCats cf) +++  filter (not . null . rulesForCat cf) (allCats cf) -- don't define internal rules+  where+  typeNT nt = "%type <" ++ varName nt ++ "> " ++ identCat nt ++ "\n"  --declares terminal types. tokens :: [UserDef] -> SymEnv -> String-tokens user = concatMap (declTok user)- where-  declTok u (s,r) = if s `elem` map show u-    then "%token<string_> " ++ r ++ "    //   " ++ s ++ "\n"-    else "%token " ++ r ++ "    //   " ++ s ++ "\n"+tokens user = concatMap $ \ (s, r) ->+  concat [ "%token", when (s `elem` user) "<string_>", " ", r, "    //   ", s, "\n" ]  specialToks :: CF -> String specialToks cf = concat [@@ -290,17 +300,17 @@   ifC catIdent "%token<string_> _IDENT_\n"   ]    where-    ifC cat s = if isUsedCat cf cat then s else ""+    ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""  --The following functions are a (relatively) straightforward translation --of the ones in CFtoHappy.hs rulesForBison :: RecordPositions -> Maybe String -> String -> CF -> SymEnv -> Rules rulesForBison rp inPackage _ cf env = map mkOne (ruleGroups cf) ++ posRules where   mkOne (cat,rules) = constructRule rp inPackage cf env rules cat-  posRules = map mkPos $ positionCats cf-  mkPos cat = (cat, [(fromMaybe (show cat) (lookup (show cat) env),-   "$$ = new " ++ show cat ++ "($1," ++ nsString inPackage ++ "yy_mylinenumber) ; YY_RESULT_" ++-   show cat ++ "_= $$ ;")])+  posRules = (`map` positionCats cf) $ \ n -> (TokenCat n,+    [( fromMaybe n $ lookup n env+     , concat [ "$$ = new " , n , "($1," , nsString inPackage , "yy_mylinenumber) ; YY_RESULT_" , n , "_= $$ ;" ]+     )])  -- For every non-terminal, we construct a set of rules. constructRule ::@@ -357,11 +367,12 @@   []  -> ("/* empty */",[])   its -> (unwords (map mkIt its), metas its)  where-   mkIt i = case i of-     Left c -> case lookup (show c) env of-       Just x | not (isPositionCat cf c) -> x-       _ -> typeName (identCat c)-     Right s -> fromMaybe s (lookup s env)+   mkIt = \case+     Left (TokenCat s)+       | isPositionCat cf s -> typeName s+       | otherwise -> fromMaybe (typeName s) $ lookup s env+     Left c  -> identCat c+     Right s -> fromMaybe s $ lookup s env    metas its = [('$': show i,revert c) | (i,Left c) <- zip [1 :: Int ..] its]     -- notice: reversibility with push_back vectors is the opposite
src/BNFC/Backend/CSharp.hs view
@@ -100,7 +100,7 @@   liftIO $ putStrLn "-----------------------------------------------------------------------------"   liftIO $ putStrLn ""   where-    makefile = vcat+    makefile basename = vcat         ["MONO = mono", "MONOC = gmcs"         , "MONOCFLAGS = -optimize -reference:${PARSERREF}"         , "GPLEX = ${MONO} gplex.exe", "GPPG = ${MONO} gppg.exe"@@ -114,7 +114,7 @@         , Makefile.mkRule "distclean" [ "clean" ]             [ "rm -f ${CSFILES}"             , "rm -f " ++ unwords [namespace <.> ext | ext <- [ "l","y","tex" ]]-            , "rm -f Makefile" ]+            , "rm -f " ++ basename ]         , Makefile.mkRule "test" [ "Parser.cs", "Scanner.cs" ]             [ "@echo \"Compiling test...\""             , "${MONOC} ${MONOCFLAGS} -out:bin/test.exe ${CSFILES}" ]@@ -305,7 +305,7 @@   "}"   ]   where-   def = show (head (allEntryPoints cf))+   def = identCat (head (allEntryPoints cf))  projectguid :: MkFiles String projectguid = do
src/BNFC/Backend/CSharp/CFtoGPLEX.hs view
@@ -38,10 +38,12 @@  module BNFC.Backend.CSharp.CFtoGPLEX (cf2gplex) where +import Data.List+import Data.Maybe+ import BNFC.CF import BNFC.Backend.CSharp.RegToGPLEX import BNFC.Backend.Common.NamedVariables-import Data.List import BNFC.Backend.CSharp.CSharpUtils  --The environment must be returned for the parser to use.@@ -163,14 +165,12 @@   [("<YYINITIAL>."               , "return (int)Tokens.error;")]   ]   where-   ifC cat s = if isUsedCat cf cat then s else []+   ifC cat s = if isUsedCat cf (TokenCat cat) then s else []    userDefTokens = map tokenline (tokenPragmas cf)      where        tokenline (name, exp) = ("<YYINITIAL>" ++ printRegGPLEX exp , action name)-       action n = "if(Trace) System.Console.Error.WriteLine(yytext); yylval." ++ varName (show$normCat n) ++ " = new " ++ identifier namespace (show n) ++ "(yytext); return (int)Tokens." ++ sName n ++ ";"-       sName n = case lookup (show n) env of-         Just x -> x-         Nothing -> show n+       action n = "if(Trace) System.Console.Error.WriteLine(yytext); yylval." ++ varName n ++ " = new " ++ identifier namespace n ++ "(yytext); return (int)Tokens." ++ sName n ++ ";"+       sName n = fromMaybe n $ lookup n env    -- These handle escaped characters in Strings.    strStates = [      ("<YYINITIAL>\"\\\"\"" , "BEGIN(STRING);"),
src/BNFC/Backend/CSharp/CFtoGPPG.hs view
@@ -36,43 +36,52 @@    ************************************************************** -} +{-# LANGUAGE PatternGuards #-}+ module BNFC.Backend.CSharp.CFtoGPPG (cf2gppg) where +import Data.Char  (toLower)+import Data.List  (intersperse)+import Data.Maybe (fromMaybe)+ import BNFC.CF-import Data.List (intersperse) import BNFC.Backend.Common.NamedVariables hiding (varName)-import Data.Char (toLower)-import BNFC.Utils ((+++))-import BNFC.TypeChecker-import ErrM import BNFC.Backend.Common.OOAbstract hiding (basetypes) import BNFC.Backend.CSharp.CSharpUtils+import BNFC.TypeChecker+import BNFC.Utils ((+++)) +import ErrM+ --This follows the basic structure of CFtoHappy.  -- Type declarations-type Rules       = [(NonTerminal,[(Pattern,Action)])]+type Rules       = [OneRule]+type OneRule     = (NonTerminal, [(Pattern, Action)]) type Pattern     = String type Action      = String type MetaVar     = String  --The environment comes from the CFtoGPLEX cf2gppg :: Namespace -> CF -> SymEnv -> String-cf2gppg namespace cf env = unlines [-  header namespace cf,-  union namespace (positionCats cf ++ allCats cf ++ map strToCat (tokentypes (cf2cabs cf))),-  tokens user env,-  declarations cf,-  "",-  specialToks cf,-  "",-  "%%",-  prRules (rulesForGPPG namespace cf env)+cf2gppg namespace cf env = unlines $+  [ header namespace cf+  , union namespace $ concat $+    [ positionCats cf+    , allCats cf+    , map strToCat $ tokentypes $ cf2cabs cf+    ]+  , tokens (map fst $ tokenPragmas cf) env+  , declarations cf+  , ""+  , specialToks cf+  , ""+  , "%%"+  , prRules $ rulesForGPPG namespace cf env   ]-  where-    user = fst (unzip (tokenPragmas cf)) -positionCats cf = filter (isPositionCat cf) $ fst (unzip (tokenPragmas cf))+positionCats :: CF -> [Cat]+positionCats cf = map TokenCat $ filter (isPositionCat cf) $ map fst $ tokenPragmas cf  header :: Namespace -> CF -> String header namespace cf = unlines [@@ -146,20 +155,22 @@       "  public " ++ identifier namespace (identCat (normCat cat)) +++ (varName (show$normCat cat)) ++ ";"     catline _ = "" ---declares non-terminal types.+-- | Declares non-terminal types. declarations :: CF -> String-declarations cf = unlinesInline $ map (typeNT cf) (positionCats cf ++ allCats cf)- where --don't define internal rules-   typeNT cf nt | (isPositionCat cf nt || rulesForCat cf nt /= []) = "%type <" ++ (varName (show$normCat nt)) ++ "> " ++ (show$normCat nt)-   typeNT _ _ = ""+declarations cf = unlinesInline $ map typeNT $+  positionCats cf +++  filter (not . null . rulesForCat cf) (allCats cf)  -- don't define internal rules+  where+  typeNT nt = "%type <" ++ varName x ++ "> " ++ x+    where x = show $ normCat nt  --declares terminal types. tokens :: [UserDef] -> SymEnv -> String-tokens user ts = concatMap (declTok user) ts+tokens user ts = concatMap declTok ts   where-    declTok u (s,r) = if elem s (map show u)-      then "%token<" ++ varName (show$normCat$strToCat s) ++ "> " ++ r ++ "   //   " ++ show s ++ "\n"-      else "%token " ++ r ++ "    //   " ++ show s ++ "\n"+    declTok (s, r) = if s `elem` user+      then "%token<" ++ varName (show$normCat$strToCat s) ++ "> " ++ r ++ "   //   " ++ s ++ "\n"+      else "%token " ++ r ++ "    //   " ++ s ++ "\n"  specialToks :: CF -> String specialToks cf = unlinesInline [@@ -170,7 +181,7 @@   ifC catIdent   "%token<string_> IDENT_"   ]   where-    ifC cat s = if isUsedCat cf cat then s else ""+    ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""  --The following functions are a (relatively) straightforward translation --of the ones in CFtoHappy.hs@@ -178,10 +189,11 @@ rulesForGPPG namespace cf env = (map mkOne $ ruleGroups cf) ++ posRules where   mkOne (cat,rules) = constructRule namespace cf env rules cat   posRules = map mkPos $ positionCats cf-  mkPos cat = (cat, [(maybe (show cat) id (lookup (show cat) env),-    "$$ = new " ++ show cat ++ "($1);")])+  mkPos :: Cat -> OneRule+  mkPos cat = (cat, [(fromMaybe s $ lookup s env, "$$ = new " ++ s ++ "($1);")])+    where s = show cat --- For every non-terminal, we construct a set of rules.+-- | For every non-terminal, we construct a set of rules. constructRule :: Namespace ->   CF -> SymEnv -> [Rule] -> NonTerminal -> (NonTerminal,[(Pattern,Action)]) constructRule namespace cf env rules nt =@@ -227,15 +239,15 @@ generatePatterns cf env r _ = case rhsRule r of   []  -> ("/* empty */",[])   its -> (unwords (map mkIt its), metas its)-  where-    mkIt i = case i of-      Left c -> case lookup (show c) env of-        -- This used to be x, but that didn't work if we had a symbol "String" in env, and tried to use a normal String - it would use the symbol...-        Just x | not (isPositionCat cf c) && (show c) `notElem` (map fst basetypes) -> x-        _ -> typeName (identCat c)-      Right s -> case lookup s env of-        Just x -> x-        Nothing -> s+    where+    mkIt = \case+      Left c+          | TokenCat tok <- c, isPositionCat cf tok -> fallback+          | show c `elem` map fst basetypes         -> fallback+          | otherwise                               -> fromMaybe fallback $ lookup (show c) env+        -- This used to be x, but that didn't work if we had a symbol "String" in env, and tried to use a normal String - it would use the symbol...        _ -> fallback+        where fallback = typeName (identCat c)+      Right s -> fromMaybe s $ lookup s env     metas its = [('$': show i,revert c) | (i,Left c) <- zip [1 :: Int ..] its]      -- notice: reversibility with push_back vectors is the opposite
src/BNFC/Backend/Common/Makefile.hs view
@@ -8,45 +8,57 @@ import BNFC.Backend.Base (mkfile, Backend) import BNFC.PrettyPrint --- | Creates a Makefile rule+-- | Creates a Makefile rule.+-- -- >>> mkRule "main" ["file1","file2"] ["do something"]--- main: file1 file2+-- main : file1 file2 -- 	do something -- <BLANKLINE> -- -- >>> mkRule "main" ["program.exe"] []--- main: program.exe+-- main : program.exe -- <BLANKLINE>-mkRule :: String   -- ^ The target name-       -> [String] -- ^ Dependencies-       -> [String] -- ^ Recipe+--+mkRule :: String   -- ^ The target name.+       -> [String] -- ^ Dependencies.+       -> [String] -- ^ Recipe.        -> Doc-mkRule target deps recipes =-    text target <> ":" <+> hsep (map text deps)-    $$ vcat [ "\t" <> text recipe | recipe <- recipes ]-    $$ ""+mkRule target deps recipe = vcat . concat $+    [ [ text target <+> ":" <+> hsep (map text deps) ]+    , map (("\t" <>) . text) recipe+    , [ "" ]+    ] --- | Variable assignment+-- | Variable assignment. -- -- >>> mkVar "FOO" "bar" -- FOO=bar+-- mkVar :: String -> String -> Doc mkVar n v = text n <> "=" <> text v ---- | Variable referencing------ >>> mkRefVar "FOO"--- ${FOO}-mkRefVar :: String -> Doc-mkRefVar m  = case m of-    "" -> ""-    _ -> text $ refVar m+-- UNUSED:+-- -- | Variable referencing.+-- --+-- -- >>> mkRefVar "FOO"+-- -- ${FOO}+-- --+-- mkRefVar :: String -> Doc+-- mkRefVar m  = case m of+--     "" -> empty+--     _ -> text $ refVar m ++-- | Variable referencing.+--+-- >>> refVar "FOO"+-- "${FOO}"+-- refVar :: String -> String refVar m = "${" ++ m ++ "}" --- | Create the Makefile file using the name specified in the option--- record.-mkMakefile :: SharedOptions -> Doc -> Backend-mkMakefile Options {make = Nothing} _ = return ()-mkMakefile Options {make = Just makefile} content = mkfile makefile content+-- | 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 = Nothing} _         = return ()
src/BNFC/Backend/Common/NamedVariables.hs view
@@ -81,7 +81,7 @@ --The type of an instance variable --and a # unique to that type -type UserDef = Cat --user-defined types+type UserDef = TokenCat --user-defined types   --A symbol-mapping environment.
src/BNFC/Backend/Common/OOAbstract.hs view
@@ -82,9 +82,8 @@   defineds   = defs   }  where-  (pos,base) = partition (isPositionCat cf) $ fst (unzip (tokenPragmas cf))+  (pos,  toks) = partition (isPositionCat cf) $ map fst $ tokenPragmas cf   (lists,cats) = partition isList $ allCatsNorm cf-  toks = map (show.normCat) base   testRule (Rule f c _)    | isList c  = Nothing    | f == "_"  = Nothing@@ -93,7 +92,7 @@     (identCat c,[(f, classVars (map (status . identCat) cs)) | (f,cs) <- fcs])   posdata =     [("Visitable",  -- to give superclass-     [(show c,[("String",False,"string_"),("Integer",False,"integer_")])]) | c<-pos]+     [(c,[("String",False,"string_"),("Integer",False,"integer_")])]) | c<-pos]   status cat = (cat, notElem cat (map fst basetypes ++ toks))   defs = [f | FunDef f _ _ <- cfgPragmas cf] 
src/BNFC/Backend/Haskell.hs view
@@ -19,41 +19,43 @@  module BNFC.Backend.Haskell (makeHaskell, AlexVersion(..), makefile, testfile) where -+import qualified Control.Monad as Ctrl+import Data.Functor    ((<$>))+import System.FilePath ((<.>), (</>), pathSeparator)+import Text.Printf     (printf)+import Text.PrettyPrint --- import BNFC.Utils-import BNFC.Options hiding (Backend)-import BNFC.CF+import BNFC.Backend.Agda import BNFC.Backend.Base import BNFC.Backend.Haskell.CFtoHappy import BNFC.Backend.Haskell.CFtoAlex import BNFC.Backend.Haskell.CFtoAlex2 import BNFC.Backend.Haskell.CFtoAlex3-import BNFC.Backend.Txt2Tag import BNFC.Backend.Haskell.CFtoAbstract import BNFC.Backend.Haskell.CFtoTemplate import BNFC.Backend.Haskell.CFtoPrinter import BNFC.Backend.Haskell.CFtoLayout-import BNFC.Backend.XML import BNFC.Backend.Haskell.HsOpts-import BNFC.Backend.Haskell.ToCNF as ToCNF import BNFC.Backend.Haskell.MkErrM import BNFC.Backend.Haskell.MkSharedString+import BNFC.Backend.Haskell.ToCNF as ToCNF import BNFC.Backend.Haskell.Utils (parserName)+import BNFC.Backend.Txt2Tag+import BNFC.Backend.XML import qualified BNFC.Backend.Common.Makefile as Makefile -import System.FilePath (pathSeparator)-import Control.Monad(when,unless)-import Text.Printf (printf)-import Text.PrettyPrint---- naming conventions-+import BNFC.CF+import BNFC.Options hiding (Backend)+import BNFC.Utils (when, unless, getZonedTimeTruncatedToSeconds)  +-- | Entrypoint for the Haskell backend.  makeHaskell :: SharedOptions -> CF -> Backend makeHaskell opts cf = do+  -- Get current time in printable form.+  time <- liftIO $ show <$> getZonedTimeTruncatedToSeconds+   let absMod = absFileM opts       lexMod = alexFileM opts       parMod = happyFileM opts@@ -62,7 +64,11 @@       errMod = errFileM opts       shareMod = shareFileM opts   do+    -- Generate abstract syntax and pretty printer.     mkfile (absFile opts) $ cf2Abstract (byteStrings opts) (ghcExtensions opts) (functor opts) absMod cf+    mkfile (printerFile opts) $ cf2Printer (byteStrings opts) (functor opts) False prMod absMod cf++    -- Generate Alex lexer.  Layout is resolved after lexing.     case alexMode opts of       Alex1 -> do         mkfile (alexFile opts) $ cf2alex lexMod errMod cf@@ -73,60 +79,239 @@       Alex3 -> do         mkfile (alexFile opts) $ cf2alex3 lexMod errMod shareMod (shareStrings opts) (byteStrings opts) cf         liftIO $ printf "Use Alex 3.0 to compile %s.\n" (alexFile opts)-    unless (cnf opts) $ do++    Ctrl.when (shareStrings opts) $ mkfile (shareFile opts) $ sharedString shareMod (byteStrings opts) cf+    Ctrl.when (hasLayout cf) $ mkfile (layoutFile opts) $ cf2Layout (alex1 opts) (inDir opts) layMod lexMod cf++    -- Generate Happy parser and matching test program unless --cnf.+    Ctrl.unless (cnf opts) $ do       mkfile (happyFile opts) $-        cf2HappyS parMod absMod lexMod errMod (glr opts) (byteStrings opts) (functor opts) cf-      liftIO $ printf "%s Tested with Happy 1.15\n" (happyFile opts)-    mkfile (tFile opts)        $ testfile opts cf-    mkfile (txtFile opts)      $ cfToTxt (lang opts) cf-    mkfile (templateFile opts) $ cf2Template (templateFileM opts) absMod errMod (functor opts) cf-    mkfile (printerFile opts)  $ cf2Printer (byteStrings opts) (functor opts) False prMod absMod cf-    when (hasLayout cf) $ mkfile (layoutFile opts) $ cf2Layout (alex1 opts) (inDir opts) layMod lexMod cf+        cf2Happy parMod absMod lexMod errMod (glr opts) (byteStrings opts) (functor opts) cf+      -- liftIO $ printf "%s Tested with Happy 1.15\n" (happyFile opts)+      mkfile (tFile opts)        $ testfile opts cf++    -- Both Happy parser and skeleton (template) rely on Err.     mkfile (errFile opts) $ mkErrM errMod (ghcExtensions opts)-    when (shareStrings opts) $ mkfile (shareFile opts)    $ sharedString shareMod (byteStrings opts) cf-    Makefile.mkMakefile opts $ makefile opts+    mkfile (templateFile opts) $ cf2Template (templateFileM opts) absMod errMod (functor opts) cf++    -- Generate txt2tags documentation.+    mkfile (txtFile opts)      $ cfToTxt (lang opts) cf++    -- Generate XML and DTD printers.     case xml opts of       2 -> makeXML opts True cf       1 -> makeXML opts False cf       _ -> return ()-    when (cnf opts) $ do++    -- CNF backend.  Currently does not make use of layout.+    Ctrl.when (cnf opts) $ do       mkfile (cnfTablesFile opts) $ ToCNF.generate opts cf-      mkfile "TestCNF.hs" $ ToCNF.genTestFile opts cf-      mkfile "BenchCNF.hs" $ ToCNF.genBenchmark opts+      mkfile (cnfTestFile opts)   $ ToCNF.genTestFile opts cf+      mkfile (cnfBenchFile opts)  $ ToCNF.genBenchmark opts +    -- Generate Agda bindings for AST, Printer and Parser.+    Ctrl.when (agda opts) $ makeAgda time opts cf -makefile :: Options -> Doc-makefile opts = makeA where-  glr_params = if glr opts == GLR then "--glr --decode " else ""+    -- Generate Makefile.+    Makefile.mkMakefile opts $ makefile opts+++-- | Generate the makefile (old version, with just one "all" target).+_oldMakefile+  :: Options+  -> String    -- ^ Filename of the makefile.+  -> Doc       -- ^ Content of the makefile.+_oldMakefile opts makeFile = vcat+  [ Makefile.mkRule "all" [] $ concat $+      [ [ unwords $ [ "happy -gca" ] ++ glrParams ++ [ happyFile opts ] | not (cnf opts) ]+      , [ "alex -g " ++ alexFile opts ]+      , [ if cnf opts+          then unwords [ "ghc --make", cnfTestFile opts, "-o", cnfTestFileExe opts ]+          else unwords [ "ghc --make", tFile       opts, "-o", tFileExe       opts ]+        ]+      ]+  , cleanRule opts+  , distCleanRule opts makeFile+  ]+  where+  glrParams :: [String]+  glrParams = when (glr opts == GLR) $ [ "--glr", "--decode" ]++-- | Rule to clean GHC and Latex generated files.+cleanRule :: Options -> Doc+cleanRule opts = Makefile.mkRule "clean" [] $ concat $+  [ [ rmGen ]+  , when (agda opts) rmAgda+  ]+  where+  rmGen  = unwords $ [ "-rm", "-f" ] ++ map prefix gen+  gen    = concat [ genHs, genLtx, genAg ]+  genHs  = [ "*.hi", "*.o" ]+  genLtx = [ "*.log", "*.aux", "*.dvi" ]+  genAg  = when (agda opts) $ [ "*.agdai" ]+  rmAgda = [ "-rm -rf MAlonzo" ]+  prefix = if null dir then id else (dir </>)+  dir    = codeDir opts++-- | Rule to clean all files generated by BNFC and the subsequent tools.+distCleanRule :: Options -> String -> Doc+distCleanRule opts makeFile = Makefile.mkRule "distclean" ["clean"] $+  [ unwords . concat $+    [ [ "-rm -f" ]+      -- Generated files that have a .bak variant+    , concatMap (\ f -> alsoBak (f opts))+      [ absFile        -- Abs.hs+      , composOpFile   -- ComposOp.hs+      , txtFile        -- Doc.txt+      , errFile        -- ErrM.hs+      , layoutFile     -- Layout.hs+      , alexFile       -- Lex.x+      , happyFile      -- Par.y+      , printerFile    -- Print.hs+      , shareFile      -- SharedString.hs -- only if: shareStrings opt+      , templateFile   -- Skel.hs+      , tFile          -- Test.hs+      , xmlFile        -- XML.hs+      , agdaASTFile    -- AST.agda+      , agdaParserFile -- Parser.agda+      , agdaLibFile    -- IOLib.agda+      , agdaMainFile   -- Main.agda+      , (\ opts -> dir ++ lang opts ++ ".dtd")+      ]  -- TODO: clean up cnf files+      -- Files that have no .bak variant+    , map (\ (file, ext) -> mkFile withLang file ext opts)+      [ ("Test"    , "")+      , ("Lex"     , "hs")+      , ("Par"     , "hs")+      , ("Par"     , "info")+      , ("ParData" , "hs")  -- only if --glr+      ]+    , [ "Main" | agda opts ]+    , [ makeFile ]+    ]+  , if null dir then "" else "-rmdir -p " ++ dir+  ]+  where   dir = let d = codeDir opts in if null d then "" else d ++ [pathSeparator]-  makeA = vcat-      [ Makefile.mkRule "all" []-           ([ "happy -gca " ++ glr_params ++ happyFile opts | not (cnf opts) ] ++-            [ "alex -g " ++ alexFile opts ] ++-            [ if cnf opts-              then "ghc --make TestCNF.hs"-              else "ghc --make " ++ tFile opts ++ " -o " ++ mkFile withLang "Test" "" opts])-      , Makefile.mkRule "clean" []-          [ "-rm -f "  ++ unwords-                (map (dir++) [ "*.log", "*.aux", "*.hi", "*.o", "*.dvi" ]) ]-      ,  Makefile.mkRule "distclean" ["clean"]-          [ "-rm -f " ++ unwords-              [ mkFile withLang "Doc" "*" opts-              , mkFile withLang "Lex" "*" opts-              , mkFile withLang "Par" "*" opts-              , mkFile withLang "Layout" "*" opts-              , mkFile withLang "Skel" "*" opts-              , mkFile withLang "Print" "*" opts-              , mkFile withLang "Test" "*" opts-              , mkFile withLang "Abs" "*" opts-              , mkFile withLang "Test" "" opts-              , mkFile noLang   "ErrM" "*" opts-              , mkFile noLang   "SharedString" "*" opts-              , mkFile noLang "ComposOp" "*" opts-              , dir ++ lang opts ++ ".dtd"-              , mkFile withLang "XML" "*" opts-              , "Makefile*" ]-          , if null dir then "" else "\t-rmdir -p " ++ dir ]++  alsoBak :: FilePath -> [FilePath]+  alsoBak s = [ s, s <.> "bak" ]++makefileHeader :: Doc+makefileHeader = vcat+  [ "# Makefile generated by BNFC."+  , ""+  ]+++-- | Generate the makefile.+makefile+  :: Options+  -> String    -- ^ Filename of the makefile.+  -> Doc       -- ^ Content of the makefile.+makefile opts makeFile = vcat+  [ makefileHeader+  , phonyRule+  , defaultRule+  , vcat [ "# Rules for building the parser." , "" ]+  -- If option -o was given, we have no access to the grammar file+  -- from the Makefile.  Thus, we have to drop the rule for+  -- reinvokation of bnfc.+  , when (isDefault outDir opts) $ bnfcRule+  , unless (cnf opts) $ happyRule+  , alexRule+  , if cnf opts then testCNFRule else testParserRule+  , when (agda opts) $ agdaRule+  , vcat [ "# Rules for cleaning generated files." , "" ]+  , cleanRule opts+  , distCleanRule opts makeFile+  , "# EOF"+  ]+  where+  -- | List non-file targets here.+  phonyRule :: Doc+  phonyRule = vcat+    [ "# List of goals not corresponding to file names."+    , ""+    , Makefile.mkRule ".PHONY" [ "all", "clean", "distclean" ] []+    ]+  -- | Default: build test parser(s).+  defaultRule :: Doc+  defaultRule = vcat+     [ "# Default goal."+     , ""+     , Makefile.mkRule "all" tgts []+     ]+     where+     tgts | cnf opts  = [ cnfTestFileExe opts ]+          | otherwise = concat $+              [ [ tFileExe opts ]+              , [ "Main" | agda opts ]+              ]++  -- | Rule to reinvoke @bnfc@ to updated parser.+  --   Reinvokation should not recreate @Makefile@!+  bnfcRule :: Doc+  bnfcRule = Makefile.mkRule tgts [ lbnfFile opts ] [ recipe ]+    where+    recipe    = unwords [ "bnfc", printOptions opts{ make = Nothing } ]+    tgts      = unwords . concat $+      [ alexEtc+      , if cnf opts then [ cnfTestFile opts ] else [ happyFile opts, tFile opts ]+      , when (agda opts) agdaFiles+      ]+    alexEtc   = map ($ opts) [ errFile, alexFile, printerFile ]+    agdaFiles = map ($ opts) [ agdaASTFile, agdaParserFile, agdaLibFile, agdaMainFile ]++  -- | Rule to invoke @happy@.+  happyRule :: Doc+  happyRule = Makefile.mkRule "%.hs" [ "%.y" ] [ recipe ]+    where+    recipe = unwords . concat $+      [ [ "happy", "--ghc", "--coerce", "--array", "--info" ]+      , when (glr opts == GLR) $ [ "--glr", "--decode" ]+      , [ "$<" ]+      ]++  -- | Rule to invoke @alex@.+  alexRule :: Doc+  alexRule = Makefile.mkRule "%.hs" [ "%.x" ] [ "alex --ghc $<" ]++  -- | Rule to build Haskell test parser.+  testParserRule :: Doc+  testParserRule = Makefile.mkRule tgt deps [ "ghc --make $< -o $@" ]+    where+    tgt :: String+    tgt = tFileExe opts+    deps :: [String]+    deps = map ($ opts)+      [ tFile {- must be first! -}+      , errFile+      , alexFileHs+      , happyFileHs+      , printerFile+      ]++  -- | Rule to build CNF test parser.+  testCNFRule :: Doc+  testCNFRule = Makefile.mkRule (cnfTestFileExe opts) deps [ "ghc --make $< -o $@" ]+    where+    deps = [ cnfTestFile opts {- must be first! -} , alexFileHs opts ]++  -- | Rule to build Agda parser.+  agdaRule :: Doc+  agdaRule = Makefile.mkRule "Main" deps [ "agda --no-libraries --ghc --ghc-flag=-Wwarn $<" ]+    where+    deps = map ($ opts)+      [ agdaMainFile  -- must be first!+      , agdaASTFile+      , agdaParserFile+      , agdaLibFile+      -- Haskell modules bound by Agda modules:+      , errFile+      , alexFileHs+      , happyFileHs+      , printerFile       ]  testfile :: Options -> CF -> String
src/BNFC/Backend/Haskell/CFtoAbstract.hs view
@@ -1,163 +1,194 @@-{-# LANGUAGE NoImplicitPrelude #-}
-
-{-
-    BNF Converter: Abstract syntax Generator
-    Copyright (C) 2004  Author:  Markus Forberg
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
--}
-
-module BNFC.Backend.Haskell.CFtoAbstract (cf2Abstract) where
-
-import Prelude'
-
-import BNFC.CF
-import BNFC.Utils((+++))
-import BNFC.Backend.Haskell.Utils (catToType, catvars)
-import Text.PrettyPrint
-
--- to produce a Haskell module
-cf2Abstract :: Bool     -- ^ Use ByteString instead of String
-            -> Bool     -- ^ Use GHC specific extensions
-            -> Bool     -- ^ Make the tree a functor
-            -> String   -- ^ module name
-            -> CF       -- ^ Grammar
-            -> String
-cf2Abstract byteStrings ghcExtensions functor name cf = unlines $
-  (if ghcExtensions then "{-# LANGUAGE DeriveDataTypeable #-}" else "") :
-  (if ghcExtensions then "{-# LANGUAGE DeriveGeneric #-}" else "") :
-  ("module "++name +++ "where\n") :
-  "-- Haskell module generated by the BNF converter\n" :
-  (if byteStrings then "import qualified Data.ByteString.Char8 as BS" else "") :
-  (if ghcExtensions then "import Data.Data (Data,Typeable)" else "") :
-  (if ghcExtensions then "import GHC.Generics (Generic)" else "") :
-  (map (render . \c -> prSpecialData byteStrings (isPositionCat cf c) derivingClasses c) (specialCats cf)
-  ++ map (render . prData functor derivingClasses) (cf2data cf))
-  where
-    derivingClasses = ["Eq","Ord","Show","Read"]
-        ++ if ghcExtensions then ["Data","Typeable","Generic"] else []
-
--- | >>> prData False ["Eq", "Ord", "Show", "Read"] (Cat "C", [("C1", [Cat "C"]), ("CIdent", [Cat "Ident"])])
--- data C = C1 C | CIdent Ident
---   deriving (Eq, Ord, Show, Read)
--- <BLANKLINE>
---
--- Nota that the layout adapts if it doesn't fit in a line:
--- >>> prData False ["Show"] (Cat "C", [("CAbracadabra",[]),("CEbrecedebre",[]),("CIbricidibri",[]),("CObrocodobro",[]),("CUbrucudubru",[])])
--- data C
---     = CAbracadabra
---     | CEbrecedebre
---     | CIbricidibri
---     | CObrocodobro
---     | CUbrucudubru
---   deriving (Show)
--- <BLANKLINE>
---
--- The if the first argument is True, generate a functor:
--- >>> prData True ["Show"] (Cat "C", [("C1", [Cat "C"]), ("CIdent", [TokenCat "Ident"])])
--- data C a = C1 a (C a) | CIdent a Ident
---   deriving (Show)
--- <BLANKLINE>
--- instance Functor C where
---     fmap f x = case x of
---         C1 a c -> C1 (f a) (fmap f c)
---         CIdent a ident -> CIdent (f a) ident
---
--- The case for lists
--- >>> prData True ["Show"] (Cat "ExpList", [("Exps", [ListCat (Cat "Exp")])])
--- data ExpList a = Exps a [Exp a]
---   deriving (Show)
--- <BLANKLINE>
--- instance Functor ExpList where
---     fmap f x = case x of
---         Exps a exps -> Exps (f a) (map (fmap f) exps)
-prData :: Bool -> [String] -> Data -> Doc
-prData functor derivingClasses (cat,rules) =
-    hang ("data" <+> dataType) 4 (constructors rules)
-    $+$ nest 2 (deriving_ derivingClasses)
-    $+$ ""
-    $+$ if functor then genFunctorInstance (cat, rules) else empty
-  where
-    prRule (fun,cats) =
-        hsep $ concat [[text fun], ["a" | functor], map prArg cats]
-    dataType =
-        if functor then text (show cat) <+> "a"
-                   else text (show cat)
-    prArg c  = catToType (if functor then Just "a" else Nothing) c
-    constructors [] = empty
-    constructors (h:t) = sep ("=" <+> prRule h : map (("|" <+>) . prRule) t)
-
--- | Generate a functor instance declaration:
--- >>> genFunctorInstance (Cat "C", [("C1", [Cat "C", Cat "C"]), ("CIdent", [TokenCat "Ident"])])
--- instance Functor C where
---     fmap f x = case x of
---         C1 a c1 c2 -> C1 (f a) (fmap f c1) (fmap f c2)
---         CIdent a ident -> CIdent (f a) ident
--- >>> genFunctorInstance (Cat "SomeLists", [("Ints", [ListCat (TokenCat "Integer")]), ("Exps", [ListCat (Cat "Exp")])])
--- instance Functor SomeLists where
---     fmap f x = case x of
---         Ints a integers -> Ints (f a) integers
---         Exps a exps -> Exps (f a) (map (fmap f) exps)
---
-genFunctorInstance :: Data -> Doc
-genFunctorInstance (cat, cons) =
-    "instance Functor" <+> text (show cat) <+> "where"
-    $+$ nest 4 ( "fmap f x = case x of" $+$ nest 4 (vcat (map mkCase cons)))
-  where
-    mkCase (f,args) =
-        let variables = catvars args
-        in text f <+> "a" <+> hsep variables
-          <+> "->" <+> text f <+> "(f a)" <+> hsep (map reccurse (zip args variables))
-    -- We reccursively call fmap on non-terminals only if they are not
-    -- token categories
-    reccurse (TokenCat _, var) = var
-    reccurse (ListCat (TokenCat _), var) = var
-    reccurse (ListCat _, var) = parens ("map (fmap f)" <+> var)
-    reccurse (_, var)          = parens ("fmap f" <+> var)
-
-
--- | Generate a newtype declaration for Ident types
---
--- >>> prSpecialData False False ["Show"] (Cat "Ident")
--- newtype Ident = Ident String deriving (Show)
---
--- >>> prSpecialData False True ["Show"] (Cat "Ident")
--- newtype Ident = Ident ((Int,Int),String) deriving (Show)
---
--- >>> prSpecialData True False ["Show"] (Cat "Ident")
--- newtype Ident = Ident BS.ByteString deriving (Show)
---
--- >>> prSpecialData True True ["Show"] (Cat "Ident")
--- newtype Ident = Ident ((Int,Int),BS.ByteString) deriving (Show)
-prSpecialData :: Bool     -- ^ If True, use ByteString instead of String
-              -> Bool     -- ^ If True, store the token position
-              -> [String] -- ^ Derived classes
-              -> Cat      -- ^ Category
-              -> Doc
-prSpecialData byteStrings position classes cat =
-    hang newtype_ 2 (deriving_ classes)
-  where
-    ppcat = text (show cat)
-    newtype_ = "newtype" <+> ppcat <+> "=" <+> ppcat <+> contentSpec
-    contentSpec | position  = parens ( "(Int,Int)," <> stringType)
-                | otherwise = stringType
-    stringType | byteStrings = "BS.ByteString"
-               | otherwise   = "String"
-
--- | Generate 'deriving' clause
--- >>> deriving_ ["Show","Read"]
--- deriving (Show, Read)
-deriving_ :: [String] -> Doc
-deriving_ cls = "deriving" <+> parens (hsep (punctuate "," (map text cls)))
+{-# LANGUAGE NoImplicitPrelude #-}++{-+    BNF Converter: Abstract syntax Generator+    Copyright (C) 2004  Author:  Markus Forberg++    This program is free software; you can redistribute it and/or modify+    it under the terms of the GNU General Public License as published by+    the Free Software Foundation; either version 2 of the License, or+    (at your option) any later version.++    This program is distributed in the hope that it will be useful,+    but WITHOUT ANY WARRANTY; without even the implied warranty of+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+    GNU General Public License for more details.++    You should have received a copy of the GNU General Public License+    along with this program; if not, write to the Free Software+    Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA+-}++module BNFC.Backend.Haskell.CFtoAbstract (cf2Abstract) where++import Prelude'++import BNFC.CF+import BNFC.PrettyPrint+import BNFC.Utils                 ( when )++import BNFC.Backend.Haskell.Utils ( catToType, catvars )++-- | Create a Haskell module containing data type definitions for the abstract syntax.++cf2Abstract+  :: Bool     -- ^ Use ByteString instead of String+  -> Bool     -- ^ Use GHC specific extensions+  -> Bool     -- ^ Make the tree a functor+  -> String   -- ^ module name+  -> CF       -- ^ Grammar+  -> Doc+cf2Abstract byteStrings ghcExtensions functor name cf = vsep . concat $+    [ [ vcat+        [ "-- Haskell data types for the abstract syntax."+        , "-- Generated by the BNF converter."+        ]+      ]+    , [ vcat+        [ "{-# LANGUAGE DeriveDataTypeable #-}"+        , "{-# LANGUAGE DeriveGeneric #-}"+        ]+      | ghcExtensions+      ]+    , [ hsep [ "module", text name, "where" ] ]+    , [ vcat . concat $+        [ [ "import qualified Data.ByteString.Char8 as BS" | byteStrings   ]+        , [ "import Data.Data    (Data, Typeable)"         | ghcExtensions ]+        , [ "import GHC.Generics (Generic)"                | ghcExtensions ]+        ]+      ]+    , map (\ c -> prSpecialData byteStrings (isPositionCat cf c) derivingClasses c) $ specialCats cf+    , concatMap (prData functor derivingClasses) $ cf2data cf+    , [ "" ] -- ensure final newline+    ]+  where+    derivingClasses = concat+      [ [ "Eq", "Ord", "Show", "Read" ]+      , when ghcExtensions ["Data","Typeable","Generic"]+      ]++-- |+--+-- >>> vsep $ prData False ["Eq", "Ord", "Show", "Read"] (Cat "C", [("C1", [Cat "C"]), ("CIdent", [Cat "Ident"])])+-- data C = C1 C | CIdent Ident+--   deriving (Eq, Ord, Show, Read)+--+-- Note that the layout adapts if it does not fit in one line:+-- >>> vsep $ prData False ["Show"] (Cat "C", [("CAbracadabra",[]),("CEbrecedebre",[]),("CIbricidibri",[]),("CObrocodobro",[]),("CUbrucudubru",[])])+-- data C+--     = CAbracadabra+--     | CEbrecedebre+--     | CIbricidibri+--     | CObrocodobro+--     | CUbrucudubru+--   deriving (Show)+--+-- If the first argument is True, generate a functor:+-- >>> vsep $ prData True ["Show"] (Cat "C", [("C1", [Cat "C"]), ("CIdent", [TokenCat "Ident"])])+-- data C a = C1 a (C a) | CIdent a Ident+--   deriving (Show)+-- <BLANKLINE>+-- instance Functor C where+--     fmap f x = case x of+--         C1 a c -> C1 (f a) (fmap f c)+--         CIdent a ident -> CIdent (f a) ident+--+-- The case for lists:+-- >>> vsep $ prData True ["Show"] (Cat "ExpList", [("Exps", [ListCat (Cat "Exp")])])+-- data ExpList a = Exps a [Exp a]+--   deriving (Show)+-- <BLANKLINE>+-- instance Functor ExpList where+--     fmap f x = case x of+--         Exps a exps -> Exps (f a) (map (fmap f) exps)+--+prData :: Bool -> [String] -> Data -> [Doc]+prData functor derivingClasses (cat,rules) = concat+    [ [ hang ("data" <+> dataType) 4 (constructors rules)+        $+$ nest 2 (deriving_ derivingClasses)+      ]+    , [ genFunctorInstance (cat, rules) | functor ]+    ]+  where+    prRule (fun, cats) = hsep $ concat [ [text fun], ["a" | functor], map prArg cats ]+    dataType           = hsep $ concat [ [text (show cat)], ["a" | functor] ]+    prArg              = catToType $ if functor then Just "a" else Nothing+    constructors []    = empty+    constructors (h:t) = sep $ ["=" <+> prRule h] ++ map (("|" <+>) . prRule) t++-- | Generate a functor instance declaration:+--+-- >>> genFunctorInstance (Cat "C", [("C1", [Cat "C", Cat "C"]), ("CIdent", [TokenCat "Ident"])])+-- instance Functor C where+--     fmap f x = case x of+--         C1 a c1 c2 -> C1 (f a) (fmap f c1) (fmap f c2)+--         CIdent a ident -> CIdent (f a) ident+--+-- >>> genFunctorInstance (Cat "SomeLists", [("Ints", [ListCat (TokenCat "Integer")]), ("Exps", [ListCat (Cat "Exp")])])+-- instance Functor SomeLists where+--     fmap f x = case x of+--         Ints a integers -> Ints (f a) integers+--         Exps a exps -> Exps (f a) (map (fmap f) exps)+--+genFunctorInstance :: Data -> Doc+genFunctorInstance (cat, cons) =+    "instance Functor" <+> text (show cat) <+> "where"+    $+$ nest 4 ("fmap f x = case x of" $+$ nest 4 (vcat (map mkCase cons)))+  where+    mkCase (f, args) = hsep . concat $+        [ [ text f, "a" ]+        , vars+        , [ "->", text f, "(f a)" ]+        , zipWith recurse vars args+        ]+      where vars = catvars args+    -- We recursively call fmap on non-terminals only if they are not token categories.+    recurse var = \case+      TokenCat{}         -> var+      ListCat TokenCat{} -> var+      ListCat{}          -> parens ("map (fmap f)" <+> var)+      _                  -> parens ("fmap f"       <+> var)+++-- | Generate a newtype declaration for Ident types+--+-- >>> prSpecialData False False ["Show"] catIdent+-- newtype Ident = Ident String+--   deriving (Show)+--+-- >>> prSpecialData False True ["Show"] catIdent+-- newtype Ident = Ident ((Int,Int),String)+--   deriving (Show)+--+-- >>> prSpecialData True False ["Show"] catIdent+-- newtype Ident = Ident BS.ByteString+--   deriving (Show)+--+-- >>> prSpecialData True True ["Show"] catIdent+-- newtype Ident = Ident ((Int,Int),BS.ByteString)+--   deriving (Show)+--+prSpecialData+  :: Bool     -- ^ If True, use ByteString instead of String+  -> Bool     -- ^ If True, store the token position+  -> [String] -- ^ Derived classes+  -> TokenCat -- ^ Token category name+  -> Doc+prSpecialData byteStrings position classes cat = vcat+    [ hsep [ "newtype", ppcat, "=", ppcat, contentSpec ]+    , nest 2 $ deriving_ classes+    ]+  where+    ppcat    = text cat+    contentSpec | position    = parens ( "(Int,Int)," <> stringType)+                | otherwise   = stringType+    stringType  | byteStrings = "BS.ByteString"+                | otherwise   = "String"++-- | Generate 'deriving' clause+--+-- >>> deriving_ ["Show", "Read"]+-- deriving (Show, Read)+--+deriving_ :: [String] -> Doc+deriving_ cls = "deriving" <+> parens (hsep $ punctuate "," $ map text cls)
src/BNFC/Backend/Haskell/CFtoAlex.hs view
@@ -172,7 +172,8 @@   "%}"   ]  where-   ifC cat s = if isUsedCat cf cat then s else ""+   ifC :: TokenCat -> String -> String+   ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""    lexComments ([],[])           = []    lexComments (xs,s1:ys) = "<>         ::= " ++ ('^':intersperse '^' s1) ++ " [.]* ^n\n" ++ lexComments (xs,ys)    lexComments (([l1,l2],[r1,r2]):xs,[]) = concat@@ -196,8 +197,8 @@    aux (_,_) = " %s | %r "     userDefTokenTypes = unlines-     ["<mk_" ++ show name ++ "> ::= " ++ printRegAlex exp ++-      "%{ mk_" ++ show name ++ " p = PT p . eitherResIdent T_"  ++ show name ++ " %}"+     ["<mk_" ++ name ++ "> ::= " ++ printRegAlex exp +++      "%{ mk_" ++ name ++ " p = PT p . eitherResIdent T_"  ++ name ++ " %}"                                         | (name,exp) <- tokenPragmas cf]    userDefTokenConstrs = unlines      [" | T_" ++ name ++ " String" | name <- tokenNames cf]
src/BNFC/Backend/Haskell/CFtoAlex2.hs view
@@ -217,7 +217,8 @@        | byteStrings = ("BS.ByteString", "BS.take", "BS.uncons", "BS.pack", "BS.unpack", "Nothing", "Just (c,s)")        | otherwise   = ("String",        "take",    "",          "id",      "id",        "[]",      "(c:s)"     ) -   ifC cat s = if isUsedCat cf cat then s else ""+   ifC :: TokenCat -> String -> String+   ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""    lexComments ([],[])           = []    lexComments (xs,s1:ys) = '\"' : s1 ++ "\"" ++ " [.]* ; -- Toss single line comments\n" ++ lexComments (xs, ys)    lexComments (([l1,l2],[r1,r2]):xs,[]) = concat@@ -240,7 +241,7 @@     userDefTokenTypes = unlines      [printRegAlex exp ++-      " { tok (\\p s -> PT p (eitherResIdent (T_"  ++ show name ++ " . share) s)) }"+      " { tok (\\p s -> PT p (eitherResIdent (T_"  ++ name ++ " . share) s)) }"       | (name,exp) <- tokenPragmas cf]    userDefTokenConstrs = unlines      [" | T_" ++ name ++ " !"++stringType | name <- tokenNames cf]
src/BNFC/Backend/Haskell/CFtoAlex3.hs view
@@ -38,43 +38,40 @@    ]  prelude :: String -> String -> String -> Bool -> Bool -> [String]-prelude name _ shareMod shareStrings byteStrings = [-  "-- -*- haskell -*-",-  "-- This Alex file was machine-generated by the BNF converter",-  "{",-  "{-# OPTIONS -fno-warn-incomplete-patterns #-}",-  "{-# OPTIONS_GHC -w #-}",-  "module " ++ name ++ " where",-  "",-  -- "import " ++ errMod,-  if shareStrings then "import " ++ shareMod else "",-  if byteStrings  then "import qualified Data.ByteString.Char8 as BS" else "",-  "import qualified Data.Bits",-  "import Data.Word (Word8)",-  "import Data.Char (ord)",-  "}",-  ""+prelude name _ shareMod shareStrings byteStrings =+  [ "-- -*- haskell -*-"+  , "-- This Alex file was machine-generated by the BNF converter"+  , "{"+  , "{-# OPTIONS -fno-warn-incomplete-patterns #-}"+  , "{-# OPTIONS_GHC -w #-}"+  , "module " ++ name ++ " where"+  , ""+  , if shareStrings then "import " ++ shareMod else ""+  , if byteStrings  then "import qualified Data.ByteString.Char8 as BS" else ""+  , "import qualified Data.Bits"+  , "import Data.Word (Word8)"+  , "import Data.Char (ord)"+  , "}"+  , ""   ]  cMacros :: [String]-cMacros = [-  "$l = [a-zA-Z\\192 - \\255] # [\\215 \\247]    -- isolatin1 letter FIXME",-  "$c = [A-Z\\192-\\221] # [\\215]    -- capital isolatin1 letter FIXME",-  "$s = [a-z\\222-\\255] # [\\247]    -- small isolatin1 letter FIXME",-  "$d = [0-9]                -- digit",-  "$i = [$l $d _ ']          -- identifier character",-  "$u = [\\0-\\255]          -- universal: any character"+cMacros =+  [ "$c = [A-Z\\192-\\221] # [\\215]  -- capital isolatin1 letter (215 = \\times) FIXME"+  , "$s = [a-z\\222-\\255] # [\\247]  -- small   isolatin1 letter (247 = \\div  ) FIXME"+  , "$l = [$c $s]         -- letter"+  , "$d = [0-9]           -- digit"+  , "$i = [$l $d _ ']     -- identifier character"+  , "$u = [. \\n]          -- universal: any character"   ]  rMacros :: CF -> [String]-rMacros cf =-  let symbs = cfgSymbols cf-  in-  (if null symbs then [] else [-   "@rsyms =    -- symbols and non-identifier-like reserved words",-   "   " ++ unwords (intersperse "|" (map mkEsc symbs))-   ])+rMacros cf = if null symbs then [] else+  [ "@rsyms =    -- symbols and non-identifier-like reserved words"+  , "   " ++ unwords (intersperse "|" (map mkEsc symbs))+  ]  where+  symbs = cfgSymbols cf   mkEsc = unwords . esc   esc s = if null a then rest else show a : rest       where (a,r) = span isAlphaNum s@@ -94,11 +91,11 @@   userDefTokenTypes,   ident, -  ifC catString ("\\\" ([$u # [\\\" \\\\ \\n]] | (\\\\ (\\\" | \\\\ | \\' | n | t)))* \\\"" ++-                  "{ tok (\\p s -> PT p (TL $ share $ unescapeInitTail s)) }"),-  ifC catChar    "\\\' ($u # [\\\' \\\\] | \\\\ [\\\\ \\\' n t]) \\'  { tok (\\p s -> PT p (TC $ share s))  }",-  ifC catInteger "$d+      { tok (\\p s -> PT p (TI $ share s))    }",-  ifC catDouble  "$d+ \\. $d+ (e (\\-)? $d+)? { tok (\\p s -> PT p (TD $ share s)) }",+  ifC catString ("\\\" ([$u # [\\\" \\\\ \\n]] | (\\\\ (\\\" | \\\\ | \\' | n | t | r | f)))* \\\"" +++                  "\n    { tok (\\p s -> PT p (TL $ share $ unescapeInitTail s)) }"),+  ifC catChar    "\\\' ($u # [\\\' \\\\] | \\\\ [\\\\ \\\' n t r f]) \\'\n    { tok (\\p s -> PT p (TC $ share s))  }",+  ifC catInteger "$d+\n    { tok (\\p s -> PT p (TI $ share s))    }",+  ifC catDouble  "$d+ \\. $d+ (e (\\-)? $d+)?\n    { tok (\\p s -> PT p (TD $ share s)) }",   "",   "{",   "",@@ -175,6 +172,8 @@   "    '\\\\':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",   "    _         -> []",@@ -253,7 +252,8 @@        | byteStrings = ("BS.ByteString", "BS.take", "BS.uncons", "BS.pack", "BS.unpack", "Nothing", "Just (c,s)")        | otherwise   = ("String",        "take",    "",          "id",      "id",        "[]",      "(c:s)"     ) -   ifC cat s = if isUsedCat cf cat then s else ""+   ifC :: TokenCat -> String -> String+   ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""    lexComments ([],[])           = []    lexComments (xs,s1:ys) = '\"' : s1 ++ "\"" ++ " [.]* ; -- Toss single line comments\n" ++ lexComments (xs, ys)    lexComments (([l1,l2],[r1,r2]):xs,[]) = concat@@ -272,11 +272,11 @@     -- tokens consisting of special symbols    pTSpec [] = ""-   pTSpec _ = "@rsyms { tok (\\p s -> PT p (eitherResIdent (TV . share) s)) }"+   pTSpec _ = "@rsyms\n    { tok (\\p s -> PT p (eitherResIdent (TV . share) s)) }"     userDefTokenTypes = unlines      [printRegAlex exp ++-      " { tok (\\p s -> PT p (eitherResIdent (T_"  ++ show name ++ " . share) s)) }"+      "\n    { tok (\\p s -> PT p (eitherResIdent (T_"  ++ name ++ " . share) s)) }"       | (name,exp) <- tokenPragmas cf]    userDefTokenConstrs = unlines      [" | T_" ++ name ++ " !"++stringType | name <- tokenNames cf]@@ -284,7 +284,7 @@      ["  PT _ (T_" ++ name ++ " s) -> s" | name <- tokenNames cf]     ident =-     "$l $i*   { tok (\\p s -> PT p (eitherResIdent (TV . share) s)) }"+     "$l $i*\n    { tok (\\p s -> PT p (eitherResIdent (TV . share) s)) }"      --ifC "Ident"  "<ident>   ::= ^l ^i*   { ident  p = PT p . eitherResIdent TV }"  @@ -314,22 +314,18 @@ printRegAlex :: Reg -> String printRegAlex = render . prt 0 --- you may want to change render and parenth- render :: [String] -> String-render = rend 0-    where rend :: Int -> [String] -> String-          rend i ss = case ss of-                        "["      :ts -> cons "["  $ rend i ts-                        "("      :ts -> cons "("  $ rend i ts-                        t  : "," :ts -> cons t    $ space "," $ rend i ts-                        t  : ")" :ts -> cons t    $ cons ")"  $ rend i ts-                        t  : "]" :ts -> cons t    $ cons "]"  $ rend i ts-                        t        :ts -> space t   $ rend i ts-                        _            -> ""--          cons s t  = s ++ t-          space t s = if null s then t else t ++ " " ++ s+render = \case+    "["      : ts -> cons "["  $ render ts+    "("      : ts -> cons "("  $ render ts+    t  : "," : ts -> cons t    $ space "," $ render ts+    t  : ")" : ts -> cons t    $ cons ")"  $ render ts+    t  : "]" : ts -> cons t    $ cons "]"  $ render ts+    t        : ts -> space t   $ render ts+    _             -> ""+  where+  cons s t  = s ++ t+  space t s = if null s then t else t ++ " " ++ s  parenth :: [String] -> [String] parenth ss = ["("] ++ ss ++ [")"]@@ -344,12 +340,15 @@   prt _ = prtList  instance Print Char where-  prt _ c = case c of-             '\n' -> ["\\n"]-             '\t' -> ["\\t"]-             c | isAlphaNum c -> [[c]]-             c | isPrint c    -> ['\\':[c]]-             c                -> ['\\':show (ord c)]+  prt _ = \case+    '\n'             -> ["\\n"]+    '\t'             -> ["\\t"]+    '\r'             -> ["\\r"]+    '\f'             -> ["\\f"]+    c | isAlphaNum c -> [[c]]+    c | isPrint c    -> ['\\':[c]]+    c                -> ['\\':show (ord c)]+   prtList = map (concat . prt 0)  prPrec :: Int -> Int -> [String] -> [String]
src/BNFC/Backend/Haskell/CFtoHappy.hs view
@@ -17,15 +17,18 @@     Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA -} -module BNFC.Backend.Haskell.CFtoHappy (cf2HappyS, convert) where+module BNFC.Backend.Haskell.CFtoHappy (cf2Happy, convert) where +import Data.Char+import Data.List (intersperse)+ import BNFC.CF import BNFC.Backend.Common.StrUtils (escapeChars) import BNFC.Backend.Haskell.Utils (parserName, catToType)---import Lexer-import Data.Char import BNFC.Options (HappyMode(..)) import BNFC.PrettyPrint+import BNFC.Utils+ -- Type declarations  type Rules       = [(NonTerminal,[(Pattern,Action)])]@@ -37,50 +40,41 @@  tokenName   = "Token" --- Happy mode----cf2HappyS :: String     -- ^ This module's name-          -> String     -- ^ Abstract syntax module name-          -> String     -- ^ Lexer module name-          -> String     -- ^ ErrM module name-          -> HappyMode  -- ^ Happy mode-          -> Bool       -- ^ Use bytestring?-          -> Bool       -- ^ AST is a functor?-          -> CF         -- ^ Grammar-          -> String     -- ^ Generated code----- cf2HappyS :: String -> CF -> String-cf2HappyS = cf2Happy+-- | Generate a happy parser file from a grammar. --- The main function, that given a CF and a CFCat to parse according to,--- generates a happy module.-cf2Happy name absName lexName errName mode byteStrings functor cf- = unlines-    [header name absName lexName errName mode byteStrings,-     render $ declarations mode (allEntryPoints cf),-     tokens (cfTokens cf),-     specialToks cf,-     delimiter,-     specialRules byteStrings cf,-     render $ prRules functor (rulesForHappy absName functor cf),-     finalize byteStrings cf]+cf2Happy+  :: String     -- ^ This module's name.+  -> String     -- ^ Abstract syntax module name.+  -> String     -- ^ Lexer module name.+  -> String     -- ^ ErrM module name.+  -> HappyMode  -- ^ Happy mode.+  -> Bool       -- ^ Use bytestring?+  -> Bool       -- ^ AST is a functor?+  -> CF         -- ^ Grammar.+  -> String     -- ^ Generated code.+cf2Happy name absName lexName errName mode byteStrings functor cf = unlines+  [ header name absName lexName errName byteStrings+  , render $ declarations mode (allEntryPoints cf)+  , render $ tokens cf+  , delimiter+  , specialRules byteStrings cf+  , render $ prRules functor (rulesForHappy absName functor cf)+  , finalize byteStrings cf+  ] --- construct the header.-header :: String -> String -> String -> String -> HappyMode -> Bool -> String-header modName absName lexName errName mode byteStrings = unlines-         ["-- This Happy file was machine-generated by the BNF converter",-          "{",-          "{-# OPTIONS_GHC -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-}",-          case mode of-            Standard -> "module " ++ modName ++ " where"-            GLR      -> "-- module name filled in by Happy",-          "import " ++ absName,-          "import " ++ lexName,-          "import " ++ errName,-          if byteStrings then "import qualified Data.ByteString.Char8 as BS" else "",-          "}"-         ]+-- | Construct the header.+header :: String -> String -> String -> String -> Bool -> String+header modName absName lexName errName byteStrings = unlines+  [ "-- This Happy file was machine-generated by the BNF converter"+  , "{"+  , "{-# OPTIONS_GHC -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-}"+  , "module " ++ modName ++ " where"+  , "import " ++ absName+  , "import " ++ lexName+  , "import " ++ errName+  , if byteStrings then "import qualified Data.ByteString.Char8 as BS" else ""+  , "}"+  ]  -- | The declarations of a happy file. -- >>> declarations Standard [Cat "A", Cat "B", ListCat (Cat "B")]@@ -97,22 +91,25 @@         Standard -> "-- no lexer declaration"         GLR      -> "%lexer { myLexer } { Err _ }",       "%monad { Err } { thenM } { returnM }",-      "%tokentype" <+> braces (text tokenName) ]-  where generateP n = "%name" <+> parserName n <+> text n'-          where n' = identCat n+      "%tokentype" <+> braces (text tokenName)+    ]+  where+  generateP n = "%name" <+> parserName n <+> text (identCat n)  -- The useless delimiter symbol. delimiter :: String delimiter = "\n%%\n" --- Generate the list of tokens and their identifiers.-tokens :: [(String,Int)] -> String-tokens toks = "%token\n" ++ prTokens toks- where prTokens []         = []-       prTokens ((t,k):tk) = "  " ++ render (convert t) ++-                             " { " ++ oneTok t k ++ " }\n" ++-                             prTokens tk-       oneTok _ k = "PT _ (TS _ " ++ show k ++ ")"+-- | Generate the list of tokens and their identifiers.+tokens :: CF -> Doc+tokens cf+  -- Andreas, 2019-01-02: "%token" followed by nothing is a Happy parse error.+  -- Thus, if we have no tokens, do not output anything.+  | null ts   = empty+  | otherwise = "%token" $$ (nest 2 $ vcat ts)+  where+    ts            = map prToken (cfTokens cf) ++ map text (specialToks cf)+    prToken (t,k) = hsep [ convert t, lbrace, text ("PT _ (TS _ " ++ show k ++ ")"), rbrace ]  -- Happy doesn't allow characters such as åäö to occur in the happy file. This -- is however not a restriction, just a naming paradigm in the happy source file.@@ -126,47 +123,56 @@     reversibles = cfgReversibleCats cf  -- | For every non-terminal, we construct a set of rules. A rule is a sequence--- of terminals and non-terminals, and an action to be performed+-- of terminals and non-terminals, and an action to be performed.+-- -- >>> constructRule "Foo" False [] (Rule "EPlus" (Cat "Exp") [Left (Cat "Exp"), Right "+", Left (Cat "Exp")]) -- ("Exp '+' Exp","Foo.EPlus $1 $3") ----- If we're using functors, it adds an void value:+-- If we're using functors, it adds void value:+-- -- >>> constructRule "Foo" True [] (Rule "EPlus" (Cat "Exp") [Left (Cat "Exp"), Right "+", Left (Cat "Exp")]) -- ("Exp '+' Exp","Foo.EPlus () $1 $3") -- -- List constructors should not be prefixed by the abstract module name:+-- -- >>> constructRule "Foo" False [] (Rule "(:)" (ListCat (Cat "A")) [Left (Cat "A"), Right",", Left (ListCat (Cat "A"))]) -- ("A ',' ListA","(:) $1 $3")+-- -- >>> constructRule "Foo" False [] (Rule "(:[])" (ListCat (Cat "A")) [Left (Cat "A")]) -- ("A","(:[]) $1") -- -- Coercion are much simpler:+-- -- >>> constructRule "Foo" True [] (Rule "_" (Cat "Exp") [Right "(", Left (Cat "Exp"), Right ")"]) -- ("'(' Exp ')'","$2") -- -- As an optimization, a pair of list rules [C] ::= "" | C k [C] is -- left-recursivized into [C] ::= "" | [C] C k. -- This could be generalized to cover other forms of list rules.+-- -- >>> constructRule "Foo" False [ListCat (Cat "A")] (Rule "(:)" (ListCat (Cat "A")) [Left (Cat "A"), Right",", Left (ListCat (Cat "A"))]) -- ("ListA A ','","flip (:) $1 $2") -- -- Note that functors don't concern list constructors:+-- -- >>> constructRule "Abs" True [ListCat (Cat "A")] (Rule "(:)" (ListCat (Cat "A")) [Left (Cat "A"), Right",", Left (ListCat (Cat "A"))]) -- ("ListA A ','","flip (:) $1 $2")-constructRule :: String -> Bool -> [Cat] -> Rule -> (Pattern,Action)+--+constructRule :: String -> Bool -> [Cat] -> Rule -> (Pattern, Action) constructRule absName functor revs r0@(Rule fun cat _) = (pattern, action)   where     (pattern,metavars) = generatePatterns revs r     action | isCoercion fun                 = unwords metavars            | isConsFun fun && elem cat revs = unwords ("flip" : fun : metavars)-           | isNilCons fun                  = unwords (underscore fun : metavars)-           | functor                        = unwords (underscore fun : "()" : metavars)-           | otherwise                      = unwords (underscore fun : metavars)+           | isNilCons fun                  = unwords (qualify fun : metavars)+           | functor                        = unwords (qualify fun : "()" : metavars)+           | otherwise                      = unwords (qualify fun : metavars)     r | isConsFun (funRule r0) && elem (valCat r0) revs = revSepListRule r0       | otherwise                                       = r0-    underscore f | isConsFun f || isNilCons f = f-                 | isDefinedRule f = absName ++ "." ++ f ++ "_"-                 | otherwise       = absName ++ "." ++ f+    qualify f+      | isConsFun f || isNilCons f = f+      | isDefinedRule f = f ++ "_"  -- Definitions are local to Par.hs, not in Abs.hs+      | otherwise       = absName ++ "." ++ f  -- Generate patterns and a set of metavariables indicating -- where in the pattern the non-terminal@@ -192,7 +198,7 @@ -- Expr :: { Expr } -- Expr : Integer { EInt $1 } | Expr '+' Expr { EPlus $1 $3 } ----- if there's a lot of cases, print on several lignes:+-- if there's a lot of cases, print on several lines: -- >>> prRules False [(Cat "Expr", [("Abcd", "Action"), ("P2", "A2"), ("P3", "A3"), ("P4", "A4"), ("P5","A5")])] -- Expr :: { Expr } -- Expr : Abcd { Action }@@ -210,10 +216,12 @@ -- Expr : Integer { EInt () $1 } | Expr '+' Expr { EPlus () $1 $3 } -- -- A list with coercion: in the type signature we need to get rid of the--- coercion+-- coercion.+-- -- >>> prRules True [(ListCat (CoercCat "Exp" 2), [("Exp2", "(:[]) $1"), ("Exp2 ',' ListExp2","(:) $1 $3")])] -- ListExp2 :: { [Exp ()] } -- ListExp2 : Exp2 { (:[]) $1 } | Exp2 ',' ListExp2 { (:) $1 $3 }+-- prRules :: Bool -> Rules -> Doc prRules functor = vcat . map prOne   where@@ -230,26 +238,30 @@  finalize :: Bool -> CF -> String finalize byteStrings cf = unlines $-   [-     "{",-     "\nreturnM :: a -> Err a",-     "returnM = return",-     "\nthenM :: Err a -> (a -> Err b) -> Err b",-     "thenM = (>>=)",-     "\nhappyError :: [" ++ tokenName ++ "] -> Err a",-     "happyError ts =",-     "  Bad $ \"syntax error at \" ++ tokenPos ts ++ ",-     "  case ts of",-     "    [] -> []",-     "    [Err _] -> \" due to lexer error\"",-     "    t:_ -> \" before `\" ++ " ++ stringUnpack ++ "(prToken t) ++ \"'\"",-     "",-     "myLexer = tokens"-   ] ++ definedRules cf ++ [ "}" ]-   where-     stringUnpack-       | byteStrings = "BS.unpack"-       | otherwise   = "id"+  [ "{"+  , ""+  , "returnM :: a -> Err a"+  , "returnM = return"+  , ""+  , "thenM :: Err a -> (a -> Err b) -> Err b"+  , "thenM = (>>=)"+  , ""+  , "happyError :: [" ++ tokenName ++ "] -> Err a"+  , "happyError ts ="+  , "  Bad $ \"syntax error at \" ++ tokenPos ts ++ "+  , "  case ts of"+  , "    []      -> []"+  , "    [Err _] -> \" due to lexer error\""+  , "    t:_     -> \" before `\" ++ " ++ stringUnpack ++ "(prToken t) ++ \"'\""+  , ""+  , "myLexer = tokens"+  ] ++ definedRules cf +++  [ "}"+  ]+  where+    stringUnpack+      | byteStrings = "BS.unpack"+      | otherwise   = "id"   definedRules cf = [ mkDef f xs e | FunDef f xs e <- cfgPragmas cf ]@@ -263,39 +275,33 @@             | otherwise         = App x $ map underscore es         underscore e          = e --- aarne's modifs 8/1/2002:--- Markus's modifs 11/02/2002---- GF literals-specialToks :: CF -> String-specialToks cf = unlines (map aux (literals cf))- where aux cat =-        case show cat of-          "Ident"  -> "L_ident  { PT _ (TV $$) }"-          "String" -> "L_quoted { PT _ (TL $$) }"-          "Integer" -> "L_integ  { PT _ (TI $$) }"-          "Double" -> "L_doubl  { PT _ (TD $$) }"-          "Char"   -> "L_charac { PT _ (TC $$) }"-          own      -> "L_" ++ own ++ " { PT _ (T_" ++ own ++ " " ++ posn ++ ") }"-         where-           posn = if isPositionCat cf cat then "_" else "$$"+-- | GF literals.+specialToks :: CF -> [String]+specialToks cf = (`map` literals cf) $ \case+  "Ident"   -> "L_ident  { PT _ (TV $$) }"+  "String"  -> "L_quoted { PT _ (TL $$) }"+  "Integer" -> "L_integ  { PT _ (TI $$) }"+  "Double"  -> "L_doubl  { PT _ (TD $$) }"+  "Char"    -> "L_charac { PT _ (TC $$) }"+  own       -> "L_" ++ own ++ " { PT _ (T_" ++ own ++ " " ++ posn ++ ") }"+    where posn = if isPositionCat cf own then "_" else "$$"  specialRules :: Bool -> CF -> String-specialRules byteStrings cf = unlines $-                  map aux (literals cf)- where-   aux cat =-     case show cat of-         "Ident"   -> "Ident   :: { Ident }   : L_ident  { Ident $1 }"-         "String"  -> "String  :: { String }  : L_quoted { "++stringUnpack++" $1 }"-         "Integer" -> "Integer :: { Integer } : L_integ  { (read ("++stringUnpack++" $1)) :: Integer }"-         "Double"  -> "Double  :: { Double }  : L_doubl  { (read ("++stringUnpack++" $1)) :: Double }"-         "Char"    -> "Char    :: { Char }    : L_charac { (read ("++stringUnpack++" $1)) :: Char }"-         own       -> own ++ "    :: { " ++ own ++ "} : L_" ++ own ++ " { " ++ own ++ " ("++ posn ++ "$1)}"-                -- PCC: take "own" as type name? (manual says newtype)-      where-         posn = if isPositionCat cf cat then "mkPosToken " else ""--   stringUnpack-     | byteStrings = "BS.unpack"-     | otherwise   = ""+specialRules byteStrings cf = unlines . intersperse "" . (`map` literals cf) $ \case+    "Ident"   -> "Ident   :: { Ident }"+            ++++ "Ident    : L_ident  { Ident $1 }"+    "String"  -> "String  :: { String }"+            ++++ "String   : L_quoted { "++stringUnpack++" $1 }"+    "Integer" -> "Integer :: { Integer }"+            ++++ "Integer  : L_integ  { (read ("++stringUnpack++" $1)) :: Integer }"+    "Double"  -> "Double  :: { Double }"+            ++++ "Double   : L_doubl  { (read ("++stringUnpack++" $1)) :: Double }"+    "Char"    -> "Char    :: { Char }"+            ++++ "Char     : L_charac { (read ("++stringUnpack++" $1)) :: Char }"+    own       -> own ++ " :: { " ++ own ++ "}"+            ++++ own ++ "  : L_" ++ own ++ " { " ++ own ++ " ("++ posn ++ "$1)}"+      where posn = if isPositionCat cf own then "mkPosToken " else ""+  where+    stringUnpack+      | byteStrings = "BS.unpack"+      | otherwise   = ""
src/BNFC/Backend/Haskell/CFtoLayout.hs view
@@ -112,8 +112,13 @@   "            -- Explicit layout, just move on. The case above",   "            -- will push an explicit layout block.",   "            t1:_ | isLayoutOpen t1 -> moveAlong st [t0] ts",-  "                     -- at end of file, the start column doesn't matter",-  "            _ -> let col = if null ts then column t0 else column (head ts)",+  "                 -- The column of the next token determines the starting column",+  "                 -- of the implicit layout block.",+  "                 -- However, the next block needs to be strictly more indented",+  "                 -- than the previous block.",+  "            _ -> let col = max (indentation st + 1) $",+  "                       -- at end of file, the start column doesn't matter",+  "                       if null ts then column t0 else column (head ts)",   "                     -- insert an open brace after the layout word",   "                     b:ts' = addToken (nextPos t0) layoutOpen ts",   "                     -- save the start column",@@ -176,7 +181,7 @@   "            -> [Token] -- ^ Any tokens just processed.",   "            -> [Token] -- ^ the rest of the tokens.",   "            -> [Token]",-  "  moveAlong _  [] _  = error $ \"Layout error: moveAlong got [] as old tokens\"",+  "  moveAlong _  [] _  = error \"Layout error: moveAlong got [] as old tokens\"",   "  moveAlong st ot ts = ot ++ res (Just $ last ot) st ts",   "",   "  newLine :: Maybe Token -> Token -> Bool",@@ -184,17 +189,23 @@   "    Nothing -> True",   "    Just t  -> line t /= line t0",   "",-  "data Block = Implicit Int -- ^ An implicit layout block with its start column.",-  "           | Explicit",-  "             deriving Show",+  "data Block",+  "   = Implicit Int -- ^ An implicit layout block with its start column.",+  "   | Explicit",+  "   deriving Show",   "",-  "type Position = Posn",+  "-- | Get current indentation.  0 if we are in an explicit block.",+  "indentation :: [Block] -> Int",+  "indentation (Implicit n : _) = n",+  "indentation _ = 0",   "",   "-- | Check if s block is implicit.",   "isImplicit :: Block -> Bool",   "isImplicit (Implicit _) = True",   "isImplicit _ = False",   "",+  "type Position = Posn",+  "",   "-- | Insert a number of tokens at the begninning of a list of tokens.",   "addTokens :: Position -- ^ Position of the first new token.",   "          -> [String] -- ^ Token symbols.",@@ -260,7 +271,7 @@   "-- | Check if a token is one of the given symbols.",   "isTokenIn :: [String] -> Token -> Bool",   "isTokenIn ts t = case t of",-  "  PT _ (TS r _) | elem r ts -> True",+  "  PT _ (TS r _) | r `elem` ts -> True",   "  _ -> False",   "",   "-- | Check if a word is a layout start token.",
src/BNFC/Backend/Haskell/CFtoPrinter.hs view
@@ -36,30 +36,37 @@  -- AR 15/2/2002 +type AbsMod = String+ -- | Derive pretty-printer from a BNF grammar. cf2Printer   :: Bool    -- ^ Are identifiers @ByteString@s rather than @String@s?  (Option @--bytestrings@)   -> Bool    -- ^ Option @--functor@?   -> Bool    -- ^ @--haskell-gadt@?   -> String  -- ^ Name of created Haskell module.-  -> String  -- ^ Name of Haskell module for abstract syntax.+  -> AbsMod  -- ^ Name of Haskell module for abstract syntax.   -> CF      -- ^ Grammar.   -> String cf2Printer byteStrings functor useGadt name absMod cf = unlines $ concat $   -- Each of the following list entries is itself a list of lines   [ prologue byteStrings useGadt name absMod-  , integerRule cf-  , doubleRule cf-  , if hasIdent cf then identRule byteStrings cf else []-  ] ++ [ ownPrintRule byteStrings cf own | (own,_) <- tokenPragmas cf ] ++-  [ rules functor cf+  , integerRule absMod cf+  , doubleRule absMod cf+  , if hasIdent cf then identRule absMod byteStrings cf else []+  ] ++ [ ownPrintRule absMod byteStrings cf own | (own,_) <- tokenPragmas cf ] +++  [ rules absMod functor cf   ]  -prologue :: Bool -> Bool -> String -> String -> [String]+prologue :: Bool -> Bool -> String -> AbsMod -> [String] prologue byteStrings useGadt name absMod =+  [ "{-# LANGUAGE CPP #-}"+  , "#if __GLASGOW_HASKELL__ <= 708"+  , "{-# LANGUAGE OverlappingInstances #-}"+  , "#endif"+  ] ++   [ "{-# LANGUAGE GADTs, TypeSynonymInstances #-}" | useGadt ] ++-  [ "{-# LANGUAGE FlexibleInstances, OverlappingInstances #-}"+  [ "{-# LANGUAGE FlexibleInstances #-}"   , "{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}"   , ""   , "-- | Pretty-printer for " ++ takeWhile ('.' /=) name ++ "."@@ -67,7 +74,7 @@   , ""   , "module " ++ name +++ "where"   , ""-  , "import " ++ absMod+  , "import qualified " ++ absMod   , "import Data.Char"   ] ++ [ "import qualified Data.ByteString.Char8 as BS" | byteStrings ] ++   [ ""@@ -122,7 +129,7 @@   , "  prtList :: Int -> [a] -> Doc"   , "  prtList i = concatD . map (prt i)"   , ""-  , "instance Print a => Print [a] where"+  , "instance {-# OVERLAPPABLE #-} Print a => Print [a] where"   , "  prt = prtList"   , ""   , "instance Print Char where"@@ -143,44 +150,64 @@   ]  -- | Printing instance for @Integer@, and possibly @[Integer]@.-integerRule :: CF -> [String]-integerRule cf = showsPrintRule cf $ TokenCat "Integer"+integerRule :: AbsMod -> CF -> [String]+integerRule absMod cf = showsPrintRule absMod cf $ TokenCat catInteger  -- | Printing instance for @Double@, and possibly @[Double]@.-doubleRule :: CF -> [String]-doubleRule cf = showsPrintRule cf $ TokenCat "Double"+doubleRule :: AbsMod -> CF -> [String]+doubleRule absMod cf = showsPrintRule absMod cf $ TokenCat catDouble -showsPrintRule :: CF -> Cat -> [String]-showsPrintRule cf t =-  [ "instance Print " ++ show t ++ " where"+showsPrintRule :: AbsMod -> CF -> Cat -> [String]+showsPrintRule absMod cf t =+  [ unwords [ "instance Print" , qualifiedCat absMod t , "where" ]   , "  prt _ x = doc (shows x)"   ] ++ ifList cf t ++   [ ""   ] +-- | Print category (data type name) qualified if user-defined.+--+qualifiedCat :: AbsMod -> Cat -> String+qualifiedCat absMod t = case t of+  TokenCat s+    | s `elem` baseTokenCatNames -> unqualified+    | otherwise                  -> qualified+  Cat{}       -> qualified+  ListCat c   -> concat [ "[", qualifiedCat absMod c, "]" ]+  CoercCat{}  -> impossible+  InternalCat -> impossible+  where+  unqualified = catToStr t+  qualified   = qualify absMod unqualified+  impossible  = error $ "impossible in Backend.Haskell.CFtoPrinter.qualifiedCat: " ++ show t++qualify :: AbsMod -> String -> String+qualify absMod s = concat [ absMod, "." , s ]+ -- | Printing instance for @Ident@, and possibly @[Ident]@.-identRule :: Bool -> CF -> [String]-identRule byteStrings cf = ownPrintRule byteStrings cf catIdent+identRule :: AbsMod -> Bool -> CF -> [String]+identRule absMod byteStrings cf = ownPrintRule absMod byteStrings cf catIdent  -- | Printing identifiers and terminals.-ownPrintRule :: Bool -> CF -> Cat -> [String]-ownPrintRule byteStrings cf own =-  [ "instance Print " ++ show own ++ " where"-  , "  prt _ (" ++ show own ++ posn ++ ") = doc (showString " ++ stringUnpack ++ ")"-  ] ++ ifList cf own +++ownPrintRule :: AbsMod -> Bool -> CF -> TokenCat -> [String]+ownPrintRule absMod byteStrings cf own =+  [ "instance Print " ++ q ++ " where"+  , "  prt _ (" ++ q ++ posn ++ ") = doc (showString " ++ stringUnpack ++ ")"+  ] ++ ifList cf (TokenCat own) ++   [ ""   ]  where+   q    = qualifiedCat absMod $ TokenCat own    posn = if isPositionCat cf own then " (_,i)" else " i"     stringUnpack | byteStrings = "(BS.unpack i)"                 | otherwise   = "i"  -- | Printing rules for the AST nodes.-rules :: Bool -> CF -> [String]-rules functor cf = do+rules :: AbsMod -> Bool -> CF -> [String]+rules absMod functor cf = do     (cat, xs :: [(Fun, [Cat])]) <- cf2dataLists cf-    [ render (case_fun functor cat (map (toArgs cat) xs)) ] ++ ifList cf cat ++ [ "" ]+    [ render (case_fun absMod functor cat (map (toArgs cat) xs)) ] ++ ifList cf cat ++ [ "" ]   where     toArgs :: Cat -> (Fun, [Cat]) -> Rule     toArgs cat (cons, _) =@@ -192,20 +219,21 @@         --   Foo. Bar ::= "bar" ;         -- Of course, this will generate an arbitary printer for @Foo@.         [] -> error $ "CFToPrinter.rules: no rhs found for: " ++ cons ++ ". " ++ show cat ++ " ::= ?"+ -- |--- >>> case_fun False (Cat "A") [ (Rule "AA" (Cat "AB") [Right "xxx"]) ]--- instance Print A where+-- >>> case_fun "Abs" False (Cat "A") [ (Rule "AA" (Cat "AB") [Right "xxx"]) ]+-- instance Print Abs.A where --   prt i e = case e of---     AA -> prPrec i 0 (concatD [doc (showString "xxx")])-case_fun :: Bool -> Cat -> [Rule] -> Doc-case_fun functor cat xs =+--     Abs.AA -> prPrec i 0 (concatD [doc (showString "xxx")])+case_fun :: AbsMod -> Bool -> Cat -> [Rule] -> Doc+case_fun absMod functor cat xs =   -- trace ("case_fun: cat = " ++ show cat) $   -- trace ("case_fun: xs  = " ++ show xs ) $   vcat     [ "instance Print" <+> type_ <+> "where"     , nest 2 $ if isList cat then "prt = prtList" else vcat         [ "prt i e = case e of"-        , nest 2 $ vcat (map (mkPrintCase functor) xs)+        , nest 2 $ vcat (map (mkPrintCase absMod functor) xs)         ]     ]   where@@ -213,38 +241,38 @@      | functor   = case cat of          ListCat{}  -> type' cat          _ -> parens $ type' cat-     | otherwise = text (show cat)+     | otherwise = text (qualifiedCat absMod cat)     type' = \case       ListCat c    -> "[" <> type' c <> "]"-      c@TokenCat{} -> text (show c)-      c            -> text (show c) <+> "a"+      c@TokenCat{} -> text (qualifiedCat absMod c)+      c            -> text (qualifiedCat absMod c) <+> "a"  -- | When writing the Print instance for a category (in case_fun), we have -- a different case for each constructor for this category. ----- >>> mkPrintCase False (Rule "AA" (Cat "A") [Right "xxx"])--- AA -> prPrec i 0 (concatD [doc (showString "xxx")])+-- >>> mkPrintCase "Abs" False (Rule "AA" (Cat "A") [Right "xxx"])+-- Abs.AA -> prPrec i 0 (concatD [doc (showString "xxx")]) -- -- Coercion levels are passed to @prPrec@. ----- >>> mkPrintCase False (Rule "EInt" (CoercCat "Expr" 2) [Left (TokenCat "Integer")])--- EInt n -> prPrec i 2 (concatD [prt 0 n])+-- >>> mkPrintCase "Abs" False (Rule "EInt" (CoercCat "Expr" 2) [Left (TokenCat "Integer")])+-- Abs.EInt n -> prPrec i 2 (concatD [prt 0 n]) ----- >>> mkPrintCase False (Rule "EPlus" (CoercCat "Expr" 1) [Left (Cat "Expr"), Right "+", Left (Cat "Expr")])--- EPlus expr1 expr2 -> prPrec i 1 (concatD [prt 0 expr1, doc (showString "+"), prt 0 expr2])+-- >>> mkPrintCase "Abs" False (Rule "EPlus" (CoercCat "Expr" 1) [Left (Cat "Expr"), Right "+", Left (Cat "Expr")])+-- Abs.EPlus expr1 expr2 -> prPrec i 1 (concatD [prt 0 expr1, doc (showString "+"), prt 0 expr2]) -- -- If the AST is a functor, ignore first argument. ----- >>> mkPrintCase True (Rule "EInt" (CoercCat "Expr" 2) [Left (TokenCat "Integer")])--- EInt _ n -> prPrec i 2 (concatD [prt 0 n])+-- >>> mkPrintCase "Abs" True (Rule "EInt" (CoercCat "Expr" 2) [Left (TokenCat "Integer")])+-- Abs.EInt _ n -> prPrec i 2 (concatD [prt 0 n]) -- -- Skip internal categories. ----- >>> mkPrintCase True (Rule "EInternal" (Cat "Expr") [Left InternalCat, Left (Cat "Expr")])--- EInternal _ expr -> prPrec i 0 (concatD [prt 0 expr])+-- >>> mkPrintCase "Abs" True (Rule "EInternal" (Cat "Expr") [Left InternalCat, Left (Cat "Expr")])+-- Abs.EInternal _ expr -> prPrec i 0 (concatD [prt 0 expr]) ---mkPrintCase :: Bool -> Rule -> Doc-mkPrintCase functor (Rule f cat rhs) =+mkPrintCase :: AbsMod -> Bool -> Rule -> Doc+mkPrintCase absMod functor (Rule f cat rhs) =     pattern <+> "->"     <+> "prPrec i" <+> integer (precCat cat) <+> parens (mkRhs (map render variables) rhs)   where@@ -252,7 +280,7 @@     pattern       | isOneFun  f = text "[" <+> head variables <+> "]"       | isConsFun f = hsep $ intersperse (text ":") variables-      | otherwise   = text f <+> (if functor then "_" else empty) <+> hsep variables+      | otherwise   = text (qualify absMod f) <+> (if functor then "_" else empty) <+> hsep variables     -- Creating variables names used in pattern matching. In addition to     -- haskell's reserved words, `e` and `i` are used in the printing function     -- and should be avoided
src/BNFC/Backend/Haskell/HsOpts.hs view
@@ -11,20 +11,22 @@ alex1 opts = alexMode opts == Alex1  absFile, absFileM,- alexFile, alexFileM,+ alexFile, alexFileHs, alexFileM,  composOpFile, composOpFileM,  gfAbs,- happyFile, happyFileM,+ happyFile, happyFileHs, happyFileM,  errFile, errFileM,  templateFile, templateFileM,  printerFile, printerFileM,  layoutFile, layoutFileM,- tFile :: Options -> String+ tFile, tFileExe :: Options -> String absFile       = mkFile withLang "Abs" "hs" absFileM      = mkMod  withLang "Abs" alexFile      = mkFile withLang "Lex" "x"+alexFileHs    = mkFile withLang "Lex" "hs" alexFileM     = mkMod  withLang "Lex" happyFile     = mkFile withLang "Par" "y"+happyFileHs   = mkFile withLang "Par" "hs" happyFileM    = mkMod  withLang "Par" txtFile       = mkFile withLang "Doc" "txt" templateFile  = mkFile withLang "Skel" "hs"@@ -33,18 +35,49 @@ printerFileM  = mkMod  withLang "Print" gfAbs         = mkFile withLang "" "Abs.gf" tFile         = mkFile withLang "Test" "hs"+tFileExe      = mkFile withLang "Test" "" errFile       = mkFile noLang   "ErrM" "hs" errFileM      = mkMod  noLang   "ErrM" shareFile     = mkFile noLang   "SharedString" "hs" shareFileM    = mkMod  noLang   "SharedString" layoutFileM   = mkMod  withLang "Layout" layoutFile    = mkFile withLang "Layout" "hs"-cnfTablesFile = mkFile withLang "CnfTables" "hs"-cnfTablesFileM= mkMod  withLang "CnfTables" xmlFile       = mkFile withLang "XML" "hs" xmlFileM      = mkMod  withLang "XML" composOpFile  = mkFile noLang   "ComposOp" "hs"-composOpFileM = mkMod noLang    "ComposOp"+composOpFileM = mkMod  noLang   "ComposOp"++-- Files created by the CNF variant++cnfTablesFile, cnfTablesFileM+  , cnfTestFile, cnfTestFileExe+  , cnfBenchFile+  :: Options -> String+cnfTablesFile  = mkFile withLang "CnfTables" "hs"+cnfTablesFileM = mkMod  withLang "CnfTables"+cnfTestFile    = mkFile withLang "Test" "hs"  -- WAS: TestCNF, but just naming it Test is easier for testsuite+cnfTestFileExe = mkFile withLang "Test" ""+cnfBenchFile   = mkFile withLang "BenchCNF" "hs"++-- Files created by the Agda backend++agdaASTFile+  , agdaASTFileM+  , agdaParserFile+  , agdaParserFileM+  , agdaLibFile+  , agdaLibFileM+  , agdaMainFile+  , agdaMainFileM+ :: Options -> String+agdaASTFile     = mkFile withLang "AST" "agda"+agdaASTFileM    = mkMod  withLang "AST"+agdaParserFile  = mkFile withLang "Parser" "agda"+agdaParserFileM = mkMod  withLang "Parser"+agdaLibFile     = mkFile noLang   "IOLib" "agda"+agdaLibFileM    = mkMod  noLang   "IOLib"+agdaMainFile    = mkFile noLang   "Main" "agda"+agdaMainFileM   = mkMod  noLang   "Main"   noLang :: Options -> String -> String
src/BNFC/Backend/Haskell/MkErrM.hs view
@@ -37,6 +37,8 @@     , "-- the Error monad: like Maybe type with error msgs"     , ""     , "import Control.Monad (MonadPlus(..), liftM)"+    -- From ghc-8.0 on, Applicative(..) is part of the Prelude,+    -- thus, need not be imported:     , if ghc then "#if __GLASGOW_HASKELL__ < 710" else empty     , "import Control.Applicative (Applicative(..), Alternative(..))"     , if ghc then "#else" else empty@@ -48,9 +50,18 @@     , ""     , "instance Monad Err where"     , "  return      = Ok"-    , "  fail        = Bad"     , "  Ok a  >>= f = f a"     , "  Bad s >>= _ = Bad s"+    -- From ghc-8.8 on, fail is no longer part of Monad.+    -- Thus, by default, we do not add it.+    -- Only if --ghc, we add it either to Monad or MonadFail.+    , if ghc then "#if __GLASGOW_HASKELL__ < 808" else empty+    , if ghc then "  fail        = Bad" else empty+    , if ghc then "#else" else empty+    , if ghc then "" else empty+    , if ghc then "instance MonadFail Err where" else empty+    , if ghc then "  fail = Bad" else empty+    , if ghc then "#endif" else empty     , ""     , "instance Applicative Err where"     , "  pure = Ok"
src/BNFC/Backend/Haskell/ToCNF.hs view
@@ -37,7 +37,9 @@ import Control.Applicative hiding (Const) #endif import qualified Data.Map as M+#if !(MIN_VERSION_base(4,11,0)) import Data.Monoid+#endif import Data.Pair import Text.PrettyPrint.HughesPJ hiding (first,(<>)) @@ -45,21 +47,24 @@  incomment x = "{-" <> x <> "-}" -generate opts cf0 = render $ vcat [header opts-                                  ,genShowFunction cf0-                                  ,genCatTags cf1-                                  ,genDesc cf1 descriptions-                                  ,genNeighborSet neighbors-                                  ,genCombTable units (onRules (filter (not . isUnitRule)) cf)-                                  ,genTokTable units cf-                                  ,incomment $ vcat-                                   ["Normalised grammar:"-                                   ,text $ show cf-                                   ,"Unit relation:"-                                   ,prettyUnitSet units-                                   ]-                                  ]-  where (cf1,cf,units,descriptions,neighbors) = toCNF cf0+generate :: Options -> CF -> Doc+generate opts cf0 = vcat $+  [ header opts+  , genShowFunction cf0+  , genCatTags cf1+  , genDesc cf1 descriptions+  , genNeighborSet neighbors+  , genCombTable units $ onRules (filter (not . isUnitRule)) cf+  , genTokTable units cf+  , incomment $ vcat $+    [ "Normalised grammar:"+    , text $ show cf+    , "Unit relation:"+    , prettyUnitSet units+    ]+  ]+  where+  (cf1, cf, units, descriptions, neighbors) = toCNF cf0  class Pretty a where   pretty :: a -> Doc@@ -74,146 +79,200 @@ instance Pretty String where   pretty = text -prettyUnitSet units = vcat [prettyExp f <> " : " <> catTag cat <> " --> " <> text (show cat') | (cat,x) <- M.assocs units, (f,cat') <- x]--header opts-       = vcat ["{-# LANGUAGE MagicHash, FlexibleInstances #-}"-              ,"module " <> text (cnfTablesFileM opts) <> " where"-              ,"import GHC.Prim"-              ,"import Control.Applicative hiding (Const)"-              ,"import Algebra.RingUtils"-              ,"import Parsing.Chart ()"-              ,"import " <> text (absFileM  opts)-              ,"import " <> text (alexFileM opts)-              ,"import " <> text ( printerFileM  opts)-              ,"readInteger :: String -> Integer"-              ,"readInteger = read"-              ,"readDouble :: String -> Double"-              ,"readDouble = read"-              ,"instance RingP [(CATEGORY,Any)] where"-              ,"  mul p a b = trav [map (app tx ty) l :/: map (app tx ty) r | (x,tx) <- a, (y,ty) <- b, let l:/:r = combine p x y]"-              ,"    where trav :: [Pair [a]] -> Pair [a]"-              ,"          trav [] = pure []"-              ,"          trav (x:xs) = (++) <$> x <*> trav xs"-              ,"          app tx ty (z,f)  = (z, f tx ty)"-              ]+prettyUnitSet units = vcat $+  [ prettyExp f <> " : " <> catTag cat <> " --> " <> text (show cat')+  | (cat, x)  <- M.assocs units+  , (f, cat') <- x+  ] -genShowFunction cf = hang "showAst (cat,ast) = case cat of " 6-       (vcat [catTag (Left cat) <> " -> printTree ((unsafeCoerce# ast)::" <> text (show cat) <> ")"-             | cat <- filter isDataCat $ allCats cf] $$-        "_ -> \"Unprintable category\"")+header opts = vcat $+  [ "{-# LANGUAGE MagicHash, FlexibleInstances #-}"+  , ""+  , "module " <> text (cnfTablesFileM opts) <> " where"+  , ""+  , "import GHC.Prim"+  , "import Control.Applicative hiding (Const)"+  , ""+  , "import Algebra.RingUtils"+  , "import Parsing.Chart ()"+  , ""+  , "import " <> text (absFileM  opts)+  , "import " <> text (alexFileM opts)+  , "import " <> text ( printerFileM  opts)+  , ""+  , "readInteger :: String -> Integer"+  , "readInteger = read"+  , ""+  , "readDouble :: String -> Double"+  , "readDouble = read"+  , ""+  , "instance RingP [(CATEGORY,a)] where"+  , "  mul p a b = trav [ map (app tx ty) l :/: map (app tx ty) r | (x, tx) <- a, (y, ty) <- b, let l:/:r = combine p x y ]"+  , "    where "+  , "    trav :: [Pair [a]] -> Pair [a]"+  , "    trav []     = pure []"+  , "    trav (x:xs) = (++) <$> x <*> trav xs"+  , "    app tx ty (z, f)  = (z, f tx ty)"+  , ""+  ] +genShowFunction cf =+  hang "showAst (cat, ast) = case cat of " 6 $ vcat $+    [ vcat+      [ hsep [ catTag (Left cat), "->", "printTree", parens ("(unsafeCoerce# ast) ::" <+> text (show cat)) ]+      | cat <- filter isDataCat $ allCats cf+      ]+    , "_ -> \"Unprintable category\""+    ]  genCatTags :: CFG Exp -> Doc-genCatTags cf = "data CATEGORY = " <> punctuate' "|" (map catTag (allSyms cf)) $$-                "  deriving (Eq,Ord,Show)"+genCatTags cf = vcat+  [ "data CATEGORY = " <> punctuate' "|" (map catTag (allSyms cf))+  , "  deriving (Eq, Ord, Show)"+  ]  genDesc :: CFG Exp -> CatDescriptions -> Doc-genDesc cf descs = vcat ["describe " <> catTag s <> " = " <> text (show (descOf s)) | s <- allSyms cf]-  where descOf :: Either Cat String -> String-        descOf (Right x) = "token " <> x-        descOf (Left x) = maybe (show x) render $ M.lookup x descs+genDesc cf descs = vcat $+  [ "describe " <> catTag s <> " = " <> text (show (descOf s))+  | s <- allSyms cf+  ]+  where+  descOf :: Either Cat String -> String+  descOf (Right x) = "token " <> x+  descOf (Left  x) = maybe (show x) render $ M.lookup x descs  genCombTable :: UnitRel Cat -> CFG Exp -> Doc-genCombTable units cf =-     "combine :: Bool -> CATEGORY -> CATEGORY -> Pair [(CATEGORY, Any -> Any -> Any)]"-  $$ genCombine units cf-  $$ "combine _ _ _ = pure []"+genCombTable units cf = vcat+  [ "combine :: Bool -> CATEGORY -> CATEGORY -> Pair [(CATEGORY, a -> a -> a)]"+  , genCombine units cf+  , "combine _ _ _ = pure []"+  ]  allSyms :: CFG Exp -> [Either Cat String]-allSyms cf = map Left (allCats cf  ++ literals cf) ++ map (Right . fst) (cfTokens cf)-+allSyms cf = concat $+  [ map Left $ allCats cf+  , map (Left . TokenCat) $ literals cf+  , map (Right . fst) $ cfTokens cf+  ] -ppPair (x,y) = parens $ x <> comma <> " " <> y+ppPair (x, y) = parens $ hsep [ x <> comma, y ]  unsafeCoerce' = app' (Con "unsafeCoerce#") +prettyPair (x :/: y) = sep [ x, ":/:", y ] -prettyPair (x :/: y) = sep [x,":/:",y] prettyListFun xs = parens $ sep (map (<> "$") xs) <> "[]"   genCombine :: UnitRel Cat -> CFG Exp -> Doc genCombine units cf = vcat $ map genEntry $ group' $ map (alt units) (cfgRules cf)-  where genEntry :: ((RHSEl,RHSEl),[(Cat,Exp)]) -> Doc-        genEntry ((r1,r2),cs) = "combine p " <> catTag r1 <> " " <> catTag r2 <> " = " <> prettyPair (genList <$> splitOptim (Left . fst) cf cs)-        mkLam body = "\\x y -> " <> body-        genList xs = prettyListFun [p (ppPair (catTag . Left $ x, mkLam . prettyExp . unsafeCoerce' $ y)) | ((x,y),p) <- xs]+  where+  genEntry :: ((RHSEl,RHSEl),[(Cat,Exp)]) -> Doc+  genEntry ((r1,r2),cs) = hsep $+    [ "combine p", catTag r1, catTag r2, equals+    , prettyPair (genList <$> splitOptim (Left . fst) cf cs)+    ]+  mkLam body = "\\ x y -> " <> body+  genList xs = prettyListFun $+    [ p $ ppPair (catTag . Left $ x, mkLam . prettyExp . unsafeCoerce' $ y)+    | ((x, y), p) <- xs+    ]  alt :: UnitRel Cat -> Rul Exp -> ((RHSEl,RHSEl),[(Cat,Exp)])-alt units (Rule f c [r1,r2]) = ((r1,r2),initial:others)-  where initial = (c, f `appMany` args)-        others = [(c', f' `app'` (f `appMany` args)) | (f',c') <- lookupMulti (Left c) units]-        args = map (unsafeCoerce' . Con) $ ["x"|isCat r1]++["y"|isCat r2]+alt units (Rule f c [r1, r2]) = ((r1, r2), initial:others)+  where+  initial = (c, f `appMany` args)+  others  = [ (c', f' `app'` (f `appMany` args))+            | (f',c') <- lookupMulti (Left c) units+            ]+  args    = map (unsafeCoerce' . Con) $ [ "x" | isCat r1 ] ++ [ "y" | isCat r2 ] alt _ _ = error "Only works with binary rules"    genTokTable :: UnitRel Cat -> CFG Exp -> Doc-genTokTable units cf = "tokenToCats :: Bool -> Token -> Pair [(CATEGORY,Any)]" $$-                       vcat (map (genSpecEntry cf units) (tokInfo cf)) $$-                       vcat (map (genTokEntry cf units) (cfTokens cf)) $$-                       "tokenToCats p t = error (\"unknown token: \" ++ show t)"+genTokTable units cf = vcat+  [ "tokenToCats :: Bool -> Token -> Pair [(CATEGORY,a)]"+  , vcat $ map (genSpecEntry cf units) $ tokInfo  cf+  , vcat $ map (genTokEntry  cf units) $ cfTokens cf+  , "tokenToCats p t = error (\"unknown token: \" ++ show t)"+  ] -tokInfo cf = (catChar,"TC",Con "head"):-             (catString,"TL",Id):-             (catInteger,"TI",Con "readInteger"):-             (catDouble,"TD",Con "readDouble"):-             [(catIdent,"TV",Con "Ident")|hasIdent cf] ++-             [(t,"T_" <> text (show t),(Con (show t))) | (t,_) <- tokenPragmas cf]+tokInfo cf = concat $+  [ [ (catChar   , "TC", Con "head")+    , (catString , "TL", Id)+    , (catInteger, "TI", Con "readInteger")+    , (catDouble , "TD", Con "readDouble")+    ]+  , [ (catIdent,"TV", Con "Ident") | hasIdent cf ]+  , [ (t, "T_" <> text t, Con t)   | (t, _) <- tokenPragmas cf ]+  ]  genTokCommon cf xs = prettyPair (gen <$> splitOptim fst cf xs)-  where gen ys = prettyListFun [p (ppPair (catTag x,y)) | ((x,y),p) <- ys]+  where gen ys = prettyListFun [ p (ppPair (catTag x, y)) | ((x, y), p) <- ys ] -genSpecEntry cf units (tokName,constrName,fun) = "tokenToCats p (PT (Pn _ l c) (" <> constrName <> " x)) = " <> genTokCommon cf xs-  where xs = map (second (prettyExp . (\f -> unsafeCoerce' (f `app'` tokArgs)))) $-             (Left tokName, fun) : [(Left c,f `after` fun) | (f,c) <- lookupMulti (Left tokName) units]-        tokArgs | isPositionCat cf tokName = Con "((l,c),x)"-                | otherwise = Con "x"+genSpecEntry cf units (tokName, constrName, fun) =+    "tokenToCats p (PT (Pn _ l c) (" <> constrName <> " x)) = " <> genTokCommon cf xs+  where+  xs = map (second (prettyExp . (\ f -> unsafeCoerce' (f `app'` tokArgs)))) $+         (Left $ TokenCat tokName, fun) : [ (Left c, f `after` fun) | (f, c) <- lookupMulti (Left $ TokenCat tokName) units ]+  tokArgs | isPositionCat cf tokName = Con "((l, c), x)"+          | otherwise                = Con "x"  genTokEntry cf units (tok,x) =   " -- " <> text tok $$   "tokenToCats p (PT posn (TS _ " <> int x <> ")) = " <> genTokCommon cf xs-  where xs = (Right tok, tokVal) :-             [(Left c,prettyExp (unsafeCoerce' f)) | (f,c) <- lookupMulti (Right tok) units]-        tokVal = "error" <> (text $ show $ "cannot access value of token: " ++ tok)+  where+  xs = (Right tok, tokVal) :+         [ (Left c, prettyExp (unsafeCoerce' f)) | (f, c) <- lookupMulti (Right tok) units ]+  tokVal = "error" <> (text $ show $ "cannot access value of token: " ++ tok)  ppList = brackets . punctuate' ", " -genNeighborSet ns = vcat-              ["neighbors " <> catTag x <> " = " <> ppList (map catTag y)-              | (x,y) <- ns] $$-               "neighbors _ = []"+genNeighborSet ns = vcat $+  [ vcat [ hsep [ "neighbors", catTag x, equals, ppList (map catTag y) ] | (x, y) <- ns ]+  , "neighbors _ = []"+  ]  ------------------------ -- Test file generation -genTestFile opts _ = render $ vcat-    ["module Main where"-    ,"import " <> text ( alexFileM     opts)-    ,"import " <> text ( cnfTablesFileM opts)-    ,"import Parsing.TestProgram"-    ,"main = mainTest showAst tokenToCats tokens tokenLineCol describe neighbors"]+genTestFile :: Options -> CF -> Doc+genTestFile opts _ = vcat $+  [ "module Main where"+  , ""+  , "import Parsing.TestProgram"+  , "import" <+> text (alexFileM      opts)+  , "import" <+> text (cnfTablesFileM opts)+  , ""+  , "main = mainTest showAst tokenToCats tokens tokenLineCol describe neighbors"+  ]  -genBenchmark opts = render $ vcat-   ["import System.Environment ( getArgs )"-   ,"import "<> text ( alexFileM opts) <> " as Lexer"-   ,"import "<> text ( cnfTablesFileM opts) <> " as Parser"-   ,"import GHC.Exts"-   ,"import Parsing.Chart"-   ,"import Criterion.Main"-   ,"import Algebra.RingUtils"-   ,"import Control.Applicative"-   ,"type T = [(CATEGORY,Any)]"-   ,"pLGrammar :: [Pair T] -> MT2 T"-   ,"pLGrammar = mkTree"-   ,"main = do"-   ,"  f:_ <- getArgs"-   ,"  s <- readFile f"-   ,"  let ts = zipWith tokenToCats (cycle [False,True]) (Lexer.tokens s)"-   ,"      (ts1,x:ts2) = splitAt (length ts `div` 2) ts"-   ,"      cs = [mkTree ts1,mkTree' ts2]"-   ,"      work [c1,c2] = show $ map fst $ root $ mergein False c1 x c2"-   ,"  defaultMain [bench f $ nf work cs] -- note the hack!!!"+genBenchmark opts = vcat $+   [ "import Control.Applicative"+   , "import GHC.Exts"+   , "import System.Environment ( getArgs )"+   , ""+   , "import Criterion.Main"+   , ""+   , "import Algebra.RingUtils"+   , "import Parsing.Chart"+   , ""+   , "import" <+> text (alexFileM opts)      <+> "as Lexer"+   , "import" <+> text (cnfTablesFileM opts) <+> "as Parser"+   , ""+   , "type T = [(CATEGORY,a)]"+   , ""+   , "pLGrammar :: [Pair T] -> MT2 T"+   , "pLGrammar = mkTree"+   , ""+   , "main = do"+   , "  f:_ <- getArgs"+   , "  s   <- readFile f"+   , "  let ts            = zipWith tokenToCats (cycle [False, True]) (Lexer.tokens s)"+   , "      (ts1, x:ts2)  = splitAt (length ts `div` 2) ts"+   , "      cs            = [mkTree ts1, mkTree' ts2]"+   , "      work [c1, c2] = show $ map fst $ root $ mergein False c1 x c2"+   , "  defaultMain [bench f $ nf work cs] -- note the hack!!!"    ]
src/BNFC/Backend/Haskell/Utils.hs view
@@ -9,19 +9,23 @@  import Prelude' -import Text.PrettyPrint+import BNFC.PrettyPrint import BNFC.CF (Cat(..), identCat, normCat) import BNFC.Utils (mkNames, NameStyle(..)) --- | Create a valid parser function name for a given category+-- | Create a valid parser function name for a given category.+-- -- >>> parserName (Cat "Abcd") -- pAbcd+-- -- >>> parserName (ListCat (Cat "Xyz")) -- pListXyz+-- parserName :: Cat -> Doc parserName = ("p" <>) . text . identCat --- | Haskell's reserved words+-- | Haskell's reserved words.+-- hsReservedWords :: [String] hsReservedWords =     [ "as"@@ -32,6 +36,7 @@     , "deriving"     , "do"     , "else"+    , "foreign"     , "hiding"     , "if"     , "import"@@ -51,7 +56,8 @@     ]  --- | Render a category from the grammar to a Haskell type+-- | Render a category from the grammar to a Haskell type.+-- -- >>> catToType Nothing (Cat "A") -- A -- >>> catToType Nothing (ListCat (Cat "A"))@@ -59,8 +65,7 @@ -- >>> catToType Nothing (TokenCat "Ident") -- Ident ----- Note that there is no haskell type for coerced categories: they should be--- normalized+-- Note that there is no haskell type for coerced categories: they should be normalized: -- >>> catToType Nothing (CoercCat "Expr" 2) -- Expr --@@ -83,42 +88,48 @@ -- -- >>> catToType (Just "()") (ListCat (CoercCat "Exp" 2)) -- [Exp ()]+-- catToType :: Maybe Doc -> Cat -> Doc-catToType param cat = maybeParens $ catToType' param cat+catToType param cat = parensIf isApp $ catToType' param cat   where-    maybeParens = case (param,cat) of-        (Just _, Cat _) -> parens-        _ -> id+    isApp = case (param, cat) of+        (Just _, Cat _) -> True+        _ -> False     catToType' _ InternalCat = error "Can't create a haskell type for internal category"-    catToType' Nothing c = text $ show $ normCat c-    catToType' (Just p) (Cat c) = text c <+> p+    catToType' Nothing  c              = text $ show $ normCat c+    catToType' (Just p) (Cat c)        = text c <+> p     catToType' (Just p) (CoercCat c _) = text c <+> p-    catToType' (Just _) (TokenCat c) = text c-    catToType' (Just p) (ListCat c) = lbrack <> catToType' (Just p) c <> rbrack+    catToType' (Just _) (TokenCat c)   = text c+    catToType' (Just p) (ListCat c)    = brackets $ catToType' (Just p) c  --- | gives you a list of variables usable for pattern matching.--- Ex: if you have the rule Aba. S ::= A B A ; with the generated data type+-- | Gives a list of variables usable for pattern matching.+--+-- Example: Given the rule @Aba. S ::= A B A ;@ with the generated data type+-- @ --   data S = Aba A B A--- Given the lit of categories in the RHS of the rule (A B A), we generate the+-- @+-- from the list of categories on the RHS of the rule [A,B,A], we generate the -- list [a1,b,a2] to be used in a pattern matching like--- case s of+-- @+--   case s of --     Aba a1 b a2 -> ... --     ...+-- @ -- -- >>> catvars [Cat "A", Cat "B", Cat "A"] -- [a1,b,a2] ----- It should avoid reserved words+-- It should avoid reserved words: -- >>> catvars [Cat "IF", Cat "Case", Cat "Type", Cat "If"] -- [if_1,case_,type_,if_2] ----- It uses an -s to mark lists:+-- It uses a suffix -s to mark lists: -- >>> catvars [Cat "A", ListCat (Cat "A"), ListCat (ListCat (Cat "A"))] -- [a,as_,ass]+-- catvars :: [Cat] -> [Doc] catvars = map text . mkNames hsReservedWords LowerCase . map var   where     var (ListCat c) = var c ++ "s"     var xs          = show xs-
src/BNFC/Backend/HaskellGADT.hs view
@@ -67,7 +67,7 @@         mkfile (alexFile opts) $ cf2alex3 lexMod errMod shareMod (shareStrings opts) (byteStrings opts) cf         liftIO $ putStrLn "   (Use Alex 3.0 to compile.)"     mkfile (happyFile opts) $-      cf2HappyS parMod absMod lexMod errMod (glr opts) (byteStrings opts) False cf+      cf2Happy parMod absMod lexMod errMod (glr opts) (byteStrings opts) False cf     liftIO $ putStrLn "   (Tested with Happy 1.15)"     mkfile (templateFile opts) $ cf2Template (templateFileM opts) absMod errMod cf     mkfile (printerFile opts)  $ cf2Printer False False True prMod absMod cf
src/BNFC/Backend/HaskellGADT/CFtoAbstractGADT.hs view
@@ -17,6 +17,8 @@     Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA -} +{-# LANGUAGE PatternGuards #-}+ module BNFC.Backend.HaskellGADT.CFtoAbstractGADT (cf2Abstract) where  import BNFC.CF@@ -68,15 +70,19 @@ mkRealType cat = cat ++ "_" -- FIXME: make sure that there is no such category already  prTreeType :: Bool -> CF -> [String]-prTreeType byteStrings cf = "data Tree :: Tag -> * where" : map (("    "++) . prTreeCons) (cf2cons cf)- where- prTreeCons c-      | isPositionCat cf cat = fun +++ ":: ((Int,Int),"++stringType++") -> Tree" +++ mkRealType (show cat)-      | otherwise = fun +++ "::" +++ concat [show c +++ "-> " | (c,_) <- consVars c] ++ "Tree" +++ mkRealType (show cat)-  where (cat,fun) = (consCat c, consFun c)-        stringType-          | byteStrings = "BS.ByteString"-          | otherwise   = "String"+prTreeType byteStrings cf =+  "data Tree :: Tag -> * where" : map (("    " ++) . prTreeCons) (cf2cons cf)+  where+  prTreeCons c+      | TokenCat tok <- cat, isPositionCat cf tok =+          fun +++ ":: ((Int,Int),"++stringType++") -> Tree" +++ mkRealType tok+      | otherwise =+          fun +++ "::" +++ concat [show c +++ "-> " | (c,_) <- consVars c] ++ "Tree" +++ mkRealType (show cat)+    where+    (cat,fun) = (consCat c, consFun c)+    stringType+      | byteStrings = "BS.ByteString"+      | otherwise   = "String"  prCompos :: CF -> [String] prCompos cf =
src/BNFC/Backend/HaskellGADT/HaskellGADTCommon.hs view
@@ -39,7 +39,7 @@         , consVars = zip cats (mkVars cats), consRhs = rhsFun cf fun
         } | (cat,rules) <- cf2data cf, (fun,cats) <- rules]
     ++ [ Constructor
-        { consCat = cat, consFun = show cat, consPrec = 0
+        { consCat = TokenCat cat, consFun = cat, consPrec = 0
         , consVars = [(Cat "String","str")], consRhs = [Left (Cat "String")]
         } | cat <- specialCats cf]
   where
@@ -57,7 +57,7 @@         var (Cat "String")  = "str"
         var (Cat "Char")    = "c"
         var (Cat "Double")  = "d"
-        var xs        = map toLower $show xs
+        var xs        = map toLower $ show xs
         checkRes s |  s `elem` reservedHaskell = s ++ "'"
                    | otherwise              = s
         reservedHaskell =
@@ -78,5 +78,7 @@ rhsFun cf f = rhsRule $ ruleFun cf f
 
 isTreeType :: CF -> Cat -> Bool
-isTreeType cf c | isList c  = isTreeType cf (catOfList c)
-                | otherwise = c `elem` (allCats cf ++ specialCats cf)
+isTreeType cf (TokenCat c) = c `elem` specialCats cf
+isTreeType cf c
+  | isList c  = isTreeType cf (catOfList c)
+  | otherwise = c `elem` allCats cf
src/BNFC/Backend/HaskellProfile.hs view
@@ -197,4 +197,4 @@                  "    _   -> do progName <- getProgName",                  "              putStrLn $ progName ++ \": excess arguments.\""                  ]-                  where firstParser = 'p' : show (firstEntry cf)+                  where firstParser = 'p' : identCat (firstEntry cf)
src/BNFC/Backend/HaskellProfile/CFtoHappyProfile.hs view
@@ -185,27 +185,21 @@  -- GF literals specialToks :: CFP -> String-specialToks cf = unlines (map aux (literals cf))-  where aux cat = case cat of-            Cat "Ident"  -> "L_ident  { PT _ (TV $$) }"-            Cat "String" -> "L_quoted { PT _ (TL $$) }"-            Cat "Integer" -> "L_integ  { PT _ (TI $$) }"-            Cat "Double" -> "L_doubl  { PT _ (TD $$) }"-            Cat "Char"   -> "L_charac { PT _ (TC $$) }"-            own      -> "L_" ++ show own ++ " { PT _ (T_" ++ show own ++ " " ++ posn ++ ") }"-          where posn = if isPositionCat cf cat then "_" else "$$"+specialToks cf = unlines . (`map` literals cf) $ \case+  "Ident"   -> "L_ident  { PT _ (TV $$) }"+  "String"  -> "L_quoted { PT _ (TL $$) }"+  "Integer" -> "L_integ  { PT _ (TI $$) }"+  "Double"  -> "L_doubl  { PT _ (TD $$) }"+  "Char"    -> "L_charac { PT _ (TC $$) }"+  own       -> "L_" ++ own ++ " { PT _ (T_" ++ own ++ " " ++ posn ++ ") }"+    where posn = if isPositionCat cf own then "_" else "$$"  specialRules :: CFP -> String-specialRules cf = unlines $-                  map aux (literals cf)- where-   aux cat =-     case cat of-         Cat "Ident"   -> "Ident   : L_ident  { mkAtTree (AV (Ident $1)) }"-         Cat "String"  -> "String  : L_quoted { mkAtTree (AS $1) }"-         Cat "Integer" -> "Integer : L_integ  { mkAtTree (AI ((read $1) :: Integer)) }"-         Cat "Double"  -> "Double  : L_doubl  { (read $1) :: Double }" -----         Cat "Char"    -> "Char    : L_charac { (read $1) :: Char }"   -----         own       -> show own ++ "    : L_" ++ show own ++ " { " ++ show own ++ " ("++ posn ++ "$1)}"-      where-         posn = if isPositionCat cf cat then "mkPosToken " else ""+specialRules cf = unlines . (`map` literals cf) $ \case+  "Ident"   -> "Ident   : L_ident  { mkAtTree (AV (Ident $1)) }"+  "String"  -> "String  : L_quoted { mkAtTree (AS $1) }"+  "Integer" -> "Integer : L_integ  { mkAtTree (AI ((read $1) :: Integer)) }"+  "Double"  -> "Double  : L_doubl  { (read $1) :: Double }"+  "Char"    -> "Char    : L_charac { (read $1) :: Char }"+  own       -> concat [ own , " : L_" , own , " { " , own , " (" , posn , "$1)}" ]+    where posn = if isPositionCat cf own then "mkPosToken " else ""
src/BNFC/Backend/Java.hs view
@@ -139,8 +139,8 @@     lexmake      = makelexerdetails  (lexer parselexspec)     rp           = (Options.linenumbers options) -makefile ::  FilePath -> FilePath -> [String] -> ParserLexerSpecification -> Doc-makefile  dirBase dirAbsyn absynFileNames jlexpar = vcat $+makefile ::  FilePath -> FilePath -> [String] -> ParserLexerSpecification -> String -> Doc+makefile  dirBase dirAbsyn absynFileNames jlexpar basename = vcat $     makeVars [  ("JAVAC", "javac"),                 ("JAVAC_FLAGS", "-sourcepath ."),                 ( "JAVA", "java"),@@ -211,8 +211,10 @@                       , "Test.java"                       ]                     ++ dotJava (results parmake)-                    ++ ["*.class"])-        , " rm -f Makefile"+                    ++ ["*.class"]+                    ++ other_results lexmake+                    ++ other_results parmake)+        , " rm -f " ++ basename         , " rmdir -p " ++ dirBase         ]     ]@@ -241,61 +243,84 @@     -- ^ the CF bundle     -> String +-- | Record to name arguments of 'javaTest'.+data JavaTestParams = JavaTestParams+  { jtpImports            :: [Doc]+      -- ^ List of imported packages.+  , jtpErr                :: String+      -- ^ Name of the exception thrown in case of parsing failure.+  , jtpErrHand            :: (String -> [Doc])+      -- ^ Handler for the exception thrown.+  , jtpLexerConstruction  :: (Doc -> Doc -> Doc)+      -- ^ Function formulating the construction of the lexer object.+  , jtpParserConstruction :: (Doc -> Doc -> Doc)+      -- ^ As above, for parser object.+  , jtpShowAlternatives   :: ([Cat] -> [Doc])+      -- ^ Pretty-print the names of the methods corresponding to entry points to the user.+  , jtpInvocation         :: (Doc -> Doc -> Doc -> Doc -> Doc)+      -- ^ Function formulating the invocation of the parser tool within Java.+  , jtpErrMsg             :: String+      -- ^ Error string output in consequence of a parsing failure.+  }+ -- | Test class details for J(F)Lex + CUP cuptest :: TestClass-cuptest =-  javaTest-    ["java_cup.runtime"]-    "Throwable"-    (const [])-    (\x i -> x <> i <> ";")-    (\x i -> x <> "(" <> i <> ", " <> i <> ".getSymbolFactory());")-    showOpts-    (\_ pabs enti ->-        pabs <> "." <> enti <+> "ast = p."<> "p" <> enti-             <> "();")-    locs-  where-    locs = "At line \" + String.valueOf(t.l.line_num()) + \","-            ++ " near \\\"\" + t.l.buff() + \"\\\" :"-    showOpts _ = ["not available."]--+cuptest = javaTest $ JavaTestParams+  { jtpImports            = ["java_cup.runtime"]+  , jtpErr                = "Throwable"+  , jtpErrHand            = const []+  , jtpLexerConstruction  = \ x i -> x <> i <> ";"+  , jtpParserConstruction = \ x i -> x <> "(" <> i <> ", " <> i <> ".getSymbolFactory());"+  , jtpShowAlternatives   = const $ ["not available."]+  , jtpInvocation         = \ _ pabs dat enti -> hcat [ pabs, ".", dat, " ast = p.p", enti, "();" ]+  , jtpErrMsg             = unwords $+      [ "At line \" + String.valueOf(t.l.line_num()) + \","+      , "near \\\"\" + t.l.buff() + \"\\\" :"+      ]+  }  -- | Test class details for ANTLR4 antlrtest :: TestClass-antlrtest =-  javaTest-    [ "org.antlr.v4.runtime","org.antlr.v4.runtime.atn"-    , "org.antlr.v4.runtime.dfa","java.util"-    ]-    "TestError"-    antlrErrorHandling-    (\x i ->  vcat-           [ x <> "(new ANTLRInputStream" <> i <>");"-           , "l.addErrorListener(new BNFCErrorListener());"-           ])-    (\x i -> vcat-           [x <> "(new CommonTokenStream(" <> i <>"));"-           , "p.addErrorListener(new BNFCErrorListener());"-           ])-    showOpts-    (\pbase pabs enti -> vcat-           [+antlrtest = javaTest $ JavaTestParams+  { jtpImports =+      [ "org.antlr.v4.runtime"+      , "org.antlr.v4.runtime.atn"+      , "org.antlr.v4.runtime.dfa"+      , "java.util"+      ]+  , jtpErr =+      "TestError"+  , jtpErrHand =+      antlrErrorHandling+  , jtpLexerConstruction  =+      \ x i -> vcat+        [ x <> "(new ANTLRInputStream" <> i <>");"+        , "l.addErrorListener(new BNFCErrorListener());"+        ]+  , jtpParserConstruction =+      \ x i -> vcat+        [ x <> "(new CommonTokenStream(" <> i <>"));"+        , "p.addErrorListener(new BNFCErrorListener());"+        ]+  , jtpShowAlternatives   =+      showOpts+  , jtpInvocation         =+      \ pbase pabs dat enti -> vcat+         [            let rulename = getRuleName (show enti)                typename = text rulename                methodname = text $ firstLowerCase rulename            in-               pbase <> "." <> typename <> "Context pc = p."-                     <> methodname <> "();"-               , "org.antlr.v4.runtime.Token _tkn = p.getInputStream()"-                 <> ".getTokenSource().nextToken();"-               , "if(_tkn.getType() != -1) throw new TestError"+               pbase <> "." <> typename <> "Context pc = p." <> methodname <> "();"+         , "org.antlr.v4.runtime.Token _tkn = p.getInputStream().getTokenSource().nextToken();"+         , "if(_tkn.getType() != -1) throw new TestError"                  <> "(\"Stream does not end with EOF\","-                 <> "_tkn.getLine(),_tkn.getCharPositionInLine());",-               pabs <> "." <> enti <+> "ast = pc.result;"-           ])-           "At line \" + e.line + \", column \" + e.column + \" :"+                 <> "_tkn.getLine(),_tkn.getCharPositionInLine());"+         , pabs <> "." <> dat <+> "ast = pc.result;"+         ]+  , jtpErrMsg             =+      "At line \" + e.line + \", column \" + e.column + \" :"+  }   where     showOpts [] = []     showOpts (x:xs)@@ -412,6 +437,10 @@       -- | list of names (without extension!) of files resulting from the       -- application of the tool which are relevant to a make rule     , results             :: [String]+      -- | list of names of files resulting from the application of+      -- the tool which are irrelevant to the make rules but need to+      -- be cleaned+    , other_results       :: [String]       -- | if true, the files are moved to the base directory, otherwise       -- they are left where they are     , moveresults         :: Bool@@ -434,6 +463,7 @@     , toolversion         = "1.2.6."     , supportsEntryPoints = False     , results             = ["Yylex"]+    , other_results       = []     , moveresults         = False     } @@ -449,9 +479,10 @@     , filename            = "_cup"     , fileextension       = "cup"     , toolname            = "CUP"-    , toolversion         = "0.10k"+    , toolversion         = "0.11b"     , supportsEntryPoints = False     , results             = ["parser", "sym"]+    , other_results       = []     , moveresults         = True     }   where@@ -475,6 +506,7 @@     , toolversion         = "4.5.1"     , supportsEntryPoints = True     , results             = [l]+    , other_results       = map (l ++) [".tokens","BaseListener.java","Listener.java"]     , moveresults         = False     } @@ -528,56 +560,40 @@         : partialParserGoals dbas rest  -- | Creates the Test.java class.-javaTest :: [Doc]-            -- ^ list of imported packages-            -> String-            -- ^ name of the exception thrown in case of parsing failure-            -> (String -> [Doc])-            -- ^ handler for the exception thrown-            -> (Doc -> Doc -> Doc)-            -- ^ function formulating the construction of the lexer object-            -> (Doc -> Doc -> Doc)-            -- ^ as above, for parser object-            -> ([Cat] -> [Doc])-            -- ^ Function processing the names of the methods corresponding-            -- to entry points-            -> (Doc -> Doc -> Doc -> Doc)-            -- ^ function formulating the invocation of the parser tool within-            -- Java-            -> String-            -- ^ error string output in consequence of a parsing failure-            -> TestClass-javaTest imports+javaTest :: JavaTestParams -> TestClass+javaTest (JavaTestParams+    imports     err     errhand     lexerconstruction     parserconstruction     showOpts     invocation-    errmsg+    errmsg)     lexer     parser     packageBase     packageAbsyn     cf =-    render $ vcat $-        [ "package" <+> text packageBase <> ";"+    render $ vcat $ concat $+      [ [ "package" <+> text packageBase <> ";"         , "import" <+> text packageBase <> ".*;"         , "import" <+> text packageAbsyn <> ".*;"         , "import java.io.*;"         ]-        ++ map importfun imports-        ++ errhand err-        ++[ ""+      , map importfun imports+      , errhand err+      , [ ""         , "public class Test"         , codeblock 2             [ lx <+> "l;"             , px <+> "p;"             , ""             , "public Test(String[] args)"-            , codeblock 2 [-                "try"-                , codeblock 2 [ "Reader input;"+            , codeblock 2+                [ "try"+                , codeblock 2+                    [ "Reader input;"                     , "if (args.length == 0)"                        <> "input = new InputStreamReader(System.in);"                     , "else input = new FileReader(args[0]);"@@ -591,13 +607,13 @@                 , "p = new "<> parserconstruction px "l"                 ]             , ""-            , "public" <+> text packageAbsyn <> "." <> absentity-                <+>"parse() throws Exception"+            , "public" <+> text packageAbsyn <> "." <> dat+                <+> "parse() throws Exception"             , codeblock 2                 [ "/* The default parser is the first-defined entry point. */"                 , "/* Other options are: */"                 , "/* " <> fsep (punctuate "," (showOpts (tail eps))) <> " */"-                , invocation px (text packageAbsyn) absentity+                , invocation px (text packageAbsyn) dat absentity                 , printOuts [ "\"Parse Succesful!\""                     , "\"[Abstract Syntax]\""                     , "PrettyPrinter.show(ast)"@@ -619,6 +635,7 @@                 ]             ]         ]+      ]     where       printOuts x    = vcat $ map javaPrintOut (messages x)       messages x     = "" : intersperse "" x@@ -626,7 +643,8 @@       importfun x    = "import" <+> x <> ".*;"       lx             = text lexer       px             = text parser-      absentity      = text $ show def+      dat            = text $ identCat $ normCat def  -- Use for AST types.+      absentity      = text $ identCat def            -- Use for parser/printer name.       eps            = allEntryPoints cf       def            = head eps 
src/BNFC/Backend/Java/CFtoAntlr4Lexer.hs view
@@ -130,16 +130,16 @@         "IDENT : IDENTIFIER_FIRST (IDENTIFIER_FIRST | DIGIT)*;"         ]     , "// Whitespace"-    , "WS : (' ' | '\\r' | '\\t' | '\\n')+ ->  skip;"+    , "WS : (' ' | '\\r' | '\\t' | '\\n' | '\\f')+ ->  skip;"     , "// Escapable sequences"     , "fragment"-    , "Escapable : ('\"' | '\\\\' | 'n' | 't' | 'r');"+    , "Escapable : ('\"' | '\\\\' | 'n' | 't' | 'r' | 'f');"     , "ErrorToken : . ;"     , ifString stringmodes     , ifChar charmodes     ]   where-    ifC cat s     = if isUsedCat cf cat then vcat s else ""+    ifC cat s     = if isUsedCat cf (TokenCat cat) then vcat s else ""     ifString      = ifC catString     ifChar        = ifC catChar     strdec        = [ "// String token type"@@ -147,7 +147,7 @@                     ]     chardec       = ["CHAR : '\\''   -> more, mode(CHARMODE);"]     userDefTokens = vcat-        [ text (show name) <>" : " <> text (printRegJLex exp) <> ";"+        [ text name <> " : " <> text (printRegJLex exp) <> ";"         | (name, exp) <- tokenPragmas cf ]     stringmodes   = [ "mode STRESCAPE;"         , "STRESCAPED : Escapable  -> more, popMode ;"
src/BNFC/Backend/Java/CFtoComposVisitor.hs view
@@ -73,7 +73,7 @@  -- | Traverses a standard rule. ----- >>> prRule "lang.absyn" [Cat "A"] (Cat "B") (Rule "F" (Cat "B") [Left (Cat "A"), Right "+", Left (ListCat (Cat "B"))])+-- >>> prRule "lang.absyn" ["A"] (Cat "B") (Rule "F" (Cat "B") [Left (Cat "A"), Right "+", Left (ListCat (Cat "B"))]) --     public B visit(lang.absyn.F p, A arg) --     { --       String a_ = p.a_;@@ -100,7 +100,7 @@  -- | Traverses a class's instance variables. ----- >>> prCat [Cat "A"] (Cat "A", "a_")+-- >>> prCat ["A"] (Cat "A", "a_") -- String a_ = p.a_; -- -- >>> prCat [] (ListCat (Cat "Integer"), "listinteger_")@@ -135,4 +135,4 @@  isBasicType :: [UserDef] -> String -> Bool isBasicType user v =-    v `elem` (map show user ++ ["Integer","Character","String","Double"])+    v `elem` (user ++ ["Integer","Character","String","Double"])
src/BNFC/Backend/Java/CFtoCup15.hs view
@@ -158,24 +158,23 @@  -- peteg: FIXME JavaCUP can only cope with one entry point AFAIK. prEntryPoint :: CF -> String-prEntryPoint cf = unlines ["", "start with " ++ show (firstEntry cf) ++ ";", ""]+prEntryPoint cf = unlines ["", "start with " ++ identCat (firstEntry cf) ++ ";", ""] --                  [ep]  -> unlines ["", "start with " ++ ep ++ ";", ""] --                  eps   -> error $ "FIXME multiple entry points." ++ show eps  --This generates a parser method for each entry point. parseMethod :: String -> Cat -> String-parseMethod packageAbsyn cat =-  if normCat cat /= cat-    then ""-    else unlines-             [ "  public" +++ packageAbsyn ++ "." ++ cat' +++ "p" ++ cat' ++ "()"+parseMethod packageAbsyn cat = unlines+             [ "  public" +++ packageAbsyn ++ "." ++ dat +++ "p" ++ cat' ++ "()"                  ++ " throws Exception"              , "  {"              , "    java_cup.runtime.Symbol res = parse();"-             , "    return (" ++ packageAbsyn ++ "." ++ cat' ++ ") res.value;"+             , "    return (" ++ packageAbsyn ++ "." ++ dat ++ ") res.value;"              , "  }"              ]-    where cat' = identCat (normCat cat)+    where+    dat  = identCat (normCat cat)+    cat' = identCat cat  --non-terminal types declarations :: String -> [Cat] -> String@@ -199,7 +198,7 @@   , ifC catIdent   "terminal String _IDENT_;"   ]    where-    ifC cat s = if isUsedCat cf cat then s else ""+    ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""  specialRules:: CF -> String specialRules cf =
src/BNFC/Backend/Java/CFtoFoldVisitor.hs view
@@ -75,7 +75,7 @@ prRule  _ _ _ _ = ""  -- | Traverses a class's instance variables.--- >>> prCat [Cat "A"] (Cat "A", "a_")+-- >>> prCat ["A"] (Cat "A", "a_") -- <BLANKLINE> -- >>> prCat [] (ListCat (Cat "Integer"), "listinteger_") -- <BLANKLINE>@@ -102,4 +102,4 @@  --Just checks if something is a basic or user-defined type. isBasicType :: [UserDef] -> String -> Bool-isBasicType user v = v `elem` (map show user ++ ["Integer","Character","String","Double"])+isBasicType user v = v `elem` (user ++ ["Integer","Character","String","Double"])
src/BNFC/Backend/Java/CFtoJLex15.hs view
@@ -50,21 +50,18 @@ import BNFC.Utils (cstring) import Text.PrettyPrint ---The environment must be returned for the parser to use.+-- | The environment is returned for further use in the parser. cf2jlex :: JavaLexerParser -> RecordPositions -> String -> CF -> (Doc, SymEnv)-cf2jlex jflex rp packageBase cf = (vcat- [-  prelude jflex rp packageBase,-  cMacros,-  lexSymbols jflex env,-  restOfJLex jflex rp cf- ], env)+cf2jlex jflex rp packageBase cf = (, env) . vcat $+  [ prelude jflex rp packageBase+  , cMacros+  , lexSymbols jflex env+  , restOfJLex jflex rp cf+  ]   where-   env = makeSymEnv (cfgSymbols cf ++ reservedWords cf) (0 :: Int)-   makeSymEnv [] _ = []-   makeSymEnv (s:symbs) n = (s, "_SYMB_" ++ show n) : makeSymEnv symbs (n+1)+  env = zipWith (\ s n -> (s, "_SYMB_" ++ show n)) (cfgSymbols cf ++ reservedWords cf) [(0 :: Int)..] --- | File prelude+-- | File prelude. prelude :: JavaLexerParser -> RecordPositions -> String -> Doc prelude jflex rp packageBase = vcat     [ "// This JLex file was machine-generated by the BNF converter"@@ -113,15 +110,16 @@         else ""     ]   where-    positionDeclarations =+    positionDeclarations       -- JFlex always defines yyline, yychar, yycolumn, even if unused.-      if jflex == JFlexCup then ""-        else if rp == RecordPositions then "int yycolumn = unknown - 1;"-          else vcat+      | jflex == JFlexCup     = ""+      | rp == RecordPositions = "int yycolumn = unknown - 1;"+      | otherwise             = vcat             -- subtract one so that one based numbering still ends up with unknown.             [ "int yyline = unknown - 1;"             , "int yycolumn = unknown - 1;"-            , "int yychar = unknown;" ]+            , "int yychar = unknown;"+            ]  --For now all categories are included. --Optimally only the ones that are used should be generated.@@ -185,10 +183,11 @@         else ". { throw new Error(\"Illegal Character <\"+yytext()+\">\"); }"     ]   where-    ifC cat s = if isUsedCat cf cat then s else ""+    ifC :: TokenCat -> Doc -> Doc+    ifC cat s = if isUsedCat cf (TokenCat cat) then s else ""     userDefTokens = vcat         [ "<YYINITIAL>" <> text (printRegJLex exp)-            <+> "{ return cf.newSymbol(\"\", sym." <> text (show name)+            <+> "{ return cf.newSymbol(\"\", sym." <> text name             <> ", left_loc(), right_loc(), yytext().intern()); }"         | (name, exp) <- tokenPragmas cf ]     strStates = vcat --These handle escaped characters in Strings.@@ -202,9 +201,11 @@           then "<STRING><<EOF>> { throw new Error(\"Unterminated string at EOF, beginning at \" + left.getLine() + \":\" + left.getColumn()); }"           else ""         , "<ESCAPED>n { pstring +=  \"\\n\"; yybegin(STRING); }"+        , "<ESCAPED>t  { pstring += \"\\t\"; yybegin(STRING); }"+        , "<ESCAPED>r  { pstring += \"\\r\"; yybegin(STRING); }"+        , "<ESCAPED>f  { pstring += \"\\f\"; yybegin(STRING); }"         , "<ESCAPED>\\\" { pstring += \"\\\"\"; yybegin(STRING); }"         , "<ESCAPED>\\\\ { pstring += \"\\\\\"; yybegin(STRING); }"-        , "<ESCAPED>t  { pstring += \"\\t\"; yybegin(STRING); }"         , "<ESCAPED>.  { pstring += yytext(); yybegin(STRING); }"         , "<ESCAPED>\\r\\n|\\r|\\n { throw new Error(\"Unterminated string on line \" + left.getLine() " <>           (if jflex == JFlexCup then "+ \" beginning at column \" + left.getColumn()" else "") <> "); }"@@ -223,6 +224,8 @@           else ""         , "<CHARESC>n { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), new Character('\\n')); }"         , "<CHARESC>t { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), new Character('\\t')); }"+        , "<CHARESC>r { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), new Character('\\r')); }"+        , "<CHARESC>f { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), new Character('\\f')); }"         , "<CHARESC>. { yybegin(CHAREND); return cf.newSymbol(\"\", sym._CHAR_, left, right_loc(), new Character(yytext().charAt(0))); }"         , "<CHARESC>\\r\\n|\\r|\\n { throw new Error(\"Unterminated character literal on line \" + left.getLine() " <>           (if jflex == JFlexCup then "+ \" beginning at column \" + left.getColumn()" else "") <> "); }"
src/BNFC/Backend/Java/CFtoJavaAbs15.hs view
@@ -283,10 +283,11 @@ -- | This makes up for the fact that there's no typedef in Java.  typename :: String -> [UserDef] -> String-typename t user | t == "Ident"            = "String"-                | t == "Char"             = "Character"-                | t `elem` map show user  = "String"-                | otherwise               = t+typename t user+  | t == "Ident"   = "String"+  | t == "Char"    = "Character"+  | t `elem` user  = "String"+  | otherwise      = t  -- | Print the Java type corresponding to a category. cat2JavaType :: [UserDef] -> Cat -> String
src/BNFC/Backend/Java/CFtoJavaPrinter15.hs view
@@ -190,11 +190,11 @@  prEntryPoints :: String -> CF -> String prEntryPoints packageAbsyn cf =-    msg ++ concatMap prEntryPoint (allCats cf) ++ msg2+    msg ++ concatMap prEntryPoint (allCatsNorm cf) ++ msg2  where   msg = "  //  print and show methods are defined for each category.\n"   msg2 = "  /***   You shouldn't need to change anything beyond this point.   ***/\n"-  prEntryPoint cat | normCat cat == cat = unlines+  prEntryPoint cat = unlines    [     "  public static String print(" ++ packageAbsyn ++ "." ++ cat' ++ " foo)",     "  {",@@ -214,7 +214,6 @@    ]    where     cat' = identCat cat-  prEntryPoint _ = ""  prData :: String ->  [UserDef] -> (Cat, [Rule]) -> String prData packageAbsyn user (cat, rules) = unlines k
src/BNFC/Backend/Java/CFtoVisitSkel15.hs view
@@ -126,9 +126,9 @@ -- p.a_.accept(new AVisitor<R,A>(), arg); -- >>> prCat [] (TokenCat "Integer", "integer_") -- //p.integer_;--- >>> prCat [Cat "A"] (TokenCat "A", "a_")+-- >>> prCat ["A"] (TokenCat "A", "a_") -- //p.a_;--- >>> prCat [Cat "A"] (TokenCat "A", "a_2")+-- >>> prCat ["A"] (TokenCat "A", "a_2") -- //p.a_2; -- >>> prCat [] (ListCat (Cat "A"), "lista_") -- for (A x: p.lista_)
src/BNFC/Backend/Java/RegToJLex.hs view
@@ -2,6 +2,7 @@  -- modified from pretty-printer generated by the BNF converter +import Data.Char (showLitChar) import AbsBNF import BNFC.Options (JavaLexerParser(..)) @@ -44,14 +45,14 @@ escapeChar _ '^' = "\\x5E" -- special case, since \^ is a control character escape escapeChar JFlexCup x | x `elem` jflexReserved = '\\' : [x] escapeChar _ x | x `elem` jlexReserved = '\\' : [x]-escapeChar _ x = [x]+escapeChar _ x = showLitChar x ""  -- Characters that must be escaped in JLex regular expressions jlexReserved :: [Char] jlexReserved = ['?','*','+','|','(',')','^','$','.','[',']','{','}','"','\\']  jflexReserved :: [Char]-jflexReserved = '~':'!':'/':jlexReserved+jflexReserved = '~':'!':'/':[]  -- plus the @jlexReserved@, but they are tested separately   prPrec :: Int -> Int -> [String] -> [String]
src/BNFC/Backend/Latex.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-     BNF Converter: Latex Generator     Copyright (C) 2004  Author:  Markus Forberg, Aarne Ranta@@ -19,7 +20,9 @@ module BNFC.Backend.Latex where  import Data.List+#if !(MIN_VERSION_base(4,8,0)) import Data.Monoid+#endif import System.FilePath ((<.>),replaceExtension) import Text.Printf @@ -41,20 +44,21 @@  -- | Create a makefile for the given tex file ----- >>> makefile "myFile.tex"--- all: myFile.pdf+-- >>> makefile "myFile.tex" "Makefile"+-- all : myFile.pdf -- <BLANKLINE>--- myFile.pdf: myFile.tex+-- myFile.pdf : myFile.tex -- 	pdflatex myFile.tex -- <BLANKLINE>--- clean:+-- clean : -- 	-rm myFile.pdf myFile.aux myFile.log -- <BLANKLINE>--- cleanall: clean+-- cleanall : clean -- 	-rm Makefile myFile.tex -- <BLANKLINE>-makefile :: String -> Doc-makefile texfile = vcat+--+makefile :: String -> String -> Doc+makefile texfile basename = vcat     [ Makefile.mkRule "all" [pdffile]         []     , Makefile.mkRule pdffile [texfile]@@ -62,7 +66,7 @@     , Makefile.mkRule "clean" []         [ unwords [ "-rm", pdffile, auxfile, logfile ]]     , Makefile.mkRule "cleanall" ["clean"]-        [ "-rm Makefile " ++ texfile ]+        [ unwords [ "-rm", basename, texfile ]]     ]   where pdffile = replaceExtension texfile "pdf"         auxfile = replaceExtension texfile "aux"@@ -119,32 +123,33 @@  prtLiterals :: String -> CF -> String prtLiterals _ cf =-  unlines $ map stringLit $-    filter (`notElem` [Cat "Ident"]) $-      literals cf+  unlines . concat . intersperse [""] . map stringLit . filter (/= catIdent) $ literals cf -stringLit :: Cat -> String-stringLit cat = unlines $ case cat of-  Cat "Char" -> ["Character literals \\nonterminal{Char}\\ have the form",-                 "\\terminal{'}$c$\\terminal{'}, where $c$ is any single character.",-                 ""-                ]-  Cat "String" -> ["String literals \\nonterminal{String}\\ have the form",-                 "\\terminal{\"}$x$\\terminal{\"}, where $x$ is any sequence of any characters",-                 "except \\terminal{\"}\\ unless preceded by \\verb6\\6.",-                 ""]-  Cat "Integer" -> ["Integer literals \\nonterminal{Int}\\ are nonempty sequences of digits.",-                 ""]-  Cat "Double" -> ["Double-precision float literals \\nonterminal{Double}\\ have the structure",-                   "indicated by the regular expression" +++-                      "$\\nonterminal{digit}+ \\mbox{{\\it `.'}} \\nonterminal{digit}+ (\\mbox{{\\it `e'}} \\mbox{{\\it `-'}}? \\nonterminal{digit}+)?$ i.e.\\",-                   "two sequences of digits separated by a decimal point, optionally",-                   "followed by an unsigned or negative exponent.",-                   ""]+stringLit :: TokenCat -> [String]+stringLit = \case+  "Char" ->+    [ "Character literals \\nonterminal{Char}\\ have the form"+    , "\\terminal{'}$c$\\terminal{'}, where $c$ is any single character."+    ]+  "String" ->+    [ "String literals \\nonterminal{String}\\ have the form"+    , "\\terminal{\"}$x$\\terminal{\"}, where $x$ is any sequence of any characters"+    , "except \\terminal{\"}\\ unless preceded by \\verb6\\6."+    ]+  "Integer" ->+    [ "Integer literals \\nonterminal{Int}\\ are nonempty sequences of digits."+    ]+  "Double" ->+    [ "Double-precision float literals \\nonterminal{Double}\\ have the structure"+    , "indicated by the regular expression" ++++      "$\\nonterminal{digit}+ \\mbox{{\\it `.'}} \\nonterminal{digit}+ (\\mbox{{\\it `e'}} \\mbox{{\\it `-'}}? \\nonterminal{digit}+)?$ i.e.\\"+    , "two sequences of digits separated by a decimal point, optionally"+    , "followed by an unsigned or negative exponent."+    ]   _ -> []  prtOwnToken (name,reg) = unlines-  [ show name +++ "literals are recognized by the regular expression",+  [ name +++ "literals are recognized by the regular expression",    "\\(" ++    latexRegExp reg ++    "\\)"@@ -204,9 +209,9 @@ prtBNF name cf = unlines   [ "\\section*{The syntactic structure of " ++ name ++ "}"   , ""-  , "Non-terminals are enclosed between $\\langle$ and $\\rangle$. "-  , "The symbols " ++ arrow ++ " (production), " ++ delimiter ++ " (union) "-  , "and " ++ empty ++ " (empty rule) belong to the BNF notation. "+  , "Non-terminals are enclosed between $\\langle$ and $\\rangle$."+  , "The symbols " ++ arrow ++ " (production), " ++ delimiter ++ " (union)"+  , "and " ++ empty ++ " (empty rule) belong to the BNF notation."   , "All other symbols are terminals.\\\\"   , prtRules (ruleGroups cf)   ]@@ -287,7 +292,8 @@  [ "%This Latex file is machine-generated by the BNF-converter"  , ""  , "\\documentclass[a4paper,11pt]{article}"- -- "\\usepackage{isolatin1}"+ , "\\usepackage[T1]{fontenc}"+ , "\\usepackage[utf8x]{inputenc}"  , "\\setlength{\\parindent}{0mm}"  , "\\setlength{\\parskip}{1mm}"  , ""
src/BNFC/Backend/OCaml.hs view
@@ -110,8 +110,8 @@                    sep = if null pref || null dir then "" else [pathSeparator]                  in pref ++ sep ++ dir -makefile :: SharedOptions -> Doc-makefile opts = vcat+makefile :: SharedOptions -> String -> Doc+makefile opts basename = vcat     [ mkVar "OCAMLC" "ocamlc"     , mkVar "OCAMLYACC" "ocamlyacc"     , mkVar "OCAMLLEX" "ocamllex"@@ -140,7 +140,7 @@                                  mkFile withLang "Abs" "*" opts,                                  mkFile withLang "Test" "" opts,                                  utilFile opts,-                                 "Makefile*" ]]+                                 basename ]]     ]   where dir = let d = codeDir opts in if null d then "" else d ++ [pathSeparator] 
src/BNFC/Backend/OCaml/CFtoOCamlAbs.hs view
@@ -62,11 +62,11 @@ mkTupleType :: [Cat] -> Doc mkTupleType = hsep . intersperse (char '*') . map (text . fixType) -prSpecialData :: CF -> Cat -> String-prSpecialData cf cat = fixType cat +++ "=" +++ show cat +++ "of" +++ contentSpec cf cat+prSpecialData :: CF -> TokenCat -> String+prSpecialData cf cat = fixType (TokenCat cat) +++ "=" +++ cat +++ "of" +++ contentSpec cf cat  --  unwords ["newtype",cat,"=",cat,contentSpec cf cat,"deriving (Eq,Ord,Show)"] -contentSpec :: CF -> Cat -> String+contentSpec :: CF -> TokenCat -> String contentSpec cf cat = -- if isPositionCat cf cat then "((Int,Int),String)" else "String"     if isPositionCat cf cat then "((int * int) * string)" else "string"
src/BNFC/Backend/OCaml/CFtoOCamlLex.hs view
@@ -32,10 +32,11 @@ import Text.PrettyPrint hiding (render) import qualified Text.PrettyPrint as PP -import BNFC.CF import AbsBNF+import BNFC.CF import BNFC.Backend.OCaml.CFtoOCamlYacc (terminal)-import BNFC.Utils ((+++), cstring, cchar)+import BNFC.Backend.OCaml.OCamlUtil (mkEsc)+import BNFC.Utils (cstring, cchar, unless)  cf2ocamllex :: String -> String -> CF -> String cf2ocamllex _ parserMod cf =@@ -59,6 +60,8 @@   "      '\\\\'::c::cs when List.mem c ['\\\"'; '\\\\'; '\\\''] -> c :: unesc cs",   "    | '\\\\'::'n'::cs  -> '\\n' :: unesc cs",   "    | '\\\\'::'t'::cs  -> '\\t' :: unesc cs",+  "    | '\\\\'::'r'::cs  -> '\\r' :: unesc cs",+  -- "    | '\\\\'::'f'::cs  -> '\\f' :: unesc cs",  -- \f not supported by ocaml   "    | '\\\"'::[]    -> []",   "    | c::cs      -> c :: unesc cs",   "    | _         -> []",@@ -84,36 +87,35 @@  -- | set up hashtables for reserved symbols and words hashtables :: CF -> String-hashtables cf = ht "symbol_table" (cfgSymbols cf )  ++ "\n" ++-                ht "resword_table" (reservedWords cf)-    where ht _ syms | null syms = ""-          ht table syms = unlines [-                "let" +++ table +++ "= Hashtbl.create " ++ show (length syms),-                "let _ = List.iter (fun (kwd, tok) -> Hashtbl.add" +++ table-                         +++ "kwd tok)",-                "                  [" ++ concat (intersperse ";" keyvals) ++ "]"-            ]-            where keyvals = map (\(x,y) -> "(" ++ x ++ ", " ++ y ++ ")")-                          (zip (map show syms) (map (terminal cf) syms))-+hashtables cf = unlines . concat $+  [ ht "symbol_table"  $ cfgSymbols cf+  , ht "resword_table" $ reservedWords cf+  ]+  where+  ht table syms = unless (null syms) $+    [ unwords [ "let", table, "= Hashtbl.create", show (length syms)                  ]+    , unwords [ "let _ = List.iter (fun (kwd, tok) -> Hashtbl.add", table, "kwd tok)" ]+    , concat  [ "                  [", concat (intersperse ";" keyvals), "]"          ]+    ]+    where+    keyvals = map (\ s -> concat [ "(", mkEsc s, ", ", terminal cf s, ")" ]) syms   definitions :: CF -> [String]-definitions cf = concat [-        cMacros,-        rMacros cf,-        uMacros cf-    ]-+definitions cf = concat $+  [ cMacros+  , rMacros cf+  , uMacros cf+  ]  cMacros :: [String] cMacros = [   "let l = ['a'-'z' 'A'-'Z' '\\192' - '\\255'] # ['\\215' '\\247']    (*  isolatin1 letter FIXME *)",   "let c = ['A'-'Z' '\\192'-'\\221'] # ['\\215']    (*  capital isolatin1 letter FIXME *)",   "let s = ['a'-'z' '\\222'-'\\255'] # ['\\247']    (*  small isolatin1 letter FIXME *)",-  "let d = ['0'-'9']                (*  digit *)",-  "let i = l | d | ['_' '\\'']          (*  identifier character *)",-  "let u = ['\\000'-'\\255']           (* universal: any character *)"+  "let d = ['0'-'9']                             (*  digit *)",+  "let i = l | d | ['_' '\\'']                    (*  identifier character *)",+  "let u = _                                     (* universal: any character *)"   ]  rMacros :: CF -> [String]@@ -124,9 +126,6 @@    "let rsyms =    (* reserved words consisting of special symbols *)",    "            " ++ unwords (intersperse "|" (map mkEsc symbs))    ])- where-  mkEsc s = "\"" ++ concat (map f s) ++ "\""-  f x = if x `elem` ['"','\\'] then  "\\" ++ [x] else [x]  -- user macros, derived from the user-defined tokens uMacros :: CF -> [String]@@ -135,8 +134,7 @@ -- returns the tuple of (reg_name, reg_representation, token_name) userTokens :: CF -> [(String, String, String)] userTokens cf =-  let regName = map toLower . show in-  [(regName name, printRegOCaml reg, show name) | (name, reg) <- tokenPragmas cf]+  [ (map toLower name, printRegOCaml reg, name) | (name, reg) <- tokenPragmas cf ]   @@ -212,10 +210,10 @@     , ( "d+ '.' d+ ('e' ('-')? d+)?"       , "let f = lexeme lexbuf in TOK_Double (float_of_string f)" )     -- strings-    , ( "'\\\"' ((u # ['\\\"' '\\\\' '\\n']) | ('\\\\' ('\\\"' | '\\\\' | '\\\'' | 'n' | 't')))* '\\\"'"+    , ( "'\\\"' ((u # ['\\\"' '\\\\' '\\n']) | ('\\\\' ('\\\"' | '\\\\' | '\\\'' | 'n' | 't' | 'r')))* '\\\"'"       , "let s = lexeme lexbuf in TOK_String (unescapeInitTail s)" )     -- chars-    , ( "'\\'' ((u # ['\\\'' '\\\\']) | ('\\\\' ('\\\\' | '\\\'' | 'n' | 't'))) '\\\''"+    , ( "'\\'' ((u # ['\\\'' '\\\\']) | ('\\\\' ('\\\\' | '\\\'' | 'n' | 't' | 'r'))) '\\\''"       , "let s = lexeme lexbuf in TOK_Char s.[1]")     -- spaces     , ( "[' ' '\\t']", "token lexbuf")
src/BNFC/Backend/OCaml/CFtoOCamlPrinter.hs view
@@ -21,7 +21,7 @@  -- based on BNFC Haskell backend -module BNFC.Backend.OCaml.CFtoOCamlPrinter (cf2Printer) where+module BNFC.Backend.OCaml.CFtoOCamlPrinter (cf2Printer, prtFun) where  import Prelude' @@ -111,33 +111,34 @@  charRule cf = unlines [     "let rec prtChar (_:int) (c:char) : doc = render (\"'\" ^ Char.escaped c ^ \"'\")",-    ifList cf catChar,+    ifList cf (TokenCat catChar),     ""     ]  integerRule cf = unlines [     "let rec prtInt (_:int) (i:int) : doc = render (string_of_int i)",-    ifList cf catInteger,+    ifList cf (TokenCat catInteger),     ""     ]  doubleRule cf = unlines [     "let rec prtFloat (_:int) (f:float) : doc = render (sprintf \"%f\" f)",-    ifList cf catDouble,+    ifList cf (TokenCat catDouble),     ""     ]  stringRule cf = unlines [     "let rec prtString (_:int) (s:string) : doc = render (\"\\\"\" ^ String.escaped s ^ \"\\\"\")",-    ifList cf catString,+    ifList cf (TokenCat catString),     ""     ]  identRule cf = ownPrintRule cf catIdent +ownPrintRule :: CF -> TokenCat -> String ownPrintRule cf own = unlines $ [-  "let rec" +++ prtFun own +++ "_ (" ++ show own ++ posn ++ ") : doc = render i",-  ifList cf own+  "let rec" +++ prtFun (TokenCat own) +++ "_ (" ++ own ++ posn ++ ") : doc = render i",+  ifList cf (TokenCat own)   ]  where    posn = if isPositionCat cf own then " (_,i)" else " i"@@ -227,7 +228,7 @@  where   mk args (Left InternalCat : items)      = mk args items   mk (arg:args) (Left c : items)  = (prt c +++ arg)        : mk args items-  mk args       (Right s : items) = ("render " ++ show s) : mk args items+  mk args       (Right s : items) = ("render " ++ mkEsc s) : mk args items   mk _ _ = []   prt c = prtFun c +++ show (precCat c) 
src/BNFC/Backend/OCaml/CFtoOCamlShow.hs view
@@ -21,7 +21,7 @@ -- on camlp4. Here we generate our own "show module".  -module BNFC.Backend.OCaml.CFtoOCamlShow (cf2show) where+module BNFC.Backend.OCaml.CFtoOCamlShow (cf2show, showsFunQual) where  import Data.Char(toLower) import Data.List (intersperse)@@ -86,12 +86,12 @@ doubleRule _ = "let showFloat (f:float) : showable = s2s (string_of_float f)"  -identRule cf = ownPrintRule cf (Cat "Ident")+identRule cf = ownPrintRule cf catIdent -ownPrintRule cf own = unlines $ [-  "let rec" +++ showsFun own +++ "(" ++ show own ++ posn ++ ") : showable = s2s \""-  ++ show own ++ " \" >> showString i"-  ]+ownPrintRule :: CF -> TokenCat -> String+ownPrintRule cf own =+  "let rec" +++ showsFun (TokenCat own) +++ "(" ++ own ++ posn ++ ") : showable = s2s \""+  ++ own ++ " \" >> showString i"  where    posn = if isPositionCat cf own then " (_,i)" else " i" @@ -119,9 +119,8 @@         | otherwise              = s    ruleOf s = fromJust $ lookupRule s (cfgRules cf) ---- case_fun :: Cat -> [(Constructor,Rule)] -> String+-- case_fun :: Cat -> [(Constructor,Rule)] -> String case_fun cat xs = unlines [---  "instance Print" +++ cat +++ "where",   showsFun cat +++ "(e:" ++ fixType cat ++ ") : showable = match e with",   unlines $ insertBar $ map (\ ((c,xx),r) ->     "   " ++ c +++ mkTuple xx +++ "->" +++@@ -143,6 +142,10 @@   mk _ _ = []  showsFun :: Cat -> String-showsFun c = case c of-    ListCat t -> "showList" +++ showsFun t-    _ -> "show" ++ (fixTypeUpper $ normCat c)+showsFun = showsFunQual id++showsFunQual :: (String -> String) -> Cat -> String+showsFunQual qual = loop where+  loop = \case+    ListCat c -> qual "showList" +++ loop c+    c         -> qual "show" ++ (fixTypeUpper $ normCat c)
src/BNFC/Backend/OCaml/CFtoOCamlTest.hs view
@@ -27,6 +27,9 @@  import BNFC.CF import BNFC.Backend.OCaml.OCamlUtil+import BNFC.Backend.OCaml.CFtoOCamlYacc    (epName)+import BNFC.Backend.OCaml.CFtoOCamlPrinter (prtFun)+import BNFC.Backend.OCaml.CFtoOCamlShow    (showsFunQual)  -- | OCaml comment -- >>> comment "I'm a comment"@@ -43,15 +46,17 @@ ocamlTestfile :: String -> String -> String -> String -> String -> CF -> Doc ocamlTestfile absM lexM parM printM showM cf =     let-        lexerName = text lexM <> ".token"-        parserName = text parM <> ".p" <> topTypeC-        printerName =-            text printM <> ".printTree " <> text printM <> ".prt" <> topTypeC-        showFun =-            parens ("fun x ->" <+> text showM <> ".show"-                    <+> parens (text showM <> ".show" <> topTypeC <+> "x"))-        topTypeC = text $ fixTypeUpper (firstEntry cf)-        topType = text absM <> "." <> text (fixType (firstEntry cf))+        cat         = firstEntry cf+        qualify q x = concat [ q, ".", x ]+        lexerName   = text $ qualify lexM "token"+        parserName  = text $ qualify parM $ epName cat+        printerName = hsep $ map (text . qualify printM) [ "printTree", prtFun cat ]+        showFun     = parens . hsep $+          [ "fun x ->"+          , text $ qualify showM "show"+          , parens $ text (showsFunQual (qualify showM) cat) <+> "x"+          ]+        topType     = text absM <> "." <> text (fixType $ normCat cat)     in vcat         [ comment "automatically generated by the BNF Converter"         , ""
src/BNFC/Backend/OCaml/CFtoOCamlYacc.hs view
@@ -22,7 +22,7 @@  module BNFC.Backend.OCaml.CFtoOCamlYacc        (-       cf2ocamlyacc, terminal+       cf2ocamlyacc, terminal, epName        )         where @@ -108,16 +108,16 @@           spaceToUnderscore x = x  specialTokens :: CF -> String-specialTokens cf = unlines ("%token TOK_EOF" : map aux (nub $ ["Ident","String","Integer","Double","Char"] ++ map show (literals cf)))-    where aux cat = "%token" +++ (case cat of-            "Ident"   -> "<string>"-            "String"  -> "<string>"-            "Integer" -> "<int>"-            "Double"  -> "<float>"-            "Char"    -> "<char>"-            _         -> "<string>"      )-           +++ "TOK_" ++ cat-+specialTokens cf = unlines . ("%token TOK_EOF" :) $+  map (\ n -> "%token" +++ aux n +++ "TOK_" ++ n) $ nub $ specialCatsP ++ literals cf+  where+  aux = \case+    "Ident"   -> "<string>"+    "String"  -> "<string>"+    "Integer" -> "<int>"+    "Double"  -> "<float>"+    "Char"    -> "<char>"+    _         -> "<string>"  entryPoints :: String -> CF -> String entryPoints absName cf = unlines $@@ -125,9 +125,9 @@         concat (intersperse " " (map epName eps)))     :     (map typing eps)-    where eps = (nub $ map normCat (allEntryPoints cf))+    where eps = allEntryPoints cf           typing :: Cat -> String-          typing c = "%type" +++ "<" ++ qualify c ++ ">" +++ epName c+          typing c = "%type" +++ "<" ++ qualify (normCat c) ++ ">" +++ epName c           qualify c = if c `elem` [ TokenCat "Integer", TokenCat "Double", TokenCat "Char",                                     TokenCat "String", ListCat (TokenCat "Integer"),                                     ListCat (TokenCat "Double"),@@ -143,7 +143,7 @@                     c:cs -> toUpper c : cs  entryPointRules :: CF -> String-entryPointRules cf = unlines $ map mkRule (nub $ map normCat (allEntryPoints cf))+entryPointRules cf = unlines $ map mkRule $ allEntryPoints cf     where         mkRule :: Cat -> String         mkRule s = unlines [@@ -216,22 +216,14 @@    revs = cfgReversibleCats cf  --- specialRules :: CF -> String-specialRules cf = unlines $-                  map aux (literals cf)- where-   aux cat =-     case cat of-         TokenCat "Ident"   -> "ident : TOK_Ident  { Ident $1 };"-         TokenCat "String"  -> "string : TOK_String { $1 };"-         TokenCat "Integer" -> "int :  TOK_Integer  { $1 };"-         TokenCat "Double"  -> "float : TOK_Double  { $1 };"-         TokenCat "Char"    -> "char : TOK_Char { $1 };"-         own       -> (fixType own) ++ " : TOK_" ++ show own ++-                      " { " ++ show own ++ " ("++ posn ++ "$1)};"-                -- PCC: take "own" as type name? (manual says newtype)-      where -- ignore position categories for now-         posn = "" -- if isPositionCat cf cat then "mkPosToken " else ""+specialRules cf = unlines $ (`map` literals cf) $ \case+  "Ident"   -> "ident : TOK_Ident  { Ident $1 };"+  "String"  -> "string : TOK_String { $1 };"+  "Integer" -> "int :  TOK_Integer  { $1 };"+  "Double"  -> "float : TOK_Double  { $1 };"+  "Char"    -> "char : TOK_Char { $1 };"+  own       -> concat $+    [ fixType (TokenCat own), " : TOK_", own, " { ", own, " (",  posn, "$1)};" ]+    where -- ignore position categories for now+    posn = "" -- if isPositionCat cf own then "mkPosToken " else ""
src/BNFC/Backend/OCaml/OCamlUtil.hs view
@@ -67,3 +67,9 @@      []   -> []      [d]  -> ["let rec" +++ d]      d:ds -> ("let rec" +++ d) : map ("and" +++) ds++-- | Escape @"@ and @\@.  TODO: escape unprintable characters!?+mkEsc :: String -> String+mkEsc s = "\"" ++ concatMap f s ++ "\""+  where+  f x = if x `elem` ['"','\\'] then "\\" ++ [x] else [x]
src/BNFC/Backend/Txt2Tag.hs view
@@ -44,18 +44,18 @@                ]  prtTerminals :: String -> CF -> String-prtTerminals name cf = unlines [-                               "==The lexical structure of " ++ name ++ "==",-                               identSection cf,-                               "===Literals===",-                               prtLiterals name cf,-                               unlines (map prtOwnToken (tokenPragmas cf)),-                               "===Reserved words and symbols===",-                               prtReserved name cf,-                               prtSymb name cf,-                               "===Comments===",-                               prtComments $ comments cf-                               ]+prtTerminals name cf = unlines $+  [ "==The lexical structure of " ++ name ++ "=="+  , identSection cf+  , "===Literals==="+  , prtLiterals cf+  , unlines (map prtOwnToken (tokenPragmas cf))+  , "===Reserved words and symbols==="+  , prtReserved name cf+  , prtSymb name cf+  , "===Comments==="+  , prtComments $ comments cf+  ]  identSection cf = if not (hasIdent cf) then [] else                     unlines [@@ -71,14 +71,13 @@    "reserved words excluded."   ] -prtLiterals :: String -> CF -> String-prtLiterals _ cf =+prtLiterals :: CF -> String+prtLiterals cf =   unlines $ map stringLit $-    filter (`notElem` [Cat "Ident"]) $-      literals cf+    filter (/= catIdent) $ literals cf -stringLit :: Cat -> String-stringLit cat = unlines $ case show cat of+stringLit :: TokenCat -> String+stringLit = unlines . \case   "Char" -> ["Character literals //Char// have the form",              "``'``//c//``'``, where //c// is any single character.",              ""@@ -98,7 +97,7 @@   _ -> []  prtOwnToken (name,reg) = unlines-  [show name +++ "literals are recognized by the regular expression",+  [name +++ "literals are recognized by the regular expression",    "```" ++    latexRegExp reg ++    "```"
src/BNFC/Backend/XML.hs view
@@ -193,11 +193,12 @@   "  prt i x = elemTokS i" +++ "\"" ++ t ++ "\"" +++ "x"   ] -identRule cf = ownPrintRule cf (Cat "Ident")+identRule cf = ownPrintRule cf catIdent -ownPrintRule cf cat = unlines [-  "instance XPrint " ++ show cat ++ " where",-  "  prt i (" ++ show cat ++ posn ++ ") = elemTok i" +++ "\"" ++ show cat ++ "\"" +++ "x"+ownPrintRule :: CF -> TokenCat -> String+ownPrintRule cf cat = unlines $+  [ "instance XPrint " ++ cat ++ " where"+  , "  prt i (" ++ cat ++ posn ++ ") = elemTok i" +++ "\"" ++ cat ++ "\"" +++ "x"   ]  where    posn = if isPositionCat cf cat then " (_,x)" else " x"@@ -226,7 +227,7 @@                           "newtype","of","then","type","where","as","qualified","hiding"]    ruleOf s = fromJust $ lookupRule s (cfgRules cf) ---- case_fun :: Cat -> [(Constructor,Rule)] -> String+-- case_fun :: Cat -> [(Constructor,Rule)] -> String case_fun cat xs = unlines [   "instance XPrint" +++ show cat +++ "where",   "  prt i" +++ "e = case e of",
src/BNFC/CF.hs view
@@ -1,4 +1,8 @@-{-# LANGUAGE PatternGuards, DeriveFunctor #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE RecordWildCards #-}+ {-     BNF Converter: Abstract syntax     Copyright (C) 2004  Author:  Markus Forsberg, Michael Pellauer, Aarne Ranta@@ -28,7 +32,8 @@             Literal,             Symbol,             KeyWord,-            Cat(..), strToCat,+            Cat(..), strToCat, catToStr,+            TokenCat,             catString, catInteger, catDouble, catChar, catIdent,             NonTerminal,             Fun,@@ -41,6 +46,7 @@             -- Literal categories, constants,             firstCat,       -- the first value category in the grammar.             firstEntry,     -- the first entry or the first value category+            baseTokenCatNames,  -- "Char", "Double", "Integer", "String"             specialCats,    -- ident             specialCatsP,   -- all literals             specialData,    -- special data@@ -61,9 +67,8 @@             rulesForNormalizedCat,    -- rules for a given category             ruleGroups,     -- Categories are grouped with their rules.             ruleGroupsInternals, --As above, but includes internal cats.-            notUniqueNames, -- list of not unique names (replaces the following 2)---          notUniqueFuns,   -- Returns a list of function labels that are not unique.---            badInheritence, -- Returns a list of all function labels that can cause problems in languages with inheritence.+            allNames,        -- Checking for non-unique names, like @Name. Name ::= Ident;@.+            filterNonUnique,             isList,         -- Checks if a category is a list category.             isTokenCat,             sameCat,@@ -216,12 +221,12 @@               deriving (Show)  -- | User-defined regular expression tokens-tokenPragmas :: CFG f -> [(Cat,Reg)]-tokenPragmas cf = [ (TokenCat name, e) | TokenReg name _ e <- cfgPragmas cf ]+tokenPragmas :: CFG f -> [(TokenCat,Reg)]+tokenPragmas cf = [ (name, e) | TokenReg name _ e <- cfgPragmas cf ]  -- | The names of all user-defined tokens. tokenNames :: CFG f -> [String]-tokenNames cf = map (show . fst) (tokenPragmas cf)+tokenNames cf = map fst (tokenPragmas cf)  layoutPragmas :: CF -> (Bool,[String],[String]) layoutPragmas cf = let ps = cfgPragmas cf in (@@ -234,7 +239,7 @@ hasLayout cf = case layoutPragmas cf of   (t,ws,_) -> t || not (null ws)   -- (True,[],_) means: top-level layout only --- | Literal: Char, String, Ident, Integer, Double+-- | Literal: builtin-token types Char, String, Ident, Integer, Double. type Literal = String type Symbol  = String type KeyWord = String@@ -243,26 +248,30 @@ -- Categories ------------------------------------------------------------------------------ --- | Categories are the Non-terminals of the grammar.+-- | Categories are the non-terminals of the grammar. data Cat   = InternalCat       -- ^ Internal category, inserted in 1st-                      -- position in "internal" rules,-                      -- essentially ensuring that they are never parsed.-  | Cat String-  | TokenCat String   -- ^ Token types (like @Ident@).-  | ListCat Cat-  | CoercCat String Integer+                      --   position in "internal" rules,+                      --   essentially ensuring that they are never parsed.+  | Cat String               -- ^ Ordinary non-terminal.+  | TokenCat TokenCat        -- ^ Token types (like @Ident@, @Integer@, ..., user-defined).+  | ListCat Cat              -- ^ List non-terminals, e.g., @[Ident]@, @[Exp]@, @[Exp1]@.+  | CoercCat String Integer  -- ^ E.g. @Exp1@, @Exp2.   deriving (Eq, Ord) +type TokenCat = String+ -- An alias for Cat used in many backends: type NonTerminal = Cat  -- | Render category symbols as strings-catToStr InternalCat = "#"-catToStr (Cat s) = s-catToStr (TokenCat s) = s-catToStr (ListCat c) = "[" ++ show c ++ "]"-catToStr (CoercCat s i) = s ++ show i+catToStr :: Cat -> String+catToStr = \case+  InternalCat  -> "#"+  Cat s        -> s+  TokenCat s   -> s+  ListCat c    -> "[" ++ catToStr c ++ "]"+  CoercCat s i -> s ++ show i  instance Show Cat where   show = catToStr@@ -286,16 +295,20 @@         cat2cat (AbsBNF.ListCat c) = ListCat (cat2cat c)  -- Build-in categories contants-catString, catInteger, catDouble, catChar, catIdent :: Cat-catString  = TokenCat "String"-catInteger = TokenCat "Integer"-catDouble  = TokenCat "Double"-catChar    = TokenCat "Char"-catIdent   = TokenCat "Ident"+catString, catInteger, catDouble, catChar, catIdent :: TokenCat+catString  = "String"+catInteger = "Integer"+catDouble  = "Double"+catChar    = "Char"+catIdent   = "Ident" +-- | Token categories corresponding to base types.+baseTokenCatNames :: [TokenCat]+baseTokenCatNames = [ catChar, catDouble, catInteger, catString ]+ -- the parser needs these-specialCatsP :: [String]-specialCatsP = words "Ident Integer String Char Double"+specialCatsP :: [TokenCat]+specialCatsP = catIdent : baseTokenCatNames  -- | Does the category correspond to a data type? isDataCat :: Cat -> Bool@@ -388,8 +401,6 @@  ------------------------------------------------------------------------------ -type Name = String- -- | Abstract syntax tree. newtype Tree = Tree (Fun,[Tree]) @@ -407,12 +418,19 @@  -- aggressively ban nonunique names (AR 31/5/2012) -notUniqueNames :: [Name] -> CF -> [Fun]-notUniqueNames reserved cf = [head xs | xs <- xss, length xs > 1] where-  xss = group (sort names)-  names = reserved ++ allCatsIdNorm cf ++ allFuns cf-  allFuns g = [ f | f <- map funRule (cfgRules g), not (isNilCons f || isCoercion f)]+-- | Categories and constructors.+allNames :: CF -> [Fun]+allNames cf = allCatsIdNorm cf +++  [ f | f <- map funRule $ cfgRules cf+      , not $ isNilCons f+      , not $ isCoercion f+  ] +-- | Get all elements with more than one occurrence.+filterNonUnique :: (Ord a) => [a] -> [a]+filterNonUnique xs = [ x | (x:_:_) <- group $ sort xs ]++ -- | Extract the comment pragmas. commentPragmas :: [Pragma] -> [Pragma] commentPragmas = filter isComment@@ -445,11 +463,11 @@  -- | Gets all normalized identified Categories allCatsIdNorm :: CF -> [String]-allCatsIdNorm = nub . map (identCat . normCat) . allCats+allCatsIdNorm = nub . map (identCat . normCat . valCat) . cfgRules  -- | Get all normalized Cat allCatsNorm :: CF -> [Cat]-allCatsNorm = nub . map normCat . allCats+allCatsNorm = nub . map (normCat . valCat) . cfgRules  -- | Is the category is used on an rhs? isUsedCat :: CFG f -> Cat -> Bool@@ -464,11 +482,8 @@ ruleGroupsInternals cf = [(c, rulesForCat' cf c) | c <- allCats cf]  -- | Get all literals of a grammar. (e.g. String, Double)-literals :: CFG f -> [Cat]-literals cf = [TokenCat l | l <- lits] ++ owns- where-   lits = cfgLiterals cf-   owns = map fst (tokenPragmas cf)+literals :: CFG f -> [TokenCat]+literals cf = cfgLiterals cf ++ map fst (tokenPragmas cf)  -- | Get the keywords of a grammar. reservedWords :: CFG f -> [String]@@ -490,15 +505,15 @@  -- | Whether the grammar uses the predefined Ident type. hasIdent :: CFG f -> Bool-hasIdent cf = isUsedCat cf catIdent+hasIdent cf = isUsedCat cf $ TokenCat catIdent   -- these need new datatypes  -- | Categories corresponding to tokens. These end up in the -- AST. (unlike tokens returned by 'cfTokens')-specialCats :: CF -> [Cat]-specialCats cf = (if hasIdent cf then (TokenCat "Ident":) else id) (map fst (tokenPragmas cf))+specialCats :: CF -> [TokenCat]+specialCats cf = (if hasIdent cf then (catIdent:) else id) (map fst (tokenPragmas cf))  -- to print parse trees prTree :: Tree -> String@@ -518,7 +533,7 @@ -- All categories are normalized, so a rule like: --     EAdd . Exp2 ::= Exp2 "+" Exp3 ; -- Will give the following signature: EAdd : Exp -> Exp -> Exp-getAbstractSyntax :: CF -> [(Cat, [(Fun, [Cat])])]+getAbstractSyntax :: CF -> [Data] getAbstractSyntax cf = [ ( c, nub (constructors c) ) | c <- allCatsNorm cf ]   where     constructors cat = do@@ -542,18 +557,18 @@                               let f = funRule r,                               not (isDefinedRule f),                               not (isCoercion f), sameCat cat (valCat r)]))-      | cat <- filter predicate (allCats cf)]+      | cat <- nub $ map normCat $ filter predicate $ allCats cf ]  where-  mkData (Rule f _ its) = (f,[normCat c | Left c <- its, c /= InternalCat])+  mkData (Rule f _ its) = (f, [normCat c | Left c <- its, c /= InternalCat])  cf2data :: CF -> [Data]-cf2data = cf2data' isDataCat+cf2data = cf2data' $ isDataCat . normCat  cf2dataLists :: CF -> [Data]-cf2dataLists = cf2data' isDataOrListCat+cf2dataLists = cf2data' $ isDataOrListCat . normCat  specialData :: CF -> [Data]-specialData cf = [(c,[(show c,[TokenCat "String"])]) | c <- specialCats cf] where+specialData cf = [(TokenCat name, [(name, [TokenCat catString])]) | name <- specialCats cf]  -- to deal with coercions @@ -638,8 +653,8 @@   -- | Does the category have a position stored in AST?-isPositionCat :: CFG f -> Cat -> Bool-isPositionCat cf cat =  or [b | TokenReg name b _ <- cfgPragmas cf, TokenCat name == cat]+isPositionCat :: CFG f -> TokenCat -> Bool+isPositionCat cf cat = or [ b | TokenReg name b _ <- cfgPragmas cf, name == cat]  -- | Grammar with permutation profile à la GF. AR 22/9/2004 type CFP   = CFG FunP
src/BNFC/GetCF.hs view
@@ -20,28 +20,37 @@  module BNFC.GetCF where +import Control.Arrow (left)+import Control.Monad.State (State, evalState, get, modify)++import Data.Char+import Data.Either  (partitionEithers)+import Data.Functor ((<$>))+import Data.List    (nub, partition)+import Data.Maybe   (mapMaybe)++import qualified Data.Foldable as Fold++import System.Exit (exitFailure)+import System.IO   (hPutStrLn, stderr)++-- Local imports:+ import qualified AbsBNF as Abs import ParBNF+import ErrM+ import BNFC.CF import BNFC.Options import BNFC.TypeChecker import BNFC.Utils -import Control.Arrow (left)-import Control.Monad.State-import Data.Char-import Data.Either (partitionEithers)-import Data.List(nub,partition)-import Data.Maybe (mapMaybe)-import ErrM-import System.Exit (exitFailure)-import System.IO (hPutStrLn, stderr)  -- $setup -- >>> import PrintBNF  parseCF :: SharedOptions -> Target -> String -> IO CF-parseCF opts t s = liftM cfp2cf (parseCFP opts t s)+parseCF opts t s = cfp2cf <$> parseCFP opts t s  parseCFP :: SharedOptions -> Target -> String -> IO CFP parseCFP opts target content = do@@ -51,36 +60,55 @@                     >>= markTokenCategories   let cf = cfp2cf cfp   runErr $ checkDefinitions cf-  let msgs3 = checkTokens cf -  let reserved = [lang opts | target == TargetJava ]+  -- Some backends do not allow the grammar name to coincide with+  -- one of the category or constructor names.+  let names    = allNames cf+  () <- when (target == TargetJava && lang opts `elem` names) $+      die $ unwords $+        [ "ERROR of backend", show target ++ ":"+        , "the language name"+        , lang opts+        , "conflicts with a name defined in the grammar."+        ] -  -- Warn of fail if the grammar use non unique names-  case filter (not . isDefinedRule) $ notUniqueNames reserved cf of+  -- Warn of fail if the grammar uses non unique names+  case filter (not . isDefinedRule) $ filterNonUnique names of     [] -> return ()-    ns| target `notElem` [TargetHaskell,TargetHaskellGadt,TargetOCaml]-      -> fail $ "ERROR: names not unique: " ++ unwords ns-      | otherwise-      -> do putStrLn $ "Warning: names not unique: " ++ unwords ns-            putStrLn "This can be an error in other back ends."+    ns | target `notElem` [TargetHaskell,TargetHaskellGadt,TargetOCaml]+       -> die $ unlines $+            [ "ERROR: names not unique: " ++ unwords ns+            , "This is an error in the backend " ++ show target+            ]+       | otherwise+       -> putStrLn $ unlines $+            [ "Warning: names not unique: " ++ unwords ns+            , "This can be an error in other back ends."+            ] -  -- Print msgs3-  putStrLn $ unlines msgs3+  -- Print warnings if user defined nullable tokens.+  Fold.mapM_ putStrLn $ checkTokens cf    -- Print the number of rules-  putStrLn $ show (length (cfgRules cf)) +++ "rules accepted\n"+  let nRules = length (cfgRules cf)+  -- Note: the match against () is necessary for type class instance resolution.+  () <- when (nRules == 0) $ die $ "ERROR: the grammar contains no rules."+  putStrLn $ show nRules +++ "rules accepted\n"    -- Print a warning if comment delimiter are bigger than 2 characters   let c3s = [(b,e) | (b,e) <- fst (comments cf), length b > 2 || length e > 2]-  unless (null c3s) $do+  unless (null c3s) $ do       putStrLn "Warning: comment delimiters longer than 2 characters ignored in Haskell:"       mapM_ putStrLn [b +++ "-" +++ e | (b,e) <- c3s]   return cfp    where     runErr (Ok a) = return a-    runErr (Bad msg) = hPutStrLn stderr msg >> exitFailure+    runErr (Bad msg) = die msg +die :: String -> IO a+die msg = hPutStrLn stderr msg >> exitFailure+ {-     case filter (not . isDefinedRule) $ notUniqueFuns cf of      [] -> case (badInheritence cf) of@@ -117,7 +145,8 @@                   (symbols,keywords) = partition notIdent reservedWords                   notIdent s         = null s || not (isAlpha (head s)) || any (not . isIdentRest) s                   isIdentRest c      = isAlphaNum c || c == '_' || c == '\''-                  reservedWords      = nub [t | r <- rules, Right t <- rhsRule r]+                  reservedWords      = nub [t | r <- rules, isParsable r, Right t <- rhsRule r]+                     -- Issue #204: exclude keywords from internal rules               in CFG pragma literals symbols keywords [] rules     case mapMaybe (checkRule (cfp2cf cf0)) (cfgRules cf0) of       [] -> return ()@@ -343,16 +372,18 @@  -------------------------------------------------------------------------------- ---checkTokens :: CFG f -> [String]-checkTokens cf =-    if null ns-    then []-    else ["Warning : ", -- change to error in a future version-          "  The following tokens accept the empty string: ",-          "    "++unwords ns,-          "  This is error-prone and will not be supported in the future."]+-- | Check if any of the user-defined terminal categories is nullable.+checkTokens :: CFG f -> Maybe String+checkTokens cf+  | null ns   = Nothing+  | otherwise = Just $ unlines+      [ "Warning : "  -- TODO: change to error in a future version+      , "  The following tokens accept the empty string: "+      , "    " ++ unwords ns+      , "  This is error-prone and will not be supported in the future."+      ]   where-    ns = map (show.fst) . filter (nullable.snd) $ tokenPragmas cf+    ns = map (show . fst) . filter (nullable . snd) $ tokenPragmas cf  -- | Check if a regular expression is nullable (accepts the empty string) nullable :: Abs.Reg -> Bool@@ -464,7 +495,7 @@     expand other = return [other]     mkRule :: Abs.Ident -> Abs.RHS -> State [(String, Int)] Abs.Def     mkRule ident (Abs.RHS rhs) = do-      fun <- liftM (Abs.LabNoP . Abs.Id . Abs.Ident) (mkName ident rhs)+      fun <- Abs.LabNoP . Abs.Id . Abs.Ident <$> mkName ident rhs       return (Abs.Rule fun (Abs.IdCat ident) rhs)     mkName :: Abs.Ident -> [Abs.Item] -> State [(String, Int)] String     mkName (Abs.Ident cat) [Abs.Terminal s]@@ -472,6 +503,6 @@     mkName (Abs.Ident cat) [Abs.NTerminal (Abs.IdCat (Abs.Ident s))] =         return (cat ++ s)     mkName (Abs.Ident cat) _ = do-        i <- liftM (maybe 1 (+1) . lookup cat) get+        i <- maybe 1 (+1) . lookup cat <$> get         modify ((cat, i):)         return (cat ++ show i)
src/BNFC/Lexing.hs view
@@ -26,7 +26,7 @@     [ (mkRegMultilineComment b e, LexComment) | (b,e) <- fst (comments cf) ]     ++     -- user tokens-    [ (reg, LexToken name) | (Cat name, reg) <- tokenPragmas cf]+    [ (reg, LexToken name) | (name, reg) <- tokenPragmas cf]     ++     -- predefined tokens     [ ( regIdent, LexToken "Ident" ) ]
src/BNFC/MultiView.hs view
@@ -20,6 +20,8 @@  module BNFC.MultiView where +import Data.Maybe+ import ParBNF import PrintBNF import AbsBNF@@ -39,17 +41,14 @@  extract :: String -> LGrammar -> [(FilePath, Grammar)] extract name (LGr ldefs) =-  [(file lang,Grammar [unldef ldef | ldef <- ldefs, isFor lang ldef]) |+  [(file lang,Grammar $ mapMaybe (getDef lang) ldefs) |       lang <- views]  where    views = [lang | LDefView langs <- ldefs, Ident lang <- langs]-   isFor lang ldef = case ldef of-     DefAll _ -> True-     DefSome ids _ -> elem (Ident lang) ids-     _ -> False-   unldef ldef = case ldef of-     DefAll d -> d-     DefSome _ d -> d+   getDef lang ldef = case ldef of+     DefAll d -> Just d+     DefSome ids d | elem (Ident lang) ids -> Just d+     _ -> Nothing    file lang = name ++ "_" ++ lang ++ ".cf"  --- the entrypoint is the same for all languages - could be different@@ -59,11 +58,11 @@   [c | Entryp (Ident c:_) <- rs] ++   [c | Rule _ (IdCat (Ident c)) _ <- rs]  where-   rs = concatMap getR rs0+   rs = mapMaybe getR rs0    getR d = case d of-     DefAll d -> [d]-     DefSome _ d -> [d]-     _ -> [] --- LDefView+     DefAll d -> Just d+     DefSome _ d -> Just d+     _LDefView -> Nothing  writeCF :: (FilePath, Grammar) -> IO () writeCF (file,gr) = do@@ -87,14 +86,14 @@   let content = makefile xx abs cncs   writeFile "Makefile" content -makefile xx abs cncs = unlines $+makefile _ abs cncs = unlines $   "all:" :   ["\tmake -f Makefile_" ++ cnc | cnc <- cncs] ++   ["\tghc --make -o TestTrans" ++ abs ++ " TestTrans" ++ abs,    ""   ] -testfile cat xx abs cncs = unlines $+testfile cat _ abs cncs = unlines $   ["module Main where"] ++   ["import qualified Lex" ++ cnc | cnc <- cncs] ++   ["import qualified Par" ++ cnc | cnc <- cncs] ++
src/BNFC/Options.hs view
@@ -1,13 +1,20 @@+{-# LANGUAGE LambdaCase #-}+ module BNFC.Options where -import BNFC.CF (CF)-import Data.Maybe (fromMaybe)-import Data.Version ( showVersion )-import Paths_BNFC ( version )+import Data.Maybe      (fromMaybe, maybeToList)+import Data.Monoid     (Monoid) -- ghc 7.8+import Data.Version    (showVersion )+ import System.Console.GetOpt import System.FilePath (takeBaseName)-import Text.Printf (printf) +import Text.Printf     (printf)++import Paths_BNFC      (version)+import BNFC.CF         (CF)+import BNFC.Utils      (unless)+ -- ~~~ Option data structures ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- | To decouple the option parsing from the execution of the program, -- we introduce a data structure that holds the result of the@@ -28,12 +35,16 @@ data Target = TargetC | TargetCpp | TargetCppNoStl | TargetCSharp             | TargetHaskell | TargetHaskellGadt | TargetLatex             | TargetJava | TargetOCaml | TargetProfile | TargetPygments-  deriving (Eq,Bounded, Enum,Ord)+  deriving (Eq, Bounded, Enum, Ord) --- Create a list of all target using the enum and bounded classes+-- | List of all targets (using the enum and bounded classes). targets :: [Target] targets = [minBound..] +-- | List of Haskell target.+haskellTargets :: [Target]+haskellTargets = [ TargetHaskell, TargetHaskellGadt, TargetProfile ]+ instance Show Target where   show TargetC            = "C"   show TargetCpp          = "C++"@@ -61,61 +72,155 @@ data RecordPositions = RecordPositions | NoRecordPositions     deriving (Eq,Show,Ord) --- | This is the option record that is passed to the different backends+-- | This is the option record that is passed to the different backends. data SharedOptions = Options-  -- Option shared by at least 2 backends-  { target :: Target-  , make :: Maybe String     -- ^ The name of the Makefile to generate-  -- or Nothing for no Makefile.-  , inPackage :: Maybe String -- ^ The hierarchical package to put-                              --   the modules in, or Nothing.-  , cnf :: Bool               -- ^ Generate CNF-like tables?-  , lang :: String-  -- Haskell specific:-  , alexMode :: AlexVersion-  , javaLexerParser :: JavaLexerParser-  , inDir :: Bool-  , shareStrings :: Bool-  , byteStrings :: Bool-  , glr :: HappyMode-  , xml :: Int-  , ghcExtensions :: Bool-  -- C++ specific+  --- Option shared by at least 2 backends+  { lbnfFile    :: FilePath        -- ^ The input file BNFC processes.+  , lang        :: String          -- ^ The language we generate: the basename of 'lbnfFile'.+  , outDir      :: FilePath        -- ^ Target directory for generated files.+  , target      :: Target          -- ^ E.g. @--haskell@.+  , make        :: Maybe String    -- ^ The name of the Makefile to generate or Nothing for no Makefile.+  , inPackage   :: Maybe String    -- ^ The hierarchical package to put the modules in, or Nothing.   , linenumbers :: RecordPositions -- ^ Add and set line_number field for syntax classes-  -- C# specific-  , visualStudio :: Bool      -- ^ Generate Visual Studio solution/project files-  , wcf :: Bool               -- ^ Windows Communication Foundation-  , functor :: Bool-  , outDir :: FilePath        -- ^ Target directory for generated files-  } deriving (Eq,Show,Ord)+  --- Haskell specific:+  , inDir         :: Bool        -- ^ Option @-d@.+  , ghcExtensions :: Bool        -- ^ Option @--ghc@.+  , functor       :: Bool        -- ^ Option @--functor@.  Make AST functorial?+  , alexMode      :: AlexVersion -- ^ Options @--alex@.+  , shareStrings  :: Bool        -- ^ Option @--sharestrings@.+  , byteStrings   :: Bool        -- ^ Option @--bytestrings@.+  , glr           :: HappyMode   -- ^ Happy option @--glr@.+  , xml           :: Int         -- ^ Options @--xml@, generate DTD and XML printers.+  , cnf           :: Bool        -- ^ Option @--cnf@. Generate CNF-like tables?+  , agda          :: Bool        -- ^ Option @--agda@. Create bindings for Agda?+  --- Java specific+  , javaLexerParser :: JavaLexerParser+  --- C# specific+  , visualStudio  :: Bool        -- ^ Generate Visual Studio solution/project files.+  , wcf           :: Bool        -- ^ Windows Communication Foundation.+  } deriving (Eq, Ord, Show) --- | We take this oportunity to define the type of the backend functions-type Backend = SharedOptions  -- ^ options+-- | We take this oportunity to define the type of the backend functions.+type Backend = SharedOptions  -- ^ Options             -> CF             -- ^ Grammar             -> IO ()  defaultOptions :: SharedOptions defaultOptions = Options-  { cnf = False-  , target = TargetHaskell-  , inPackage = Nothing-  , make = Nothing-  , alexMode = Alex3-  , inDir = False-  , shareStrings = False-  , byteStrings = False-  , glr = Standard-  , xml = 0-  , ghcExtensions = False-  , lang = error "lang not set"-  , linenumbers = NoRecordPositions-  , visualStudio = False-  , wcf = False-  , functor = False-  , outDir  = "."+  { lbnfFile        = error "lbnfFile not set"+  , lang            = error "lang not set"+  , outDir          = "."+  , target          = TargetHaskell+  , make            = Nothing+  , inPackage       = Nothing+  , linenumbers     = NoRecordPositions+  -- Haskell specific+  , inDir           = False+  , ghcExtensions   = False+  , functor         = False+  , alexMode        = Alex3+  , shareStrings    = False+  , byteStrings     = False+  , glr             = Standard+  , xml             = 0+  , cnf             = False+  , agda            = False+  -- Java specific   , javaLexerParser = JLexCup+  -- C# specific+  , visualStudio    = False+  , wcf             = False   } +-- | Check whether an option is unchanged from the default.+isDefault :: (Eq a)+  => (SharedOptions -> a)  -- ^ Option field name.+  -> SharedOptions         -- ^ Options.+  -> Bool+isDefault flag opts = flag opts == flag defaultOptions++-- | Return something in case option differs from default.+unlessDefault :: (Monoid m, Eq a)+  => (SharedOptions -> a)  -- ^ Option field name.+  -> SharedOptions         -- ^ Options.+  -> (a -> m)              -- ^ Action in case option differs from standard.+  -> m+unlessDefault flag opts f = unless (o == flag defaultOptions) $ f o+  where o = flag opts++-- -- | Return something in case option is unchanged from default.+-- whenDefault :: (Monoid m, Eq a)+--   => (SharedOptions -> a)  -- ^ Option field name.+--   -> SharedOptions         -- ^ Options.+--   -> m                     -- ^ Action in case option is unchanged from standard.+--   -> m+-- whenDefault flag opts m = when (o == flag defaultOptions) m+--   where o = flag opts++-- | Print options as input to BNFC.+--+-- @unwords [ "bnfc", printOptions opts ]@ should call bnfc with the same options+-- as the current instance.+--+printOptions :: SharedOptions -> String+printOptions opts = unwords . concat $+  [ [ printTargetOption tgt ]+  -- General and shared options:+  , unlessDefault outDir opts $ \ o -> [ "--outputdir=" ++ o ]+  , [ "--makefile=" ++ m  | m <- maybeToList $ make opts        ]+  , [ "-p " ++ p          | p <- maybeToList $ inPackage opts   ]+  , unlessDefault linenumbers opts $ const [ "-l" ]+  -- Haskell options:+  , [ "-d"                | inDir opts                          ]+  , [ "--ghc"             | ghcExtensions opts                  ]+  , [ "--functor"         | functor opts                        ]+  , unlessDefault alexMode opts $ \ o -> [ printAlexOption o ]+  , [ "--sharestrings"    | shareStrings opts                   ]+  , [ "--bytestrings"     | byteStrings opts                    ]+  , [ "--glr"             | glr opts == GLR                     ]+  , [ "--xml"             | xml opts == 1                       ]+  , [ "--xmlt"            | xml opts == 2                       ]+  , [ "--cnf"             | cnf opts                            ]+  , [ "--agda"            | agda opts                           ]+  -- C# options:+  , [ "--vs"              | visualStudio opts                   ]+  , [ "--wfc"             | wcf opts                            ]+  -- Java options:+  , unlessDefault javaLexerParser opts $ \ o -> [ printJavaLexerParserOption o ]+  -- Grammar file:+  , [ lbnfFile opts ]+  ]+  where+  tgt = target opts+  haskell = tgt `elem` haskellTargets++-- | Print target as an option to BNFC.+printTargetOption :: Target -> String+printTargetOption = ("--" ++) . \case+  TargetC           -> "c"+  TargetCpp         -> "cpp"+  TargetCppNoStl    -> "cpp-nostl"+  TargetCSharp      -> "csharp"+  TargetHaskell     -> "haskell"+  TargetHaskellGadt -> "haskell-gadt"+  TargetLatex       -> "latex"+  TargetJava        -> "java"+  TargetOCaml       -> "ocaml"+  TargetProfile     -> "profile"+  TargetPygments    -> "pygments"++printAlexOption :: AlexVersion -> String+printAlexOption = ("--" ++) . \case+  Alex1 -> "alex1"+  Alex2 -> "alex2"+  Alex3 -> "alex3"++printJavaLexerParserOption :: JavaLexerParser -> String+printJavaLexerParserOption = ("--" ++) . \case+  JLexCup  -> "jlex"+  JFlexCup -> "jflex"+  Antlr4   -> "antlr4"+ -- ~~~ Option definition ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- This defines bnfc's "global" options, like --help globalOptions :: [ OptDescr Mode ]@@ -126,7 +231,7 @@ -- | Options for the target languages -- targetOptions :: [ OptDescr Target ] targetOptions :: [ OptDescr (SharedOptions -> SharedOptions)]-targetOptions = +targetOptions =   [ Option "" ["java"]          (NoArg (\o -> o {target = TargetJava}))     "Output Java code [default: for use with JLex and CUP]"   , Option "" ["haskell"]       (NoArg (\o -> o {target = TargetHaskell}))@@ -156,153 +261,199 @@ specificOptions :: [(OptDescr (SharedOptions -> SharedOptions), [Target])] specificOptions =   [ ( Option ['l'] [] (NoArg (\o -> o {linenumbers = RecordPositions}))-        "Add and set line_number field for all syntax classes\nJava requires cup 0.11b-2014-06-11 or greater"-    , [TargetCpp, TargetJava] )+          "Add and set line_number field for all syntax classes\nJava requires cup 0.11b-2014-06-11 or greater"+    , [TargetC, TargetCpp, TargetJava] )   , ( Option ['p'] []       (ReqArg (\n o -> o {inPackage = Just n}) "<namespace>")-      "Prepend <namespace> to the package/module name"-    , [TargetCpp, TargetCSharp, TargetHaskell, TargetHaskellGadt, TargetProfile, TargetJava] )-  , ( Option [] ["jflex"] (NoArg (\o -> o {javaLexerParser = JFlexCup}))+          "Prepend <namespace> to the package/module name"+    , [TargetCpp, TargetCSharp, TargetJava] ++ haskellTargets)+  -- Java backend:+  , ( Option [] ["jlex"  ] (NoArg (\o -> o {javaLexerParser = JLexCup}))+          "Lex with JLex, parse with CUP (default)"+    , [TargetJava] )+  , ( Option [] ["jflex" ] (NoArg (\o -> o {javaLexerParser = JFlexCup}))           "Lex with JFlex, parse with CUP"     , [TargetJava] )-    , ( Option [] ["jlex"] (NoArg (\o -> o {javaLexerParser = Antlr4}))-                  "Lex with Jlex, parse with CUP (default)"-            , [TargetJava] )-    , ( Option [] ["antlr4"] (NoArg (\o -> o {javaLexerParser = Antlr4}))-              "Lex and parse with antlr4"-        , [TargetJava] )+  , ( Option [] ["antlr4"] (NoArg (\o -> o {javaLexerParser = Antlr4}))+          "Lex and parse with antlr4"+    , [TargetJava] )+  -- C++ backend:   , ( Option [] ["vs"] (NoArg (\o -> o {visualStudio = True}))           "Generate Visual Studio solution/project files"     , [TargetCSharp] )   , ( Option [] ["wcf"] (NoArg (\o -> o {wcf = True}))           "Add support for Windows Communication Foundation,\n by marking abstract syntax classes as DataContracts"     , [TargetCSharp] )+  -- Haskell backends:   , ( Option ['d'] [] (NoArg (\o -> o {inDir = True}))           "Put Haskell code in modules Lang.* instead of Lang*"-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )+    , haskellTargets )   , ( Option []    ["alex1"] (NoArg (\o -> o {alexMode = Alex1}))           "Use Alex 1.1 as Haskell lexer tool"-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )+    , haskellTargets )   , ( Option []    ["alex2"] (NoArg (\o -> o {alexMode = Alex2}))           "Use Alex 2 as Haskell lexer tool"-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )+    , haskellTargets )   , ( Option []    ["alex3"] (NoArg (\o -> o {alexMode = Alex3}))           "Use Alex 3 as Haskell lexer tool (default)"-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )+    , haskellTargets )   , ( Option []    ["sharestrings"] (NoArg (\o -> o {shareStrings = True}))           "Use string sharing in Alex 2 lexer"-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )+    , haskellTargets )   , ( Option []    ["bytestrings"] (NoArg (\o -> o {byteStrings = True}))           "Use byte string in Alex 2 lexer"-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )+    , haskellTargets )   , ( Option []    ["glr"] (NoArg (\o -> o {glr = GLR}))           "Output Happy GLR parser"-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )+    , haskellTargets )+  , ( Option []    ["ghc"] (NoArg (\o -> o {ghcExtensions = True}))+          "Use ghc-specific language extensions"+    , haskellTargets )+  , ( Option []    ["functor"] (NoArg (\o -> o {functor = True}))+          "Make the AST a functor and use it to store the position of the nodes"+    , haskellTargets )  -- TODO: ok with --profile?   , ( Option []    ["xml"] (NoArg (\o -> o {xml = 1}))           "Also generate a DTD and an XML printer"-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )+    , haskellTargets )   , ( Option []    ["xmlt"] (NoArg (\o -> o {xml = 2}))           "DTD and an XML printer, another encoding"-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )+    , haskellTargets )+  -- CNF and Agda do not support the GADT syntax   , ( Option []    ["cnf"] (NoArg (\o -> o {cnf = True}))           "Use the CNF parser instead of happy"-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )-  , ( Option []    ["ghc"] (NoArg (\o -> o {ghcExtensions = True}))-          "Use ghc-specific language extensions"-    , [TargetHaskell, TargetHaskellGadt, TargetProfile] )-  , ( Option []    ["functor"] (NoArg (\o -> o {functor = True}))-          "Make the AST a functor and use it to store the position of the nodes"     , [TargetHaskell] )+  , ( Option []    ["agda"] (NoArg (\o -> o {agda = True}))+          "Also generate Agda bindings for the abstract syntax"+    , [TargetHaskell] )   ] +-- | The list of specific options for a target.+specificOptions' :: Target -> [OptDescr (SharedOptions -> SharedOptions)]+specificOptions' t = map fst $ filter (elem t . snd) specificOptions -commonOption :: [OptDescr (SharedOptions -> SharedOptions)]-commonOption =+commonOptions :: [OptDescr (SharedOptions -> SharedOptions)]+commonOptions =   [ Option "m" ["makefile"] (OptArg (setMakefile . fromMaybe "Makefile") "MAKEFILE")       "generate Makefile"   , Option "o" ["outputdir"] (ReqArg (\n o -> o {outDir = n}) "DIR")       "Redirects all generated files into DIR"   ]-  where setMakefile = \mf -> \o -> o { make = Just mf }+  where setMakefile mf o = o { make = Just mf }  allOptions :: [OptDescr (SharedOptions -> SharedOptions)]-allOptions = targetOptions ++ commonOption ++ map fst specificOptions+allOptions = targetOptions ++ commonOptions ++ map fst specificOptions +-- | All target options and all specific options for a given target.+allOptions' :: Target -> [OptDescr (SharedOptions -> SharedOptions)]+allOptions' t = targetOptions ++ commonOptions ++ specificOptions' t+ -- ~~~ Help strings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-title :: String-title = unlines [-  "The BNF Converter, "++showVersion version,-  "(c) Jonas Almström Duregård, Krasimir Angelov, Jean-Philippe Bernardy, Björn Bringert, Johan Broberg, Paul Callaghan, ",-  "    Grégoire Détrez, Markus Forsberg, Ola Frid, Peter Gammie, Thomas Hallgren, Patrik Jansson, ",-  "    Kristofer Johannisson, Antti-Juhani Kaijanaho, Ulf Norell, ",-  "    Michael Pellauer and Aarne Ranta 2002 - 2013.",-  "Free software under GNU General Public License (GPL).",-  "Bug reports to bnfc-dev@googlegroups.com."- ] +title :: [String]+title =+  [ "The BNF Converter, " ++ showVersion version ++ " (c) 2002-today BNFC development team."+  , "Free software under GNU General Public License (GPL)."+  , "List of recent contributors at https://github.com/BNFC/bnfc/graphs/contributors."+  , "Report bugs at https://github.com/BNFC/bnfc/issues."+  , ""+  ]++oldContributors :: [String]+oldContributors =+  [ "(c) Jonas Almström Duregård, Krasimir Angelov, Jean-Philippe Bernardy, Björn Bringert, Johan Broberg, Paul Callaghan, "+  , "    Grégoire Détrez, Markus Forsberg, Ola Frid, Peter Gammie, Thomas Hallgren, Patrik Jansson, "+  , "    Kristofer Johannisson, Antti-Juhani Kaijanaho, Ulf Norell, "+  , "    Michael Pellauer and Aarne Ranta 2002 - 2013."+  ]+ usage :: String usage = "usage: bnfc [--version] [--help] <target language> [<args>] file.cf"  help :: String-help = unlines $-    usage:""-    :usageInfo "Global options"   globalOptions-    :usageInfo "Common option"      commonOption-    :usageInfo "Target languages" targetOptions-    :map targetUsage helpTargets-  where helpTargets = [TargetHaskell, TargetJava, TargetCpp, TargetCSharp ]-        targetUsage t = usageInfo-                        (printf "Special options for the %s backend" (show t))-                        (map fst $ filter(elem t . snd)specificOptions)+help = unlines $ title +++    [ usage+    , ""+    , usageInfo "Global options"   globalOptions+    , usageInfo "Common options"   commonOptions+    , usageInfo "Target languages" targetOptions+    ] ++ map targetUsage helpTargets+  where+  helpTargets = [ TargetHaskell, TargetJava, TargetC, TargetCpp, TargetCSharp ]+  targetUsage t = usageInfo+    (printf "Special options for the %s backend" (show t))+    (specificOptions' t)  -- ~~~ Parsing machinery ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  -- | Main parsing function parseMode :: [String] -> Mode+parseMode []   = Help parseMode args =-  case args' of-    [] -> Help-    _ -> case getOpt' Permute globalOptions args' of-      (mode:_,_,_,_) -> mode-      _ -> case getOpt Permute allOptions args' of-        (_,_,e:_) -> UsageError e-        (_,[],_)   -> UsageError "Missing grammar file"-        (optionsUpdates, [grammar], []) ->-          let options = foldl (.) id optionsUpdates defaultOptions in-          Target (options {lang = takeBaseName grammar}) grammar-        (_,_,_)    -> UsageError "Too many arguments"-  where args' = translateOldOptions args+  -- First, check for global options like --help or --version+  case getOpt' Permute globalOptions args' of+   (mode:_,_,_,_) -> mode -isUsageError :: Mode -> Bool-isUsageError (UsageError _) = True-isUsageError _ = False+   -- Then, check for unrecognized options.+   _ -> case getOpt' Permute allOptions args' of+    (_,  _, [u],      _) -> UsageError $ unwords [ "Unrecognized option:" , u ]+    (_,  _, us@(_:_), _) -> UsageError $ unwords $ "Unrecognized options:" : us --- ~~~ Backward compatibility ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~--- A translating function to maintain backward compatiblicy--- with the old option syntay-translateOldOptions :: [String] -> [String]-translateOldOptions = map translateOne-  where translateOne "-java"          = "--java"-        translateOne "-java1.5"       = "--java"-        translateOne "-c"             = "--c"-        translateOne "-cpp"           = "--cpp"-        translateOne "-cpp_stl"       = "--cpp"-        translateOne "-cpp_no_stl"    = "--cpp-nostl"-        translateOne "-csharp"        = "--csharp"-        translateOne "-ocaml"         = "--ocaml"-        translateOne "-fsharp"        = "fsharp"-        translateOne "-haskell"       = "--haskell"-        translateOne "-prof"          = "--profile"-        translateOne "-gadt"          = "--haskell-gadt"-        translateOne "-alex1"         = "--alex1"-        translateOne "-alex2"         = "--alex2"-        translateOne "-alex3"         = "--alex3"-        translateOne "-sharestrings"  = "--sharestring"-        translateOne "-bytestrings"   = "--bytestring"-        translateOne "-glr"           = "--glr"-        translateOne "-xml"           = "--xml"-        translateOne "-xmlt"          = "--xmlt"-        translateOne "-vs"            = "--vs"-        translateOne "-wcf"           = "--wcf"-        translateOne other            = other+    -- Then, determine target language.+    _ -> case getOpt' Permute targetOptions args' of+      -- ([]     ,_,_,_) -> UsageError "No target selected"  -- --haskell is default target+      (_:_:_,_,_,_) -> UsageError "At most one target is allowed" +      -- Finally, parse options with known target.+      (optionUpdates,_,_,_) -> let+          -- Compute target and valid options for this target.+          tgt  = target (options optionUpdates)+          opts = allOptions' tgt+        in+        case getOpt' Permute opts args' of+          (_,  _, _,      e:_) -> UsageError e+          (_,  _, [u],      _) -> UsageError $ unwords $ [ "Backend", show tgt, "does not support option", u ]+          (_,  _, us@(_:_), _) -> UsageError $ unwords $ [ "Backend", show tgt, "does not support options" ] ++ us+          (_, [], _,        _) -> UsageError "Missing grammar file"+          (optionsUpdates, [grammarFile], [], []) ->+            let opts = (options optionsUpdates)+                       { lbnfFile = grammarFile+                       , lang = takeBaseName grammarFile+                       }+            in  Target opts grammarFile+          (_,  _, _,        _) -> UsageError "Too many arguments"+  where+  args' = translateOldOptions args+  options optionsUpdates = foldl (.) id optionsUpdates defaultOptions+++-- * Backward compatibility++-- | A translation function to maintain backward compatibility+--   with the old option syntax.++translateOldOptions :: [String] -> [String]+translateOldOptions = map $ \case+  "-agda"          ->  "--agda"+  "-java"          ->  "--java"+  "-java1.5"       ->  "--java"+  "-c"             ->  "--c"+  "-cpp"           ->  "--cpp"+  "-cpp_stl"       ->  "--cpp"+  "-cpp_no_stl"    ->  "--cpp-nostl"+  "-csharp"        ->  "--csharp"+  "-ocaml"         ->  "--ocaml"+  "-fsharp"        ->  "fsharp"+  "-haskell"       ->  "--haskell"+  "-prof"          ->  "--profile"+  "-gadt"          ->  "--haskell-gadt"+  "-alex1"         ->  "--alex1"+  "-alex2"         ->  "--alex2"+  "-alex3"         ->  "--alex3"+  "-sharestrings"  ->  "--sharestring"+  "-bytestrings"   ->  "--bytestring"+  "-glr"           ->  "--glr"+  "-xml"           ->  "--xml"+  "-xmlt"          ->  "--xmlt"+  "-vs"            ->  "--vs"+  "-wcf"           ->  "--wcf"+  other            ->  other
src/BNFC/PrettyPrint.hs view
@@ -1,42 +1,122 @@-{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-} --- Extends Text.PrettyPrint+-- | Extends ''Text.PrettyPrint''.+ module BNFC.PrettyPrint   ( module Text.PrettyPrint-  , (<.>)-  , codeblock-  , vsep-  , (<=>)+  , module BNFC.PrettyPrint   ) where -import Prelude'- import Text.PrettyPrint --- | Pretty print separator with a dot+-- | Put 'parens' around document if given condition is true.+--+-- >>> parensIf True "foo"+-- (foo)+--+-- >>> parensIf False "bar"+-- bar+--+parensIf :: Bool -> Doc -> Doc+parensIf = \case+  True  -> parens+  False -> id++-- | Separate vertically by a blank line.+--+-- >>> "foo" $++$ "bar"+-- foo+-- <BLANKLINE>+-- bar+--+-- >>> "foo" $++$ empty+-- foo+--+($++$) :: Doc -> Doc -> Doc+d $++$ d'+  | isEmpty d  = d'+  | isEmpty d' = d+  | otherwise  = d $+$ "" $+$ d'++-- | List version of '$++$'.+--+-- >>> vsep [ "foo", nest 4 "bar" ]+-- foo+-- <BLANKLINE>+--     bar+--+-- >>> vsep []+-- <BLANKLINE>+--+vsep :: [Doc] -> Doc+vsep = foldl ($++$) empty++-- | List version of 'PrettyPrint.$+$'.+--+-- >>> vcat' [text "abc", nest 4 (text "def")]+-- abc+--     def+--+vcat' :: [Doc] -> Doc+vcat' = foldl ($+$) empty++-- | Pretty print separator with a dot.+-- -- >>> "abc" <.> "py" -- abc.py+-- (<.>) :: Doc -> Doc -> Doc-a <.> b = a <> "." <> b+a <.> b = hcat [ a , text "." , b ]+  -- Andreas A, 2019-02-07: avoiding <> due to clash with Semigroup --- | Code block. A bloc of code, surrounded by {} and indented.+-- | Pretty print separator with = (for assignments...).+--+-- >>> "a" <=> "123"+-- a = 123+--+(<=>) :: Doc -> Doc -> Doc+a <=> b = a <+> text "=" <+> b++-- | Print a list of 0-1 elements on the same line as some preamble+--   and from 2 elements on the following lines, indented.+--+-- >>> prettyList 2 ("foo" <+> equals) lbrack rbrack comma []+-- foo = []+-- >>> prettyList 2 ("foo" <+> equals) lbrack rbrack comma [ "a" ]+-- foo = [a]+-- >>> prettyList 2 ("foo" <+> equals) lbrack rbrack comma [ "a", "b" ]+-- foo =+--   [ a+--   , b+--   ]+--+-- Used in the Agda backend.+prettyList+  :: Int   -- ^ Indentation.+  -> Doc   -- ^ Preamble.+  -> Doc   -- ^ Left parenthesis.+  -> Doc   -- ^ Right parenthesis.+  -> Doc   -- ^ Separator (usually not including spaces).+  -> [Doc] -- ^ List item.+  -> Doc+prettyList n pre lpar rpar sepa = \case+  []     -> pre <+> hcat [ lpar, rpar ]+  [d]    -> pre <+> hcat [ lpar, d, rpar ]+  (d:ds) -> vcat . (pre :) . map (nest n) . concat $+    [ [ lpar <+> d ]+    , map (sepa <+>) ds+    , [ rpar ]+    ]++-- | Code block. A block of C/Java code, surrounded by {} and indented.+-- -- >>> codeblock 4 ["abc", "def"] -- { --     abc --     def -- }+--+--   Used in the C backend. codeblock :: Int -> [Doc] -> Doc codeblock indent code = lbrace $+$ nest indent (vcat code) $+$ rbrace---- | List version of prettyPrint $+$--- >>> vsep [text "abc", nest 4 (text "def")]--- abc---     def-vsep :: [Doc] -> Doc-vsep = foldl ($+$) empty---- | Pretty print separator with = (for assignments...)--- >>> "a" <=> "123"--- a = 123-(<=>) :: Doc -> Doc -> Doc-a <=> b = a <+> "=" <+> b
src/BNFC/ToCNFCore.hs view
@@ -240,7 +240,7 @@ lkCat (Right t) _ = [Right t] lkCat (Left c) s = Left c:lookupMulti (show c) s --- neighbors A B = ∃ A' B'. P ::= A' B' ∧  A ∈ rightOf A'  ∧  B ∈ leftOf B+-- neighbors A B = ∃ A' B'.  P ::= A' B'  &  A ∈ rightOf A'  &  B ∈ leftOf B neighborSet cf = map (second (nub . sort)) $ group' [(x',lkCat y leftSet) | Rule _ _ [x,y] <- cfgRules cf, x' <- lkCat x rightSet]   where leftSet  = fixpointOnGrammar "left set"  (leftRight head) cf         rightSet = fixpointOnGrammar "right set" (leftRight last) cf
src/BNFC/Utils.hs view
@@ -17,31 +17,71 @@     Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA -} +{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-}+ module BNFC.Utils-    ( (+++), (++++), (+-+), (+.+)+    ( when, unless, unlessNull+    , (+++), (++++), (+-+), (+.+)     , mkName, mkNames, NameStyle(..)     , lowerCase, upperCase, mixedCase, camelCase, snakeCase     , replace, prParenth     , writeFileRep     , cstring, cchar+    , getZonedTimeTruncatedToSeconds     ) where -import Control.Arrow ((&&&))+import Control.Arrow   ((&&&)) import Control.DeepSeq (rnf)  import Data.Char-import Data.List (intercalate)+import Data.Functor    ((<$>))+import Data.List       (intercalate)+import Data.Monoid     (Monoid(..))+import Data.Time -import System.IO (IOMode(ReadMode),hClose,hGetContents,openFile)+import Data.Semigroup  (Semigroup(..))++import System.IO       (IOMode(ReadMode),hClose,hGetContents,openFile) import System.IO.Error (tryIOError)--- import System.Directory (renameFile, removeFile) -import BNFC.PrettyPrint+import BNFC.PrettyPrint hiding ((<>)) -infixr 5 +++, ++++, +-+, +.++-- * Control flow. --- printing operations+-- The following Monoid instance conflicts with Monoid a => Monoid (IO a)+-- for ghc >= 8.0 +#if __GLASGOW_HASKELL__ <= 710+instance Monad m => Semigroup (m ()) where+  (<>) = (>>)++instance Monad m => Monoid (m ()) where+  mempty  = return ()+  mappend = (<>)+  mconcat = sequence_+#endif++-- | Generalization of 'Control.Monad.when'.+when :: Monoid m => Bool -> m -> m+when True  m = m+when False _ = mempty++-- | Generalization of 'Control.Monad.unless'.+unless :: Monoid m => Bool -> m -> m+unless False m = m+unless True  _ = mempty++-- | Invoke continuation for non-empty list.+unlessNull :: Monoid m => [a] -> (a -> [a] -> m) -> m+unlessNull l k = case l of+  []     -> mempty+  (a:as) -> k a as++-- * String operations for printing.++infixr 5 +++, ++++, +-+, +.++ -- | Concatenate strings by a space. (+++) :: String -> String -> String a +++ b   = a ++ " "    ++ b@@ -70,6 +110,18 @@         -> a -- ^ Value to replace it with         -> [a] -> [a] replace x y xs = [ if z == x then y else z | z <- xs]++-- * Time utilities++-- | Cut away fractions of a second in time.++truncateZonedTimeToSeconds :: ZonedTime -> ZonedTime+truncateZonedTimeToSeconds (ZonedTime (LocalTime day (TimeOfDay h m s)) zone) =+  ZonedTime (LocalTime day (TimeOfDay h m s')) zone+  where s' = fromIntegral $ truncate s++getZonedTimeTruncatedToSeconds :: IO ZonedTime+getZonedTimeTruncatedToSeconds = truncateZonedTimeToSeconds <$> getZonedTime  -- * File utilities 
src/ErrM.hs view
@@ -19,9 +19,15 @@  instance Monad Err where   return      = Ok-  fail        = Bad   Ok a  >>= f = f a   Bad s >>= _ = Bad s+#if __GLASGOW_HASKELL__ < 808+  fail        = Bad+#else++instance MonadFail Err where+  fail = Bad+#endif  instance Applicative Err where   pure = Ok
src/LexBNF.hs view
@@ -19,392 +19,8429 @@ #endif #if __GLASGOW_HASKELL__ >= 503 import Data.Array-import Data.Array.Base (unsafeAt)-#else-import Array-#endif-alex_tab_size :: Int-alex_tab_size = 8-alex_base :: Array Int Int-alex_base = listArray (0,40) [-8,73,-55,-32,201,412,45,540,796,266,0,781,1037,973,1229,1425,1519,1165,0,1445,-37,71,90,1701,1702,1897,1833,0,2079,0,120,-36,-35,0,-33,2296,0,0,114,1511,124]--alex_table :: Array Int Int-alex_table = listArray (0,2551) [0,30,30,30,30,30,33,37,22,28,5,40,40,40,40,40,40,40,40,40,40,0,0,0,30,2,23,0,0,0,0,14,33,33,33,33,33,31,33,0,38,38,38,38,38,38,38,38,38,38,34,33,0,33,0,33,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,33,3,33,0,33,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,32,33,33,1,39,39,39,39,39,39,39,39,39,39,30,30,30,30,30,0,0,0,3,40,40,40,40,40,40,40,40,40,40,0,0,0,0,30,0,0,3,0,0,0,0,21,3,38,38,38,38,38,38,38,38,38,38,40,40,40,40,40,40,40,40,40,40,0,0,0,0,0,24,0,0,0,0,0,0,0,0,0,0,29,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,25,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,19,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,12,13,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,23,0,0,0,0,23,39,39,39,39,39,39,39,39,39,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,0,0,0,0,0,23,26,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,23,23,23,23,23,23,23,23,23,23,0,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,36,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,16,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,0,35,35,35,35,35,35,35,35,0,15,17,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,25,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,26,4,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,7,10,10,10,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,35,0,0,0,0,0,0,0,0,35,35,35,35,35,35,35,35,35,35,0,0,0,0,0,0,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,0,0,0,0,35,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]--alex_check :: Array Int Int-alex_check = listArray (0,2551) [-1,9,10,11,12,13,61,39,45,45,45,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,32,58,34,-1,-1,-1,-1,39,40,41,42,43,44,45,46,-1,48,49,50,51,52,53,54,55,56,57,58,59,-1,61,-1,63,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,39,93,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,45,48,49,50,51,52,53,54,55,56,57,9,10,11,12,13,-1,-1,-1,92,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,32,-1,-1,110,-1,-1,-1,-1,46,116,48,49,50,51,52,53,54,55,56,57,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,195,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,125,-1,-1,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,45,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,-1,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,-1,-1,194,195,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,34,-1,-1,-1,-1,39,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,92,101,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,110,-1,-1,-1,-1,-1,116,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,0,1,2,3,4,5,6,7,8,9,-1,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,-1,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,-1,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,-1,184,185,186,187,188,189,190,191,-1,194,195,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,39,-1,-1,-1,-1,-1,-1,-1,-1,48,49,50,51,52,53,54,55,56,57,-1,-1,-1,-1,-1,-1,-1,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,-1,-1,-1,-1,95,-1,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,195,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]--alex_deflt :: Array Int Int-alex_deflt = listArray (0,40) [-1,5,-1,-1,-1,5,-1,-1,5,5,18,18,3,3,-1,23,-1,23,27,27,-1,-1,-1,-1,-1,28,28,28,28,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]--alex_accept = listArray (0::Int,40) [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 (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5),AlexAcc (alex_action_6),AlexAcc (alex_action_7),AlexAcc (alex_action_8),AlexAcc (alex_action_8)]-{-# LINE 39 "LexBNF.x" #-}---tok :: (Posn -> String -> Token) -> (Posn -> String -> Token)-tok f p s = f p s--share :: String -> String-share = id--data Tok =-   TS !String !Int    -- reserved words and symbols- | TL !String         -- string literals- | TI !String         -- integer literals- | TV !String         -- identifiers- | TD !String         -- double precision float literals- | TC !String         -- character literals-- deriving (Eq,Show,Ord)--data Token =-   PT  Posn Tok- | Err Posn-  deriving (Eq,Show,Ord)--printPosn :: Posn -> String-printPosn (Pn _ l c) = "line " ++ show l ++ ", column " ++ show c--tokenPos :: [Token] -> String-tokenPos (t:_) = printPosn (tokenPosn t)-tokenPos [] = "end of file"--tokenPosn :: Token -> Posn-tokenPosn (PT p _) = p-tokenPosn (Err p) = p--tokenLineCol :: Token -> (Int, Int)-tokenLineCol = posLineCol . tokenPosn--posLineCol :: Posn -> (Int, Int)-posLineCol (Pn _ l c) = (l,c)--mkPosToken :: Token -> ((Int, Int), String)-mkPosToken t@(PT p _) = (posLineCol p, prToken t)--prToken :: Token -> String-prToken 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"---data BTree = N | B String Tok BTree BTree deriving (Show)--eitherResIdent :: (String -> Tok) -> String -> Tok-eitherResIdent tv s = treeFind resWords-  where-  treeFind N = tv s-  treeFind (B a t left right) | s < a  = treeFind left-                              | s > a  = treeFind right-                              | s == a = t--resWords :: BTree-resWords = b "digit" 21 (b "=" 11 (b "-" 6 (b "*" 3 (b ")" 2 (b "(" 1 N N) N) (b "," 5 (b "+" 4 N N) N)) (b "::=" 9 (b ":" 8 (b "." 7 N N) N) (b ";" 10 N N))) (b "char" 16 (b "]" 14 (b "[" 13 (b "?" 12 N N) N) (b "_" 15 N N)) (b "define" 19 (b "comment" 18 (b "coercions" 17 N N) N) (b "delimiters" 20 N N)))) (b "separator" 31 (b "letter" 26 (b "internal" 24 (b "eps" 23 (b "entrypoints" 22 N N) N) (b "layout" 25 N N)) (b "position" 29 (b "nonempty" 28 (b "lower" 27 N N) N) (b "rules" 30 N N))) (b "upper" 36 (b "token" 34 (b "terminator" 33 (b "stop" 32 N N) N) (b "toplevel" 35 N N)) (b "|" 39 (b "{" 38 (b "views" 37 N N) N) (b "}" 40 N N))))-   where b s n = let bs = id s-                  in B bs (TS bs n)--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-    '"':[]    -> []-    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 (\p s -> PT p (eitherResIdent (TV . share) s)) -alex_action_4 =  tok (\p s -> PT p (eitherResIdent (TV . share) s)) -alex_action_5 =  tok (\p s -> PT p (TL $ share $ unescapeInitTail s)) -alex_action_6 =  tok (\p s -> PT p (TC $ share s))  -alex_action_7 =  tok (\p s -> PT p (TI $ share s))    -alex_action_8 =  tok (\p s -> PT p (TD $ share s)) -{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "<command-line>" #-}--------# 1 "/usr/include/stdc-predef.h" 1 3 4--# 17 "/usr/include/stdc-predef.h" 3 4-------------------------------------------{-# LINE 7 "<command-line>" #-}-{-# 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--{-# LINE 21 "templates/GenericTemplate.hs" #-}--{-# LINE 51 "templates/GenericTemplate.hs" #-}--{-# LINE 72 "templates/GenericTemplate.hs" #-}-alexIndexInt16OffAddr arr off = arr ! off---{-# LINE 93 "templates/GenericTemplate.hs" #-}-alexIndexInt32OffAddr arr off = arr ! off---{-# LINE 105 "templates/GenericTemplate.hs" #-}-quickIndex arr i = arr ! i----- -------------------------------------------------------------------------------- Main lexing routines--data AlexReturn a-  = AlexEOF-  | AlexError  !AlexInput-  | AlexSkip   !AlexInput !Int-  | AlexToken  !AlexInput !Int a---- alexScan :: AlexInput -> StartCode -> AlexReturn a-alexScan input (sc)-  = alexScanUser undefined input (sc)--alexScanUser user input (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 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` (s)))-  in-  new_acc `seq`-  case alexGetByte input of-     Nothing -> (new_acc, input)-     Just (c, new_input) -> ----      case fromIntegral c of { (ord_c) ->-        let-                base   = alexIndexInt32OffAddr alex_base s-                offset = (base + ord_c)-                check  = alexIndexInt16OffAddr alex_check offset-                -                new_s = if (offset >= (0)) && (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 (len)-        check_accs (AlexAccSkip) = AlexLastSkip  input (len)--        check_accs (AlexAccPred a predx rest)-           | predx user orig_input (len) input-           = AlexLastAcc a input (len)-           | otherwise-           = check_accs rest-        check_accs (AlexAccSkipPred predx rest)-           | predx user orig_input (len) input-           = AlexLastSkip input (len)-           | otherwise-           = check_accs rest---data AlexLastAcc a-  = AlexNone-  | AlexLastAcc a !AlexInput !Int-  | AlexLastSkip  !AlexInput !Int--instance Functor AlexLastAcc where-    fmap _ AlexNone = AlexNone-    fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z-    fmap _ (AlexLastSkip x y) = AlexLastSkip x y--data AlexAcc a user-  = AlexAccNone-  | AlexAcc a-  | AlexAccSkip--  | AlexAccPred a   (AlexAccPred user) (AlexAcc a user)-  | AlexAccSkipPred (AlexAccPred user) (AlexAcc a user)--type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool---- -------------------------------------------------------------------------------- Predicates on a rule--alexAndPred p1 p2 user in1 len in2-  = p1 user in1 len in2 && p2 user in1 len in2----alexPrevCharIsPred :: Char -> AlexAccPred _ -alexPrevCharIs c _ input _ _ = c == alexInputPrevChar input--alexPrevCharMatches f _ input _ _ = f (alexInputPrevChar input)----alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _ -alexPrevCharIsOneOf arr _ input _ _ = arr ! alexInputPrevChar input----alexRightContext :: Int -> AlexAccPred _-alexRightContext (sc) user _ _ input = -     case alex_scan_tkn user input (0) input sc AlexNone of-          (AlexNone, _) -> False-          _ -> True-        -- TODO: there's no need to find the longest-        -- match when checking the right context, just-        -- the first match will do.+#else+import Array+#endif+alex_tab_size :: Int+alex_tab_size = 8+alex_base :: Array Int Int+alex_base = listArray (0 :: Int, 61)+  [ -8+  , 73+  , -55+  , -32+  , 201+  , 412+  , 45+  , 540+  , 668+  , 796+  , 924+  , 1052+  , 1180+  , 1293+  , 0+  , 1421+  , 0+  , 1534+  , 0+  , 1647+  , 0+  , 267+  , 0+  , 1712+  , 0+  , 1777+  , 2033+  , 1969+  , 0+  , 0+  , 2082+  , 2338+  , 2274+  , 0+  , 2491+  , 2747+  , 2497+  , 2683+  , 0+  , 0+  , 2748+  , -37+  , 71+  , 114+  , 2994+  , 2877+  , 3250+  , 3186+  , 0+  , 3432+  , 0+  , 120+  , -36+  , -35+  , 0+  , -33+  , 3649+  , 0+  , 0+  , 126+  , 2489+  , 140+  ]++alex_table :: Array Int Int+alex_table = listArray (0 :: Int, 3904)+  [ 0+  , 51+  , 51+  , 51+  , 51+  , 51+  , 54+  , 58+  , 43+  , 49+  , 5+  , 61+  , 61+  , 61+  , 61+  , 61+  , 61+  , 61+  , 61+  , 61+  , 61+  , 0+  , 0+  , 0+  , 51+  , 2+  , 44+  , 0+  , 0+  , 0+  , 0+  , 34+  , 54+  , 54+  , 54+  , 54+  , 54+  , 52+  , 54+  , 0+  , 59+  , 59+  , 59+  , 59+  , 59+  , 59+  , 59+  , 59+  , 59+  , 59+  , 55+  , 54+  , 0+  , 54+  , 0+  , 54+  , 0+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 54+  , 3+  , 54+  , 0+  , 54+  , 0+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 53+  , 54+  , 54+  , 1+  , 60+  , 60+  , 60+  , 60+  , 60+  , 60+  , 60+  , 60+  , 60+  , 60+  , 51+  , 51+  , 51+  , 51+  , 51+  , 0+  , 0+  , 0+  , 3+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 3+  , 0+  , 0+  , 0+  , 0+  , 51+  , 0+  , 0+  , 3+  , 0+  , 0+  , 0+  , 3+  , 0+  , 3+  , 61+  , 61+  , 61+  , 61+  , 61+  , 61+  , 61+  , 61+  , 61+  , 61+  , 42+  , 0+  , 59+  , 59+  , 59+  , 59+  , 59+  , 59+  , 59+  , 59+  , 59+  , 59+  , 0+  , 0+  , 0+  , 45+  , 61+  , 61+  , 61+  , 61+  , 61+  , 61+  , 61+  , 61+  , 61+  , 61+  , 50+  , 0+  , 0+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 26+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 27+  , 10+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 21+  , 15+  , 14+  , 14+  , 14+  , 13+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 46+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 1+  , 27+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 26+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 27+  , 10+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 21+  , 15+  , 14+  , 14+  , 14+  , 13+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 4+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 35+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 31+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 26+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 28+  , 8+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 9+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 21+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 10+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 20+  , 23+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 25+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 32+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 37+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 40+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 44+  , 0+  , 0+  , 0+  , 0+  , 44+  , 60+  , 60+  , 60+  , 60+  , 60+  , 60+  , 60+  , 60+  , 60+  , 60+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 6+  , 0+  , 0+  , 0+  , 0+  , 0+  , 44+  , 41+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 44+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 44+  , 0+  , 0+  , 0+  , 44+  , 0+  , 44+  , 0+  , 0+  , 0+  , 0+  , 0+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 31+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 33+  , 32+  , 9+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 22+  , 23+  , 12+  , 16+  , 16+  , 16+  , 17+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 47+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 57+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 0+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 36+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 35+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 38+  , 37+  , 8+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 24+  , 25+  , 11+  , 18+  , 18+  , 18+  , 19+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 46+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 48+  , 47+  , 4+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 39+  , 40+  , 7+  , 29+  , 29+  , 29+  , 30+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 56+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 0+  , 0+  , 0+  , 0+  , 56+  , 0+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 56+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 45+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  , 0+  ]++alex_check :: Array Int Int+alex_check = listArray (0 :: Int, 3904)+  [ -1+  , 9+  , 10+  , 11+  , 12+  , 13+  , 61+  , 39+  , 45+  , 45+  , 45+  , 48+  , 49+  , 50+  , 51+  , 52+  , 53+  , 54+  , 55+  , 56+  , 57+  , -1+  , -1+  , -1+  , 32+  , 58+  , 34+  , -1+  , -1+  , -1+  , -1+  , 39+  , 40+  , 41+  , 42+  , 43+  , 44+  , 45+  , 46+  , -1+  , 48+  , 49+  , 50+  , 51+  , 52+  , 53+  , 54+  , 55+  , 56+  , 57+  , 58+  , 59+  , -1+  , 61+  , -1+  , 63+  , -1+  , 65+  , 66+  , 67+  , 68+  , 69+  , 70+  , 71+  , 72+  , 73+  , 74+  , 75+  , 76+  , 77+  , 78+  , 79+  , 80+  , 81+  , 82+  , 83+  , 84+  , 85+  , 86+  , 87+  , 88+  , 89+  , 90+  , 91+  , 39+  , 93+  , -1+  , 95+  , -1+  , 97+  , 98+  , 99+  , 100+  , 101+  , 102+  , 103+  , 104+  , 105+  , 106+  , 107+  , 108+  , 109+  , 110+  , 111+  , 112+  , 113+  , 114+  , 115+  , 116+  , 117+  , 118+  , 119+  , 120+  , 121+  , 122+  , 123+  , 124+  , 125+  , 45+  , 48+  , 49+  , 50+  , 51+  , 52+  , 53+  , 54+  , 55+  , 56+  , 57+  , 9+  , 10+  , 11+  , 12+  , 13+  , -1+  , -1+  , -1+  , 92+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 102+  , -1+  , -1+  , -1+  , -1+  , 32+  , -1+  , -1+  , 110+  , -1+  , -1+  , -1+  , 114+  , -1+  , 116+  , 48+  , 49+  , 50+  , 51+  , 52+  , 53+  , 54+  , 55+  , 56+  , 57+  , 46+  , -1+  , 48+  , 49+  , 50+  , 51+  , 52+  , 53+  , 54+  , 55+  , 56+  , 57+  , -1+  , -1+  , -1+  , 195+  , 48+  , 49+  , 50+  , 51+  , 52+  , 53+  , 54+  , 55+  , 56+  , 57+  , 125+  , -1+  , -1+  , 128+  , 129+  , 130+  , 131+  , 132+  , 133+  , 134+  , 135+  , 136+  , 137+  , 138+  , 139+  , 140+  , 141+  , 142+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 128+  , 129+  , 130+  , 131+  , 132+  , 133+  , 134+  , 135+  , 136+  , 137+  , 138+  , 139+  , 140+  , 141+  , 142+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 45+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 128+  , 129+  , 130+  , 131+  , 132+  , 133+  , 134+  , 135+  , 136+  , 137+  , 138+  , 139+  , 140+  , 141+  , 142+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 128+  , 129+  , 130+  , 131+  , 132+  , 133+  , 134+  , 135+  , 136+  , 137+  , 138+  , 139+  , 140+  , 141+  , 142+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 128+  , 129+  , 130+  , 131+  , 132+  , 133+  , 134+  , 135+  , 136+  , 137+  , 138+  , 139+  , 140+  , 141+  , 142+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 128+  , 129+  , 130+  , 131+  , 132+  , 133+  , 134+  , 135+  , 136+  , 137+  , 138+  , 139+  , 140+  , 141+  , 142+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 128+  , 129+  , 130+  , 131+  , 132+  , 133+  , 134+  , 135+  , 136+  , 137+  , 138+  , 139+  , 140+  , 141+  , 142+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 128+  , 129+  , 130+  , 131+  , 132+  , 133+  , 134+  , 135+  , 136+  , 137+  , 138+  , 139+  , 140+  , 141+  , 142+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 128+  , 129+  , 130+  , 131+  , 132+  , 133+  , 134+  , 135+  , 136+  , 137+  , 138+  , 139+  , 140+  , 141+  , 142+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 128+  , 129+  , 130+  , 131+  , 132+  , 133+  , 134+  , 135+  , 136+  , 137+  , 138+  , 139+  , 140+  , 141+  , 142+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 0+  , 1+  , 2+  , 3+  , 4+  , 5+  , 6+  , 7+  , 8+  , 9+  , 10+  , 11+  , 12+  , 13+  , 14+  , 15+  , 16+  , 17+  , 18+  , 19+  , 20+  , 21+  , 22+  , 23+  , 24+  , 25+  , 26+  , 27+  , 28+  , 29+  , 30+  , 31+  , 32+  , 33+  , 34+  , 35+  , 36+  , 37+  , 38+  , 39+  , 40+  , 41+  , 42+  , 43+  , 44+  , 45+  , 46+  , 47+  , 48+  , 49+  , 50+  , 51+  , 52+  , 53+  , 54+  , 55+  , 56+  , 57+  , 58+  , 59+  , 60+  , 61+  , 62+  , 63+  , 64+  , 65+  , 66+  , 67+  , 68+  , 69+  , 70+  , 71+  , 72+  , 73+  , 74+  , 75+  , 76+  , 77+  , 78+  , 79+  , 80+  , 81+  , 82+  , 83+  , 84+  , 85+  , 86+  , 87+  , 88+  , 89+  , 90+  , 91+  , 92+  , 93+  , 94+  , 95+  , 96+  , 97+  , 98+  , 99+  , 100+  , 101+  , 102+  , 103+  , 104+  , 105+  , 106+  , 107+  , 108+  , 109+  , 110+  , 111+  , 112+  , 113+  , 114+  , 115+  , 116+  , 117+  , 118+  , 119+  , 120+  , 121+  , 122+  , 123+  , 124+  , 125+  , 126+  , 127+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 0+  , 1+  , 2+  , 3+  , 4+  , 5+  , 6+  , 7+  , 8+  , 9+  , 10+  , 11+  , 12+  , 13+  , 14+  , 15+  , 16+  , 17+  , 18+  , 19+  , 20+  , 21+  , 22+  , 23+  , 24+  , 25+  , 26+  , 27+  , 28+  , 29+  , 30+  , 31+  , 32+  , 33+  , 34+  , 35+  , 36+  , 37+  , 38+  , 39+  , 40+  , 41+  , 42+  , 43+  , 44+  , 45+  , 46+  , 47+  , 48+  , 49+  , 50+  , 51+  , 52+  , 53+  , 54+  , 55+  , 56+  , 57+  , 58+  , 59+  , 60+  , 61+  , 62+  , 63+  , 64+  , 65+  , 66+  , 67+  , 68+  , 69+  , 70+  , 71+  , 72+  , 73+  , 74+  , 75+  , 76+  , 77+  , 78+  , 79+  , 80+  , 81+  , 82+  , 83+  , 84+  , 85+  , 86+  , 87+  , 88+  , 89+  , 90+  , 91+  , 92+  , 93+  , 94+  , 95+  , 96+  , 97+  , 98+  , 99+  , 100+  , 101+  , 102+  , 103+  , 104+  , 105+  , 106+  , 107+  , 108+  , 109+  , 110+  , 111+  , 112+  , 113+  , 114+  , 115+  , 116+  , 117+  , 118+  , 119+  , 120+  , 121+  , 122+  , 123+  , 124+  , 125+  , 126+  , 127+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 39+  , 34+  , -1+  , -1+  , -1+  , -1+  , 39+  , 48+  , 49+  , 50+  , 51+  , 52+  , 53+  , 54+  , 55+  , 56+  , 57+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 92+  , -1+  , -1+  , -1+  , -1+  , -1+  , 92+  , 101+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 102+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 110+  , -1+  , -1+  , -1+  , 114+  , -1+  , 116+  , -1+  , -1+  , -1+  , -1+  , -1+  , 128+  , 129+  , 130+  , 131+  , 132+  , 133+  , 134+  , 135+  , 136+  , 137+  , 138+  , 139+  , 140+  , 141+  , 142+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 0+  , 1+  , 2+  , 3+  , 4+  , 5+  , 6+  , 7+  , 8+  , 9+  , 10+  , 11+  , 12+  , 13+  , 14+  , 15+  , 16+  , 17+  , 18+  , 19+  , 20+  , 21+  , 22+  , 23+  , 24+  , 25+  , 26+  , 27+  , 28+  , 29+  , 30+  , 31+  , 32+  , 33+  , 34+  , 35+  , 36+  , 37+  , 38+  , 39+  , 40+  , 41+  , 42+  , 43+  , 44+  , 45+  , 46+  , 47+  , 48+  , 49+  , 50+  , 51+  , 52+  , 53+  , 54+  , 55+  , 56+  , 57+  , 58+  , 59+  , 60+  , 61+  , 62+  , 63+  , 64+  , 65+  , 66+  , 67+  , 68+  , 69+  , 70+  , 71+  , 72+  , 73+  , 74+  , 75+  , 76+  , 77+  , 78+  , 79+  , 80+  , 81+  , 82+  , 83+  , 84+  , 85+  , 86+  , 87+  , 88+  , 89+  , 90+  , 91+  , 92+  , 93+  , 94+  , 95+  , 96+  , 97+  , 98+  , 99+  , 100+  , 101+  , 102+  , 103+  , 104+  , 105+  , 106+  , 107+  , 108+  , 109+  , 110+  , 111+  , 112+  , 113+  , 114+  , 115+  , 116+  , 117+  , 118+  , 119+  , 120+  , 121+  , 122+  , 123+  , 124+  , 125+  , 126+  , 127+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 10+  , 128+  , 129+  , 130+  , 131+  , 132+  , 133+  , 134+  , 135+  , 136+  , 137+  , 138+  , 139+  , 140+  , 141+  , 142+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 34+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , -1+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 92+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 128+  , 129+  , 130+  , 131+  , 132+  , 133+  , 134+  , 135+  , 136+  , 137+  , 138+  , 139+  , 140+  , 141+  , 142+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 0+  , 1+  , 2+  , 3+  , 4+  , 5+  , 6+  , 7+  , 8+  , 9+  , 10+  , 11+  , 12+  , 13+  , 14+  , 15+  , 16+  , 17+  , 18+  , 19+  , 20+  , 21+  , 22+  , 23+  , 24+  , 25+  , 26+  , 27+  , 28+  , 29+  , 30+  , 31+  , 32+  , 33+  , 34+  , 35+  , 36+  , 37+  , 38+  , 39+  , 40+  , 41+  , 42+  , 43+  , 44+  , 45+  , 46+  , 47+  , 48+  , 49+  , 50+  , 51+  , 52+  , 53+  , 54+  , 55+  , 56+  , 57+  , 58+  , 59+  , 60+  , 61+  , 62+  , 63+  , 64+  , 65+  , 66+  , 67+  , 68+  , 69+  , 70+  , 71+  , 72+  , 73+  , 74+  , 75+  , 76+  , 77+  , 78+  , 79+  , 80+  , 81+  , 82+  , 83+  , 84+  , 85+  , 86+  , 87+  , 88+  , 89+  , 90+  , 91+  , 92+  , 93+  , 94+  , 95+  , 96+  , 97+  , 98+  , 99+  , 100+  , 101+  , 102+  , 103+  , 104+  , 105+  , 106+  , 107+  , 108+  , 109+  , 110+  , 111+  , 112+  , 113+  , 114+  , 115+  , 116+  , 117+  , 118+  , 119+  , 120+  , 121+  , 122+  , 123+  , 124+  , 125+  , 126+  , 127+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 10+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 128+  , 129+  , 130+  , 131+  , 132+  , 133+  , 134+  , 135+  , 136+  , 137+  , 138+  , 139+  , 140+  , 141+  , 142+  , 143+  , 144+  , 145+  , 146+  , 147+  , 148+  , 149+  , 150+  , 151+  , 152+  , 153+  , 154+  , 155+  , 156+  , 157+  , 158+  , 159+  , 160+  , 161+  , 162+  , 163+  , 164+  , 165+  , 166+  , 167+  , 168+  , 169+  , 170+  , 171+  , 172+  , 173+  , 174+  , 175+  , 176+  , 177+  , 178+  , 179+  , 180+  , 181+  , 182+  , 183+  , 184+  , 185+  , 186+  , 187+  , 188+  , 189+  , 190+  , 191+  , 192+  , 193+  , 194+  , 195+  , 196+  , 197+  , 198+  , 199+  , 200+  , 201+  , 202+  , 203+  , 204+  , 205+  , 206+  , 207+  , 208+  , 209+  , 210+  , 211+  , 212+  , 213+  , 214+  , 215+  , 216+  , 217+  , 218+  , 219+  , 220+  , 221+  , 222+  , 223+  , 224+  , 225+  , 226+  , 227+  , 228+  , 229+  , 230+  , 231+  , 232+  , 233+  , 234+  , 235+  , 236+  , 237+  , 238+  , 239+  , 240+  , 241+  , 242+  , 243+  , 244+  , 245+  , 246+  , 247+  , 248+  , 249+  , 250+  , 251+  , 252+  , 253+  , 254+  , 255+  , 39+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 48+  , 49+  , 50+  , 51+  , 52+  , 53+  , 54+  , 55+  , 56+  , 57+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 65+  , 66+  , 67+  , 68+  , 69+  , 70+  , 71+  , 72+  , 73+  , 74+  , 75+  , 76+  , 77+  , 78+  , 79+  , 80+  , 81+  , 82+  , 83+  , 84+  , 85+  , 86+  , 87+  , 88+  , 89+  , 90+  , -1+  , -1+  , -1+  , -1+  , 95+  , -1+  , 97+  , 98+  , 99+  , 100+  , 101+  , 102+  , 103+  , 104+  , 105+  , 106+  , 107+  , 108+  , 109+  , 110+  , 111+  , 112+  , 113+  , 114+  , 115+  , 116+  , 117+  , 118+  , 119+  , 120+  , 121+  , 122+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 195+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  ]++alex_deflt :: Array Int Int+alex_deflt = listArray (0 :: Int, 61)+  [ -1+  , 5+  , -1+  , -1+  , -1+  , 5+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , 20+  , 20+  , -1+  , 22+  , 22+  , 24+  , 24+  , 28+  , 28+  , 33+  , 33+  , 38+  , 38+  , 5+  , 5+  , 5+  , 39+  , 39+  , 3+  , 3+  , 3+  , 3+  , 44+  , -1+  , 44+  , 44+  , 48+  , 48+  , -1+  , -1+  , -1+  , 44+  , -1+  , 49+  , 49+  , 49+  , 49+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  , -1+  ]++alex_accept = listArray (0 :: Int, 61)+  [ 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 9+  , AlexAcc 8+  , AlexAcc 7+  , AlexAcc 6+  , AlexAcc 5+  , AlexAcc 4+  , AlexAcc 3+  , AlexAcc 2+  , AlexAcc 1+  , AlexAcc 0+  ]++alex_actions = array (0 :: Int, 10)+  [ (9,alex_action_3)+  , (8,alex_action_3)+  , (7,alex_action_3)+  , (6,alex_action_3)+  , (5,alex_action_4)+  , (4,alex_action_5)+  , (3,alex_action_6)+  , (2,alex_action_7)+  , (1,alex_action_8)+  , (0,alex_action_8)+  ]++{-# LINE 45 "LexBNF.x" #-}+++tok :: (Posn -> String -> Token) -> (Posn -> String -> Token)+tok f p s = f p s++share :: String -> String+share = id++data Tok =+   TS !String !Int    -- reserved words and symbols+ | TL !String         -- string literals+ | TI !String         -- integer literals+ | TV !String         -- identifiers+ | TD !String         -- double precision float literals+ | TC !String         -- character literals++ deriving (Eq,Show,Ord)++data Token =+   PT  Posn Tok+ | Err Posn+  deriving (Eq,Show,Ord)++printPosn :: Posn -> String+printPosn (Pn _ l c) = "line " ++ show l ++ ", column " ++ show c++tokenPos :: [Token] -> String+tokenPos (t:_) = printPosn (tokenPosn t)+tokenPos [] = "end of file"++tokenPosn :: Token -> Posn+tokenPosn (PT p _) = p+tokenPosn (Err p) = p++tokenLineCol :: Token -> (Int, Int)+tokenLineCol = posLineCol . tokenPosn++posLineCol :: Posn -> (Int, Int)+posLineCol (Pn _ l c) = (l,c)++mkPosToken :: Token -> ((Int, Int), String)+mkPosToken t@(PT p _) = (posLineCol p, prToken t)++prToken :: Token -> String+prToken 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"+++data BTree = N | B String Tok BTree BTree deriving (Show)++eitherResIdent :: (String -> Tok) -> String -> Tok+eitherResIdent tv s = treeFind resWords+  where+  treeFind N = tv s+  treeFind (B a t left right) | s < a  = treeFind left+                              | s > a  = treeFind right+                              | s == a = t++resWords :: BTree+resWords = b "digit" 21 (b "=" 11 (b "-" 6 (b "*" 3 (b ")" 2 (b "(" 1 N N) N) (b "," 5 (b "+" 4 N N) N)) (b "::=" 9 (b ":" 8 (b "." 7 N N) N) (b ";" 10 N N))) (b "char" 16 (b "]" 14 (b "[" 13 (b "?" 12 N N) N) (b "_" 15 N N)) (b "define" 19 (b "comment" 18 (b "coercions" 17 N N) N) (b "delimiters" 20 N N)))) (b "separator" 31 (b "letter" 26 (b "internal" 24 (b "eps" 23 (b "entrypoints" 22 N N) N) (b "layout" 25 N N)) (b "position" 29 (b "nonempty" 28 (b "lower" 27 N N) N) (b "rules" 30 N N))) (b "upper" 36 (b "token" 34 (b "terminator" 33 (b "stop" 32 N N) N) (b "toplevel" 35 N N)) (b "|" 39 (b "{" 38 (b "views" 37 N N) N) (b "}" 40 N N))))+   where b s n = let bs = id s+                  in B bs (TS bs n)++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 (\p s -> PT p (eitherResIdent (TV . share) s)) +alex_action_4 =  tok (\p s -> PT p (eitherResIdent (TV . share) s)) +alex_action_5 =  tok (\p s -> PT p (TL $ share $ unescapeInitTail s)) +alex_action_6 =  tok (\p s -> PT p (TC $ share s))  +alex_action_7 =  tok (\p s -> PT p (TI $ share s))    +alex_action_8 =  tok (\p s -> PT p (TD $ share s)) +{-# 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++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++alexIndexInt16OffAddr arr off = arr ! off+++++++++++++++++++++alexIndexInt32OffAddr arr off = arr ! off++++++++++++quickIndex arr i = arr ! i+++-- -----------------------------------------------------------------------------+-- Main lexing routines++data AlexReturn a+  = AlexEOF+  | AlexError  !AlexInput+  | AlexSkip   !AlexInput !Int+  | AlexToken  !AlexInput !Int a++-- alexScan :: AlexInput -> StartCode -> AlexReturn a+alexScan input__ (sc)+  = alexScanUser undefined input__ (sc)++alexScanUser user__ input__ (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` (s)))+  in+  new_acc `seq`+  case alexGetByte input__ of+     Nothing -> (new_acc, input__)+     Just (c, new_input) ->++++      case fromIntegral c of { (ord_c) ->+        let+                base   = alexIndexInt32OffAddr alex_base s+                offset = (base + ord_c)+                check  = alexIndexInt16OffAddr alex_check offset++                new_s = if (offset >= (0)) && (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__ (len)+        check_accs (AlexAccSkip) = AlexLastSkip  input__ (len)++        check_accs (AlexAccPred a predx rest)+           | predx user__ orig_input (len) input__+           = AlexLastAcc a input__ (len)+           | otherwise+           = check_accs rest+        check_accs (AlexAccSkipPred predx rest)+           | predx user__ orig_input (len) input__+           = AlexLastSkip input__ (len)+           | otherwise+           = check_accs rest+++data AlexLastAcc+  = AlexNone+  | AlexLastAcc !Int !AlexInput !Int+  | AlexLastSkip     !AlexInput !Int++data AlexAcc user+  = AlexAccNone+  | AlexAcc Int+  | AlexAccSkip++  | AlexAccPred Int (AlexAccPred user) (AlexAcc user)+  | AlexAccSkipPred (AlexAccPred user) (AlexAcc user)++type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool++-- -----------------------------------------------------------------------------+-- Predicates on a rule++alexAndPred p1 p2 user__ in1 len in2+  = p1 user__ in1 len in2 && p2 user__ in1 len in2++--alexPrevCharIsPred :: Char -> AlexAccPred _+alexPrevCharIs c _ input__ _ _ = c == alexInputPrevChar input__++alexPrevCharMatches f _ input__ _ _ = f (alexInputPrevChar input__)++--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _+alexPrevCharIsOneOf arr _ input__ _ _ = arr ! alexInputPrevChar input__++--alexRightContext :: Int -> AlexAccPred _+alexRightContext (sc) user__ _ _ input__ =+     case alex_scan_tkn user__ input__ (0) input__ sc AlexNone of+          (AlexNone, _) -> False+          _ -> True+        -- TODO: there's no need to find the longest+        -- match when checking the right context, just+        -- the first match will do.+
src/LexBNF.x view
@@ -13,12 +13,12 @@ }  -$l = [a-zA-Z\192 - \255] # [\215 \247]    -- isolatin1 letter FIXME-$c = [A-Z\192-\221] # [\215]    -- capital isolatin1 letter FIXME-$s = [a-z\222-\255] # [\247]    -- small isolatin1 letter FIXME-$d = [0-9]                -- digit-$i = [$l $d _ ']          -- identifier character-$u = [\0-\255]          -- universal: any character+$c = [A-Z\192-\221] # [\215]  -- capital isolatin1 letter (215 = \times) FIXME+$s = [a-z\222-\255] # [\247]  -- small   isolatin1 letter (247 = \div  ) FIXME+$l = [$c $s]         -- letter+$d = [0-9]           -- digit+$i = [$l $d _ ']     -- identifier character+$u = [. \n]          -- universal: any character  @rsyms =    -- symbols and non-identifier-like reserved words    \: | \; | \, | \. | \: \: \= | \[ | \] | \_ | \( | \) | \= | \| | \- | \* | \+ | \? | \{ | \}@@ -28,13 +28,19 @@ "{-" ([$u # \-] | \-+ [$u # [\- \}]])* ("-")+ "}" ;  $white+ ;-@rsyms { tok (\p s -> PT p (eitherResIdent (TV . share) s)) }+@rsyms+    { tok (\p s -> PT p (eitherResIdent (TV . share) s)) } -$l $i*   { tok (\p s -> PT p (eitherResIdent (TV . share) s)) }-\" ([$u # [\" \\ \n]] | (\\ (\" | \\ | \' | n | t)))* \"{ tok (\p s -> PT p (TL $ share $ unescapeInitTail s)) }-\' ($u # [\' \\] | \\ [\\ \' n t]) \'  { tok (\p s -> PT p (TC $ share s))  }-$d+      { tok (\p s -> PT p (TI $ share s))    }-$d+ \. $d+ (e (\-)? $d+)? { tok (\p s -> PT p (TD $ share s)) }+$l $i*+    { tok (\p s -> PT p (eitherResIdent (TV . share) s)) }+\" ([$u # [\" \\ \n]] | (\\ (\" | \\ | \' | n | t | r | f)))* \"+    { tok (\p s -> PT p (TL $ share $ unescapeInitTail s)) }+\' ($u # [\' \\] | \\ [\\ \' n t r f]) \'+    { tok (\p s -> PT p (TC $ share s))  }+$d++    { tok (\p s -> PT p (TI $ share s))    }+$d+ \. $d+ (e (\-)? $d+)?+    { tok (\p s -> PT p (TD $ share s)) }  { @@ -111,6 +117,8 @@     '\\':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     _         -> []
src/Main.hs view
@@ -28,7 +28,7 @@  module Main where -import BNFC.Backend.Base hiding (Backend)+import BNFC.Backend.Base import BNFC.Backend.C import BNFC.Backend.CPP.NoSTL import BNFC.Backend.CPP.STL@@ -40,8 +40,9 @@ import BNFC.Backend.Latex import BNFC.Backend.OCaml import BNFC.Backend.Pygments+import BNFC.CF (CF) import BNFC.GetCF-import BNFC.Options hiding (make)+import BNFC.Options hiding (make, Backend)  import Paths_BNFC ( version ) @@ -61,18 +62,23 @@ main = do   args <- getArgs   case parseMode args of+     UsageError e -> printUsageErrors [e]-    Help    -> putStrLn help >> exitSuccess-    Version ->  putStrLn (showVersion version) >> exitSuccess-    Target options file | target options == TargetProfile ->-      readFile file >>= parseCFP options TargetProfile-                    >>= writeFiles (outDir options) . makeHaskellProfile options-    Target options file ->-      readFile file >>= parseCF options (target options) >>= make (target options) options-  where-    make t opts cf = writeFiles (outDir opts) $ (maketarget t) opts cf+    Help         -> putStrLn help >> exitSuccess+    Version      -> putStrLn (showVersion version) >> exitSuccess -maketarget t = case t of+    Target options file+      | target options == TargetProfile ->+          readFile file+            >>= parseCFP options TargetProfile+            >>= writeFiles (outDir options) . makeHaskellProfile options+      | otherwise ->+          readFile file+            >>= parseCF options (target options)+            >>= writeFiles (outDir options) . maketarget (target options) options++maketarget :: Target -> SharedOptions -> CF -> Backend+maketarget = \case     TargetC            -> makeC     TargetCpp          -> makeCppStl     TargetCppNoStl     -> makeCppNoStl@@ -82,5 +88,5 @@     TargetLatex        -> makeLatex     TargetJava         -> makeJava     TargetOCaml        -> makeOCaml-    TargetProfile      -> error "Not implemented"+    TargetProfile      -> error "impossible"     TargetPygments     -> makePygments
src/ParBNF.hs view
@@ -4,3148 +4,3830 @@ import AbsBNF import LexBNF import ErrM-import Control.Applicative(Applicative(..))-import Control.Monad (ap)---- parser produced by Happy Version 1.19.5--data HappyAbsSyn -	= HappyTerminal (Token)-	| HappyErrorToken Int-	| HappyAbsSyn36 (Ident)-	| HappyAbsSyn37 (String)-	| HappyAbsSyn38 (Integer)-	| HappyAbsSyn39 (Char)-	| HappyAbsSyn40 (Double)-	| HappyAbsSyn41 (LGrammar)-	| HappyAbsSyn42 (LDef)-	| HappyAbsSyn43 ([LDef])-	| HappyAbsSyn44 ([Ident])-	| HappyAbsSyn45 (Grammar)-	| HappyAbsSyn46 ([Def])-	| HappyAbsSyn47 (Def)-	| HappyAbsSyn48 (Item)-	| HappyAbsSyn49 ([Item])-	| HappyAbsSyn50 (Cat)-	| HappyAbsSyn51 (Label)-	| HappyAbsSyn52 (LabelId)-	| HappyAbsSyn53 (ProfItem)-	| HappyAbsSyn54 (IntList)-	| HappyAbsSyn55 ([Integer])-	| HappyAbsSyn56 ([IntList])-	| HappyAbsSyn57 ([ProfItem])-	| HappyAbsSyn58 (Arg)-	| HappyAbsSyn59 ([Arg])-	| HappyAbsSyn60 (Separation)-	| HappyAbsSyn61 ([String])-	| HappyAbsSyn62 (Exp)-	| HappyAbsSyn65 ([Exp])-	| HappyAbsSyn67 (RHS)-	| HappyAbsSyn68 ([RHS])-	| HappyAbsSyn69 (MinimumSize)-	| HappyAbsSyn70 (Reg)--{- to allow type-synonyms as our monads (likely- - with explicitly-specified bind and return)- - in Haskell98, it seems that with- - /type M a = .../, then /(HappyReduction M)/- - is not allowed.  But Happy is a- - code-generator that can just substitute it.-type HappyReduction m = -	   Int -	-> (Token)-	-> HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> m HappyAbsSyn)-	-> [HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> m HappyAbsSyn)] -	-> HappyStk HappyAbsSyn -	-> [(Token)] -> m HappyAbsSyn--}--action_0,- action_1,- action_2,- action_3,- action_4,- action_5,- action_6,- action_7,- action_8,- action_9,- action_10,- action_11,- action_12,- action_13,- action_14,- action_15,- action_16,- action_17,- action_18,- action_19,- action_20,- action_21,- action_22,- action_23,- action_24,- action_25,- action_26,- action_27,- action_28,- action_29,- action_30,- action_31,- action_32,- action_33,- action_34,- action_35,- action_36,- action_37,- action_38,- action_39,- action_40,- action_41,- action_42,- action_43,- action_44,- action_45,- action_46,- action_47,- action_48,- action_49,- action_50,- action_51,- action_52,- action_53,- action_54,- action_55,- action_56,- action_57,- action_58,- action_59,- action_60,- action_61,- action_62,- action_63,- action_64,- action_65,- action_66,- action_67,- action_68,- action_69,- action_70,- action_71,- action_72,- action_73,- action_74,- action_75,- action_76,- action_77,- action_78,- action_79,- action_80,- action_81,- action_82,- action_83,- action_84,- action_85,- action_86,- action_87,- action_88,- action_89,- action_90,- action_91,- action_92,- action_93,- action_94,- action_95,- action_96,- action_97,- action_98,- action_99,- action_100,- action_101,- action_102,- action_103,- action_104,- action_105,- action_106,- action_107,- action_108,- action_109,- action_110,- action_111,- action_112,- action_113,- action_114,- action_115,- action_116,- action_117,- action_118,- action_119,- action_120,- action_121,- action_122,- action_123,- action_124,- action_125,- action_126,- action_127,- action_128,- action_129,- action_130,- action_131,- action_132,- action_133,- action_134,- action_135,- action_136,- action_137,- action_138,- action_139,- action_140,- action_141,- action_142,- action_143,- action_144,- action_145,- action_146,- action_147,- action_148,- action_149,- action_150,- action_151,- action_152,- action_153,- action_154,- action_155,- action_156,- action_157,- action_158,- action_159,- action_160,- action_161,- action_162,- action_163,- action_164,- action_165,- action_166,- action_167,- action_168,- action_169,- action_170,- action_171,- action_172,- action_173,- action_174,- action_175,- action_176,- action_177,- action_178,- action_179,- action_180,- action_181,- action_182,- action_183,- action_184,- action_185,- action_186,- action_187,- action_188,- action_189,- action_190,- action_191,- action_192,- action_193,- action_194,- action_195,- action_196,- action_197,- action_198,- action_199,- action_200,- action_201,- action_202,- action_203,- action_204,- action_205,- action_206,- action_207,- action_208,- action_209,- action_210,- action_211,- action_212,- action_213,- action_214,- action_215,- action_216,- action_217,- action_218,- action_219,- action_220,- action_221,- action_222,- action_223,- action_224,- action_225,- action_226,- action_227,- action_228,- action_229,- action_230,- action_231,- action_232,- action_233,- action_234,- action_235,- action_236,- action_237,- action_238,- action_239,- action_240,- action_241,- action_242,- action_243,- action_244,- action_245,- action_246,- action_247,- action_248,- action_249,- action_250,- action_251,- action_252 :: () => Int -> ({-HappyReduction (Err) = -}-	   Int -	-> (Token)-	-> HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)-	-> [HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)] -	-> HappyStk HappyAbsSyn -	-> [(Token)] -> (Err) HappyAbsSyn)--happyReduce_33,- happyReduce_34,- happyReduce_35,- happyReduce_36,- happyReduce_37,- happyReduce_38,- happyReduce_39,- happyReduce_40,- happyReduce_41,- happyReduce_42,- happyReduce_43,- happyReduce_44,- happyReduce_45,- happyReduce_46,- happyReduce_47,- happyReduce_48,- happyReduce_49,- happyReduce_50,- happyReduce_51,- happyReduce_52,- happyReduce_53,- happyReduce_54,- happyReduce_55,- happyReduce_56,- happyReduce_57,- happyReduce_58,- happyReduce_59,- happyReduce_60,- happyReduce_61,- happyReduce_62,- happyReduce_63,- happyReduce_64,- happyReduce_65,- happyReduce_66,- happyReduce_67,- happyReduce_68,- happyReduce_69,- happyReduce_70,- happyReduce_71,- happyReduce_72,- happyReduce_73,- happyReduce_74,- happyReduce_75,- happyReduce_76,- happyReduce_77,- happyReduce_78,- happyReduce_79,- happyReduce_80,- happyReduce_81,- happyReduce_82,- happyReduce_83,- happyReduce_84,- happyReduce_85,- happyReduce_86,- happyReduce_87,- happyReduce_88,- happyReduce_89,- happyReduce_90,- happyReduce_91,- happyReduce_92,- happyReduce_93,- happyReduce_94,- happyReduce_95,- happyReduce_96,- happyReduce_97,- happyReduce_98,- happyReduce_99,- happyReduce_100,- happyReduce_101,- happyReduce_102,- happyReduce_103,- happyReduce_104,- happyReduce_105,- happyReduce_106,- happyReduce_107,- happyReduce_108,- happyReduce_109,- happyReduce_110,- happyReduce_111,- happyReduce_112,- happyReduce_113,- happyReduce_114,- happyReduce_115,- happyReduce_116,- happyReduce_117,- happyReduce_118,- happyReduce_119,- happyReduce_120,- happyReduce_121,- happyReduce_122,- happyReduce_123,- happyReduce_124,- happyReduce_125,- happyReduce_126,- happyReduce_127,- happyReduce_128,- happyReduce_129,- happyReduce_130,- happyReduce_131,- happyReduce_132,- happyReduce_133,- happyReduce_134,- happyReduce_135,- happyReduce_136,- happyReduce_137,- happyReduce_138,- happyReduce_139,- happyReduce_140,- happyReduce_141 :: () => ({-HappyReduction (Err) = -}-	   Int -	-> (Token)-	-> HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)-	-> [HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)] -	-> HappyStk HappyAbsSyn -	-> [(Token)] -> (Err) HappyAbsSyn)--action_0 (74) = happyShift action_99-action_0 (83) = happyShift action_137-action_0 (86) = happyShift action_100-action_0 (88) = happyShift action_101-action_0 (90) = happyShift action_113-action_0 (91) = happyShift action_114-action_0 (92) = happyShift action_115-action_0 (93) = happyShift action_116-action_0 (95) = happyShift action_117-action_0 (97) = happyShift action_118-action_0 (98) = happyShift action_119-action_0 (102) = happyShift action_120-action_0 (103) = happyShift action_121-action_0 (104) = happyShift action_122-action_0 (106) = happyShift action_123-action_0 (107) = happyShift action_124-action_0 (110) = happyShift action_138-action_0 (114) = happyShift action_34-action_0 (36) = happyGoto action_132-action_0 (41) = happyGoto action_140-action_0 (42) = happyGoto action_133-action_0 (43) = happyGoto action_141-action_0 (44) = happyGoto action_135-action_0 (47) = happyGoto action_136-action_0 (51) = happyGoto action_112-action_0 (52) = happyGoto action_103-action_0 _ = happyReduce_42--action_1 (74) = happyShift action_99-action_1 (86) = happyShift action_100-action_1 (88) = happyShift action_101-action_1 (90) = happyShift action_113-action_1 (91) = happyShift action_114-action_1 (92) = happyShift action_115-action_1 (93) = happyShift action_116-action_1 (95) = happyShift action_117-action_1 (97) = happyShift action_118-action_1 (98) = happyShift action_119-action_1 (102) = happyShift action_120-action_1 (103) = happyShift action_121-action_1 (104) = happyShift action_122-action_1 (106) = happyShift action_123-action_1 (107) = happyShift action_124-action_1 (110) = happyShift action_138-action_1 (114) = happyShift action_34-action_1 (36) = happyGoto action_132-action_1 (42) = happyGoto action_139-action_1 (44) = happyGoto action_135-action_1 (47) = happyGoto action_136-action_1 (51) = happyGoto action_112-action_1 (52) = happyGoto action_103-action_1 _ = happyFail--action_2 (74) = happyShift action_99-action_2 (83) = happyShift action_137-action_2 (86) = happyShift action_100-action_2 (88) = happyShift action_101-action_2 (90) = happyShift action_113-action_2 (91) = happyShift action_114-action_2 (92) = happyShift action_115-action_2 (93) = happyShift action_116-action_2 (95) = happyShift action_117-action_2 (97) = happyShift action_118-action_2 (98) = happyShift action_119-action_2 (102) = happyShift action_120-action_2 (103) = happyShift action_121-action_2 (104) = happyShift action_122-action_2 (106) = happyShift action_123-action_2 (107) = happyShift action_124-action_2 (110) = happyShift action_138-action_2 (114) = happyShift action_34-action_2 (36) = happyGoto action_132-action_2 (42) = happyGoto action_133-action_2 (43) = happyGoto action_134-action_2 (44) = happyGoto action_135-action_2 (47) = happyGoto action_136-action_2 (51) = happyGoto action_112-action_2 (52) = happyGoto action_103-action_2 _ = happyReduce_42--action_3 (114) = happyShift action_34-action_3 (36) = happyGoto action_130-action_3 (44) = happyGoto action_131-action_3 _ = happyFail--action_4 (74) = happyShift action_99-action_4 (83) = happyShift action_127-action_4 (86) = happyShift action_100-action_4 (88) = happyShift action_101-action_4 (90) = happyShift action_113-action_4 (91) = happyShift action_114-action_4 (92) = happyShift action_115-action_4 (93) = happyShift action_116-action_4 (95) = happyShift action_117-action_4 (97) = happyShift action_118-action_4 (98) = happyShift action_119-action_4 (102) = happyShift action_120-action_4 (103) = happyShift action_121-action_4 (104) = happyShift action_122-action_4 (106) = happyShift action_123-action_4 (107) = happyShift action_124-action_4 (114) = happyShift action_34-action_4 (36) = happyGoto action_97-action_4 (45) = happyGoto action_128-action_4 (46) = happyGoto action_129-action_4 (47) = happyGoto action_126-action_4 (51) = happyGoto action_112-action_4 (52) = happyGoto action_103-action_4 _ = happyReduce_49--action_5 (74) = happyShift action_99-action_5 (83) = happyShift action_127-action_5 (86) = happyShift action_100-action_5 (88) = happyShift action_101-action_5 (90) = happyShift action_113-action_5 (91) = happyShift action_114-action_5 (92) = happyShift action_115-action_5 (93) = happyShift action_116-action_5 (95) = happyShift action_117-action_5 (97) = happyShift action_118-action_5 (98) = happyShift action_119-action_5 (102) = happyShift action_120-action_5 (103) = happyShift action_121-action_5 (104) = happyShift action_122-action_5 (106) = happyShift action_123-action_5 (107) = happyShift action_124-action_5 (114) = happyShift action_34-action_5 (36) = happyGoto action_97-action_5 (46) = happyGoto action_125-action_5 (47) = happyGoto action_126-action_5 (51) = happyGoto action_112-action_5 (52) = happyGoto action_103-action_5 _ = happyReduce_49--action_6 (74) = happyShift action_99-action_6 (86) = happyShift action_100-action_6 (88) = happyShift action_101-action_6 (90) = happyShift action_113-action_6 (91) = happyShift action_114-action_6 (92) = happyShift action_115-action_6 (93) = happyShift action_116-action_6 (95) = happyShift action_117-action_6 (97) = happyShift action_118-action_6 (98) = happyShift action_119-action_6 (102) = happyShift action_120-action_6 (103) = happyShift action_121-action_6 (104) = happyShift action_122-action_6 (106) = happyShift action_123-action_6 (107) = happyShift action_124-action_6 (114) = happyShift action_34-action_6 (36) = happyGoto action_97-action_6 (47) = happyGoto action_111-action_6 (51) = happyGoto action_112-action_6 (52) = happyGoto action_103-action_6 _ = happyFail--action_7 (86) = happyShift action_106-action_7 (114) = happyShift action_34-action_7 (115) = happyShift action_68-action_7 (36) = happyGoto action_104-action_7 (37) = happyGoto action_108-action_7 (48) = happyGoto action_109-action_7 (50) = happyGoto action_110-action_7 _ = happyFail--action_8 (49) = happyGoto action_107-action_8 _ = happyReduce_71--action_9 (86) = happyShift action_106-action_9 (114) = happyShift action_34-action_9 (36) = happyGoto action_104-action_9 (50) = happyGoto action_105-action_9 _ = happyFail--action_10 (74) = happyShift action_99-action_10 (86) = happyShift action_100-action_10 (88) = happyShift action_101-action_10 (114) = happyShift action_34-action_10 (36) = happyGoto action_97-action_10 (51) = happyGoto action_102-action_10 (52) = happyGoto action_103-action_10 _ = happyFail--action_11 (74) = happyShift action_99-action_11 (86) = happyShift action_100-action_11 (88) = happyShift action_101-action_11 (114) = happyShift action_34-action_11 (36) = happyGoto action_97-action_11 (52) = happyGoto action_98-action_11 _ = happyFail--action_12 (74) = happyShift action_89-action_12 (53) = happyGoto action_96-action_12 _ = happyFail--action_13 (86) = happyShift action_92-action_13 (54) = happyGoto action_95-action_13 _ = happyFail--action_14 (116) = happyShift action_69-action_14 (38) = happyGoto action_93-action_14 (55) = happyGoto action_94-action_14 _ = happyReduce_86--action_15 (86) = happyShift action_92-action_15 (54) = happyGoto action_90-action_15 (56) = happyGoto action_91-action_15 _ = happyReduce_89--action_16 (74) = happyShift action_89-action_16 (53) = happyGoto action_87-action_16 (57) = happyGoto action_88-action_16 _ = happyFail--action_17 (114) = happyShift action_34-action_17 (36) = happyGoto action_85-action_17 (58) = happyGoto action_86-action_17 _ = happyFail--action_18 (59) = happyGoto action_84-action_18 _ = happyReduce_95--action_19 (104) = happyShift action_82-action_19 (106) = happyShift action_83-action_19 (60) = happyGoto action_81-action_19 _ = happyReduce_97--action_20 (115) = happyShift action_68-action_20 (37) = happyGoto action_79-action_20 (61) = happyGoto action_80-action_20 _ = happyFail--action_21 (74) = happyShift action_66-action_21 (86) = happyShift action_67-action_21 (114) = happyShift action_34-action_21 (115) = happyShift action_68-action_21 (116) = happyShift action_69-action_21 (117) = happyShift action_49-action_21 (118) = happyShift action_70-action_21 (36) = happyGoto action_71-action_21 (37) = happyGoto action_60-action_21 (38) = happyGoto action_61-action_21 (39) = happyGoto action_62-action_21 (40) = happyGoto action_63-action_21 (62) = happyGoto action_78-action_21 (63) = happyGoto action_73-action_21 (64) = happyGoto action_74-action_21 _ = happyFail--action_22 (74) = happyShift action_66-action_22 (86) = happyShift action_67-action_22 (114) = happyShift action_34-action_22 (115) = happyShift action_68-action_22 (116) = happyShift action_69-action_22 (117) = happyShift action_49-action_22 (118) = happyShift action_70-action_22 (36) = happyGoto action_71-action_22 (37) = happyGoto action_60-action_22 (38) = happyGoto action_61-action_22 (39) = happyGoto action_62-action_22 (40) = happyGoto action_63-action_22 (63) = happyGoto action_77-action_22 (64) = happyGoto action_74-action_22 _ = happyFail--action_23 (74) = happyShift action_66-action_23 (86) = happyShift action_67-action_23 (114) = happyShift action_34-action_23 (115) = happyShift action_68-action_23 (116) = happyShift action_69-action_23 (117) = happyShift action_49-action_23 (118) = happyShift action_70-action_23 (36) = happyGoto action_59-action_23 (37) = happyGoto action_60-action_23 (38) = happyGoto action_61-action_23 (39) = happyGoto action_62-action_23 (40) = happyGoto action_63-action_23 (64) = happyGoto action_76-action_23 _ = happyFail--action_24 (74) = happyShift action_66-action_24 (86) = happyShift action_67-action_24 (114) = happyShift action_34-action_24 (115) = happyShift action_68-action_24 (116) = happyShift action_69-action_24 (117) = happyShift action_49-action_24 (118) = happyShift action_70-action_24 (36) = happyGoto action_71-action_24 (37) = happyGoto action_60-action_24 (38) = happyGoto action_61-action_24 (39) = happyGoto action_62-action_24 (40) = happyGoto action_63-action_24 (62) = happyGoto action_72-action_24 (63) = happyGoto action_73-action_24 (64) = happyGoto action_74-action_24 (65) = happyGoto action_75-action_24 _ = happyReduce_113--action_25 (74) = happyShift action_66-action_25 (86) = happyShift action_67-action_25 (114) = happyShift action_34-action_25 (115) = happyShift action_68-action_25 (116) = happyShift action_69-action_25 (117) = happyShift action_49-action_25 (118) = happyShift action_70-action_25 (36) = happyGoto action_59-action_25 (37) = happyGoto action_60-action_25 (38) = happyGoto action_61-action_25 (39) = happyGoto action_62-action_25 (40) = happyGoto action_63-action_25 (64) = happyGoto action_64-action_25 (66) = happyGoto action_65-action_25 _ = happyFail--action_26 (49) = happyGoto action_55-action_26 (67) = happyGoto action_58-action_26 _ = happyReduce_71--action_27 (49) = happyGoto action_55-action_27 (67) = happyGoto action_56-action_27 (68) = happyGoto action_57-action_27 _ = happyReduce_71--action_28 (101) = happyShift action_54-action_28 (69) = happyGoto action_53-action_28 _ = happyReduce_122--action_29 (74) = happyShift action_40-action_29 (86) = happyShift action_41-action_29 (89) = happyShift action_42-action_29 (94) = happyShift action_43-action_29 (96) = happyShift action_44-action_29 (99) = happyShift action_45-action_29 (100) = happyShift action_46-action_29 (109) = happyShift action_47-action_29 (111) = happyShift action_48-action_29 (117) = happyShift action_49-action_29 (39) = happyGoto action_35-action_29 (70) = happyGoto action_52-action_29 (72) = happyGoto action_38-action_29 _ = happyFail--action_30 (74) = happyShift action_40-action_30 (86) = happyShift action_41-action_30 (89) = happyShift action_42-action_30 (94) = happyShift action_43-action_30 (96) = happyShift action_44-action_30 (99) = happyShift action_45-action_30 (100) = happyShift action_46-action_30 (109) = happyShift action_47-action_30 (111) = happyShift action_48-action_30 (117) = happyShift action_49-action_30 (39) = happyGoto action_35-action_30 (70) = happyGoto action_36-action_30 (71) = happyGoto action_51-action_30 (72) = happyGoto action_38-action_30 _ = happyFail--action_31 (74) = happyShift action_40-action_31 (86) = happyShift action_41-action_31 (89) = happyShift action_42-action_31 (94) = happyShift action_43-action_31 (96) = happyShift action_44-action_31 (99) = happyShift action_45-action_31 (100) = happyShift action_46-action_31 (109) = happyShift action_47-action_31 (111) = happyShift action_48-action_31 (117) = happyShift action_49-action_31 (39) = happyGoto action_35-action_31 (72) = happyGoto action_50-action_31 _ = happyFail--action_32 (74) = happyShift action_40-action_32 (86) = happyShift action_41-action_32 (89) = happyShift action_42-action_32 (94) = happyShift action_43-action_32 (96) = happyShift action_44-action_32 (99) = happyShift action_45-action_32 (100) = happyShift action_46-action_32 (109) = happyShift action_47-action_32 (111) = happyShift action_48-action_32 (117) = happyShift action_49-action_32 (39) = happyGoto action_35-action_32 (70) = happyGoto action_36-action_32 (71) = happyGoto action_37-action_32 (72) = happyGoto action_38-action_32 (73) = happyGoto action_39-action_32 _ = happyFail--action_33 (114) = happyShift action_34-action_33 _ = happyFail--action_34 _ = happyReduce_33--action_35 _ = happyReduce_132--action_36 (74) = happyShift action_40-action_36 (79) = happyShift action_195-action_36 (86) = happyShift action_41-action_36 (89) = happyShift action_42-action_36 (94) = happyShift action_43-action_36 (96) = happyShift action_44-action_36 (99) = happyShift action_45-action_36 (100) = happyShift action_46-action_36 (109) = happyShift action_47-action_36 (111) = happyShift action_48-action_36 (117) = happyShift action_49-action_36 (39) = happyGoto action_35-action_36 (72) = happyGoto action_187-action_36 _ = happyReduce_127--action_37 (112) = happyShift action_188-action_37 _ = happyReduce_141--action_38 (76) = happyShift action_189-action_38 (77) = happyShift action_190-action_38 (85) = happyShift action_191-action_38 _ = happyReduce_124--action_39 (119) = happyAccept-action_39 _ = happyFail--action_40 (74) = happyShift action_40-action_40 (86) = happyShift action_41-action_40 (89) = happyShift action_42-action_40 (94) = happyShift action_43-action_40 (96) = happyShift action_44-action_40 (99) = happyShift action_45-action_40 (100) = happyShift action_46-action_40 (109) = happyShift action_47-action_40 (111) = happyShift action_48-action_40 (117) = happyShift action_49-action_40 (39) = happyGoto action_35-action_40 (70) = happyGoto action_36-action_40 (71) = happyGoto action_37-action_40 (72) = happyGoto action_38-action_40 (73) = happyGoto action_194-action_40 _ = happyFail--action_41 (115) = happyShift action_68-action_41 (37) = happyGoto action_193-action_41 _ = happyFail--action_42 _ = happyReduce_139--action_43 _ = happyReduce_135--action_44 _ = happyReduce_131--action_45 _ = happyReduce_136--action_46 _ = happyReduce_138--action_47 _ = happyReduce_137--action_48 (115) = happyShift action_68-action_48 (37) = happyGoto action_192-action_48 _ = happyFail--action_49 _ = happyReduce_36--action_50 (76) = happyShift action_189-action_50 (77) = happyShift action_190-action_50 (85) = happyShift action_191-action_50 (119) = happyAccept-action_50 _ = happyFail--action_51 (112) = happyShift action_188-action_51 (119) = happyAccept-action_51 _ = happyFail--action_52 (74) = happyShift action_40-action_52 (86) = happyShift action_41-action_52 (89) = happyShift action_42-action_52 (94) = happyShift action_43-action_52 (96) = happyShift action_44-action_52 (99) = happyShift action_45-action_52 (100) = happyShift action_46-action_52 (109) = happyShift action_47-action_52 (111) = happyShift action_48-action_52 (117) = happyShift action_49-action_52 (119) = happyAccept-action_52 (39) = happyGoto action_35-action_52 (72) = happyGoto action_187-action_52 _ = happyFail--action_53 (119) = happyAccept-action_53 _ = happyFail--action_54 _ = happyReduce_121--action_55 (86) = happyShift action_106-action_55 (114) = happyShift action_34-action_55 (115) = happyShift action_68-action_55 (36) = happyGoto action_104-action_55 (37) = happyGoto action_108-action_55 (48) = happyGoto action_164-action_55 (50) = happyGoto action_110-action_55 _ = happyReduce_118--action_56 (112) = happyShift action_186-action_56 _ = happyReduce_119--action_57 (119) = happyAccept-action_57 _ = happyFail--action_58 (119) = happyAccept-action_58 _ = happyFail--action_59 _ = happyReduce_106--action_60 _ = happyReduce_109--action_61 _ = happyReduce_107--action_62 _ = happyReduce_108--action_63 _ = happyReduce_110--action_64 (74) = happyShift action_66-action_64 (86) = happyShift action_67-action_64 (114) = happyShift action_34-action_64 (115) = happyShift action_68-action_64 (116) = happyShift action_69-action_64 (117) = happyShift action_49-action_64 (118) = happyShift action_70-action_64 (36) = happyGoto action_59-action_64 (37) = happyGoto action_60-action_64 (38) = happyGoto action_61-action_64 (39) = happyGoto action_62-action_64 (40) = happyGoto action_63-action_64 (64) = happyGoto action_64-action_64 (66) = happyGoto action_185-action_64 _ = happyReduce_116--action_65 (119) = happyAccept-action_65 _ = happyFail--action_66 (74) = happyShift action_66-action_66 (86) = happyShift action_67-action_66 (114) = happyShift action_34-action_66 (115) = happyShift action_68-action_66 (116) = happyShift action_69-action_66 (117) = happyShift action_49-action_66 (118) = happyShift action_70-action_66 (36) = happyGoto action_71-action_66 (37) = happyGoto action_60-action_66 (38) = happyGoto action_61-action_66 (39) = happyGoto action_62-action_66 (40) = happyGoto action_63-action_66 (62) = happyGoto action_184-action_66 (63) = happyGoto action_73-action_66 (64) = happyGoto action_74-action_66 _ = happyFail--action_67 (74) = happyShift action_66-action_67 (86) = happyShift action_67-action_67 (114) = happyShift action_34-action_67 (115) = happyShift action_68-action_67 (116) = happyShift action_69-action_67 (117) = happyShift action_49-action_67 (118) = happyShift action_70-action_67 (36) = happyGoto action_71-action_67 (37) = happyGoto action_60-action_67 (38) = happyGoto action_61-action_67 (39) = happyGoto action_62-action_67 (40) = happyGoto action_63-action_67 (62) = happyGoto action_72-action_67 (63) = happyGoto action_73-action_67 (64) = happyGoto action_74-action_67 (65) = happyGoto action_183-action_67 _ = happyReduce_113--action_68 _ = happyReduce_34--action_69 _ = happyReduce_35--action_70 _ = happyReduce_37--action_71 (74) = happyShift action_66-action_71 (86) = happyShift action_67-action_71 (114) = happyShift action_34-action_71 (115) = happyShift action_68-action_71 (116) = happyShift action_69-action_71 (117) = happyShift action_49-action_71 (118) = happyShift action_70-action_71 (36) = happyGoto action_59-action_71 (37) = happyGoto action_60-action_71 (38) = happyGoto action_61-action_71 (39) = happyGoto action_62-action_71 (40) = happyGoto action_63-action_71 (64) = happyGoto action_64-action_71 (66) = happyGoto action_182-action_71 _ = happyReduce_106--action_72 (78) = happyShift action_181-action_72 _ = happyReduce_114--action_73 (81) = happyShift action_180-action_73 _ = happyReduce_103--action_74 _ = happyReduce_105--action_75 (119) = happyAccept-action_75 _ = happyFail--action_76 (119) = happyAccept-action_76 _ = happyFail--action_77 (119) = happyAccept-action_77 _ = happyFail--action_78 (119) = happyAccept-action_78 _ = happyFail--action_79 (78) = happyShift action_179-action_79 _ = happyReduce_100--action_80 (119) = happyAccept-action_80 _ = happyFail--action_81 (119) = happyAccept-action_81 _ = happyFail--action_82 (115) = happyShift action_68-action_82 (37) = happyGoto action_178-action_82 _ = happyFail--action_83 (115) = happyShift action_68-action_83 (37) = happyGoto action_177-action_83 _ = happyFail--action_84 (114) = happyShift action_34-action_84 (119) = happyAccept-action_84 (36) = happyGoto action_85-action_84 (58) = happyGoto action_176-action_84 _ = happyFail--action_85 _ = happyReduce_94--action_86 (119) = happyAccept-action_86 _ = happyFail--action_87 (74) = happyShift action_89-action_87 (53) = happyGoto action_87-action_87 (57) = happyGoto action_175-action_87 _ = happyReduce_92--action_88 (119) = happyAccept-action_88 _ = happyFail--action_89 (86) = happyShift action_174-action_89 _ = happyFail--action_90 (78) = happyShift action_173-action_90 _ = happyReduce_90--action_91 (119) = happyAccept-action_91 _ = happyFail--action_92 (116) = happyShift action_69-action_92 (38) = happyGoto action_93-action_92 (55) = happyGoto action_172-action_92 _ = happyReduce_86--action_93 (78) = happyShift action_171-action_93 _ = happyReduce_87--action_94 (119) = happyAccept-action_94 _ = happyFail--action_95 (119) = happyAccept-action_95 _ = happyFail--action_96 (119) = happyAccept-action_96 _ = happyFail--action_97 _ = happyReduce_79--action_98 (119) = happyAccept-action_98 _ = happyFail--action_99 (81) = happyShift action_170-action_99 _ = happyFail--action_100 (87) = happyShift action_169-action_100 _ = happyFail--action_101 _ = happyReduce_80--action_102 (119) = happyAccept-action_102 _ = happyFail--action_103 (74) = happyShift action_168-action_103 (86) = happyShift action_100-action_103 (88) = happyShift action_101-action_103 (114) = happyShift action_34-action_103 (36) = happyGoto action_97-action_103 (52) = happyGoto action_166-action_103 (53) = happyGoto action_87-action_103 (57) = happyGoto action_167-action_103 _ = happyReduce_75--action_104 _ = happyReduce_74--action_105 (119) = happyAccept-action_105 _ = happyFail--action_106 (86) = happyShift action_106-action_106 (114) = happyShift action_34-action_106 (36) = happyGoto action_104-action_106 (50) = happyGoto action_165-action_106 _ = happyFail--action_107 (86) = happyShift action_106-action_107 (114) = happyShift action_34-action_107 (115) = happyShift action_68-action_107 (119) = happyAccept-action_107 (36) = happyGoto action_104-action_107 (37) = happyGoto action_108-action_107 (48) = happyGoto action_164-action_107 (50) = happyGoto action_110-action_107 _ = happyFail--action_108 _ = happyReduce_69--action_109 (119) = happyAccept-action_109 _ = happyFail--action_110 _ = happyReduce_70--action_111 (119) = happyAccept-action_111 _ = happyFail--action_112 (80) = happyShift action_163-action_112 _ = happyFail--action_113 (114) = happyShift action_34-action_113 (36) = happyGoto action_162-action_113 _ = happyFail--action_114 (115) = happyShift action_68-action_114 (37) = happyGoto action_161-action_114 _ = happyFail--action_115 (114) = happyShift action_34-action_115 (36) = happyGoto action_160-action_115 _ = happyFail--action_116 (86) = happyShift action_106-action_116 (114) = happyShift action_34-action_116 (36) = happyGoto action_104-action_116 (50) = happyGoto action_159-action_116 _ = happyFail--action_117 (114) = happyShift action_34-action_117 (36) = happyGoto action_130-action_117 (44) = happyGoto action_158-action_117 _ = happyFail--action_118 (74) = happyShift action_99-action_118 (86) = happyShift action_100-action_118 (88) = happyShift action_101-action_118 (114) = happyShift action_34-action_118 (36) = happyGoto action_97-action_118 (51) = happyGoto action_157-action_118 (52) = happyGoto action_103-action_118 _ = happyFail--action_119 (105) = happyShift action_155-action_119 (108) = happyShift action_156-action_119 (115) = happyShift action_68-action_119 (37) = happyGoto action_79-action_119 (61) = happyGoto action_154-action_119 _ = happyFail--action_120 (107) = happyShift action_153-action_120 _ = happyFail--action_121 (114) = happyShift action_34-action_121 (36) = happyGoto action_152-action_121 _ = happyFail--action_122 (101) = happyShift action_54-action_122 (69) = happyGoto action_151-action_122 _ = happyReduce_122--action_123 (101) = happyShift action_54-action_123 (69) = happyGoto action_150-action_123 _ = happyReduce_122--action_124 (114) = happyShift action_34-action_124 (36) = happyGoto action_149-action_124 _ = happyFail--action_125 (119) = happyAccept-action_125 _ = happyFail--action_126 (83) = happyShift action_148-action_126 _ = happyReduce_50--action_127 (74) = happyShift action_99-action_127 (83) = happyShift action_127-action_127 (86) = happyShift action_100-action_127 (88) = happyShift action_101-action_127 (90) = happyShift action_113-action_127 (91) = happyShift action_114-action_127 (92) = happyShift action_115-action_127 (93) = happyShift action_116-action_127 (95) = happyShift action_117-action_127 (97) = happyShift action_118-action_127 (98) = happyShift action_119-action_127 (102) = happyShift action_120-action_127 (103) = happyShift action_121-action_127 (104) = happyShift action_122-action_127 (106) = happyShift action_123-action_127 (107) = happyShift action_124-action_127 (114) = happyShift action_34-action_127 (36) = happyGoto action_97-action_127 (46) = happyGoto action_147-action_127 (47) = happyGoto action_126-action_127 (51) = happyGoto action_112-action_127 (52) = happyGoto action_103-action_127 _ = happyReduce_49--action_128 (119) = happyAccept-action_128 _ = happyFail--action_129 _ = happyReduce_48--action_130 (78) = happyShift action_146-action_130 _ = happyReduce_46--action_131 (119) = happyAccept-action_131 _ = happyFail--action_132 (78) = happyShift action_146-action_132 (81) = happyReduce_46-action_132 _ = happyReduce_79--action_133 (83) = happyShift action_145-action_133 _ = happyReduce_43--action_134 (119) = happyAccept-action_134 _ = happyFail--action_135 (81) = happyShift action_144-action_135 _ = happyFail--action_136 _ = happyReduce_39--action_137 (74) = happyShift action_99-action_137 (83) = happyShift action_137-action_137 (86) = happyShift action_100-action_137 (88) = happyShift action_101-action_137 (90) = happyShift action_113-action_137 (91) = happyShift action_114-action_137 (92) = happyShift action_115-action_137 (93) = happyShift action_116-action_137 (95) = happyShift action_117-action_137 (97) = happyShift action_118-action_137 (98) = happyShift action_119-action_137 (102) = happyShift action_120-action_137 (103) = happyShift action_121-action_137 (104) = happyShift action_122-action_137 (106) = happyShift action_123-action_137 (107) = happyShift action_124-action_137 (110) = happyShift action_138-action_137 (114) = happyShift action_34-action_137 (36) = happyGoto action_132-action_137 (42) = happyGoto action_133-action_137 (43) = happyGoto action_143-action_137 (44) = happyGoto action_135-action_137 (47) = happyGoto action_136-action_137 (51) = happyGoto action_112-action_137 (52) = happyGoto action_103-action_137 _ = happyReduce_42--action_138 (114) = happyShift action_34-action_138 (36) = happyGoto action_130-action_138 (44) = happyGoto action_142-action_138 _ = happyFail--action_139 (119) = happyAccept-action_139 _ = happyFail--action_140 (119) = happyAccept-action_140 _ = happyFail--action_141 _ = happyReduce_38--action_142 _ = happyReduce_41--action_143 _ = happyReduce_45--action_144 (74) = happyShift action_99-action_144 (86) = happyShift action_100-action_144 (88) = happyShift action_101-action_144 (90) = happyShift action_113-action_144 (91) = happyShift action_114-action_144 (92) = happyShift action_115-action_144 (93) = happyShift action_116-action_144 (95) = happyShift action_117-action_144 (97) = happyShift action_118-action_144 (98) = happyShift action_119-action_144 (102) = happyShift action_120-action_144 (103) = happyShift action_121-action_144 (104) = happyShift action_122-action_144 (106) = happyShift action_123-action_144 (107) = happyShift action_124-action_144 (114) = happyShift action_34-action_144 (36) = happyGoto action_97-action_144 (47) = happyGoto action_230-action_144 (51) = happyGoto action_112-action_144 (52) = happyGoto action_103-action_144 _ = happyFail--action_145 (74) = happyShift action_99-action_145 (83) = happyShift action_137-action_145 (86) = happyShift action_100-action_145 (88) = happyShift action_101-action_145 (90) = happyShift action_113-action_145 (91) = happyShift action_114-action_145 (92) = happyShift action_115-action_145 (93) = happyShift action_116-action_145 (95) = happyShift action_117-action_145 (97) = happyShift action_118-action_145 (98) = happyShift action_119-action_145 (102) = happyShift action_120-action_145 (103) = happyShift action_121-action_145 (104) = happyShift action_122-action_145 (106) = happyShift action_123-action_145 (107) = happyShift action_124-action_145 (110) = happyShift action_138-action_145 (114) = happyShift action_34-action_145 (36) = happyGoto action_132-action_145 (42) = happyGoto action_133-action_145 (43) = happyGoto action_229-action_145 (44) = happyGoto action_135-action_145 (47) = happyGoto action_136-action_145 (51) = happyGoto action_112-action_145 (52) = happyGoto action_103-action_145 _ = happyReduce_42--action_146 (114) = happyShift action_34-action_146 (36) = happyGoto action_130-action_146 (44) = happyGoto action_228-action_146 _ = happyFail--action_147 _ = happyReduce_52--action_148 (74) = happyShift action_99-action_148 (83) = happyShift action_127-action_148 (86) = happyShift action_100-action_148 (88) = happyShift action_101-action_148 (90) = happyShift action_113-action_148 (91) = happyShift action_114-action_148 (92) = happyShift action_115-action_148 (93) = happyShift action_116-action_148 (95) = happyShift action_117-action_148 (97) = happyShift action_118-action_148 (98) = happyShift action_119-action_148 (102) = happyShift action_120-action_148 (103) = happyShift action_121-action_148 (104) = happyShift action_122-action_148 (106) = happyShift action_123-action_148 (107) = happyShift action_124-action_148 (114) = happyShift action_34-action_148 (36) = happyGoto action_97-action_148 (46) = happyGoto action_227-action_148 (47) = happyGoto action_126-action_148 (51) = happyGoto action_112-action_148 (52) = happyGoto action_103-action_148 _ = happyReduce_49--action_149 (74) = happyShift action_40-action_149 (86) = happyShift action_41-action_149 (89) = happyShift action_42-action_149 (94) = happyShift action_43-action_149 (96) = happyShift action_44-action_149 (99) = happyShift action_45-action_149 (100) = happyShift action_46-action_149 (109) = happyShift action_47-action_149 (111) = happyShift action_48-action_149 (117) = happyShift action_49-action_149 (39) = happyGoto action_35-action_149 (70) = happyGoto action_36-action_149 (71) = happyGoto action_37-action_149 (72) = happyGoto action_38-action_149 (73) = happyGoto action_226-action_149 _ = happyFail--action_150 (86) = happyShift action_106-action_150 (114) = happyShift action_34-action_150 (36) = happyGoto action_104-action_150 (50) = happyGoto action_225-action_150 _ = happyFail--action_151 (86) = happyShift action_106-action_151 (114) = happyShift action_34-action_151 (36) = happyGoto action_104-action_151 (50) = happyGoto action_224-action_151 _ = happyFail--action_152 (82) = happyShift action_223-action_152 _ = happyFail--action_153 (114) = happyShift action_34-action_153 (36) = happyGoto action_222-action_153 _ = happyFail--action_154 _ = happyReduce_66--action_155 (115) = happyShift action_68-action_155 (37) = happyGoto action_79-action_155 (61) = happyGoto action_221-action_155 _ = happyFail--action_156 _ = happyReduce_68--action_157 (80) = happyShift action_220-action_157 _ = happyFail--action_158 _ = happyReduce_59--action_159 (115) = happyShift action_68-action_159 (37) = happyGoto action_219-action_159 _ = happyFail--action_160 (59) = happyGoto action_218-action_160 _ = happyReduce_95--action_161 (115) = happyShift action_68-action_161 (37) = happyGoto action_217-action_161 _ = happyReduce_54--action_162 (116) = happyShift action_69-action_162 (38) = happyGoto action_216-action_162 _ = happyFail--action_163 (86) = happyShift action_106-action_163 (114) = happyShift action_34-action_163 (36) = happyGoto action_104-action_163 (50) = happyGoto action_215-action_163 _ = happyFail--action_164 _ = happyReduce_72--action_165 (87) = happyShift action_214-action_165 _ = happyFail--action_166 (74) = happyShift action_89-action_166 (53) = happyGoto action_87-action_166 (57) = happyGoto action_213-action_166 _ = happyReduce_78--action_167 _ = happyReduce_76--action_168 (81) = happyShift action_170-action_168 (86) = happyShift action_174-action_168 _ = happyFail--action_169 _ = happyReduce_81--action_170 (75) = happyShift action_211-action_170 (86) = happyShift action_212-action_170 _ = happyFail--action_171 (116) = happyShift action_69-action_171 (38) = happyGoto action_93-action_171 (55) = happyGoto action_210-action_171 _ = happyReduce_86--action_172 (87) = happyShift action_209-action_172 _ = happyFail--action_173 (86) = happyShift action_92-action_173 (54) = happyGoto action_90-action_173 (56) = happyGoto action_208-action_173 _ = happyReduce_89--action_174 (86) = happyShift action_92-action_174 (54) = happyGoto action_90-action_174 (56) = happyGoto action_207-action_174 _ = happyReduce_89--action_175 _ = happyReduce_93--action_176 _ = happyReduce_96--action_177 _ = happyReduce_98--action_178 _ = happyReduce_99--action_179 (115) = happyShift action_68-action_179 (37) = happyGoto action_79-action_179 (61) = happyGoto action_206-action_179 _ = happyFail--action_180 (74) = happyShift action_66-action_180 (86) = happyShift action_67-action_180 (114) = happyShift action_34-action_180 (115) = happyShift action_68-action_180 (116) = happyShift action_69-action_180 (117) = happyShift action_49-action_180 (118) = happyShift action_70-action_180 (36) = happyGoto action_71-action_180 (37) = happyGoto action_60-action_180 (38) = happyGoto action_61-action_180 (39) = happyGoto action_62-action_180 (40) = happyGoto action_63-action_180 (62) = happyGoto action_205-action_180 (63) = happyGoto action_73-action_180 (64) = happyGoto action_74-action_180 _ = happyFail--action_181 (74) = happyShift action_66-action_181 (86) = happyShift action_67-action_181 (114) = happyShift action_34-action_181 (115) = happyShift action_68-action_181 (116) = happyShift action_69-action_181 (117) = happyShift action_49-action_181 (118) = happyShift action_70-action_181 (36) = happyGoto action_71-action_181 (37) = happyGoto action_60-action_181 (38) = happyGoto action_61-action_181 (39) = happyGoto action_62-action_181 (40) = happyGoto action_63-action_181 (62) = happyGoto action_72-action_181 (63) = happyGoto action_73-action_181 (64) = happyGoto action_74-action_181 (65) = happyGoto action_204-action_181 _ = happyReduce_113--action_182 _ = happyReduce_104--action_183 (87) = happyShift action_203-action_183 _ = happyFail--action_184 (75) = happyShift action_202-action_184 _ = happyFail--action_185 _ = happyReduce_117--action_186 (49) = happyGoto action_55-action_186 (67) = happyGoto action_56-action_186 (68) = happyGoto action_201-action_186 _ = happyReduce_71--action_187 (76) = happyShift action_189-action_187 (77) = happyShift action_190-action_187 (85) = happyShift action_191-action_187 _ = happyReduce_123--action_188 (74) = happyShift action_40-action_188 (86) = happyShift action_41-action_188 (89) = happyShift action_42-action_188 (94) = happyShift action_43-action_188 (96) = happyShift action_44-action_188 (99) = happyShift action_45-action_188 (100) = happyShift action_46-action_188 (109) = happyShift action_47-action_188 (111) = happyShift action_48-action_188 (117) = happyShift action_49-action_188 (39) = happyGoto action_35-action_188 (70) = happyGoto action_200-action_188 (72) = happyGoto action_38-action_188 _ = happyFail--action_189 _ = happyReduce_128--action_190 _ = happyReduce_129--action_191 _ = happyReduce_130--action_192 (113) = happyShift action_199-action_192 _ = happyFail--action_193 (87) = happyShift action_198-action_193 _ = happyFail--action_194 (75) = happyShift action_197-action_194 _ = happyFail--action_195 (74) = happyShift action_40-action_195 (86) = happyShift action_41-action_195 (89) = happyShift action_42-action_195 (94) = happyShift action_43-action_195 (96) = happyShift action_44-action_195 (99) = happyShift action_45-action_195 (100) = happyShift action_46-action_195 (109) = happyShift action_47-action_195 (111) = happyShift action_48-action_195 (117) = happyShift action_49-action_195 (39) = happyGoto action_35-action_195 (70) = happyGoto action_196-action_195 (72) = happyGoto action_38-action_195 _ = happyFail--action_196 (74) = happyShift action_40-action_196 (86) = happyShift action_41-action_196 (89) = happyShift action_42-action_196 (94) = happyShift action_43-action_196 (96) = happyShift action_44-action_196 (99) = happyShift action_45-action_196 (100) = happyShift action_46-action_196 (109) = happyShift action_47-action_196 (111) = happyShift action_48-action_196 (117) = happyShift action_49-action_196 (39) = happyGoto action_35-action_196 (72) = happyGoto action_187-action_196 _ = happyReduce_126--action_197 _ = happyReduce_140--action_198 _ = happyReduce_133--action_199 _ = happyReduce_134--action_200 (74) = happyShift action_40-action_200 (86) = happyShift action_41-action_200 (89) = happyShift action_42-action_200 (94) = happyShift action_43-action_200 (96) = happyShift action_44-action_200 (99) = happyShift action_45-action_200 (100) = happyShift action_46-action_200 (109) = happyShift action_47-action_200 (111) = happyShift action_48-action_200 (117) = happyShift action_49-action_200 (39) = happyGoto action_35-action_200 (72) = happyGoto action_187-action_200 _ = happyReduce_125--action_201 _ = happyReduce_120--action_202 _ = happyReduce_112--action_203 _ = happyReduce_111--action_204 _ = happyReduce_115--action_205 _ = happyReduce_102--action_206 _ = happyReduce_101--action_207 (87) = happyShift action_240-action_207 _ = happyFail--action_208 _ = happyReduce_91--action_209 _ = happyReduce_85--action_210 _ = happyReduce_88--action_211 _ = happyReduce_82--action_212 (87) = happyShift action_239-action_212 _ = happyFail--action_213 _ = happyReduce_77--action_214 _ = happyReduce_73--action_215 (82) = happyShift action_238-action_215 _ = happyFail--action_216 _ = happyReduce_63--action_217 _ = happyReduce_55--action_218 (84) = happyShift action_237-action_218 (114) = happyShift action_34-action_218 (36) = happyGoto action_85-action_218 (58) = happyGoto action_176-action_218 _ = happyFail--action_219 (115) = happyShift action_68-action_219 (37) = happyGoto action_236-action_219 _ = happyFail--action_220 (86) = happyShift action_106-action_220 (114) = happyShift action_34-action_220 (36) = happyGoto action_104-action_220 (50) = happyGoto action_235-action_220 _ = happyFail--action_221 _ = happyReduce_67--action_222 (74) = happyShift action_40-action_222 (86) = happyShift action_41-action_222 (89) = happyShift action_42-action_222 (94) = happyShift action_43-action_222 (96) = happyShift action_44-action_222 (99) = happyShift action_45-action_222 (100) = happyShift action_46-action_222 (109) = happyShift action_47-action_222 (111) = happyShift action_48-action_222 (117) = happyShift action_49-action_222 (39) = happyGoto action_35-action_222 (70) = happyGoto action_36-action_222 (71) = happyGoto action_37-action_222 (72) = happyGoto action_38-action_222 (73) = happyGoto action_234-action_222 _ = happyFail--action_223 (49) = happyGoto action_55-action_223 (67) = happyGoto action_56-action_223 (68) = happyGoto action_233-action_223 _ = happyReduce_71--action_224 (115) = happyShift action_68-action_224 (37) = happyGoto action_232-action_224 _ = happyFail--action_225 (115) = happyShift action_68-action_225 (37) = happyGoto action_231-action_225 _ = happyFail--action_226 _ = happyReduce_57--action_227 _ = happyReduce_51--action_228 _ = happyReduce_47--action_229 _ = happyReduce_44--action_230 _ = happyReduce_40--action_231 _ = happyReduce_61--action_232 _ = happyReduce_60--action_233 _ = happyReduce_64--action_234 _ = happyReduce_58--action_235 (82) = happyShift action_246-action_235 _ = happyFail--action_236 (104) = happyShift action_82-action_236 (106) = happyShift action_83-action_236 (60) = happyGoto action_245-action_236 _ = happyReduce_97--action_237 (74) = happyShift action_66-action_237 (86) = happyShift action_67-action_237 (114) = happyShift action_34-action_237 (115) = happyShift action_68-action_237 (116) = happyShift action_69-action_237 (117) = happyShift action_49-action_237 (118) = happyShift action_70-action_237 (36) = happyGoto action_71-action_237 (37) = happyGoto action_60-action_237 (38) = happyGoto action_61-action_237 (39) = happyGoto action_62-action_237 (40) = happyGoto action_63-action_237 (62) = happyGoto action_244-action_237 (63) = happyGoto action_73-action_237 (64) = happyGoto action_74-action_237 _ = happyFail--action_238 (49) = happyGoto action_243-action_238 _ = happyReduce_71--action_239 (75) = happyShift action_242-action_239 _ = happyFail--action_240 (78) = happyShift action_241-action_240 _ = happyFail--action_241 (86) = happyShift action_249-action_241 _ = happyFail--action_242 _ = happyReduce_83--action_243 (86) = happyShift action_106-action_243 (114) = happyShift action_34-action_243 (115) = happyShift action_68-action_243 (36) = happyGoto action_104-action_243 (37) = happyGoto action_108-action_243 (48) = happyGoto action_164-action_243 (50) = happyGoto action_110-action_243 _ = happyReduce_53--action_244 _ = happyReduce_65--action_245 (101) = happyShift action_54-action_245 (69) = happyGoto action_248-action_245 _ = happyReduce_122--action_246 (49) = happyGoto action_247-action_246 _ = happyReduce_71--action_247 (86) = happyShift action_106-action_247 (114) = happyShift action_34-action_247 (115) = happyShift action_68-action_247 (36) = happyGoto action_104-action_247 (37) = happyGoto action_108-action_247 (48) = happyGoto action_164-action_247 (50) = happyGoto action_110-action_247 _ = happyReduce_56--action_248 _ = happyReduce_62--action_249 (116) = happyShift action_69-action_249 (38) = happyGoto action_93-action_249 (55) = happyGoto action_250-action_249 _ = happyReduce_86--action_250 (87) = happyShift action_251-action_250 _ = happyFail--action_251 (75) = happyShift action_252-action_251 _ = happyFail--action_252 _ = happyReduce_84--happyReduce_33 = happySpecReduce_1  36 happyReduction_33-happyReduction_33 (HappyTerminal (PT _ (TV happy_var_1)))-	 =  HappyAbsSyn36-		 (Ident happy_var_1-	)-happyReduction_33 _  = notHappyAtAll --happyReduce_34 = happySpecReduce_1  37 happyReduction_34-happyReduction_34 (HappyTerminal (PT _ (TL happy_var_1)))-	 =  HappyAbsSyn37-		 (happy_var_1-	)-happyReduction_34 _  = notHappyAtAll --happyReduce_35 = happySpecReduce_1  38 happyReduction_35-happyReduction_35 (HappyTerminal (PT _ (TI happy_var_1)))-	 =  HappyAbsSyn38-		 ((read ( happy_var_1)) :: Integer-	)-happyReduction_35 _  = notHappyAtAll --happyReduce_36 = happySpecReduce_1  39 happyReduction_36-happyReduction_36 (HappyTerminal (PT _ (TC happy_var_1)))-	 =  HappyAbsSyn39-		 ((read ( happy_var_1)) :: Char-	)-happyReduction_36 _  = notHappyAtAll --happyReduce_37 = happySpecReduce_1  40 happyReduction_37-happyReduction_37 (HappyTerminal (PT _ (TD happy_var_1)))-	 =  HappyAbsSyn40-		 ((read ( happy_var_1)) :: Double-	)-happyReduction_37 _  = notHappyAtAll --happyReduce_38 = happySpecReduce_1  41 happyReduction_38-happyReduction_38 (HappyAbsSyn43  happy_var_1)-	 =  HappyAbsSyn41-		 (AbsBNF.LGr happy_var_1-	)-happyReduction_38 _  = notHappyAtAll --happyReduce_39 = happySpecReduce_1  42 happyReduction_39-happyReduction_39 (HappyAbsSyn47  happy_var_1)-	 =  HappyAbsSyn42-		 (AbsBNF.DefAll happy_var_1-	)-happyReduction_39 _  = notHappyAtAll --happyReduce_40 = happySpecReduce_3  42 happyReduction_40-happyReduction_40 (HappyAbsSyn47  happy_var_3)-	_-	(HappyAbsSyn44  happy_var_1)-	 =  HappyAbsSyn42-		 (AbsBNF.DefSome happy_var_1 happy_var_3-	)-happyReduction_40 _ _ _  = notHappyAtAll --happyReduce_41 = happySpecReduce_2  42 happyReduction_41-happyReduction_41 (HappyAbsSyn44  happy_var_2)-	_-	 =  HappyAbsSyn42-		 (AbsBNF.LDefView happy_var_2-	)-happyReduction_41 _ _  = notHappyAtAll --happyReduce_42 = happySpecReduce_0  43 happyReduction_42-happyReduction_42  =  HappyAbsSyn43-		 ([]-	)--happyReduce_43 = happySpecReduce_1  43 happyReduction_43-happyReduction_43 (HappyAbsSyn42  happy_var_1)-	 =  HappyAbsSyn43-		 ((:[]) happy_var_1-	)-happyReduction_43 _  = notHappyAtAll --happyReduce_44 = happySpecReduce_3  43 happyReduction_44-happyReduction_44 (HappyAbsSyn43  happy_var_3)-	_-	(HappyAbsSyn42  happy_var_1)-	 =  HappyAbsSyn43-		 ((:) happy_var_1 happy_var_3-	)-happyReduction_44 _ _ _  = notHappyAtAll --happyReduce_45 = happySpecReduce_2  43 happyReduction_45-happyReduction_45 (HappyAbsSyn43  happy_var_2)-	_-	 =  HappyAbsSyn43-		 (happy_var_2-	)-happyReduction_45 _ _  = notHappyAtAll --happyReduce_46 = happySpecReduce_1  44 happyReduction_46-happyReduction_46 (HappyAbsSyn36  happy_var_1)-	 =  HappyAbsSyn44-		 ((:[]) happy_var_1-	)-happyReduction_46 _  = notHappyAtAll --happyReduce_47 = happySpecReduce_3  44 happyReduction_47-happyReduction_47 (HappyAbsSyn44  happy_var_3)-	_-	(HappyAbsSyn36  happy_var_1)-	 =  HappyAbsSyn44-		 ((:) happy_var_1 happy_var_3-	)-happyReduction_47 _ _ _  = notHappyAtAll --happyReduce_48 = happySpecReduce_1  45 happyReduction_48-happyReduction_48 (HappyAbsSyn46  happy_var_1)-	 =  HappyAbsSyn45-		 (AbsBNF.Grammar happy_var_1-	)-happyReduction_48 _  = notHappyAtAll --happyReduce_49 = happySpecReduce_0  46 happyReduction_49-happyReduction_49  =  HappyAbsSyn46-		 ([]-	)--happyReduce_50 = happySpecReduce_1  46 happyReduction_50-happyReduction_50 (HappyAbsSyn47  happy_var_1)-	 =  HappyAbsSyn46-		 ((:[]) happy_var_1-	)-happyReduction_50 _  = notHappyAtAll --happyReduce_51 = happySpecReduce_3  46 happyReduction_51-happyReduction_51 (HappyAbsSyn46  happy_var_3)-	_-	(HappyAbsSyn47  happy_var_1)-	 =  HappyAbsSyn46-		 ((:) happy_var_1 happy_var_3-	)-happyReduction_51 _ _ _  = notHappyAtAll --happyReduce_52 = happySpecReduce_2  46 happyReduction_52-happyReduction_52 (HappyAbsSyn46  happy_var_2)-	_-	 =  HappyAbsSyn46-		 (happy_var_2-	)-happyReduction_52 _ _  = notHappyAtAll --happyReduce_53 = happyReduce 5 47 happyReduction_53-happyReduction_53 ((HappyAbsSyn49  happy_var_5) `HappyStk`-	_ `HappyStk`-	(HappyAbsSyn50  happy_var_3) `HappyStk`-	_ `HappyStk`-	(HappyAbsSyn51  happy_var_1) `HappyStk`-	happyRest)-	 = HappyAbsSyn47-		 (AbsBNF.Rule happy_var_1 happy_var_3 (reverse happy_var_5)-	) `HappyStk` happyRest--happyReduce_54 = happySpecReduce_2  47 happyReduction_54-happyReduction_54 (HappyAbsSyn37  happy_var_2)-	_-	 =  HappyAbsSyn47-		 (AbsBNF.Comment happy_var_2-	)-happyReduction_54 _ _  = notHappyAtAll --happyReduce_55 = happySpecReduce_3  47 happyReduction_55-happyReduction_55 (HappyAbsSyn37  happy_var_3)-	(HappyAbsSyn37  happy_var_2)-	_-	 =  HappyAbsSyn47-		 (AbsBNF.Comments happy_var_2 happy_var_3-	)-happyReduction_55 _ _ _  = notHappyAtAll --happyReduce_56 = happyReduce 6 47 happyReduction_56-happyReduction_56 ((HappyAbsSyn49  happy_var_6) `HappyStk`-	_ `HappyStk`-	(HappyAbsSyn50  happy_var_4) `HappyStk`-	_ `HappyStk`-	(HappyAbsSyn51  happy_var_2) `HappyStk`-	_ `HappyStk`-	happyRest)-	 = HappyAbsSyn47-		 (AbsBNF.Internal happy_var_2 happy_var_4 (reverse happy_var_6)-	) `HappyStk` happyRest--happyReduce_57 = happySpecReduce_3  47 happyReduction_57-happyReduction_57 (HappyAbsSyn70  happy_var_3)-	(HappyAbsSyn36  happy_var_2)-	_-	 =  HappyAbsSyn47-		 (AbsBNF.Token happy_var_2 happy_var_3-	)-happyReduction_57 _ _ _  = notHappyAtAll --happyReduce_58 = happyReduce 4 47 happyReduction_58-happyReduction_58 ((HappyAbsSyn70  happy_var_4) `HappyStk`-	(HappyAbsSyn36  happy_var_3) `HappyStk`-	_ `HappyStk`-	_ `HappyStk`-	happyRest)-	 = HappyAbsSyn47-		 (AbsBNF.PosToken happy_var_3 happy_var_4-	) `HappyStk` happyRest--happyReduce_59 = happySpecReduce_2  47 happyReduction_59-happyReduction_59 (HappyAbsSyn44  happy_var_2)-	_-	 =  HappyAbsSyn47-		 (AbsBNF.Entryp happy_var_2-	)-happyReduction_59 _ _  = notHappyAtAll --happyReduce_60 = happyReduce 4 47 happyReduction_60-happyReduction_60 ((HappyAbsSyn37  happy_var_4) `HappyStk`-	(HappyAbsSyn50  happy_var_3) `HappyStk`-	(HappyAbsSyn69  happy_var_2) `HappyStk`-	_ `HappyStk`-	happyRest)-	 = HappyAbsSyn47-		 (AbsBNF.Separator happy_var_2 happy_var_3 happy_var_4-	) `HappyStk` happyRest--happyReduce_61 = happyReduce 4 47 happyReduction_61-happyReduction_61 ((HappyAbsSyn37  happy_var_4) `HappyStk`-	(HappyAbsSyn50  happy_var_3) `HappyStk`-	(HappyAbsSyn69  happy_var_2) `HappyStk`-	_ `HappyStk`-	happyRest)-	 = HappyAbsSyn47-		 (AbsBNF.Terminator happy_var_2 happy_var_3 happy_var_4-	) `HappyStk` happyRest--happyReduce_62 = happyReduce 6 47 happyReduction_62-happyReduction_62 ((HappyAbsSyn69  happy_var_6) `HappyStk`-	(HappyAbsSyn60  happy_var_5) `HappyStk`-	(HappyAbsSyn37  happy_var_4) `HappyStk`-	(HappyAbsSyn37  happy_var_3) `HappyStk`-	(HappyAbsSyn50  happy_var_2) `HappyStk`-	_ `HappyStk`-	happyRest)-	 = HappyAbsSyn47-		 (AbsBNF.Delimiters happy_var_2 happy_var_3 happy_var_4 happy_var_5 happy_var_6-	) `HappyStk` happyRest--happyReduce_63 = happySpecReduce_3  47 happyReduction_63-happyReduction_63 (HappyAbsSyn38  happy_var_3)-	(HappyAbsSyn36  happy_var_2)-	_-	 =  HappyAbsSyn47-		 (AbsBNF.Coercions happy_var_2 happy_var_3-	)-happyReduction_63 _ _ _  = notHappyAtAll --happyReduce_64 = happyReduce 4 47 happyReduction_64-happyReduction_64 ((HappyAbsSyn68  happy_var_4) `HappyStk`-	_ `HappyStk`-	(HappyAbsSyn36  happy_var_2) `HappyStk`-	_ `HappyStk`-	happyRest)-	 = HappyAbsSyn47-		 (AbsBNF.Rules happy_var_2 happy_var_4-	) `HappyStk` happyRest--happyReduce_65 = happyReduce 5 47 happyReduction_65-happyReduction_65 ((HappyAbsSyn62  happy_var_5) `HappyStk`-	_ `HappyStk`-	(HappyAbsSyn59  happy_var_3) `HappyStk`-	(HappyAbsSyn36  happy_var_2) `HappyStk`-	_ `HappyStk`-	happyRest)-	 = HappyAbsSyn47-		 (AbsBNF.Function happy_var_2 (reverse happy_var_3) happy_var_5-	) `HappyStk` happyRest--happyReduce_66 = happySpecReduce_2  47 happyReduction_66-happyReduction_66 (HappyAbsSyn61  happy_var_2)-	_-	 =  HappyAbsSyn47-		 (AbsBNF.Layout happy_var_2-	)-happyReduction_66 _ _  = notHappyAtAll --happyReduce_67 = happySpecReduce_3  47 happyReduction_67-happyReduction_67 (HappyAbsSyn61  happy_var_3)-	_-	_-	 =  HappyAbsSyn47-		 (AbsBNF.LayoutStop happy_var_3-	)-happyReduction_67 _ _ _  = notHappyAtAll --happyReduce_68 = happySpecReduce_2  47 happyReduction_68-happyReduction_68 _-	_-	 =  HappyAbsSyn47-		 (AbsBNF.LayoutTop-	)--happyReduce_69 = happySpecReduce_1  48 happyReduction_69-happyReduction_69 (HappyAbsSyn37  happy_var_1)-	 =  HappyAbsSyn48-		 (AbsBNF.Terminal happy_var_1-	)-happyReduction_69 _  = notHappyAtAll --happyReduce_70 = happySpecReduce_1  48 happyReduction_70-happyReduction_70 (HappyAbsSyn50  happy_var_1)-	 =  HappyAbsSyn48-		 (AbsBNF.NTerminal happy_var_1-	)-happyReduction_70 _  = notHappyAtAll --happyReduce_71 = happySpecReduce_0  49 happyReduction_71-happyReduction_71  =  HappyAbsSyn49-		 ([]-	)--happyReduce_72 = happySpecReduce_2  49 happyReduction_72-happyReduction_72 (HappyAbsSyn48  happy_var_2)-	(HappyAbsSyn49  happy_var_1)-	 =  HappyAbsSyn49-		 (flip (:) happy_var_1 happy_var_2-	)-happyReduction_72 _ _  = notHappyAtAll --happyReduce_73 = happySpecReduce_3  50 happyReduction_73-happyReduction_73 _-	(HappyAbsSyn50  happy_var_2)-	_-	 =  HappyAbsSyn50-		 (AbsBNF.ListCat happy_var_2-	)-happyReduction_73 _ _ _  = notHappyAtAll --happyReduce_74 = happySpecReduce_1  50 happyReduction_74-happyReduction_74 (HappyAbsSyn36  happy_var_1)-	 =  HappyAbsSyn50-		 (AbsBNF.IdCat happy_var_1-	)-happyReduction_74 _  = notHappyAtAll --happyReduce_75 = happySpecReduce_1  51 happyReduction_75-happyReduction_75 (HappyAbsSyn52  happy_var_1)-	 =  HappyAbsSyn51-		 (AbsBNF.LabNoP happy_var_1-	)-happyReduction_75 _  = notHappyAtAll --happyReduce_76 = happySpecReduce_2  51 happyReduction_76-happyReduction_76 (HappyAbsSyn57  happy_var_2)-	(HappyAbsSyn52  happy_var_1)-	 =  HappyAbsSyn51-		 (AbsBNF.LabP happy_var_1 happy_var_2-	)-happyReduction_76 _ _  = notHappyAtAll --happyReduce_77 = happySpecReduce_3  51 happyReduction_77-happyReduction_77 (HappyAbsSyn57  happy_var_3)-	(HappyAbsSyn52  happy_var_2)-	(HappyAbsSyn52  happy_var_1)-	 =  HappyAbsSyn51-		 (AbsBNF.LabPF happy_var_1 happy_var_2 happy_var_3-	)-happyReduction_77 _ _ _  = notHappyAtAll --happyReduce_78 = happySpecReduce_2  51 happyReduction_78-happyReduction_78 (HappyAbsSyn52  happy_var_2)-	(HappyAbsSyn52  happy_var_1)-	 =  HappyAbsSyn51-		 (AbsBNF.LabF happy_var_1 happy_var_2-	)-happyReduction_78 _ _  = notHappyAtAll --happyReduce_79 = happySpecReduce_1  52 happyReduction_79-happyReduction_79 (HappyAbsSyn36  happy_var_1)-	 =  HappyAbsSyn52-		 (AbsBNF.Id happy_var_1-	)-happyReduction_79 _  = notHappyAtAll --happyReduce_80 = happySpecReduce_1  52 happyReduction_80-happyReduction_80 _-	 =  HappyAbsSyn52-		 (AbsBNF.Wild-	)--happyReduce_81 = happySpecReduce_2  52 happyReduction_81-happyReduction_81 _-	_-	 =  HappyAbsSyn52-		 (AbsBNF.ListE-	)--happyReduce_82 = happySpecReduce_3  52 happyReduction_82-happyReduction_82 _-	_-	_-	 =  HappyAbsSyn52-		 (AbsBNF.ListCons-	)--happyReduce_83 = happyReduce 5 52 happyReduction_83-happyReduction_83 (_ `HappyStk`-	_ `HappyStk`-	_ `HappyStk`-	_ `HappyStk`-	_ `HappyStk`-	happyRest)-	 = HappyAbsSyn52-		 (AbsBNF.ListOne-	) `HappyStk` happyRest--happyReduce_84 = happyReduce 9 53 happyReduction_84-happyReduction_84 (_ `HappyStk`-	_ `HappyStk`-	(HappyAbsSyn55  happy_var_7) `HappyStk`-	_ `HappyStk`-	_ `HappyStk`-	_ `HappyStk`-	(HappyAbsSyn56  happy_var_3) `HappyStk`-	_ `HappyStk`-	_ `HappyStk`-	happyRest)-	 = HappyAbsSyn53-		 (AbsBNF.ProfIt happy_var_3 happy_var_7-	) `HappyStk` happyRest--happyReduce_85 = happySpecReduce_3  54 happyReduction_85-happyReduction_85 _-	(HappyAbsSyn55  happy_var_2)-	_-	 =  HappyAbsSyn54-		 (AbsBNF.Ints happy_var_2-	)-happyReduction_85 _ _ _  = notHappyAtAll --happyReduce_86 = happySpecReduce_0  55 happyReduction_86-happyReduction_86  =  HappyAbsSyn55-		 ([]-	)--happyReduce_87 = happySpecReduce_1  55 happyReduction_87-happyReduction_87 (HappyAbsSyn38  happy_var_1)-	 =  HappyAbsSyn55-		 ((:[]) happy_var_1-	)-happyReduction_87 _  = notHappyAtAll --happyReduce_88 = happySpecReduce_3  55 happyReduction_88-happyReduction_88 (HappyAbsSyn55  happy_var_3)-	_-	(HappyAbsSyn38  happy_var_1)-	 =  HappyAbsSyn55-		 ((:) happy_var_1 happy_var_3-	)-happyReduction_88 _ _ _  = notHappyAtAll --happyReduce_89 = happySpecReduce_0  56 happyReduction_89-happyReduction_89  =  HappyAbsSyn56-		 ([]-	)--happyReduce_90 = happySpecReduce_1  56 happyReduction_90-happyReduction_90 (HappyAbsSyn54  happy_var_1)-	 =  HappyAbsSyn56-		 ((:[]) happy_var_1-	)-happyReduction_90 _  = notHappyAtAll --happyReduce_91 = happySpecReduce_3  56 happyReduction_91-happyReduction_91 (HappyAbsSyn56  happy_var_3)-	_-	(HappyAbsSyn54  happy_var_1)-	 =  HappyAbsSyn56-		 ((:) happy_var_1 happy_var_3-	)-happyReduction_91 _ _ _  = notHappyAtAll --happyReduce_92 = happySpecReduce_1  57 happyReduction_92-happyReduction_92 (HappyAbsSyn53  happy_var_1)-	 =  HappyAbsSyn57-		 ((:[]) happy_var_1-	)-happyReduction_92 _  = notHappyAtAll --happyReduce_93 = happySpecReduce_2  57 happyReduction_93-happyReduction_93 (HappyAbsSyn57  happy_var_2)-	(HappyAbsSyn53  happy_var_1)-	 =  HappyAbsSyn57-		 ((:) happy_var_1 happy_var_2-	)-happyReduction_93 _ _  = notHappyAtAll --happyReduce_94 = happySpecReduce_1  58 happyReduction_94-happyReduction_94 (HappyAbsSyn36  happy_var_1)-	 =  HappyAbsSyn58-		 (AbsBNF.Arg happy_var_1-	)-happyReduction_94 _  = notHappyAtAll --happyReduce_95 = happySpecReduce_0  59 happyReduction_95-happyReduction_95  =  HappyAbsSyn59-		 ([]-	)--happyReduce_96 = happySpecReduce_2  59 happyReduction_96-happyReduction_96 (HappyAbsSyn58  happy_var_2)-	(HappyAbsSyn59  happy_var_1)-	 =  HappyAbsSyn59-		 (flip (:) happy_var_1 happy_var_2-	)-happyReduction_96 _ _  = notHappyAtAll --happyReduce_97 = happySpecReduce_0  60 happyReduction_97-happyReduction_97  =  HappyAbsSyn60-		 (AbsBNF.SepNone-	)--happyReduce_98 = happySpecReduce_2  60 happyReduction_98-happyReduction_98 (HappyAbsSyn37  happy_var_2)-	_-	 =  HappyAbsSyn60-		 (AbsBNF.SepTerm happy_var_2-	)-happyReduction_98 _ _  = notHappyAtAll --happyReduce_99 = happySpecReduce_2  60 happyReduction_99-happyReduction_99 (HappyAbsSyn37  happy_var_2)-	_-	 =  HappyAbsSyn60-		 (AbsBNF.SepSepar happy_var_2-	)-happyReduction_99 _ _  = notHappyAtAll --happyReduce_100 = happySpecReduce_1  61 happyReduction_100-happyReduction_100 (HappyAbsSyn37  happy_var_1)-	 =  HappyAbsSyn61-		 ((:[]) happy_var_1-	)-happyReduction_100 _  = notHappyAtAll --happyReduce_101 = happySpecReduce_3  61 happyReduction_101-happyReduction_101 (HappyAbsSyn61  happy_var_3)-	_-	(HappyAbsSyn37  happy_var_1)-	 =  HappyAbsSyn61-		 ((:) happy_var_1 happy_var_3-	)-happyReduction_101 _ _ _  = notHappyAtAll --happyReduce_102 = happySpecReduce_3  62 happyReduction_102-happyReduction_102 (HappyAbsSyn62  happy_var_3)-	_-	(HappyAbsSyn62  happy_var_1)-	 =  HappyAbsSyn62-		 (AbsBNF.Cons happy_var_1 happy_var_3-	)-happyReduction_102 _ _ _  = notHappyAtAll --happyReduce_103 = happySpecReduce_1  62 happyReduction_103-happyReduction_103 (HappyAbsSyn62  happy_var_1)-	 =  HappyAbsSyn62-		 (happy_var_1-	)-happyReduction_103 _  = notHappyAtAll --happyReduce_104 = happySpecReduce_2  63 happyReduction_104-happyReduction_104 (HappyAbsSyn65  happy_var_2)-	(HappyAbsSyn36  happy_var_1)-	 =  HappyAbsSyn62-		 (AbsBNF.App happy_var_1 happy_var_2-	)-happyReduction_104 _ _  = notHappyAtAll --happyReduce_105 = happySpecReduce_1  63 happyReduction_105-happyReduction_105 (HappyAbsSyn62  happy_var_1)-	 =  HappyAbsSyn62-		 (happy_var_1-	)-happyReduction_105 _  = notHappyAtAll --happyReduce_106 = happySpecReduce_1  64 happyReduction_106-happyReduction_106 (HappyAbsSyn36  happy_var_1)-	 =  HappyAbsSyn62-		 (AbsBNF.Var happy_var_1-	)-happyReduction_106 _  = notHappyAtAll --happyReduce_107 = happySpecReduce_1  64 happyReduction_107-happyReduction_107 (HappyAbsSyn38  happy_var_1)-	 =  HappyAbsSyn62-		 (AbsBNF.LitInt happy_var_1-	)-happyReduction_107 _  = notHappyAtAll --happyReduce_108 = happySpecReduce_1  64 happyReduction_108-happyReduction_108 (HappyAbsSyn39  happy_var_1)-	 =  HappyAbsSyn62-		 (AbsBNF.LitChar happy_var_1-	)-happyReduction_108 _  = notHappyAtAll --happyReduce_109 = happySpecReduce_1  64 happyReduction_109-happyReduction_109 (HappyAbsSyn37  happy_var_1)-	 =  HappyAbsSyn62-		 (AbsBNF.LitString happy_var_1-	)-happyReduction_109 _  = notHappyAtAll --happyReduce_110 = happySpecReduce_1  64 happyReduction_110-happyReduction_110 (HappyAbsSyn40  happy_var_1)-	 =  HappyAbsSyn62-		 (AbsBNF.LitDouble happy_var_1-	)-happyReduction_110 _  = notHappyAtAll --happyReduce_111 = happySpecReduce_3  64 happyReduction_111-happyReduction_111 _-	(HappyAbsSyn65  happy_var_2)-	_-	 =  HappyAbsSyn62-		 (AbsBNF.List happy_var_2-	)-happyReduction_111 _ _ _  = notHappyAtAll --happyReduce_112 = happySpecReduce_3  64 happyReduction_112-happyReduction_112 _-	(HappyAbsSyn62  happy_var_2)-	_-	 =  HappyAbsSyn62-		 (happy_var_2-	)-happyReduction_112 _ _ _  = notHappyAtAll --happyReduce_113 = happySpecReduce_0  65 happyReduction_113-happyReduction_113  =  HappyAbsSyn65-		 ([]-	)--happyReduce_114 = happySpecReduce_1  65 happyReduction_114-happyReduction_114 (HappyAbsSyn62  happy_var_1)-	 =  HappyAbsSyn65-		 ((:[]) happy_var_1-	)-happyReduction_114 _  = notHappyAtAll --happyReduce_115 = happySpecReduce_3  65 happyReduction_115-happyReduction_115 (HappyAbsSyn65  happy_var_3)-	_-	(HappyAbsSyn62  happy_var_1)-	 =  HappyAbsSyn65-		 ((:) happy_var_1 happy_var_3-	)-happyReduction_115 _ _ _  = notHappyAtAll --happyReduce_116 = happySpecReduce_1  66 happyReduction_116-happyReduction_116 (HappyAbsSyn62  happy_var_1)-	 =  HappyAbsSyn65-		 ((:[]) happy_var_1-	)-happyReduction_116 _  = notHappyAtAll --happyReduce_117 = happySpecReduce_2  66 happyReduction_117-happyReduction_117 (HappyAbsSyn65  happy_var_2)-	(HappyAbsSyn62  happy_var_1)-	 =  HappyAbsSyn65-		 ((:) happy_var_1 happy_var_2-	)-happyReduction_117 _ _  = notHappyAtAll --happyReduce_118 = happySpecReduce_1  67 happyReduction_118-happyReduction_118 (HappyAbsSyn49  happy_var_1)-	 =  HappyAbsSyn67-		 (AbsBNF.RHS (reverse happy_var_1)-	)-happyReduction_118 _  = notHappyAtAll --happyReduce_119 = happySpecReduce_1  68 happyReduction_119-happyReduction_119 (HappyAbsSyn67  happy_var_1)-	 =  HappyAbsSyn68-		 ((:[]) happy_var_1-	)-happyReduction_119 _  = notHappyAtAll --happyReduce_120 = happySpecReduce_3  68 happyReduction_120-happyReduction_120 (HappyAbsSyn68  happy_var_3)-	_-	(HappyAbsSyn67  happy_var_1)-	 =  HappyAbsSyn68-		 ((:) happy_var_1 happy_var_3-	)-happyReduction_120 _ _ _  = notHappyAtAll --happyReduce_121 = happySpecReduce_1  69 happyReduction_121-happyReduction_121 _-	 =  HappyAbsSyn69-		 (AbsBNF.MNonempty-	)--happyReduce_122 = happySpecReduce_0  69 happyReduction_122-happyReduction_122  =  HappyAbsSyn69-		 (AbsBNF.MEmpty-	)--happyReduce_123 = happySpecReduce_2  70 happyReduction_123-happyReduction_123 (HappyAbsSyn70  happy_var_2)-	(HappyAbsSyn70  happy_var_1)-	 =  HappyAbsSyn70-		 (AbsBNF.RSeq happy_var_1 happy_var_2-	)-happyReduction_123 _ _  = notHappyAtAll --happyReduce_124 = happySpecReduce_1  70 happyReduction_124-happyReduction_124 (HappyAbsSyn70  happy_var_1)-	 =  HappyAbsSyn70-		 (happy_var_1-	)-happyReduction_124 _  = notHappyAtAll --happyReduce_125 = happySpecReduce_3  71 happyReduction_125-happyReduction_125 (HappyAbsSyn70  happy_var_3)-	_-	(HappyAbsSyn70  happy_var_1)-	 =  HappyAbsSyn70-		 (AbsBNF.RAlt happy_var_1 happy_var_3-	)-happyReduction_125 _ _ _  = notHappyAtAll --happyReduce_126 = happySpecReduce_3  71 happyReduction_126-happyReduction_126 (HappyAbsSyn70  happy_var_3)-	_-	(HappyAbsSyn70  happy_var_1)-	 =  HappyAbsSyn70-		 (AbsBNF.RMinus happy_var_1 happy_var_3-	)-happyReduction_126 _ _ _  = notHappyAtAll --happyReduce_127 = happySpecReduce_1  71 happyReduction_127-happyReduction_127 (HappyAbsSyn70  happy_var_1)-	 =  HappyAbsSyn70-		 (happy_var_1-	)-happyReduction_127 _  = notHappyAtAll --happyReduce_128 = happySpecReduce_2  72 happyReduction_128-happyReduction_128 _-	(HappyAbsSyn70  happy_var_1)-	 =  HappyAbsSyn70-		 (AbsBNF.RStar happy_var_1-	)-happyReduction_128 _ _  = notHappyAtAll --happyReduce_129 = happySpecReduce_2  72 happyReduction_129-happyReduction_129 _-	(HappyAbsSyn70  happy_var_1)-	 =  HappyAbsSyn70-		 (AbsBNF.RPlus happy_var_1-	)-happyReduction_129 _ _  = notHappyAtAll --happyReduce_130 = happySpecReduce_2  72 happyReduction_130-happyReduction_130 _-	(HappyAbsSyn70  happy_var_1)-	 =  HappyAbsSyn70-		 (AbsBNF.ROpt happy_var_1-	)-happyReduction_130 _ _  = notHappyAtAll --happyReduce_131 = happySpecReduce_1  72 happyReduction_131-happyReduction_131 _-	 =  HappyAbsSyn70-		 (AbsBNF.REps-	)--happyReduce_132 = happySpecReduce_1  72 happyReduction_132-happyReduction_132 (HappyAbsSyn39  happy_var_1)-	 =  HappyAbsSyn70-		 (AbsBNF.RChar happy_var_1-	)-happyReduction_132 _  = notHappyAtAll --happyReduce_133 = happySpecReduce_3  72 happyReduction_133-happyReduction_133 _-	(HappyAbsSyn37  happy_var_2)-	_-	 =  HappyAbsSyn70-		 (AbsBNF.RAlts happy_var_2-	)-happyReduction_133 _ _ _  = notHappyAtAll --happyReduce_134 = happySpecReduce_3  72 happyReduction_134-happyReduction_134 _-	(HappyAbsSyn37  happy_var_2)-	_-	 =  HappyAbsSyn70-		 (AbsBNF.RSeqs happy_var_2-	)-happyReduction_134 _ _ _  = notHappyAtAll --happyReduce_135 = happySpecReduce_1  72 happyReduction_135-happyReduction_135 _-	 =  HappyAbsSyn70-		 (AbsBNF.RDigit-	)--happyReduce_136 = happySpecReduce_1  72 happyReduction_136-happyReduction_136 _-	 =  HappyAbsSyn70-		 (AbsBNF.RLetter-	)--happyReduce_137 = happySpecReduce_1  72 happyReduction_137-happyReduction_137 _-	 =  HappyAbsSyn70-		 (AbsBNF.RUpper-	)--happyReduce_138 = happySpecReduce_1  72 happyReduction_138-happyReduction_138 _-	 =  HappyAbsSyn70-		 (AbsBNF.RLower-	)--happyReduce_139 = happySpecReduce_1  72 happyReduction_139-happyReduction_139 _-	 =  HappyAbsSyn70-		 (AbsBNF.RAny-	)--happyReduce_140 = happySpecReduce_3  72 happyReduction_140-happyReduction_140 _-	(HappyAbsSyn70  happy_var_2)-	_-	 =  HappyAbsSyn70-		 (happy_var_2-	)-happyReduction_140 _ _ _  = notHappyAtAll --happyReduce_141 = happySpecReduce_1  73 happyReduction_141-happyReduction_141 (HappyAbsSyn70  happy_var_1)-	 =  HappyAbsSyn70-		 (happy_var_1-	)-happyReduction_141 _  = notHappyAtAll --happyNewToken action sts stk [] =-	action 119 119 notHappyAtAll (HappyState action) sts stk []--happyNewToken action sts stk (tk:tks) =-	let cont i = action i i tk (HappyState action) sts stk tks in-	case tk of {-	PT _ (TS _ 1) -> cont 74;-	PT _ (TS _ 2) -> cont 75;-	PT _ (TS _ 3) -> cont 76;-	PT _ (TS _ 4) -> cont 77;-	PT _ (TS _ 5) -> cont 78;-	PT _ (TS _ 6) -> cont 79;-	PT _ (TS _ 7) -> cont 80;-	PT _ (TS _ 8) -> cont 81;-	PT _ (TS _ 9) -> cont 82;-	PT _ (TS _ 10) -> cont 83;-	PT _ (TS _ 11) -> cont 84;-	PT _ (TS _ 12) -> cont 85;-	PT _ (TS _ 13) -> cont 86;-	PT _ (TS _ 14) -> cont 87;-	PT _ (TS _ 15) -> cont 88;-	PT _ (TS _ 16) -> cont 89;-	PT _ (TS _ 17) -> cont 90;-	PT _ (TS _ 18) -> cont 91;-	PT _ (TS _ 19) -> cont 92;-	PT _ (TS _ 20) -> cont 93;-	PT _ (TS _ 21) -> cont 94;-	PT _ (TS _ 22) -> cont 95;-	PT _ (TS _ 23) -> cont 96;-	PT _ (TS _ 24) -> cont 97;-	PT _ (TS _ 25) -> cont 98;-	PT _ (TS _ 26) -> cont 99;-	PT _ (TS _ 27) -> cont 100;-	PT _ (TS _ 28) -> cont 101;-	PT _ (TS _ 29) -> cont 102;-	PT _ (TS _ 30) -> cont 103;-	PT _ (TS _ 31) -> cont 104;-	PT _ (TS _ 32) -> cont 105;-	PT _ (TS _ 33) -> cont 106;-	PT _ (TS _ 34) -> cont 107;-	PT _ (TS _ 35) -> cont 108;-	PT _ (TS _ 36) -> cont 109;-	PT _ (TS _ 37) -> cont 110;-	PT _ (TS _ 38) -> cont 111;-	PT _ (TS _ 39) -> cont 112;-	PT _ (TS _ 40) -> cont 113;-	PT _ (TV happy_dollar_dollar) -> cont 114;-	PT _ (TL happy_dollar_dollar) -> cont 115;-	PT _ (TI happy_dollar_dollar) -> cont 116;-	PT _ (TC happy_dollar_dollar) -> cont 117;-	PT _ (TD happy_dollar_dollar) -> cont 118;-	_ -> happyError' (tk:tks)-	}--happyError_ 119 tk tks = happyError' tks-happyError_ _ tk tks = happyError' (tk:tks)--happyThen :: () => Err a -> (a -> Err b) -> Err b-happyThen = (thenM)-happyReturn :: () => a -> Err a-happyReturn = (returnM)-happyThen1 m k tks = (thenM) m (\a -> k a tks)-happyReturn1 :: () => a -> b -> Err a-happyReturn1 = \a tks -> (returnM) a-happyError' :: () => [(Token)] -> Err a-happyError' = happyError--pLGrammar tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_0 tks) (\x -> case x of {HappyAbsSyn41 z -> happyReturn z; _other -> notHappyAtAll })--pLDef tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_1 tks) (\x -> case x of {HappyAbsSyn42 z -> happyReturn z; _other -> notHappyAtAll })--pListLDef tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_2 tks) (\x -> case x of {HappyAbsSyn43 z -> happyReturn z; _other -> notHappyAtAll })--pListIdent tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_3 tks) (\x -> case x of {HappyAbsSyn44 z -> happyReturn z; _other -> notHappyAtAll })--pGrammar tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_4 tks) (\x -> case x of {HappyAbsSyn45 z -> happyReturn z; _other -> notHappyAtAll })--pListDef tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_5 tks) (\x -> case x of {HappyAbsSyn46 z -> happyReturn z; _other -> notHappyAtAll })--pDef tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_6 tks) (\x -> case x of {HappyAbsSyn47 z -> happyReturn z; _other -> notHappyAtAll })--pItem tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_7 tks) (\x -> case x of {HappyAbsSyn48 z -> happyReturn z; _other -> notHappyAtAll })--pListItem tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_8 tks) (\x -> case x of {HappyAbsSyn49 z -> happyReturn z; _other -> notHappyAtAll })--pCat tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_9 tks) (\x -> case x of {HappyAbsSyn50 z -> happyReturn z; _other -> notHappyAtAll })--pLabel tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_10 tks) (\x -> case x of {HappyAbsSyn51 z -> happyReturn z; _other -> notHappyAtAll })--pLabelId tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_11 tks) (\x -> case x of {HappyAbsSyn52 z -> happyReturn z; _other -> notHappyAtAll })--pProfItem tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_12 tks) (\x -> case x of {HappyAbsSyn53 z -> happyReturn z; _other -> notHappyAtAll })--pIntList tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_13 tks) (\x -> case x of {HappyAbsSyn54 z -> happyReturn z; _other -> notHappyAtAll })--pListInteger tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_14 tks) (\x -> case x of {HappyAbsSyn55 z -> happyReturn z; _other -> notHappyAtAll })--pListIntList tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_15 tks) (\x -> case x of {HappyAbsSyn56 z -> happyReturn z; _other -> notHappyAtAll })--pListProfItem tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_16 tks) (\x -> case x of {HappyAbsSyn57 z -> happyReturn z; _other -> notHappyAtAll })--pArg tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_17 tks) (\x -> case x of {HappyAbsSyn58 z -> happyReturn z; _other -> notHappyAtAll })--pListArg tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_18 tks) (\x -> case x of {HappyAbsSyn59 z -> happyReturn z; _other -> notHappyAtAll })--pSeparation tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_19 tks) (\x -> case x of {HappyAbsSyn60 z -> happyReturn z; _other -> notHappyAtAll })--pListString tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_20 tks) (\x -> case x of {HappyAbsSyn61 z -> happyReturn z; _other -> notHappyAtAll })--pExp tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_21 tks) (\x -> case x of {HappyAbsSyn62 z -> happyReturn z; _other -> notHappyAtAll })--pExp1 tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_22 tks) (\x -> case x of {HappyAbsSyn62 z -> happyReturn z; _other -> notHappyAtAll })--pExp2 tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_23 tks) (\x -> case x of {HappyAbsSyn62 z -> happyReturn z; _other -> notHappyAtAll })--pListExp tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_24 tks) (\x -> case x of {HappyAbsSyn65 z -> happyReturn z; _other -> notHappyAtAll })--pListExp2 tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_25 tks) (\x -> case x of {HappyAbsSyn65 z -> happyReturn z; _other -> notHappyAtAll })--pRHS tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_26 tks) (\x -> case x of {HappyAbsSyn67 z -> happyReturn z; _other -> notHappyAtAll })--pListRHS tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_27 tks) (\x -> case x of {HappyAbsSyn68 z -> happyReturn z; _other -> notHappyAtAll })--pMinimumSize tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_28 tks) (\x -> case x of {HappyAbsSyn69 z -> happyReturn z; _other -> notHappyAtAll })--pReg2 tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_29 tks) (\x -> case x of {HappyAbsSyn70 z -> happyReturn z; _other -> notHappyAtAll })--pReg1 tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_30 tks) (\x -> case x of {HappyAbsSyn70 z -> happyReturn z; _other -> notHappyAtAll })--pReg3 tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_31 tks) (\x -> case x of {HappyAbsSyn70 z -> happyReturn z; _other -> notHappyAtAll })--pReg tks = happySomeParser where-  happySomeParser = happyThen (happyParse action_32 tks) (\x -> case x of {HappyAbsSyn70 z -> happyReturn z; _other -> notHappyAtAll })--happySeq = happyDontSeq---returnM :: a -> Err a-returnM = return--thenM :: Err a -> (a -> Err b) -> Err b-thenM = (>>=)--happyError :: [Token] -> Err a-happyError ts =-  Bad $ "syntax error at " ++ tokenPos ts ++ -  case ts of-    [] -> []-    [Err _] -> " due to lexer error"-    t:_ -> " before `" ++ id(prToken t) ++ "'"--myLexer = tokens-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "<command-line>" #-}--------# 1 "/usr/include/stdc-predef.h" 1 3 4--# 17 "/usr/include/stdc-predef.h" 3 4--------------------------------------------{-# LINE 7 "<command-line>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp --{-# LINE 13 "templates/GenericTemplate.hs" #-}--{-# LINE 46 "templates/GenericTemplate.hs" #-}---------{-# LINE 67 "templates/GenericTemplate.hs" #-}--{-# LINE 77 "templates/GenericTemplate.hs" #-}--{-# LINE 86 "templates/GenericTemplate.hs" #-}--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 (1), 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 (1) tk st sts (_ `HappyStk` ans `HappyStk` _) =-        happyReturn1 ans-happyAccept j tk st sts (HappyStk ans _) = -         (happyReturn1 ans)---------------------------------------------------------------------------------- Arrays only: do the next action--{-# LINE 155 "templates/GenericTemplate.hs" #-}---------------------------------------------------------------------------------- HappyState data type (not arrays)----newtype HappyState b c = HappyState-        (Int ->                    -- token number-         Int ->                    -- token number (yes, again)-         b ->                           -- token semantic value-         HappyState b c ->              -- current state-         [HappyState b c] ->            -- state stack-         c)------------------------------------------------------------------------------------ Shifting a token--happyShift new_state (1) tk st sts stk@(x `HappyStk` _) =-     let i = (case x of { HappyErrorToken (i) -> i }) in---     trace "shifting the error token" $-     new_state i i tk (HappyState (new_state)) ((st):(sts)) (stk)--happyShift new_state i tk st sts stk =-     happyNewToken new_state ((st):(sts)) ((HappyTerminal (tk))`HappyStk`stk)---- happyReduce is specialised for the common cases.--happySpecReduce_0 i fn (1) tk st sts stk-     = happyFail (1) tk st sts stk-happySpecReduce_0 nt fn j tk st@((HappyState (action))) sts stk-     = action nt j tk st ((st):(sts)) (fn `HappyStk` stk)--happySpecReduce_1 i fn (1) tk st sts stk-     = happyFail (1) tk st sts stk-happySpecReduce_1 nt fn j tk _ sts@(((st@(HappyState (action))):(_))) (v1`HappyStk`stk')-     = let r = fn v1 in-       happySeq r (action nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_2 i fn (1) tk st sts stk-     = happyFail (1) tk st sts stk-happySpecReduce_2 nt fn j tk _ ((_):(sts@(((st@(HappyState (action))):(_))))) (v1`HappyStk`v2`HappyStk`stk')-     = let r = fn v1 v2 in-       happySeq r (action nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_3 i fn (1) tk st sts stk-     = happyFail (1) tk st sts stk-happySpecReduce_3 nt fn j tk _ ((_):(((_):(sts@(((st@(HappyState (action))):(_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')-     = let r = fn v1 v2 v3 in-       happySeq r (action nt j tk st sts (r `HappyStk` stk'))--happyReduce k i fn (1) tk st sts stk-     = happyFail (1) tk st sts stk-happyReduce k nt fn j tk st sts stk-     = case happyDrop (k - ((1) :: Int)) sts of-         sts1@(((st1@(HappyState (action))):(_))) ->-                let r = fn stk in  -- it doesn't hurt to always seq here...-                happyDoSeq r (action nt j tk st1 sts1 r)--happyMonadReduce k nt fn (1) tk st sts stk-     = happyFail (1) tk st sts stk-happyMonadReduce k nt fn j tk st sts stk =-      case happyDrop k ((st):(sts)) of-        sts1@(((st1@(HappyState (action))):(_))) ->-          let drop_stk = happyDropStk k stk in-          happyThen1 (fn stk tk) (\r -> action nt j tk st1 sts1 (r `HappyStk` drop_stk))--happyMonad2Reduce k nt fn (1) tk st sts stk-     = happyFail (1) tk st sts stk-happyMonad2Reduce k nt fn j tk st sts stk =-      case happyDrop k ((st):(sts)) of-        sts1@(((st1@(HappyState (action))):(_))) ->-         let drop_stk = happyDropStk k stk------             new_state = action--          in-          happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))--happyDrop (0) l = l-happyDrop n ((_):(t)) = happyDrop (n - ((1) :: Int)) t--happyDropStk (0) l = l-happyDropStk n (x `HappyStk` xs) = happyDropStk (n - ((1)::Int)) xs---------------------------------------------------------------------------------- Moving to a new state after a reduction--{-# LINE 256 "templates/GenericTemplate.hs" #-}-happyGoto action j tk st = action j j tk (HappyState action)----------------------------------------------------------------------------------- Error recovery ((1) is the error token)---- parse error if we are in recovery and we fail again-happyFail (1) tk old_st _ stk@(x `HappyStk` _) =-     let i = (case x of { HappyErrorToken (i) -> i }) in---      trace "failing" $ -        happyError_ 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  (1) tk old_st (((HappyState (action))):(sts)) -                                                (saved_tok `HappyStk` _ `HappyStk` stk) =---      trace ("discarding state, depth " ++ show (length stk))  $-        action (1) (1) tk (HappyState (action)) sts ((saved_tok`HappyStk`stk))--}---- Enter error recovery: generate an error token,---                       save the old token and carry on.-happyFail  i tk (HappyState (action)) sts stk =---      trace "entering error recovery" $-        action (1) (1) tk (HappyState (action)) sts ( (HappyErrorToken (i)) `HappyStk` stk)---- Internal happy errors:--notHappyAtAll :: a-notHappyAtAll = error "Internal Happy error\n"---------------------------------------------------------------------------------- Hack to get the typechecker to accept our action functions---------------------------------------------------------------------------------------- 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 `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.--{-# LINE 322 "templates/GenericTemplate.hs" #-}-{-# 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.+import qualified Data.Array as Happy_Data_Array+import qualified Data.Bits as Bits+import Control.Applicative(Applicative(..))+import Control.Monad (ap)++-- parser produced by Happy Version 1.19.8++data HappyAbsSyn +	= HappyTerminal (Token)+	| HappyErrorToken Int+	| HappyAbsSyn36 (Ident)+	| HappyAbsSyn37 (String)+	| HappyAbsSyn38 (Integer)+	| HappyAbsSyn39 (Char)+	| HappyAbsSyn40 (Double)+	| HappyAbsSyn41 (LGrammar)+	| HappyAbsSyn42 (LDef)+	| HappyAbsSyn43 ([LDef])+	| HappyAbsSyn44 ([Ident])+	| HappyAbsSyn45 (Grammar)+	| HappyAbsSyn46 ([Def])+	| HappyAbsSyn47 (Def)+	| HappyAbsSyn48 (Item)+	| HappyAbsSyn49 ([Item])+	| HappyAbsSyn50 (Cat)+	| HappyAbsSyn51 (Label)+	| HappyAbsSyn52 (LabelId)+	| HappyAbsSyn53 (ProfItem)+	| HappyAbsSyn54 (IntList)+	| HappyAbsSyn55 ([Integer])+	| HappyAbsSyn56 ([IntList])+	| HappyAbsSyn57 ([ProfItem])+	| HappyAbsSyn58 (Arg)+	| HappyAbsSyn59 ([Arg])+	| HappyAbsSyn60 (Separation)+	| HappyAbsSyn61 ([String])+	| HappyAbsSyn62 (Exp)+	| HappyAbsSyn65 ([Exp])+	| HappyAbsSyn67 (RHS)+	| HappyAbsSyn68 ([RHS])+	| HappyAbsSyn69 (MinimumSize)+	| HappyAbsSyn70 (Reg)++{- to allow type-synonyms as our monads (likely+ - with explicitly-specified bind and return)+ - in Haskell98, it seems that with+ - /type M a = .../, then /(HappyReduction M)/+ - is not allowed.  But Happy is a+ - code-generator that can just substitute it.+type HappyReduction m = +	   Int +	-> (Token)+	-> HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> m HappyAbsSyn)+	-> [HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> m HappyAbsSyn)] +	-> HappyStk HappyAbsSyn +	-> [(Token)] -> m HappyAbsSyn+-}++action_0,+ action_1,+ action_2,+ action_3,+ action_4,+ action_5,+ action_6,+ action_7,+ action_8,+ action_9,+ action_10,+ action_11,+ action_12,+ action_13,+ action_14,+ action_15,+ action_16,+ action_17,+ action_18,+ action_19,+ action_20,+ action_21,+ action_22,+ action_23,+ action_24,+ action_25,+ action_26,+ action_27,+ action_28,+ action_29,+ action_30,+ action_31,+ action_32,+ action_33,+ action_34,+ action_35,+ action_36,+ action_37,+ action_38,+ action_39,+ action_40,+ action_41,+ action_42,+ action_43,+ action_44,+ action_45,+ action_46,+ action_47,+ action_48,+ action_49,+ action_50,+ action_51,+ action_52,+ action_53,+ action_54,+ action_55,+ action_56,+ action_57,+ action_58,+ action_59,+ action_60,+ action_61,+ action_62,+ action_63,+ action_64,+ action_65,+ action_66,+ action_67,+ action_68,+ action_69,+ action_70,+ action_71,+ action_72,+ action_73,+ action_74,+ action_75,+ action_76,+ action_77,+ action_78,+ action_79,+ action_80,+ action_81,+ action_82,+ action_83,+ action_84,+ action_85,+ action_86,+ action_87,+ action_88,+ action_89,+ action_90,+ action_91,+ action_92,+ action_93,+ action_94,+ action_95,+ action_96,+ action_97,+ action_98,+ action_99,+ action_100,+ action_101,+ action_102,+ action_103,+ action_104,+ action_105,+ action_106,+ action_107,+ action_108,+ action_109,+ action_110,+ action_111,+ action_112,+ action_113,+ action_114,+ action_115,+ action_116,+ action_117,+ action_118,+ action_119,+ action_120,+ action_121,+ action_122,+ action_123,+ action_124,+ action_125,+ action_126,+ action_127,+ action_128,+ action_129,+ action_130,+ action_131,+ action_132,+ action_133,+ action_134,+ action_135,+ action_136,+ action_137,+ action_138,+ action_139,+ action_140,+ action_141,+ action_142,+ action_143,+ action_144,+ action_145,+ action_146,+ action_147,+ action_148,+ action_149,+ action_150,+ action_151,+ action_152,+ action_153,+ action_154,+ action_155,+ action_156,+ action_157,+ action_158,+ action_159,+ action_160,+ action_161,+ action_162,+ action_163,+ action_164,+ action_165,+ action_166,+ action_167,+ action_168,+ action_169,+ action_170,+ action_171,+ action_172,+ action_173,+ action_174,+ action_175,+ action_176,+ action_177,+ action_178,+ action_179,+ action_180,+ action_181,+ action_182,+ action_183,+ action_184,+ action_185,+ action_186,+ action_187,+ action_188,+ action_189,+ action_190,+ action_191,+ action_192,+ action_193,+ action_194,+ action_195,+ action_196,+ action_197,+ action_198,+ action_199,+ action_200,+ action_201,+ action_202,+ action_203,+ action_204,+ action_205,+ action_206,+ action_207,+ action_208,+ action_209,+ action_210,+ action_211,+ action_212,+ action_213,+ action_214,+ action_215,+ action_216,+ action_217,+ action_218,+ action_219,+ action_220,+ action_221,+ action_222,+ action_223,+ action_224,+ action_225,+ action_226,+ action_227,+ action_228,+ action_229,+ action_230,+ action_231,+ action_232,+ action_233,+ action_234,+ action_235,+ action_236,+ action_237,+ action_238,+ action_239,+ action_240,+ action_241,+ action_242,+ action_243,+ action_244,+ action_245,+ action_246,+ action_247,+ action_248,+ action_249,+ action_250,+ action_251,+ action_252 :: () => Int -> ({-HappyReduction (Err) = -}+	   Int +	-> (Token)+	-> HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)+	-> [HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)] +	-> HappyStk HappyAbsSyn +	-> [(Token)] -> (Err) HappyAbsSyn)++happyReduce_33,+ happyReduce_34,+ happyReduce_35,+ happyReduce_36,+ happyReduce_37,+ happyReduce_38,+ happyReduce_39,+ happyReduce_40,+ happyReduce_41,+ happyReduce_42,+ happyReduce_43,+ happyReduce_44,+ happyReduce_45,+ happyReduce_46,+ happyReduce_47,+ happyReduce_48,+ happyReduce_49,+ happyReduce_50,+ happyReduce_51,+ happyReduce_52,+ happyReduce_53,+ happyReduce_54,+ happyReduce_55,+ happyReduce_56,+ happyReduce_57,+ happyReduce_58,+ happyReduce_59,+ happyReduce_60,+ happyReduce_61,+ happyReduce_62,+ happyReduce_63,+ happyReduce_64,+ happyReduce_65,+ happyReduce_66,+ happyReduce_67,+ happyReduce_68,+ happyReduce_69,+ happyReduce_70,+ happyReduce_71,+ happyReduce_72,+ happyReduce_73,+ happyReduce_74,+ happyReduce_75,+ happyReduce_76,+ happyReduce_77,+ happyReduce_78,+ happyReduce_79,+ happyReduce_80,+ happyReduce_81,+ happyReduce_82,+ happyReduce_83,+ happyReduce_84,+ happyReduce_85,+ happyReduce_86,+ happyReduce_87,+ happyReduce_88,+ happyReduce_89,+ happyReduce_90,+ happyReduce_91,+ happyReduce_92,+ happyReduce_93,+ happyReduce_94,+ happyReduce_95,+ happyReduce_96,+ happyReduce_97,+ happyReduce_98,+ happyReduce_99,+ happyReduce_100,+ happyReduce_101,+ happyReduce_102,+ happyReduce_103,+ happyReduce_104,+ happyReduce_105,+ happyReduce_106,+ happyReduce_107,+ happyReduce_108,+ happyReduce_109,+ happyReduce_110,+ happyReduce_111,+ happyReduce_112,+ happyReduce_113,+ happyReduce_114,+ happyReduce_115,+ happyReduce_116,+ happyReduce_117,+ happyReduce_118,+ happyReduce_119,+ happyReduce_120,+ happyReduce_121,+ happyReduce_122,+ happyReduce_123,+ happyReduce_124,+ happyReduce_125,+ happyReduce_126,+ happyReduce_127,+ happyReduce_128,+ happyReduce_129,+ happyReduce_130,+ happyReduce_131,+ happyReduce_132,+ happyReduce_133,+ happyReduce_134,+ happyReduce_135,+ happyReduce_136,+ happyReduce_137,+ happyReduce_138,+ happyReduce_139,+ happyReduce_140,+ happyReduce_141 :: () => ({-HappyReduction (Err) = -}+	   Int +	-> (Token)+	-> HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)+	-> [HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)] +	-> HappyStk HappyAbsSyn +	-> [(Token)] -> (Err) HappyAbsSyn)++happyExpList :: Happy_Data_Array.Array Int Int+happyExpList = Happy_Data_Array.listArray (0,607) ([0,0,0,0,512,24228,9955,2,0,0,0,0,20481,29103,275,0,0,0,0,128,55209,35256,0,0,0,0,0,0,0,64,0,0,0,0,16416,13802,8302,0,0,0,0,4096,62752,14106,16,0,0,0,0,32776,36218,2075,0,0,0,0,0,64,0,12,0,0,0,0,0,0,0,0,0,0,0,0,16,0,1,0,0,0,32768,10240,0,128,0,0,0,0,64,20,16384,0,0,0,0,8192,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,32,0,0,0,0,16384,0,0,0,0,0,0,512,0,0,0,0,0,0,0,0,0,256,0,0,0,0,0,0,0,0,0,0,0,0,0,20480,0,0,0,0,0,0,0,16384,0,0,0,0,4096,256,0,496,0,0,0,0,32776,0,63488,0,0,0,0,1024,64,0,124,0,0,0,0,8194,0,15872,0,0,0,0,256,16,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,256,0,0,0,0,0,16,25865,33408,0,0,0,0,2048,33920,16434,65,0,0,0,0,16388,6466,8352,0,0,0,0,512,41248,20492,16,0,0,0,0,0,0,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1056,51730,1280,1,0,0,0,0,0,0,4,0,0,0,0,16480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8194,3233,4176,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,1536,4,0,0,0,0,0,0,0,0,16,0,0,0,0,32,51730,1280,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,12,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,32,0,62,0,0,0,0,0,0,0,0,0,0,0,128,8,32768,15,0,0,0,16384,1024,0,1984,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1024,64,0,124,0,0,0,0,32,0,0,0,0,0,0,32768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,128,0,0,0,0,0,0,8192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1024,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1024,320,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,128,0,0,0,0,0,4,49152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32768,0,0,0,0,0,0,0,0,0,256,0,0,0,0,0,0,0,1,0,0,0,0,0,0,64,0,0,0,0,0,2,8192,0,0,0,0,0,0,0,16,0,0,0,0,32776,2,2048,0,0,0,0,0,0,4608,8,0,0,0,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,0,0,1024,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,18436,50877,1037,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,256,44882,4977,1,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,24224,1763,2,0,0,0,0,20993,29103,275,0,0,0,0,0,0,32768,0,0,0,0,0,0,0,0,0,0,0,0,16416,13802,8302,0,0,0,0,4096,2304,32869,130,0,0,0,0,32768,0,2048,0,0,0,0,0,64,0,4,0,0,0,0,512,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,32768,0,0,0,0,0,0,0,0,0,0,0,0,1024,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2048,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,0,0,0,0,0,0,0,2,0,0,0,0,1024,0,64,0,0,0,0,0,0,0,0,0,0,0,0,512,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8448,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2049,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1024,0,0,0,0,0,0,0,1,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,32,2,57344,3,0,0,0,4096,256,0,496,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,768,2,0,0,0,0,0,8192,4608,202,261,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,8192,0,0,0,0,0,0,256,0,0,0,0,0,0,16384,9216,404,522,0,0,0,0,32,51730,1280,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8194,3233,4176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,0,128,0,0,0,0,0,0,32768,0,0,0,0,0,512,0,32,0,0,0,0,0,0,0,0,0,0,0,2048,33920,16434,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16384,0,0,0,0,0,0,0,0,10240,0,0,0,0,0,16,1,61440,1,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,8192,0,0,0,0,0,0,0,4096,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1024,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,4096,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0+	])++{-# NOINLINE happyExpListPerState #-}+happyExpListPerState st =+    token_strs_expected+  where token_strs = ["error","%dummy","%start_pLGrammar","%start_pLDef","%start_pListLDef","%start_pListIdent","%start_pGrammar","%start_pListDef","%start_pDef","%start_pItem","%start_pListItem","%start_pCat","%start_pLabel","%start_pLabelId","%start_pProfItem","%start_pIntList","%start_pListInteger","%start_pListIntList","%start_pListProfItem","%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_pReg2","%start_pReg1","%start_pReg3","%start_pReg","Ident","String","Integer","Char","Double","LGrammar","LDef","ListLDef","ListIdent","Grammar","ListDef","Def","Item","ListItem","Cat","Label","LabelId","ProfItem","IntList","ListInteger","ListIntList","ListProfItem","Arg","ListArg","Separation","ListString","Exp","Exp1","Exp2","ListExp","ListExp2","RHS","ListRHS","MinimumSize","Reg2","Reg1","Reg3","Reg","'('","')'","'*'","'+'","','","'-'","'.'","':'","'::='","';'","'='","'?'","'['","']'","'_'","'char'","'coercions'","'comment'","'define'","'delimiters'","'digit'","'entrypoints'","'eps'","'internal'","'layout'","'letter'","'lower'","'nonempty'","'position'","'rules'","'separator'","'stop'","'terminator'","'token'","'toplevel'","'upper'","'views'","'{'","'|'","'}'","L_ident","L_quoted","L_integ","L_charac","L_doubl","%eof"]+        bit_start = st * 119+        bit_end = (st + 1) * 119+        read_bit = readArrayBit happyExpList+        bits = map read_bit [bit_start..bit_end - 1]+        bits_indexed = zip bits [0..118]+        token_strs_expected = concatMap f bits_indexed+        f (False, _) = []+        f (True, nr) = [token_strs !! nr]++action_0 (74) = happyShift action_99+action_0 (83) = happyShift action_137+action_0 (86) = happyShift action_100+action_0 (88) = happyShift action_101+action_0 (90) = happyShift action_113+action_0 (91) = happyShift action_114+action_0 (92) = happyShift action_115+action_0 (93) = happyShift action_116+action_0 (95) = happyShift action_117+action_0 (97) = happyShift action_118+action_0 (98) = happyShift action_119+action_0 (102) = happyShift action_120+action_0 (103) = happyShift action_121+action_0 (104) = happyShift action_122+action_0 (106) = happyShift action_123+action_0 (107) = happyShift action_124+action_0 (110) = happyShift action_138+action_0 (114) = happyShift action_34+action_0 (36) = happyGoto action_132+action_0 (41) = happyGoto action_140+action_0 (42) = happyGoto action_133+action_0 (43) = happyGoto action_141+action_0 (44) = happyGoto action_135+action_0 (47) = happyGoto action_136+action_0 (51) = happyGoto action_112+action_0 (52) = happyGoto action_103+action_0 _ = happyReduce_42++action_1 (74) = happyShift action_99+action_1 (86) = happyShift action_100+action_1 (88) = happyShift action_101+action_1 (90) = happyShift action_113+action_1 (91) = happyShift action_114+action_1 (92) = happyShift action_115+action_1 (93) = happyShift action_116+action_1 (95) = happyShift action_117+action_1 (97) = happyShift action_118+action_1 (98) = happyShift action_119+action_1 (102) = happyShift action_120+action_1 (103) = happyShift action_121+action_1 (104) = happyShift action_122+action_1 (106) = happyShift action_123+action_1 (107) = happyShift action_124+action_1 (110) = happyShift action_138+action_1 (114) = happyShift action_34+action_1 (36) = happyGoto action_132+action_1 (42) = happyGoto action_139+action_1 (44) = happyGoto action_135+action_1 (47) = happyGoto action_136+action_1 (51) = happyGoto action_112+action_1 (52) = happyGoto action_103+action_1 _ = happyFail (happyExpListPerState 1)++action_2 (74) = happyShift action_99+action_2 (83) = happyShift action_137+action_2 (86) = happyShift action_100+action_2 (88) = happyShift action_101+action_2 (90) = happyShift action_113+action_2 (91) = happyShift action_114+action_2 (92) = happyShift action_115+action_2 (93) = happyShift action_116+action_2 (95) = happyShift action_117+action_2 (97) = happyShift action_118+action_2 (98) = happyShift action_119+action_2 (102) = happyShift action_120+action_2 (103) = happyShift action_121+action_2 (104) = happyShift action_122+action_2 (106) = happyShift action_123+action_2 (107) = happyShift action_124+action_2 (110) = happyShift action_138+action_2 (114) = happyShift action_34+action_2 (36) = happyGoto action_132+action_2 (42) = happyGoto action_133+action_2 (43) = happyGoto action_134+action_2 (44) = happyGoto action_135+action_2 (47) = happyGoto action_136+action_2 (51) = happyGoto action_112+action_2 (52) = happyGoto action_103+action_2 _ = happyReduce_42++action_3 (114) = happyShift action_34+action_3 (36) = happyGoto action_130+action_3 (44) = happyGoto action_131+action_3 _ = happyFail (happyExpListPerState 3)++action_4 (74) = happyShift action_99+action_4 (83) = happyShift action_127+action_4 (86) = happyShift action_100+action_4 (88) = happyShift action_101+action_4 (90) = happyShift action_113+action_4 (91) = happyShift action_114+action_4 (92) = happyShift action_115+action_4 (93) = happyShift action_116+action_4 (95) = happyShift action_117+action_4 (97) = happyShift action_118+action_4 (98) = happyShift action_119+action_4 (102) = happyShift action_120+action_4 (103) = happyShift action_121+action_4 (104) = happyShift action_122+action_4 (106) = happyShift action_123+action_4 (107) = happyShift action_124+action_4 (114) = happyShift action_34+action_4 (36) = happyGoto action_97+action_4 (45) = happyGoto action_128+action_4 (46) = happyGoto action_129+action_4 (47) = happyGoto action_126+action_4 (51) = happyGoto action_112+action_4 (52) = happyGoto action_103+action_4 _ = happyReduce_49++action_5 (74) = happyShift action_99+action_5 (83) = happyShift action_127+action_5 (86) = happyShift action_100+action_5 (88) = happyShift action_101+action_5 (90) = happyShift action_113+action_5 (91) = happyShift action_114+action_5 (92) = happyShift action_115+action_5 (93) = happyShift action_116+action_5 (95) = happyShift action_117+action_5 (97) = happyShift action_118+action_5 (98) = happyShift action_119+action_5 (102) = happyShift action_120+action_5 (103) = happyShift action_121+action_5 (104) = happyShift action_122+action_5 (106) = happyShift action_123+action_5 (107) = happyShift action_124+action_5 (114) = happyShift action_34+action_5 (36) = happyGoto action_97+action_5 (46) = happyGoto action_125+action_5 (47) = happyGoto action_126+action_5 (51) = happyGoto action_112+action_5 (52) = happyGoto action_103+action_5 _ = happyReduce_49++action_6 (74) = happyShift action_99+action_6 (86) = happyShift action_100+action_6 (88) = happyShift action_101+action_6 (90) = happyShift action_113+action_6 (91) = happyShift action_114+action_6 (92) = happyShift action_115+action_6 (93) = happyShift action_116+action_6 (95) = happyShift action_117+action_6 (97) = happyShift action_118+action_6 (98) = happyShift action_119+action_6 (102) = happyShift action_120+action_6 (103) = happyShift action_121+action_6 (104) = happyShift action_122+action_6 (106) = happyShift action_123+action_6 (107) = happyShift action_124+action_6 (114) = happyShift action_34+action_6 (36) = happyGoto action_97+action_6 (47) = happyGoto action_111+action_6 (51) = happyGoto action_112+action_6 (52) = happyGoto action_103+action_6 _ = happyFail (happyExpListPerState 6)++action_7 (86) = happyShift action_106+action_7 (114) = happyShift action_34+action_7 (115) = happyShift action_68+action_7 (36) = happyGoto action_104+action_7 (37) = happyGoto action_108+action_7 (48) = happyGoto action_109+action_7 (50) = happyGoto action_110+action_7 _ = happyFail (happyExpListPerState 7)++action_8 (49) = happyGoto action_107+action_8 _ = happyReduce_71++action_9 (86) = happyShift action_106+action_9 (114) = happyShift action_34+action_9 (36) = happyGoto action_104+action_9 (50) = happyGoto action_105+action_9 _ = happyFail (happyExpListPerState 9)++action_10 (74) = happyShift action_99+action_10 (86) = happyShift action_100+action_10 (88) = happyShift action_101+action_10 (114) = happyShift action_34+action_10 (36) = happyGoto action_97+action_10 (51) = happyGoto action_102+action_10 (52) = happyGoto action_103+action_10 _ = happyFail (happyExpListPerState 10)++action_11 (74) = happyShift action_99+action_11 (86) = happyShift action_100+action_11 (88) = happyShift action_101+action_11 (114) = happyShift action_34+action_11 (36) = happyGoto action_97+action_11 (52) = happyGoto action_98+action_11 _ = happyFail (happyExpListPerState 11)++action_12 (74) = happyShift action_89+action_12 (53) = happyGoto action_96+action_12 _ = happyFail (happyExpListPerState 12)++action_13 (86) = happyShift action_92+action_13 (54) = happyGoto action_95+action_13 _ = happyFail (happyExpListPerState 13)++action_14 (116) = happyShift action_69+action_14 (38) = happyGoto action_93+action_14 (55) = happyGoto action_94+action_14 _ = happyReduce_86++action_15 (86) = happyShift action_92+action_15 (54) = happyGoto action_90+action_15 (56) = happyGoto action_91+action_15 _ = happyReduce_89++action_16 (74) = happyShift action_89+action_16 (53) = happyGoto action_87+action_16 (57) = happyGoto action_88+action_16 _ = happyFail (happyExpListPerState 16)++action_17 (114) = happyShift action_34+action_17 (36) = happyGoto action_85+action_17 (58) = happyGoto action_86+action_17 _ = happyFail (happyExpListPerState 17)++action_18 (59) = happyGoto action_84+action_18 _ = happyReduce_95++action_19 (104) = happyShift action_82+action_19 (106) = happyShift action_83+action_19 (60) = happyGoto action_81+action_19 _ = happyReduce_97++action_20 (115) = happyShift action_68+action_20 (37) = happyGoto action_79+action_20 (61) = happyGoto action_80+action_20 _ = happyFail (happyExpListPerState 20)++action_21 (74) = happyShift action_66+action_21 (86) = happyShift action_67+action_21 (114) = happyShift action_34+action_21 (115) = happyShift action_68+action_21 (116) = happyShift action_69+action_21 (117) = happyShift action_49+action_21 (118) = happyShift action_70+action_21 (36) = happyGoto action_71+action_21 (37) = happyGoto action_60+action_21 (38) = happyGoto action_61+action_21 (39) = happyGoto action_62+action_21 (40) = happyGoto action_63+action_21 (62) = happyGoto action_78+action_21 (63) = happyGoto action_73+action_21 (64) = happyGoto action_74+action_21 _ = happyFail (happyExpListPerState 21)++action_22 (74) = happyShift action_66+action_22 (86) = happyShift action_67+action_22 (114) = happyShift action_34+action_22 (115) = happyShift action_68+action_22 (116) = happyShift action_69+action_22 (117) = happyShift action_49+action_22 (118) = happyShift action_70+action_22 (36) = happyGoto action_71+action_22 (37) = happyGoto action_60+action_22 (38) = happyGoto action_61+action_22 (39) = happyGoto action_62+action_22 (40) = happyGoto action_63+action_22 (63) = happyGoto action_77+action_22 (64) = happyGoto action_74+action_22 _ = happyFail (happyExpListPerState 22)++action_23 (74) = happyShift action_66+action_23 (86) = happyShift action_67+action_23 (114) = happyShift action_34+action_23 (115) = happyShift action_68+action_23 (116) = happyShift action_69+action_23 (117) = happyShift action_49+action_23 (118) = happyShift action_70+action_23 (36) = happyGoto action_59+action_23 (37) = happyGoto action_60+action_23 (38) = happyGoto action_61+action_23 (39) = happyGoto action_62+action_23 (40) = happyGoto action_63+action_23 (64) = happyGoto action_76+action_23 _ = happyFail (happyExpListPerState 23)++action_24 (74) = happyShift action_66+action_24 (86) = happyShift action_67+action_24 (114) = happyShift action_34+action_24 (115) = happyShift action_68+action_24 (116) = happyShift action_69+action_24 (117) = happyShift action_49+action_24 (118) = happyShift action_70+action_24 (36) = happyGoto action_71+action_24 (37) = happyGoto action_60+action_24 (38) = happyGoto action_61+action_24 (39) = happyGoto action_62+action_24 (40) = happyGoto action_63+action_24 (62) = happyGoto action_72+action_24 (63) = happyGoto action_73+action_24 (64) = happyGoto action_74+action_24 (65) = happyGoto action_75+action_24 _ = happyReduce_113++action_25 (74) = happyShift action_66+action_25 (86) = happyShift action_67+action_25 (114) = happyShift action_34+action_25 (115) = happyShift action_68+action_25 (116) = happyShift action_69+action_25 (117) = happyShift action_49+action_25 (118) = happyShift action_70+action_25 (36) = happyGoto action_59+action_25 (37) = happyGoto action_60+action_25 (38) = happyGoto action_61+action_25 (39) = happyGoto action_62+action_25 (40) = happyGoto action_63+action_25 (64) = happyGoto action_64+action_25 (66) = happyGoto action_65+action_25 _ = happyFail (happyExpListPerState 25)++action_26 (49) = happyGoto action_55+action_26 (67) = happyGoto action_58+action_26 _ = happyReduce_71++action_27 (49) = happyGoto action_55+action_27 (67) = happyGoto action_56+action_27 (68) = happyGoto action_57+action_27 _ = happyReduce_71++action_28 (101) = happyShift action_54+action_28 (69) = happyGoto action_53+action_28 _ = happyReduce_122++action_29 (74) = happyShift action_40+action_29 (86) = happyShift action_41+action_29 (89) = happyShift action_42+action_29 (94) = happyShift action_43+action_29 (96) = happyShift action_44+action_29 (99) = happyShift action_45+action_29 (100) = happyShift action_46+action_29 (109) = happyShift action_47+action_29 (111) = happyShift action_48+action_29 (117) = happyShift action_49+action_29 (39) = happyGoto action_35+action_29 (70) = happyGoto action_52+action_29 (72) = happyGoto action_38+action_29 _ = happyFail (happyExpListPerState 29)++action_30 (74) = happyShift action_40+action_30 (86) = happyShift action_41+action_30 (89) = happyShift action_42+action_30 (94) = happyShift action_43+action_30 (96) = happyShift action_44+action_30 (99) = happyShift action_45+action_30 (100) = happyShift action_46+action_30 (109) = happyShift action_47+action_30 (111) = happyShift action_48+action_30 (117) = happyShift action_49+action_30 (39) = happyGoto action_35+action_30 (70) = happyGoto action_36+action_30 (71) = happyGoto action_51+action_30 (72) = happyGoto action_38+action_30 _ = happyFail (happyExpListPerState 30)++action_31 (74) = happyShift action_40+action_31 (86) = happyShift action_41+action_31 (89) = happyShift action_42+action_31 (94) = happyShift action_43+action_31 (96) = happyShift action_44+action_31 (99) = happyShift action_45+action_31 (100) = happyShift action_46+action_31 (109) = happyShift action_47+action_31 (111) = happyShift action_48+action_31 (117) = happyShift action_49+action_31 (39) = happyGoto action_35+action_31 (72) = happyGoto action_50+action_31 _ = happyFail (happyExpListPerState 31)++action_32 (74) = happyShift action_40+action_32 (86) = happyShift action_41+action_32 (89) = happyShift action_42+action_32 (94) = happyShift action_43+action_32 (96) = happyShift action_44+action_32 (99) = happyShift action_45+action_32 (100) = happyShift action_46+action_32 (109) = happyShift action_47+action_32 (111) = happyShift action_48+action_32 (117) = happyShift action_49+action_32 (39) = happyGoto action_35+action_32 (70) = happyGoto action_36+action_32 (71) = happyGoto action_37+action_32 (72) = happyGoto action_38+action_32 (73) = happyGoto action_39+action_32 _ = happyFail (happyExpListPerState 32)++action_33 (114) = happyShift action_34+action_33 _ = happyFail (happyExpListPerState 33)++action_34 _ = happyReduce_33++action_35 _ = happyReduce_132++action_36 (74) = happyShift action_40+action_36 (79) = happyShift action_195+action_36 (86) = happyShift action_41+action_36 (89) = happyShift action_42+action_36 (94) = happyShift action_43+action_36 (96) = happyShift action_44+action_36 (99) = happyShift action_45+action_36 (100) = happyShift action_46+action_36 (109) = happyShift action_47+action_36 (111) = happyShift action_48+action_36 (117) = happyShift action_49+action_36 (39) = happyGoto action_35+action_36 (72) = happyGoto action_187+action_36 _ = happyReduce_127++action_37 (112) = happyShift action_188+action_37 _ = happyReduce_141++action_38 (76) = happyShift action_189+action_38 (77) = happyShift action_190+action_38 (85) = happyShift action_191+action_38 _ = happyReduce_124++action_39 (119) = happyAccept+action_39 _ = happyFail (happyExpListPerState 39)++action_40 (74) = happyShift action_40+action_40 (86) = happyShift action_41+action_40 (89) = happyShift action_42+action_40 (94) = happyShift action_43+action_40 (96) = happyShift action_44+action_40 (99) = happyShift action_45+action_40 (100) = happyShift action_46+action_40 (109) = happyShift action_47+action_40 (111) = happyShift action_48+action_40 (117) = happyShift action_49+action_40 (39) = happyGoto action_35+action_40 (70) = happyGoto action_36+action_40 (71) = happyGoto action_37+action_40 (72) = happyGoto action_38+action_40 (73) = happyGoto action_194+action_40 _ = happyFail (happyExpListPerState 40)++action_41 (115) = happyShift action_68+action_41 (37) = happyGoto action_193+action_41 _ = happyFail (happyExpListPerState 41)++action_42 _ = happyReduce_139++action_43 _ = happyReduce_135++action_44 _ = happyReduce_131++action_45 _ = happyReduce_136++action_46 _ = happyReduce_138++action_47 _ = happyReduce_137++action_48 (115) = happyShift action_68+action_48 (37) = happyGoto action_192+action_48 _ = happyFail (happyExpListPerState 48)++action_49 _ = happyReduce_36++action_50 (76) = happyShift action_189+action_50 (77) = happyShift action_190+action_50 (85) = happyShift action_191+action_50 (119) = happyAccept+action_50 _ = happyFail (happyExpListPerState 50)++action_51 (112) = happyShift action_188+action_51 (119) = happyAccept+action_51 _ = happyFail (happyExpListPerState 51)++action_52 (74) = happyShift action_40+action_52 (86) = happyShift action_41+action_52 (89) = happyShift action_42+action_52 (94) = happyShift action_43+action_52 (96) = happyShift action_44+action_52 (99) = happyShift action_45+action_52 (100) = happyShift action_46+action_52 (109) = happyShift action_47+action_52 (111) = happyShift action_48+action_52 (117) = happyShift action_49+action_52 (119) = happyAccept+action_52 (39) = happyGoto action_35+action_52 (72) = happyGoto action_187+action_52 _ = happyFail (happyExpListPerState 52)++action_53 (119) = happyAccept+action_53 _ = happyFail (happyExpListPerState 53)++action_54 _ = happyReduce_121++action_55 (86) = happyShift action_106+action_55 (114) = happyShift action_34+action_55 (115) = happyShift action_68+action_55 (36) = happyGoto action_104+action_55 (37) = happyGoto action_108+action_55 (48) = happyGoto action_164+action_55 (50) = happyGoto action_110+action_55 _ = happyReduce_118++action_56 (112) = happyShift action_186+action_56 _ = happyReduce_119++action_57 (119) = happyAccept+action_57 _ = happyFail (happyExpListPerState 57)++action_58 (119) = happyAccept+action_58 _ = happyFail (happyExpListPerState 58)++action_59 _ = happyReduce_106++action_60 _ = happyReduce_109++action_61 _ = happyReduce_107++action_62 _ = happyReduce_108++action_63 _ = happyReduce_110++action_64 (74) = happyShift action_66+action_64 (86) = happyShift action_67+action_64 (114) = happyShift action_34+action_64 (115) = happyShift action_68+action_64 (116) = happyShift action_69+action_64 (117) = happyShift action_49+action_64 (118) = happyShift action_70+action_64 (36) = happyGoto action_59+action_64 (37) = happyGoto action_60+action_64 (38) = happyGoto action_61+action_64 (39) = happyGoto action_62+action_64 (40) = happyGoto action_63+action_64 (64) = happyGoto action_64+action_64 (66) = happyGoto action_185+action_64 _ = happyReduce_116++action_65 (119) = happyAccept+action_65 _ = happyFail (happyExpListPerState 65)++action_66 (74) = happyShift action_66+action_66 (86) = happyShift action_67+action_66 (114) = happyShift action_34+action_66 (115) = happyShift action_68+action_66 (116) = happyShift action_69+action_66 (117) = happyShift action_49+action_66 (118) = happyShift action_70+action_66 (36) = happyGoto action_71+action_66 (37) = happyGoto action_60+action_66 (38) = happyGoto action_61+action_66 (39) = happyGoto action_62+action_66 (40) = happyGoto action_63+action_66 (62) = happyGoto action_184+action_66 (63) = happyGoto action_73+action_66 (64) = happyGoto action_74+action_66 _ = happyFail (happyExpListPerState 66)++action_67 (74) = happyShift action_66+action_67 (86) = happyShift action_67+action_67 (114) = happyShift action_34+action_67 (115) = happyShift action_68+action_67 (116) = happyShift action_69+action_67 (117) = happyShift action_49+action_67 (118) = happyShift action_70+action_67 (36) = happyGoto action_71+action_67 (37) = happyGoto action_60+action_67 (38) = happyGoto action_61+action_67 (39) = happyGoto action_62+action_67 (40) = happyGoto action_63+action_67 (62) = happyGoto action_72+action_67 (63) = happyGoto action_73+action_67 (64) = happyGoto action_74+action_67 (65) = happyGoto action_183+action_67 _ = happyReduce_113++action_68 _ = happyReduce_34++action_69 _ = happyReduce_35++action_70 _ = happyReduce_37++action_71 (74) = happyShift action_66+action_71 (86) = happyShift action_67+action_71 (114) = happyShift action_34+action_71 (115) = happyShift action_68+action_71 (116) = happyShift action_69+action_71 (117) = happyShift action_49+action_71 (118) = happyShift action_70+action_71 (36) = happyGoto action_59+action_71 (37) = happyGoto action_60+action_71 (38) = happyGoto action_61+action_71 (39) = happyGoto action_62+action_71 (40) = happyGoto action_63+action_71 (64) = happyGoto action_64+action_71 (66) = happyGoto action_182+action_71 _ = happyReduce_106++action_72 (78) = happyShift action_181+action_72 _ = happyReduce_114++action_73 (81) = happyShift action_180+action_73 _ = happyReduce_103++action_74 _ = happyReduce_105++action_75 (119) = happyAccept+action_75 _ = happyFail (happyExpListPerState 75)++action_76 (119) = happyAccept+action_76 _ = happyFail (happyExpListPerState 76)++action_77 (119) = happyAccept+action_77 _ = happyFail (happyExpListPerState 77)++action_78 (119) = happyAccept+action_78 _ = happyFail (happyExpListPerState 78)++action_79 (78) = happyShift action_179+action_79 _ = happyReduce_100++action_80 (119) = happyAccept+action_80 _ = happyFail (happyExpListPerState 80)++action_81 (119) = happyAccept+action_81 _ = happyFail (happyExpListPerState 81)++action_82 (115) = happyShift action_68+action_82 (37) = happyGoto action_178+action_82 _ = happyFail (happyExpListPerState 82)++action_83 (115) = happyShift action_68+action_83 (37) = happyGoto action_177+action_83 _ = happyFail (happyExpListPerState 83)++action_84 (114) = happyShift action_34+action_84 (119) = happyAccept+action_84 (36) = happyGoto action_85+action_84 (58) = happyGoto action_176+action_84 _ = happyFail (happyExpListPerState 84)++action_85 _ = happyReduce_94++action_86 (119) = happyAccept+action_86 _ = happyFail (happyExpListPerState 86)++action_87 (74) = happyShift action_89+action_87 (53) = happyGoto action_87+action_87 (57) = happyGoto action_175+action_87 _ = happyReduce_92++action_88 (119) = happyAccept+action_88 _ = happyFail (happyExpListPerState 88)++action_89 (86) = happyShift action_174+action_89 _ = happyFail (happyExpListPerState 89)++action_90 (78) = happyShift action_173+action_90 _ = happyReduce_90++action_91 (119) = happyAccept+action_91 _ = happyFail (happyExpListPerState 91)++action_92 (116) = happyShift action_69+action_92 (38) = happyGoto action_93+action_92 (55) = happyGoto action_172+action_92 _ = happyReduce_86++action_93 (78) = happyShift action_171+action_93 _ = happyReduce_87++action_94 (119) = happyAccept+action_94 _ = happyFail (happyExpListPerState 94)++action_95 (119) = happyAccept+action_95 _ = happyFail (happyExpListPerState 95)++action_96 (119) = happyAccept+action_96 _ = happyFail (happyExpListPerState 96)++action_97 _ = happyReduce_79++action_98 (119) = happyAccept+action_98 _ = happyFail (happyExpListPerState 98)++action_99 (81) = happyShift action_170+action_99 _ = happyFail (happyExpListPerState 99)++action_100 (87) = happyShift action_169+action_100 _ = happyFail (happyExpListPerState 100)++action_101 _ = happyReduce_80++action_102 (119) = happyAccept+action_102 _ = happyFail (happyExpListPerState 102)++action_103 (74) = happyShift action_168+action_103 (86) = happyShift action_100+action_103 (88) = happyShift action_101+action_103 (114) = happyShift action_34+action_103 (36) = happyGoto action_97+action_103 (52) = happyGoto action_166+action_103 (53) = happyGoto action_87+action_103 (57) = happyGoto action_167+action_103 _ = happyReduce_75++action_104 _ = happyReduce_74++action_105 (119) = happyAccept+action_105 _ = happyFail (happyExpListPerState 105)++action_106 (86) = happyShift action_106+action_106 (114) = happyShift action_34+action_106 (36) = happyGoto action_104+action_106 (50) = happyGoto action_165+action_106 _ = happyFail (happyExpListPerState 106)++action_107 (86) = happyShift action_106+action_107 (114) = happyShift action_34+action_107 (115) = happyShift action_68+action_107 (119) = happyAccept+action_107 (36) = happyGoto action_104+action_107 (37) = happyGoto action_108+action_107 (48) = happyGoto action_164+action_107 (50) = happyGoto action_110+action_107 _ = happyFail (happyExpListPerState 107)++action_108 _ = happyReduce_69++action_109 (119) = happyAccept+action_109 _ = happyFail (happyExpListPerState 109)++action_110 _ = happyReduce_70++action_111 (119) = happyAccept+action_111 _ = happyFail (happyExpListPerState 111)++action_112 (80) = happyShift action_163+action_112 _ = happyFail (happyExpListPerState 112)++action_113 (114) = happyShift action_34+action_113 (36) = happyGoto action_162+action_113 _ = happyFail (happyExpListPerState 113)++action_114 (115) = happyShift action_68+action_114 (37) = happyGoto action_161+action_114 _ = happyFail (happyExpListPerState 114)++action_115 (114) = happyShift action_34+action_115 (36) = happyGoto action_160+action_115 _ = happyFail (happyExpListPerState 115)++action_116 (86) = happyShift action_106+action_116 (114) = happyShift action_34+action_116 (36) = happyGoto action_104+action_116 (50) = happyGoto action_159+action_116 _ = happyFail (happyExpListPerState 116)++action_117 (114) = happyShift action_34+action_117 (36) = happyGoto action_130+action_117 (44) = happyGoto action_158+action_117 _ = happyFail (happyExpListPerState 117)++action_118 (74) = happyShift action_99+action_118 (86) = happyShift action_100+action_118 (88) = happyShift action_101+action_118 (114) = happyShift action_34+action_118 (36) = happyGoto action_97+action_118 (51) = happyGoto action_157+action_118 (52) = happyGoto action_103+action_118 _ = happyFail (happyExpListPerState 118)++action_119 (105) = happyShift action_155+action_119 (108) = happyShift action_156+action_119 (115) = happyShift action_68+action_119 (37) = happyGoto action_79+action_119 (61) = happyGoto action_154+action_119 _ = happyFail (happyExpListPerState 119)++action_120 (107) = happyShift action_153+action_120 _ = happyFail (happyExpListPerState 120)++action_121 (114) = happyShift action_34+action_121 (36) = happyGoto action_152+action_121 _ = happyFail (happyExpListPerState 121)++action_122 (101) = happyShift action_54+action_122 (69) = happyGoto action_151+action_122 _ = happyReduce_122++action_123 (101) = happyShift action_54+action_123 (69) = happyGoto action_150+action_123 _ = happyReduce_122++action_124 (114) = happyShift action_34+action_124 (36) = happyGoto action_149+action_124 _ = happyFail (happyExpListPerState 124)++action_125 (119) = happyAccept+action_125 _ = happyFail (happyExpListPerState 125)++action_126 (83) = happyShift action_148+action_126 _ = happyReduce_50++action_127 (74) = happyShift action_99+action_127 (83) = happyShift action_127+action_127 (86) = happyShift action_100+action_127 (88) = happyShift action_101+action_127 (90) = happyShift action_113+action_127 (91) = happyShift action_114+action_127 (92) = happyShift action_115+action_127 (93) = happyShift action_116+action_127 (95) = happyShift action_117+action_127 (97) = happyShift action_118+action_127 (98) = happyShift action_119+action_127 (102) = happyShift action_120+action_127 (103) = happyShift action_121+action_127 (104) = happyShift action_122+action_127 (106) = happyShift action_123+action_127 (107) = happyShift action_124+action_127 (114) = happyShift action_34+action_127 (36) = happyGoto action_97+action_127 (46) = happyGoto action_147+action_127 (47) = happyGoto action_126+action_127 (51) = happyGoto action_112+action_127 (52) = happyGoto action_103+action_127 _ = happyReduce_49++action_128 (119) = happyAccept+action_128 _ = happyFail (happyExpListPerState 128)++action_129 _ = happyReduce_48++action_130 (78) = happyShift action_146+action_130 _ = happyReduce_46++action_131 (119) = happyAccept+action_131 _ = happyFail (happyExpListPerState 131)++action_132 (78) = happyShift action_146+action_132 (81) = happyReduce_46+action_132 _ = happyReduce_79++action_133 (83) = happyShift action_145+action_133 _ = happyReduce_43++action_134 (119) = happyAccept+action_134 _ = happyFail (happyExpListPerState 134)++action_135 (81) = happyShift action_144+action_135 _ = happyFail (happyExpListPerState 135)++action_136 _ = happyReduce_39++action_137 (74) = happyShift action_99+action_137 (83) = happyShift action_137+action_137 (86) = happyShift action_100+action_137 (88) = happyShift action_101+action_137 (90) = happyShift action_113+action_137 (91) = happyShift action_114+action_137 (92) = happyShift action_115+action_137 (93) = happyShift action_116+action_137 (95) = happyShift action_117+action_137 (97) = happyShift action_118+action_137 (98) = happyShift action_119+action_137 (102) = happyShift action_120+action_137 (103) = happyShift action_121+action_137 (104) = happyShift action_122+action_137 (106) = happyShift action_123+action_137 (107) = happyShift action_124+action_137 (110) = happyShift action_138+action_137 (114) = happyShift action_34+action_137 (36) = happyGoto action_132+action_137 (42) = happyGoto action_133+action_137 (43) = happyGoto action_143+action_137 (44) = happyGoto action_135+action_137 (47) = happyGoto action_136+action_137 (51) = happyGoto action_112+action_137 (52) = happyGoto action_103+action_137 _ = happyReduce_42++action_138 (114) = happyShift action_34+action_138 (36) = happyGoto action_130+action_138 (44) = happyGoto action_142+action_138 _ = happyFail (happyExpListPerState 138)++action_139 (119) = happyAccept+action_139 _ = happyFail (happyExpListPerState 139)++action_140 (119) = happyAccept+action_140 _ = happyFail (happyExpListPerState 140)++action_141 _ = happyReduce_38++action_142 _ = happyReduce_41++action_143 _ = happyReduce_45++action_144 (74) = happyShift action_99+action_144 (86) = happyShift action_100+action_144 (88) = happyShift action_101+action_144 (90) = happyShift action_113+action_144 (91) = happyShift action_114+action_144 (92) = happyShift action_115+action_144 (93) = happyShift action_116+action_144 (95) = happyShift action_117+action_144 (97) = happyShift action_118+action_144 (98) = happyShift action_119+action_144 (102) = happyShift action_120+action_144 (103) = happyShift action_121+action_144 (104) = happyShift action_122+action_144 (106) = happyShift action_123+action_144 (107) = happyShift action_124+action_144 (114) = happyShift action_34+action_144 (36) = happyGoto action_97+action_144 (47) = happyGoto action_230+action_144 (51) = happyGoto action_112+action_144 (52) = happyGoto action_103+action_144 _ = happyFail (happyExpListPerState 144)++action_145 (74) = happyShift action_99+action_145 (83) = happyShift action_137+action_145 (86) = happyShift action_100+action_145 (88) = happyShift action_101+action_145 (90) = happyShift action_113+action_145 (91) = happyShift action_114+action_145 (92) = happyShift action_115+action_145 (93) = happyShift action_116+action_145 (95) = happyShift action_117+action_145 (97) = happyShift action_118+action_145 (98) = happyShift action_119+action_145 (102) = happyShift action_120+action_145 (103) = happyShift action_121+action_145 (104) = happyShift action_122+action_145 (106) = happyShift action_123+action_145 (107) = happyShift action_124+action_145 (110) = happyShift action_138+action_145 (114) = happyShift action_34+action_145 (36) = happyGoto action_132+action_145 (42) = happyGoto action_133+action_145 (43) = happyGoto action_229+action_145 (44) = happyGoto action_135+action_145 (47) = happyGoto action_136+action_145 (51) = happyGoto action_112+action_145 (52) = happyGoto action_103+action_145 _ = happyReduce_42++action_146 (114) = happyShift action_34+action_146 (36) = happyGoto action_130+action_146 (44) = happyGoto action_228+action_146 _ = happyFail (happyExpListPerState 146)++action_147 _ = happyReduce_52++action_148 (74) = happyShift action_99+action_148 (83) = happyShift action_127+action_148 (86) = happyShift action_100+action_148 (88) = happyShift action_101+action_148 (90) = happyShift action_113+action_148 (91) = happyShift action_114+action_148 (92) = happyShift action_115+action_148 (93) = happyShift action_116+action_148 (95) = happyShift action_117+action_148 (97) = happyShift action_118+action_148 (98) = happyShift action_119+action_148 (102) = happyShift action_120+action_148 (103) = happyShift action_121+action_148 (104) = happyShift action_122+action_148 (106) = happyShift action_123+action_148 (107) = happyShift action_124+action_148 (114) = happyShift action_34+action_148 (36) = happyGoto action_97+action_148 (46) = happyGoto action_227+action_148 (47) = happyGoto action_126+action_148 (51) = happyGoto action_112+action_148 (52) = happyGoto action_103+action_148 _ = happyReduce_49++action_149 (74) = happyShift action_40+action_149 (86) = happyShift action_41+action_149 (89) = happyShift action_42+action_149 (94) = happyShift action_43+action_149 (96) = happyShift action_44+action_149 (99) = happyShift action_45+action_149 (100) = happyShift action_46+action_149 (109) = happyShift action_47+action_149 (111) = happyShift action_48+action_149 (117) = happyShift action_49+action_149 (39) = happyGoto action_35+action_149 (70) = happyGoto action_36+action_149 (71) = happyGoto action_37+action_149 (72) = happyGoto action_38+action_149 (73) = happyGoto action_226+action_149 _ = happyFail (happyExpListPerState 149)++action_150 (86) = happyShift action_106+action_150 (114) = happyShift action_34+action_150 (36) = happyGoto action_104+action_150 (50) = happyGoto action_225+action_150 _ = happyFail (happyExpListPerState 150)++action_151 (86) = happyShift action_106+action_151 (114) = happyShift action_34+action_151 (36) = happyGoto action_104+action_151 (50) = happyGoto action_224+action_151 _ = happyFail (happyExpListPerState 151)++action_152 (82) = happyShift action_223+action_152 _ = happyFail (happyExpListPerState 152)++action_153 (114) = happyShift action_34+action_153 (36) = happyGoto action_222+action_153 _ = happyFail (happyExpListPerState 153)++action_154 _ = happyReduce_66++action_155 (115) = happyShift action_68+action_155 (37) = happyGoto action_79+action_155 (61) = happyGoto action_221+action_155 _ = happyFail (happyExpListPerState 155)++action_156 _ = happyReduce_68++action_157 (80) = happyShift action_220+action_157 _ = happyFail (happyExpListPerState 157)++action_158 _ = happyReduce_59++action_159 (115) = happyShift action_68+action_159 (37) = happyGoto action_219+action_159 _ = happyFail (happyExpListPerState 159)++action_160 (59) = happyGoto action_218+action_160 _ = happyReduce_95++action_161 (115) = happyShift action_68+action_161 (37) = happyGoto action_217+action_161 _ = happyReduce_54++action_162 (116) = happyShift action_69+action_162 (38) = happyGoto action_216+action_162 _ = happyFail (happyExpListPerState 162)++action_163 (86) = happyShift action_106+action_163 (114) = happyShift action_34+action_163 (36) = happyGoto action_104+action_163 (50) = happyGoto action_215+action_163 _ = happyFail (happyExpListPerState 163)++action_164 _ = happyReduce_72++action_165 (87) = happyShift action_214+action_165 _ = happyFail (happyExpListPerState 165)++action_166 (74) = happyShift action_89+action_166 (53) = happyGoto action_87+action_166 (57) = happyGoto action_213+action_166 _ = happyReduce_78++action_167 _ = happyReduce_76++action_168 (81) = happyShift action_170+action_168 (86) = happyShift action_174+action_168 _ = happyFail (happyExpListPerState 168)++action_169 _ = happyReduce_81++action_170 (75) = happyShift action_211+action_170 (86) = happyShift action_212+action_170 _ = happyFail (happyExpListPerState 170)++action_171 (116) = happyShift action_69+action_171 (38) = happyGoto action_93+action_171 (55) = happyGoto action_210+action_171 _ = happyReduce_86++action_172 (87) = happyShift action_209+action_172 _ = happyFail (happyExpListPerState 172)++action_173 (86) = happyShift action_92+action_173 (54) = happyGoto action_90+action_173 (56) = happyGoto action_208+action_173 _ = happyReduce_89++action_174 (86) = happyShift action_92+action_174 (54) = happyGoto action_90+action_174 (56) = happyGoto action_207+action_174 _ = happyReduce_89++action_175 _ = happyReduce_93++action_176 _ = happyReduce_96++action_177 _ = happyReduce_98++action_178 _ = happyReduce_99++action_179 (115) = happyShift action_68+action_179 (37) = happyGoto action_79+action_179 (61) = happyGoto action_206+action_179 _ = happyFail (happyExpListPerState 179)++action_180 (74) = happyShift action_66+action_180 (86) = happyShift action_67+action_180 (114) = happyShift action_34+action_180 (115) = happyShift action_68+action_180 (116) = happyShift action_69+action_180 (117) = happyShift action_49+action_180 (118) = happyShift action_70+action_180 (36) = happyGoto action_71+action_180 (37) = happyGoto action_60+action_180 (38) = happyGoto action_61+action_180 (39) = happyGoto action_62+action_180 (40) = happyGoto action_63+action_180 (62) = happyGoto action_205+action_180 (63) = happyGoto action_73+action_180 (64) = happyGoto action_74+action_180 _ = happyFail (happyExpListPerState 180)++action_181 (74) = happyShift action_66+action_181 (86) = happyShift action_67+action_181 (114) = happyShift action_34+action_181 (115) = happyShift action_68+action_181 (116) = happyShift action_69+action_181 (117) = happyShift action_49+action_181 (118) = happyShift action_70+action_181 (36) = happyGoto action_71+action_181 (37) = happyGoto action_60+action_181 (38) = happyGoto action_61+action_181 (39) = happyGoto action_62+action_181 (40) = happyGoto action_63+action_181 (62) = happyGoto action_72+action_181 (63) = happyGoto action_73+action_181 (64) = happyGoto action_74+action_181 (65) = happyGoto action_204+action_181 _ = happyReduce_113++action_182 _ = happyReduce_104++action_183 (87) = happyShift action_203+action_183 _ = happyFail (happyExpListPerState 183)++action_184 (75) = happyShift action_202+action_184 _ = happyFail (happyExpListPerState 184)++action_185 _ = happyReduce_117++action_186 (49) = happyGoto action_55+action_186 (67) = happyGoto action_56+action_186 (68) = happyGoto action_201+action_186 _ = happyReduce_71++action_187 (76) = happyShift action_189+action_187 (77) = happyShift action_190+action_187 (85) = happyShift action_191+action_187 _ = happyReduce_123++action_188 (74) = happyShift action_40+action_188 (86) = happyShift action_41+action_188 (89) = happyShift action_42+action_188 (94) = happyShift action_43+action_188 (96) = happyShift action_44+action_188 (99) = happyShift action_45+action_188 (100) = happyShift action_46+action_188 (109) = happyShift action_47+action_188 (111) = happyShift action_48+action_188 (117) = happyShift action_49+action_188 (39) = happyGoto action_35+action_188 (70) = happyGoto action_200+action_188 (72) = happyGoto action_38+action_188 _ = happyFail (happyExpListPerState 188)++action_189 _ = happyReduce_128++action_190 _ = happyReduce_129++action_191 _ = happyReduce_130++action_192 (113) = happyShift action_199+action_192 _ = happyFail (happyExpListPerState 192)++action_193 (87) = happyShift action_198+action_193 _ = happyFail (happyExpListPerState 193)++action_194 (75) = happyShift action_197+action_194 _ = happyFail (happyExpListPerState 194)++action_195 (74) = happyShift action_40+action_195 (86) = happyShift action_41+action_195 (89) = happyShift action_42+action_195 (94) = happyShift action_43+action_195 (96) = happyShift action_44+action_195 (99) = happyShift action_45+action_195 (100) = happyShift action_46+action_195 (109) = happyShift action_47+action_195 (111) = happyShift action_48+action_195 (117) = happyShift action_49+action_195 (39) = happyGoto action_35+action_195 (70) = happyGoto action_196+action_195 (72) = happyGoto action_38+action_195 _ = happyFail (happyExpListPerState 195)++action_196 (74) = happyShift action_40+action_196 (86) = happyShift action_41+action_196 (89) = happyShift action_42+action_196 (94) = happyShift action_43+action_196 (96) = happyShift action_44+action_196 (99) = happyShift action_45+action_196 (100) = happyShift action_46+action_196 (109) = happyShift action_47+action_196 (111) = happyShift action_48+action_196 (117) = happyShift action_49+action_196 (39) = happyGoto action_35+action_196 (72) = happyGoto action_187+action_196 _ = happyReduce_126++action_197 _ = happyReduce_140++action_198 _ = happyReduce_133++action_199 _ = happyReduce_134++action_200 (74) = happyShift action_40+action_200 (86) = happyShift action_41+action_200 (89) = happyShift action_42+action_200 (94) = happyShift action_43+action_200 (96) = happyShift action_44+action_200 (99) = happyShift action_45+action_200 (100) = happyShift action_46+action_200 (109) = happyShift action_47+action_200 (111) = happyShift action_48+action_200 (117) = happyShift action_49+action_200 (39) = happyGoto action_35+action_200 (72) = happyGoto action_187+action_200 _ = happyReduce_125++action_201 _ = happyReduce_120++action_202 _ = happyReduce_112++action_203 _ = happyReduce_111++action_204 _ = happyReduce_115++action_205 _ = happyReduce_102++action_206 _ = happyReduce_101++action_207 (87) = happyShift action_240+action_207 _ = happyFail (happyExpListPerState 207)++action_208 _ = happyReduce_91++action_209 _ = happyReduce_85++action_210 _ = happyReduce_88++action_211 _ = happyReduce_82++action_212 (87) = happyShift action_239+action_212 _ = happyFail (happyExpListPerState 212)++action_213 _ = happyReduce_77++action_214 _ = happyReduce_73++action_215 (82) = happyShift action_238+action_215 _ = happyFail (happyExpListPerState 215)++action_216 _ = happyReduce_63++action_217 _ = happyReduce_55++action_218 (84) = happyShift action_237+action_218 (114) = happyShift action_34+action_218 (36) = happyGoto action_85+action_218 (58) = happyGoto action_176+action_218 _ = happyFail (happyExpListPerState 218)++action_219 (115) = happyShift action_68+action_219 (37) = happyGoto action_236+action_219 _ = happyFail (happyExpListPerState 219)++action_220 (86) = happyShift action_106+action_220 (114) = happyShift action_34+action_220 (36) = happyGoto action_104+action_220 (50) = happyGoto action_235+action_220 _ = happyFail (happyExpListPerState 220)++action_221 _ = happyReduce_67++action_222 (74) = happyShift action_40+action_222 (86) = happyShift action_41+action_222 (89) = happyShift action_42+action_222 (94) = happyShift action_43+action_222 (96) = happyShift action_44+action_222 (99) = happyShift action_45+action_222 (100) = happyShift action_46+action_222 (109) = happyShift action_47+action_222 (111) = happyShift action_48+action_222 (117) = happyShift action_49+action_222 (39) = happyGoto action_35+action_222 (70) = happyGoto action_36+action_222 (71) = happyGoto action_37+action_222 (72) = happyGoto action_38+action_222 (73) = happyGoto action_234+action_222 _ = happyFail (happyExpListPerState 222)++action_223 (49) = happyGoto action_55+action_223 (67) = happyGoto action_56+action_223 (68) = happyGoto action_233+action_223 _ = happyReduce_71++action_224 (115) = happyShift action_68+action_224 (37) = happyGoto action_232+action_224 _ = happyFail (happyExpListPerState 224)++action_225 (115) = happyShift action_68+action_225 (37) = happyGoto action_231+action_225 _ = happyFail (happyExpListPerState 225)++action_226 _ = happyReduce_57++action_227 _ = happyReduce_51++action_228 _ = happyReduce_47++action_229 _ = happyReduce_44++action_230 _ = happyReduce_40++action_231 _ = happyReduce_61++action_232 _ = happyReduce_60++action_233 _ = happyReduce_64++action_234 _ = happyReduce_58++action_235 (82) = happyShift action_246+action_235 _ = happyFail (happyExpListPerState 235)++action_236 (104) = happyShift action_82+action_236 (106) = happyShift action_83+action_236 (60) = happyGoto action_245+action_236 _ = happyReduce_97++action_237 (74) = happyShift action_66+action_237 (86) = happyShift action_67+action_237 (114) = happyShift action_34+action_237 (115) = happyShift action_68+action_237 (116) = happyShift action_69+action_237 (117) = happyShift action_49+action_237 (118) = happyShift action_70+action_237 (36) = happyGoto action_71+action_237 (37) = happyGoto action_60+action_237 (38) = happyGoto action_61+action_237 (39) = happyGoto action_62+action_237 (40) = happyGoto action_63+action_237 (62) = happyGoto action_244+action_237 (63) = happyGoto action_73+action_237 (64) = happyGoto action_74+action_237 _ = happyFail (happyExpListPerState 237)++action_238 (49) = happyGoto action_243+action_238 _ = happyReduce_71++action_239 (75) = happyShift action_242+action_239 _ = happyFail (happyExpListPerState 239)++action_240 (78) = happyShift action_241+action_240 _ = happyFail (happyExpListPerState 240)++action_241 (86) = happyShift action_249+action_241 _ = happyFail (happyExpListPerState 241)++action_242 _ = happyReduce_83++action_243 (86) = happyShift action_106+action_243 (114) = happyShift action_34+action_243 (115) = happyShift action_68+action_243 (36) = happyGoto action_104+action_243 (37) = happyGoto action_108+action_243 (48) = happyGoto action_164+action_243 (50) = happyGoto action_110+action_243 _ = happyReduce_53++action_244 _ = happyReduce_65++action_245 (101) = happyShift action_54+action_245 (69) = happyGoto action_248+action_245 _ = happyReduce_122++action_246 (49) = happyGoto action_247+action_246 _ = happyReduce_71++action_247 (86) = happyShift action_106+action_247 (114) = happyShift action_34+action_247 (115) = happyShift action_68+action_247 (36) = happyGoto action_104+action_247 (37) = happyGoto action_108+action_247 (48) = happyGoto action_164+action_247 (50) = happyGoto action_110+action_247 _ = happyReduce_56++action_248 _ = happyReduce_62++action_249 (116) = happyShift action_69+action_249 (38) = happyGoto action_93+action_249 (55) = happyGoto action_250+action_249 _ = happyReduce_86++action_250 (87) = happyShift action_251+action_250 _ = happyFail (happyExpListPerState 250)++action_251 (75) = happyShift action_252+action_251 _ = happyFail (happyExpListPerState 251)++action_252 _ = happyReduce_84++happyReduce_33 = happySpecReduce_1  36 happyReduction_33+happyReduction_33 (HappyTerminal (PT _ (TV happy_var_1)))+	 =  HappyAbsSyn36+		 (Ident happy_var_1+	)+happyReduction_33 _  = notHappyAtAll ++happyReduce_34 = happySpecReduce_1  37 happyReduction_34+happyReduction_34 (HappyTerminal (PT _ (TL happy_var_1)))+	 =  HappyAbsSyn37+		 (happy_var_1+	)+happyReduction_34 _  = notHappyAtAll ++happyReduce_35 = happySpecReduce_1  38 happyReduction_35+happyReduction_35 (HappyTerminal (PT _ (TI happy_var_1)))+	 =  HappyAbsSyn38+		 ((read ( happy_var_1)) :: Integer+	)+happyReduction_35 _  = notHappyAtAll ++happyReduce_36 = happySpecReduce_1  39 happyReduction_36+happyReduction_36 (HappyTerminal (PT _ (TC happy_var_1)))+	 =  HappyAbsSyn39+		 ((read ( happy_var_1)) :: Char+	)+happyReduction_36 _  = notHappyAtAll ++happyReduce_37 = happySpecReduce_1  40 happyReduction_37+happyReduction_37 (HappyTerminal (PT _ (TD happy_var_1)))+	 =  HappyAbsSyn40+		 ((read ( happy_var_1)) :: Double+	)+happyReduction_37 _  = notHappyAtAll ++happyReduce_38 = happySpecReduce_1  41 happyReduction_38+happyReduction_38 (HappyAbsSyn43  happy_var_1)+	 =  HappyAbsSyn41+		 (AbsBNF.LGr happy_var_1+	)+happyReduction_38 _  = notHappyAtAll ++happyReduce_39 = happySpecReduce_1  42 happyReduction_39+happyReduction_39 (HappyAbsSyn47  happy_var_1)+	 =  HappyAbsSyn42+		 (AbsBNF.DefAll happy_var_1+	)+happyReduction_39 _  = notHappyAtAll ++happyReduce_40 = happySpecReduce_3  42 happyReduction_40+happyReduction_40 (HappyAbsSyn47  happy_var_3)+	_+	(HappyAbsSyn44  happy_var_1)+	 =  HappyAbsSyn42+		 (AbsBNF.DefSome happy_var_1 happy_var_3+	)+happyReduction_40 _ _ _  = notHappyAtAll ++happyReduce_41 = happySpecReduce_2  42 happyReduction_41+happyReduction_41 (HappyAbsSyn44  happy_var_2)+	_+	 =  HappyAbsSyn42+		 (AbsBNF.LDefView happy_var_2+	)+happyReduction_41 _ _  = notHappyAtAll ++happyReduce_42 = happySpecReduce_0  43 happyReduction_42+happyReduction_42  =  HappyAbsSyn43+		 ([]+	)++happyReduce_43 = happySpecReduce_1  43 happyReduction_43+happyReduction_43 (HappyAbsSyn42  happy_var_1)+	 =  HappyAbsSyn43+		 ((:[]) happy_var_1+	)+happyReduction_43 _  = notHappyAtAll ++happyReduce_44 = happySpecReduce_3  43 happyReduction_44+happyReduction_44 (HappyAbsSyn43  happy_var_3)+	_+	(HappyAbsSyn42  happy_var_1)+	 =  HappyAbsSyn43+		 ((:) happy_var_1 happy_var_3+	)+happyReduction_44 _ _ _  = notHappyAtAll ++happyReduce_45 = happySpecReduce_2  43 happyReduction_45+happyReduction_45 (HappyAbsSyn43  happy_var_2)+	_+	 =  HappyAbsSyn43+		 (happy_var_2+	)+happyReduction_45 _ _  = notHappyAtAll ++happyReduce_46 = happySpecReduce_1  44 happyReduction_46+happyReduction_46 (HappyAbsSyn36  happy_var_1)+	 =  HappyAbsSyn44+		 ((:[]) happy_var_1+	)+happyReduction_46 _  = notHappyAtAll ++happyReduce_47 = happySpecReduce_3  44 happyReduction_47+happyReduction_47 (HappyAbsSyn44  happy_var_3)+	_+	(HappyAbsSyn36  happy_var_1)+	 =  HappyAbsSyn44+		 ((:) happy_var_1 happy_var_3+	)+happyReduction_47 _ _ _  = notHappyAtAll ++happyReduce_48 = happySpecReduce_1  45 happyReduction_48+happyReduction_48 (HappyAbsSyn46  happy_var_1)+	 =  HappyAbsSyn45+		 (AbsBNF.Grammar happy_var_1+	)+happyReduction_48 _  = notHappyAtAll ++happyReduce_49 = happySpecReduce_0  46 happyReduction_49+happyReduction_49  =  HappyAbsSyn46+		 ([]+	)++happyReduce_50 = happySpecReduce_1  46 happyReduction_50+happyReduction_50 (HappyAbsSyn47  happy_var_1)+	 =  HappyAbsSyn46+		 ((:[]) happy_var_1+	)+happyReduction_50 _  = notHappyAtAll ++happyReduce_51 = happySpecReduce_3  46 happyReduction_51+happyReduction_51 (HappyAbsSyn46  happy_var_3)+	_+	(HappyAbsSyn47  happy_var_1)+	 =  HappyAbsSyn46+		 ((:) happy_var_1 happy_var_3+	)+happyReduction_51 _ _ _  = notHappyAtAll ++happyReduce_52 = happySpecReduce_2  46 happyReduction_52+happyReduction_52 (HappyAbsSyn46  happy_var_2)+	_+	 =  HappyAbsSyn46+		 (happy_var_2+	)+happyReduction_52 _ _  = notHappyAtAll ++happyReduce_53 = happyReduce 5 47 happyReduction_53+happyReduction_53 ((HappyAbsSyn49  happy_var_5) `HappyStk`+	_ `HappyStk`+	(HappyAbsSyn50  happy_var_3) `HappyStk`+	_ `HappyStk`+	(HappyAbsSyn51  happy_var_1) `HappyStk`+	happyRest)+	 = HappyAbsSyn47+		 (AbsBNF.Rule happy_var_1 happy_var_3 (reverse happy_var_5)+	) `HappyStk` happyRest++happyReduce_54 = happySpecReduce_2  47 happyReduction_54+happyReduction_54 (HappyAbsSyn37  happy_var_2)+	_+	 =  HappyAbsSyn47+		 (AbsBNF.Comment happy_var_2+	)+happyReduction_54 _ _  = notHappyAtAll ++happyReduce_55 = happySpecReduce_3  47 happyReduction_55+happyReduction_55 (HappyAbsSyn37  happy_var_3)+	(HappyAbsSyn37  happy_var_2)+	_+	 =  HappyAbsSyn47+		 (AbsBNF.Comments happy_var_2 happy_var_3+	)+happyReduction_55 _ _ _  = notHappyAtAll ++happyReduce_56 = happyReduce 6 47 happyReduction_56+happyReduction_56 ((HappyAbsSyn49  happy_var_6) `HappyStk`+	_ `HappyStk`+	(HappyAbsSyn50  happy_var_4) `HappyStk`+	_ `HappyStk`+	(HappyAbsSyn51  happy_var_2) `HappyStk`+	_ `HappyStk`+	happyRest)+	 = HappyAbsSyn47+		 (AbsBNF.Internal happy_var_2 happy_var_4 (reverse happy_var_6)+	) `HappyStk` happyRest++happyReduce_57 = happySpecReduce_3  47 happyReduction_57+happyReduction_57 (HappyAbsSyn70  happy_var_3)+	(HappyAbsSyn36  happy_var_2)+	_+	 =  HappyAbsSyn47+		 (AbsBNF.Token happy_var_2 happy_var_3+	)+happyReduction_57 _ _ _  = notHappyAtAll ++happyReduce_58 = happyReduce 4 47 happyReduction_58+happyReduction_58 ((HappyAbsSyn70  happy_var_4) `HappyStk`+	(HappyAbsSyn36  happy_var_3) `HappyStk`+	_ `HappyStk`+	_ `HappyStk`+	happyRest)+	 = HappyAbsSyn47+		 (AbsBNF.PosToken happy_var_3 happy_var_4+	) `HappyStk` happyRest++happyReduce_59 = happySpecReduce_2  47 happyReduction_59+happyReduction_59 (HappyAbsSyn44  happy_var_2)+	_+	 =  HappyAbsSyn47+		 (AbsBNF.Entryp happy_var_2+	)+happyReduction_59 _ _  = notHappyAtAll ++happyReduce_60 = happyReduce 4 47 happyReduction_60+happyReduction_60 ((HappyAbsSyn37  happy_var_4) `HappyStk`+	(HappyAbsSyn50  happy_var_3) `HappyStk`+	(HappyAbsSyn69  happy_var_2) `HappyStk`+	_ `HappyStk`+	happyRest)+	 = HappyAbsSyn47+		 (AbsBNF.Separator happy_var_2 happy_var_3 happy_var_4+	) `HappyStk` happyRest++happyReduce_61 = happyReduce 4 47 happyReduction_61+happyReduction_61 ((HappyAbsSyn37  happy_var_4) `HappyStk`+	(HappyAbsSyn50  happy_var_3) `HappyStk`+	(HappyAbsSyn69  happy_var_2) `HappyStk`+	_ `HappyStk`+	happyRest)+	 = HappyAbsSyn47+		 (AbsBNF.Terminator happy_var_2 happy_var_3 happy_var_4+	) `HappyStk` happyRest++happyReduce_62 = happyReduce 6 47 happyReduction_62+happyReduction_62 ((HappyAbsSyn69  happy_var_6) `HappyStk`+	(HappyAbsSyn60  happy_var_5) `HappyStk`+	(HappyAbsSyn37  happy_var_4) `HappyStk`+	(HappyAbsSyn37  happy_var_3) `HappyStk`+	(HappyAbsSyn50  happy_var_2) `HappyStk`+	_ `HappyStk`+	happyRest)+	 = HappyAbsSyn47+		 (AbsBNF.Delimiters happy_var_2 happy_var_3 happy_var_4 happy_var_5 happy_var_6+	) `HappyStk` happyRest++happyReduce_63 = happySpecReduce_3  47 happyReduction_63+happyReduction_63 (HappyAbsSyn38  happy_var_3)+	(HappyAbsSyn36  happy_var_2)+	_+	 =  HappyAbsSyn47+		 (AbsBNF.Coercions happy_var_2 happy_var_3+	)+happyReduction_63 _ _ _  = notHappyAtAll ++happyReduce_64 = happyReduce 4 47 happyReduction_64+happyReduction_64 ((HappyAbsSyn68  happy_var_4) `HappyStk`+	_ `HappyStk`+	(HappyAbsSyn36  happy_var_2) `HappyStk`+	_ `HappyStk`+	happyRest)+	 = HappyAbsSyn47+		 (AbsBNF.Rules happy_var_2 happy_var_4+	) `HappyStk` happyRest++happyReduce_65 = happyReduce 5 47 happyReduction_65+happyReduction_65 ((HappyAbsSyn62  happy_var_5) `HappyStk`+	_ `HappyStk`+	(HappyAbsSyn59  happy_var_3) `HappyStk`+	(HappyAbsSyn36  happy_var_2) `HappyStk`+	_ `HappyStk`+	happyRest)+	 = HappyAbsSyn47+		 (AbsBNF.Function happy_var_2 (reverse happy_var_3) happy_var_5+	) `HappyStk` happyRest++happyReduce_66 = happySpecReduce_2  47 happyReduction_66+happyReduction_66 (HappyAbsSyn61  happy_var_2)+	_+	 =  HappyAbsSyn47+		 (AbsBNF.Layout happy_var_2+	)+happyReduction_66 _ _  = notHappyAtAll ++happyReduce_67 = happySpecReduce_3  47 happyReduction_67+happyReduction_67 (HappyAbsSyn61  happy_var_3)+	_+	_+	 =  HappyAbsSyn47+		 (AbsBNF.LayoutStop happy_var_3+	)+happyReduction_67 _ _ _  = notHappyAtAll ++happyReduce_68 = happySpecReduce_2  47 happyReduction_68+happyReduction_68 _+	_+	 =  HappyAbsSyn47+		 (AbsBNF.LayoutTop+	)++happyReduce_69 = happySpecReduce_1  48 happyReduction_69+happyReduction_69 (HappyAbsSyn37  happy_var_1)+	 =  HappyAbsSyn48+		 (AbsBNF.Terminal happy_var_1+	)+happyReduction_69 _  = notHappyAtAll ++happyReduce_70 = happySpecReduce_1  48 happyReduction_70+happyReduction_70 (HappyAbsSyn50  happy_var_1)+	 =  HappyAbsSyn48+		 (AbsBNF.NTerminal happy_var_1+	)+happyReduction_70 _  = notHappyAtAll ++happyReduce_71 = happySpecReduce_0  49 happyReduction_71+happyReduction_71  =  HappyAbsSyn49+		 ([]+	)++happyReduce_72 = happySpecReduce_2  49 happyReduction_72+happyReduction_72 (HappyAbsSyn48  happy_var_2)+	(HappyAbsSyn49  happy_var_1)+	 =  HappyAbsSyn49+		 (flip (:) happy_var_1 happy_var_2+	)+happyReduction_72 _ _  = notHappyAtAll ++happyReduce_73 = happySpecReduce_3  50 happyReduction_73+happyReduction_73 _+	(HappyAbsSyn50  happy_var_2)+	_+	 =  HappyAbsSyn50+		 (AbsBNF.ListCat happy_var_2+	)+happyReduction_73 _ _ _  = notHappyAtAll ++happyReduce_74 = happySpecReduce_1  50 happyReduction_74+happyReduction_74 (HappyAbsSyn36  happy_var_1)+	 =  HappyAbsSyn50+		 (AbsBNF.IdCat happy_var_1+	)+happyReduction_74 _  = notHappyAtAll ++happyReduce_75 = happySpecReduce_1  51 happyReduction_75+happyReduction_75 (HappyAbsSyn52  happy_var_1)+	 =  HappyAbsSyn51+		 (AbsBNF.LabNoP happy_var_1+	)+happyReduction_75 _  = notHappyAtAll ++happyReduce_76 = happySpecReduce_2  51 happyReduction_76+happyReduction_76 (HappyAbsSyn57  happy_var_2)+	(HappyAbsSyn52  happy_var_1)+	 =  HappyAbsSyn51+		 (AbsBNF.LabP happy_var_1 happy_var_2+	)+happyReduction_76 _ _  = notHappyAtAll ++happyReduce_77 = happySpecReduce_3  51 happyReduction_77+happyReduction_77 (HappyAbsSyn57  happy_var_3)+	(HappyAbsSyn52  happy_var_2)+	(HappyAbsSyn52  happy_var_1)+	 =  HappyAbsSyn51+		 (AbsBNF.LabPF happy_var_1 happy_var_2 happy_var_3+	)+happyReduction_77 _ _ _  = notHappyAtAll ++happyReduce_78 = happySpecReduce_2  51 happyReduction_78+happyReduction_78 (HappyAbsSyn52  happy_var_2)+	(HappyAbsSyn52  happy_var_1)+	 =  HappyAbsSyn51+		 (AbsBNF.LabF happy_var_1 happy_var_2+	)+happyReduction_78 _ _  = notHappyAtAll ++happyReduce_79 = happySpecReduce_1  52 happyReduction_79+happyReduction_79 (HappyAbsSyn36  happy_var_1)+	 =  HappyAbsSyn52+		 (AbsBNF.Id happy_var_1+	)+happyReduction_79 _  = notHappyAtAll ++happyReduce_80 = happySpecReduce_1  52 happyReduction_80+happyReduction_80 _+	 =  HappyAbsSyn52+		 (AbsBNF.Wild+	)++happyReduce_81 = happySpecReduce_2  52 happyReduction_81+happyReduction_81 _+	_+	 =  HappyAbsSyn52+		 (AbsBNF.ListE+	)++happyReduce_82 = happySpecReduce_3  52 happyReduction_82+happyReduction_82 _+	_+	_+	 =  HappyAbsSyn52+		 (AbsBNF.ListCons+	)++happyReduce_83 = happyReduce 5 52 happyReduction_83+happyReduction_83 (_ `HappyStk`+	_ `HappyStk`+	_ `HappyStk`+	_ `HappyStk`+	_ `HappyStk`+	happyRest)+	 = HappyAbsSyn52+		 (AbsBNF.ListOne+	) `HappyStk` happyRest++happyReduce_84 = happyReduce 9 53 happyReduction_84+happyReduction_84 (_ `HappyStk`+	_ `HappyStk`+	(HappyAbsSyn55  happy_var_7) `HappyStk`+	_ `HappyStk`+	_ `HappyStk`+	_ `HappyStk`+	(HappyAbsSyn56  happy_var_3) `HappyStk`+	_ `HappyStk`+	_ `HappyStk`+	happyRest)+	 = HappyAbsSyn53+		 (AbsBNF.ProfIt happy_var_3 happy_var_7+	) `HappyStk` happyRest++happyReduce_85 = happySpecReduce_3  54 happyReduction_85+happyReduction_85 _+	(HappyAbsSyn55  happy_var_2)+	_+	 =  HappyAbsSyn54+		 (AbsBNF.Ints happy_var_2+	)+happyReduction_85 _ _ _  = notHappyAtAll ++happyReduce_86 = happySpecReduce_0  55 happyReduction_86+happyReduction_86  =  HappyAbsSyn55+		 ([]+	)++happyReduce_87 = happySpecReduce_1  55 happyReduction_87+happyReduction_87 (HappyAbsSyn38  happy_var_1)+	 =  HappyAbsSyn55+		 ((:[]) happy_var_1+	)+happyReduction_87 _  = notHappyAtAll ++happyReduce_88 = happySpecReduce_3  55 happyReduction_88+happyReduction_88 (HappyAbsSyn55  happy_var_3)+	_+	(HappyAbsSyn38  happy_var_1)+	 =  HappyAbsSyn55+		 ((:) happy_var_1 happy_var_3+	)+happyReduction_88 _ _ _  = notHappyAtAll ++happyReduce_89 = happySpecReduce_0  56 happyReduction_89+happyReduction_89  =  HappyAbsSyn56+		 ([]+	)++happyReduce_90 = happySpecReduce_1  56 happyReduction_90+happyReduction_90 (HappyAbsSyn54  happy_var_1)+	 =  HappyAbsSyn56+		 ((:[]) happy_var_1+	)+happyReduction_90 _  = notHappyAtAll ++happyReduce_91 = happySpecReduce_3  56 happyReduction_91+happyReduction_91 (HappyAbsSyn56  happy_var_3)+	_+	(HappyAbsSyn54  happy_var_1)+	 =  HappyAbsSyn56+		 ((:) happy_var_1 happy_var_3+	)+happyReduction_91 _ _ _  = notHappyAtAll ++happyReduce_92 = happySpecReduce_1  57 happyReduction_92+happyReduction_92 (HappyAbsSyn53  happy_var_1)+	 =  HappyAbsSyn57+		 ((:[]) happy_var_1+	)+happyReduction_92 _  = notHappyAtAll ++happyReduce_93 = happySpecReduce_2  57 happyReduction_93+happyReduction_93 (HappyAbsSyn57  happy_var_2)+	(HappyAbsSyn53  happy_var_1)+	 =  HappyAbsSyn57+		 ((:) happy_var_1 happy_var_2+	)+happyReduction_93 _ _  = notHappyAtAll ++happyReduce_94 = happySpecReduce_1  58 happyReduction_94+happyReduction_94 (HappyAbsSyn36  happy_var_1)+	 =  HappyAbsSyn58+		 (AbsBNF.Arg happy_var_1+	)+happyReduction_94 _  = notHappyAtAll ++happyReduce_95 = happySpecReduce_0  59 happyReduction_95+happyReduction_95  =  HappyAbsSyn59+		 ([]+	)++happyReduce_96 = happySpecReduce_2  59 happyReduction_96+happyReduction_96 (HappyAbsSyn58  happy_var_2)+	(HappyAbsSyn59  happy_var_1)+	 =  HappyAbsSyn59+		 (flip (:) happy_var_1 happy_var_2+	)+happyReduction_96 _ _  = notHappyAtAll ++happyReduce_97 = happySpecReduce_0  60 happyReduction_97+happyReduction_97  =  HappyAbsSyn60+		 (AbsBNF.SepNone+	)++happyReduce_98 = happySpecReduce_2  60 happyReduction_98+happyReduction_98 (HappyAbsSyn37  happy_var_2)+	_+	 =  HappyAbsSyn60+		 (AbsBNF.SepTerm happy_var_2+	)+happyReduction_98 _ _  = notHappyAtAll ++happyReduce_99 = happySpecReduce_2  60 happyReduction_99+happyReduction_99 (HappyAbsSyn37  happy_var_2)+	_+	 =  HappyAbsSyn60+		 (AbsBNF.SepSepar happy_var_2+	)+happyReduction_99 _ _  = notHappyAtAll ++happyReduce_100 = happySpecReduce_1  61 happyReduction_100+happyReduction_100 (HappyAbsSyn37  happy_var_1)+	 =  HappyAbsSyn61+		 ((:[]) happy_var_1+	)+happyReduction_100 _  = notHappyAtAll ++happyReduce_101 = happySpecReduce_3  61 happyReduction_101+happyReduction_101 (HappyAbsSyn61  happy_var_3)+	_+	(HappyAbsSyn37  happy_var_1)+	 =  HappyAbsSyn61+		 ((:) happy_var_1 happy_var_3+	)+happyReduction_101 _ _ _  = notHappyAtAll ++happyReduce_102 = happySpecReduce_3  62 happyReduction_102+happyReduction_102 (HappyAbsSyn62  happy_var_3)+	_+	(HappyAbsSyn62  happy_var_1)+	 =  HappyAbsSyn62+		 (AbsBNF.Cons happy_var_1 happy_var_3+	)+happyReduction_102 _ _ _  = notHappyAtAll ++happyReduce_103 = happySpecReduce_1  62 happyReduction_103+happyReduction_103 (HappyAbsSyn62  happy_var_1)+	 =  HappyAbsSyn62+		 (happy_var_1+	)+happyReduction_103 _  = notHappyAtAll ++happyReduce_104 = happySpecReduce_2  63 happyReduction_104+happyReduction_104 (HappyAbsSyn65  happy_var_2)+	(HappyAbsSyn36  happy_var_1)+	 =  HappyAbsSyn62+		 (AbsBNF.App happy_var_1 happy_var_2+	)+happyReduction_104 _ _  = notHappyAtAll ++happyReduce_105 = happySpecReduce_1  63 happyReduction_105+happyReduction_105 (HappyAbsSyn62  happy_var_1)+	 =  HappyAbsSyn62+		 (happy_var_1+	)+happyReduction_105 _  = notHappyAtAll ++happyReduce_106 = happySpecReduce_1  64 happyReduction_106+happyReduction_106 (HappyAbsSyn36  happy_var_1)+	 =  HappyAbsSyn62+		 (AbsBNF.Var happy_var_1+	)+happyReduction_106 _  = notHappyAtAll ++happyReduce_107 = happySpecReduce_1  64 happyReduction_107+happyReduction_107 (HappyAbsSyn38  happy_var_1)+	 =  HappyAbsSyn62+		 (AbsBNF.LitInt happy_var_1+	)+happyReduction_107 _  = notHappyAtAll ++happyReduce_108 = happySpecReduce_1  64 happyReduction_108+happyReduction_108 (HappyAbsSyn39  happy_var_1)+	 =  HappyAbsSyn62+		 (AbsBNF.LitChar happy_var_1+	)+happyReduction_108 _  = notHappyAtAll ++happyReduce_109 = happySpecReduce_1  64 happyReduction_109+happyReduction_109 (HappyAbsSyn37  happy_var_1)+	 =  HappyAbsSyn62+		 (AbsBNF.LitString happy_var_1+	)+happyReduction_109 _  = notHappyAtAll ++happyReduce_110 = happySpecReduce_1  64 happyReduction_110+happyReduction_110 (HappyAbsSyn40  happy_var_1)+	 =  HappyAbsSyn62+		 (AbsBNF.LitDouble happy_var_1+	)+happyReduction_110 _  = notHappyAtAll ++happyReduce_111 = happySpecReduce_3  64 happyReduction_111+happyReduction_111 _+	(HappyAbsSyn65  happy_var_2)+	_+	 =  HappyAbsSyn62+		 (AbsBNF.List happy_var_2+	)+happyReduction_111 _ _ _  = notHappyAtAll ++happyReduce_112 = happySpecReduce_3  64 happyReduction_112+happyReduction_112 _+	(HappyAbsSyn62  happy_var_2)+	_+	 =  HappyAbsSyn62+		 (happy_var_2+	)+happyReduction_112 _ _ _  = notHappyAtAll ++happyReduce_113 = happySpecReduce_0  65 happyReduction_113+happyReduction_113  =  HappyAbsSyn65+		 ([]+	)++happyReduce_114 = happySpecReduce_1  65 happyReduction_114+happyReduction_114 (HappyAbsSyn62  happy_var_1)+	 =  HappyAbsSyn65+		 ((:[]) happy_var_1+	)+happyReduction_114 _  = notHappyAtAll ++happyReduce_115 = happySpecReduce_3  65 happyReduction_115+happyReduction_115 (HappyAbsSyn65  happy_var_3)+	_+	(HappyAbsSyn62  happy_var_1)+	 =  HappyAbsSyn65+		 ((:) happy_var_1 happy_var_3+	)+happyReduction_115 _ _ _  = notHappyAtAll ++happyReduce_116 = happySpecReduce_1  66 happyReduction_116+happyReduction_116 (HappyAbsSyn62  happy_var_1)+	 =  HappyAbsSyn65+		 ((:[]) happy_var_1+	)+happyReduction_116 _  = notHappyAtAll ++happyReduce_117 = happySpecReduce_2  66 happyReduction_117+happyReduction_117 (HappyAbsSyn65  happy_var_2)+	(HappyAbsSyn62  happy_var_1)+	 =  HappyAbsSyn65+		 ((:) happy_var_1 happy_var_2+	)+happyReduction_117 _ _  = notHappyAtAll ++happyReduce_118 = happySpecReduce_1  67 happyReduction_118+happyReduction_118 (HappyAbsSyn49  happy_var_1)+	 =  HappyAbsSyn67+		 (AbsBNF.RHS (reverse happy_var_1)+	)+happyReduction_118 _  = notHappyAtAll ++happyReduce_119 = happySpecReduce_1  68 happyReduction_119+happyReduction_119 (HappyAbsSyn67  happy_var_1)+	 =  HappyAbsSyn68+		 ((:[]) happy_var_1+	)+happyReduction_119 _  = notHappyAtAll ++happyReduce_120 = happySpecReduce_3  68 happyReduction_120+happyReduction_120 (HappyAbsSyn68  happy_var_3)+	_+	(HappyAbsSyn67  happy_var_1)+	 =  HappyAbsSyn68+		 ((:) happy_var_1 happy_var_3+	)+happyReduction_120 _ _ _  = notHappyAtAll ++happyReduce_121 = happySpecReduce_1  69 happyReduction_121+happyReduction_121 _+	 =  HappyAbsSyn69+		 (AbsBNF.MNonempty+	)++happyReduce_122 = happySpecReduce_0  69 happyReduction_122+happyReduction_122  =  HappyAbsSyn69+		 (AbsBNF.MEmpty+	)++happyReduce_123 = happySpecReduce_2  70 happyReduction_123+happyReduction_123 (HappyAbsSyn70  happy_var_2)+	(HappyAbsSyn70  happy_var_1)+	 =  HappyAbsSyn70+		 (AbsBNF.RSeq happy_var_1 happy_var_2+	)+happyReduction_123 _ _  = notHappyAtAll ++happyReduce_124 = happySpecReduce_1  70 happyReduction_124+happyReduction_124 (HappyAbsSyn70  happy_var_1)+	 =  HappyAbsSyn70+		 (happy_var_1+	)+happyReduction_124 _  = notHappyAtAll ++happyReduce_125 = happySpecReduce_3  71 happyReduction_125+happyReduction_125 (HappyAbsSyn70  happy_var_3)+	_+	(HappyAbsSyn70  happy_var_1)+	 =  HappyAbsSyn70+		 (AbsBNF.RAlt happy_var_1 happy_var_3+	)+happyReduction_125 _ _ _  = notHappyAtAll ++happyReduce_126 = happySpecReduce_3  71 happyReduction_126+happyReduction_126 (HappyAbsSyn70  happy_var_3)+	_+	(HappyAbsSyn70  happy_var_1)+	 =  HappyAbsSyn70+		 (AbsBNF.RMinus happy_var_1 happy_var_3+	)+happyReduction_126 _ _ _  = notHappyAtAll ++happyReduce_127 = happySpecReduce_1  71 happyReduction_127+happyReduction_127 (HappyAbsSyn70  happy_var_1)+	 =  HappyAbsSyn70+		 (happy_var_1+	)+happyReduction_127 _  = notHappyAtAll ++happyReduce_128 = happySpecReduce_2  72 happyReduction_128+happyReduction_128 _+	(HappyAbsSyn70  happy_var_1)+	 =  HappyAbsSyn70+		 (AbsBNF.RStar happy_var_1+	)+happyReduction_128 _ _  = notHappyAtAll ++happyReduce_129 = happySpecReduce_2  72 happyReduction_129+happyReduction_129 _+	(HappyAbsSyn70  happy_var_1)+	 =  HappyAbsSyn70+		 (AbsBNF.RPlus happy_var_1+	)+happyReduction_129 _ _  = notHappyAtAll ++happyReduce_130 = happySpecReduce_2  72 happyReduction_130+happyReduction_130 _+	(HappyAbsSyn70  happy_var_1)+	 =  HappyAbsSyn70+		 (AbsBNF.ROpt happy_var_1+	)+happyReduction_130 _ _  = notHappyAtAll ++happyReduce_131 = happySpecReduce_1  72 happyReduction_131+happyReduction_131 _+	 =  HappyAbsSyn70+		 (AbsBNF.REps+	)++happyReduce_132 = happySpecReduce_1  72 happyReduction_132+happyReduction_132 (HappyAbsSyn39  happy_var_1)+	 =  HappyAbsSyn70+		 (AbsBNF.RChar happy_var_1+	)+happyReduction_132 _  = notHappyAtAll ++happyReduce_133 = happySpecReduce_3  72 happyReduction_133+happyReduction_133 _+	(HappyAbsSyn37  happy_var_2)+	_+	 =  HappyAbsSyn70+		 (AbsBNF.RAlts happy_var_2+	)+happyReduction_133 _ _ _  = notHappyAtAll ++happyReduce_134 = happySpecReduce_3  72 happyReduction_134+happyReduction_134 _+	(HappyAbsSyn37  happy_var_2)+	_+	 =  HappyAbsSyn70+		 (AbsBNF.RSeqs happy_var_2+	)+happyReduction_134 _ _ _  = notHappyAtAll ++happyReduce_135 = happySpecReduce_1  72 happyReduction_135+happyReduction_135 _+	 =  HappyAbsSyn70+		 (AbsBNF.RDigit+	)++happyReduce_136 = happySpecReduce_1  72 happyReduction_136+happyReduction_136 _+	 =  HappyAbsSyn70+		 (AbsBNF.RLetter+	)++happyReduce_137 = happySpecReduce_1  72 happyReduction_137+happyReduction_137 _+	 =  HappyAbsSyn70+		 (AbsBNF.RUpper+	)++happyReduce_138 = happySpecReduce_1  72 happyReduction_138+happyReduction_138 _+	 =  HappyAbsSyn70+		 (AbsBNF.RLower+	)++happyReduce_139 = happySpecReduce_1  72 happyReduction_139+happyReduction_139 _+	 =  HappyAbsSyn70+		 (AbsBNF.RAny+	)++happyReduce_140 = happySpecReduce_3  72 happyReduction_140+happyReduction_140 _+	(HappyAbsSyn70  happy_var_2)+	_+	 =  HappyAbsSyn70+		 (happy_var_2+	)+happyReduction_140 _ _ _  = notHappyAtAll ++happyReduce_141 = happySpecReduce_1  73 happyReduction_141+happyReduction_141 (HappyAbsSyn70  happy_var_1)+	 =  HappyAbsSyn70+		 (happy_var_1+	)+happyReduction_141 _  = notHappyAtAll ++happyNewToken action sts stk [] =+	action 119 119 notHappyAtAll (HappyState action) sts stk []++happyNewToken action sts stk (tk:tks) =+	let cont i = action i i tk (HappyState action) sts stk tks in+	case tk of {+	PT _ (TS _ 1) -> cont 74;+	PT _ (TS _ 2) -> cont 75;+	PT _ (TS _ 3) -> cont 76;+	PT _ (TS _ 4) -> cont 77;+	PT _ (TS _ 5) -> cont 78;+	PT _ (TS _ 6) -> cont 79;+	PT _ (TS _ 7) -> cont 80;+	PT _ (TS _ 8) -> cont 81;+	PT _ (TS _ 9) -> cont 82;+	PT _ (TS _ 10) -> cont 83;+	PT _ (TS _ 11) -> cont 84;+	PT _ (TS _ 12) -> cont 85;+	PT _ (TS _ 13) -> cont 86;+	PT _ (TS _ 14) -> cont 87;+	PT _ (TS _ 15) -> cont 88;+	PT _ (TS _ 16) -> cont 89;+	PT _ (TS _ 17) -> cont 90;+	PT _ (TS _ 18) -> cont 91;+	PT _ (TS _ 19) -> cont 92;+	PT _ (TS _ 20) -> cont 93;+	PT _ (TS _ 21) -> cont 94;+	PT _ (TS _ 22) -> cont 95;+	PT _ (TS _ 23) -> cont 96;+	PT _ (TS _ 24) -> cont 97;+	PT _ (TS _ 25) -> cont 98;+	PT _ (TS _ 26) -> cont 99;+	PT _ (TS _ 27) -> cont 100;+	PT _ (TS _ 28) -> cont 101;+	PT _ (TS _ 29) -> cont 102;+	PT _ (TS _ 30) -> cont 103;+	PT _ (TS _ 31) -> cont 104;+	PT _ (TS _ 32) -> cont 105;+	PT _ (TS _ 33) -> cont 106;+	PT _ (TS _ 34) -> cont 107;+	PT _ (TS _ 35) -> cont 108;+	PT _ (TS _ 36) -> cont 109;+	PT _ (TS _ 37) -> cont 110;+	PT _ (TS _ 38) -> cont 111;+	PT _ (TS _ 39) -> cont 112;+	PT _ (TS _ 40) -> cont 113;+	PT _ (TV happy_dollar_dollar) -> cont 114;+	PT _ (TL happy_dollar_dollar) -> cont 115;+	PT _ (TI happy_dollar_dollar) -> cont 116;+	PT _ (TC happy_dollar_dollar) -> cont 117;+	PT _ (TD happy_dollar_dollar) -> cont 118;+	_ -> happyError' ((tk:tks), [])+	}++happyError_ explist 119 tk tks = happyError' (tks, explist)+happyError_ explist _ tk tks = happyError' ((tk:tks), explist)++happyThen :: () => Err a -> (a -> Err b) -> Err b+happyThen = (thenM)+happyReturn :: () => a -> Err a+happyReturn = (returnM)+happyThen1 m k tks = (thenM) m (\a -> k a tks)+happyReturn1 :: () => a -> b -> Err a+happyReturn1 = \a tks -> (returnM) a+happyError' :: () => ([(Token)], [String]) -> Err a+happyError' = (\(tokens, _) -> happyError tokens)+pLGrammar tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_0 tks) (\x -> case x of {HappyAbsSyn41 z -> happyReturn z; _other -> notHappyAtAll })++pLDef tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_1 tks) (\x -> case x of {HappyAbsSyn42 z -> happyReturn z; _other -> notHappyAtAll })++pListLDef tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_2 tks) (\x -> case x of {HappyAbsSyn43 z -> happyReturn z; _other -> notHappyAtAll })++pListIdent tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_3 tks) (\x -> case x of {HappyAbsSyn44 z -> happyReturn z; _other -> notHappyAtAll })++pGrammar tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_4 tks) (\x -> case x of {HappyAbsSyn45 z -> happyReturn z; _other -> notHappyAtAll })++pListDef tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_5 tks) (\x -> case x of {HappyAbsSyn46 z -> happyReturn z; _other -> notHappyAtAll })++pDef tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_6 tks) (\x -> case x of {HappyAbsSyn47 z -> happyReturn z; _other -> notHappyAtAll })++pItem tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_7 tks) (\x -> case x of {HappyAbsSyn48 z -> happyReturn z; _other -> notHappyAtAll })++pListItem tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_8 tks) (\x -> case x of {HappyAbsSyn49 z -> happyReturn z; _other -> notHappyAtAll })++pCat tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_9 tks) (\x -> case x of {HappyAbsSyn50 z -> happyReturn z; _other -> notHappyAtAll })++pLabel tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_10 tks) (\x -> case x of {HappyAbsSyn51 z -> happyReturn z; _other -> notHappyAtAll })++pLabelId tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_11 tks) (\x -> case x of {HappyAbsSyn52 z -> happyReturn z; _other -> notHappyAtAll })++pProfItem tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_12 tks) (\x -> case x of {HappyAbsSyn53 z -> happyReturn z; _other -> notHappyAtAll })++pIntList tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_13 tks) (\x -> case x of {HappyAbsSyn54 z -> happyReturn z; _other -> notHappyAtAll })++pListInteger tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_14 tks) (\x -> case x of {HappyAbsSyn55 z -> happyReturn z; _other -> notHappyAtAll })++pListIntList tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_15 tks) (\x -> case x of {HappyAbsSyn56 z -> happyReturn z; _other -> notHappyAtAll })++pListProfItem tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_16 tks) (\x -> case x of {HappyAbsSyn57 z -> happyReturn z; _other -> notHappyAtAll })++pArg tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_17 tks) (\x -> case x of {HappyAbsSyn58 z -> happyReturn z; _other -> notHappyAtAll })++pListArg tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_18 tks) (\x -> case x of {HappyAbsSyn59 z -> happyReturn z; _other -> notHappyAtAll })++pSeparation tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_19 tks) (\x -> case x of {HappyAbsSyn60 z -> happyReturn z; _other -> notHappyAtAll })++pListString tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_20 tks) (\x -> case x of {HappyAbsSyn61 z -> happyReturn z; _other -> notHappyAtAll })++pExp tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_21 tks) (\x -> case x of {HappyAbsSyn62 z -> happyReturn z; _other -> notHappyAtAll })++pExp1 tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_22 tks) (\x -> case x of {HappyAbsSyn62 z -> happyReturn z; _other -> notHappyAtAll })++pExp2 tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_23 tks) (\x -> case x of {HappyAbsSyn62 z -> happyReturn z; _other -> notHappyAtAll })++pListExp tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_24 tks) (\x -> case x of {HappyAbsSyn65 z -> happyReturn z; _other -> notHappyAtAll })++pListExp2 tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_25 tks) (\x -> case x of {HappyAbsSyn65 z -> happyReturn z; _other -> notHappyAtAll })++pRHS tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_26 tks) (\x -> case x of {HappyAbsSyn67 z -> happyReturn z; _other -> notHappyAtAll })++pListRHS tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_27 tks) (\x -> case x of {HappyAbsSyn68 z -> happyReturn z; _other -> notHappyAtAll })++pMinimumSize tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_28 tks) (\x -> case x of {HappyAbsSyn69 z -> happyReturn z; _other -> notHappyAtAll })++pReg2 tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_29 tks) (\x -> case x of {HappyAbsSyn70 z -> happyReturn z; _other -> notHappyAtAll })++pReg1 tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_30 tks) (\x -> case x of {HappyAbsSyn70 z -> happyReturn z; _other -> notHappyAtAll })++pReg3 tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_31 tks) (\x -> case x of {HappyAbsSyn70 z -> happyReturn z; _other -> notHappyAtAll })++pReg tks = happySomeParser where+ happySomeParser = happyThen (happyParse action_32 tks) (\x -> case x of {HappyAbsSyn70 z -> happyReturn z; _other -> notHappyAtAll })++happySeq = happyDontSeq+++returnM :: a -> Err a+returnM = return++thenM :: Err a -> (a -> Err b) -> Err b+thenM = (>>=)++happyError :: [Token] -> Err a+happyError ts =+  Bad $ "syntax error at " ++ tokenPos ts +++  case ts of+    []      -> []+    [Err _] -> " due to lexer error"+    t:_     -> " before `" ++ id(prToken t) ++ "'"++myLexer = tokens+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<built-in>" #-}+{-# LINE 15 "<built-in>" #-}+{-# LINE 1 "/usr/local/lib/ghc-8.2.1/include/ghcversion.h" #-}+++++++++++++++++{-# LINE 16 "<built-in>" #-}+{-# LINE 1 "/var/folders/lg/qcd3v89j59l3m6520kr42bdm0000gn/T/ghc7877_0/ghc_2.h" #-}++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++{-# LINE 17 "<built-in>" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp +++++++++++{-# LINE 43 "templates/GenericTemplate.hs" #-}++data Happy_IntList = HappyCons Int Happy_IntList+++++++++{-# LINE 65 "templates/GenericTemplate.hs" #-}+++{-# LINE 75 "templates/GenericTemplate.hs" #-}+++++++++++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 (1), 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 (1) tk st sts (_ `HappyStk` ans `HappyStk` _) =+        happyReturn1 ans+happyAccept j tk st sts (HappyStk ans _) = +         (happyReturn1 ans)++-----------------------------------------------------------------------------+-- Arrays only: do the next action+++{-# LINE 137 "templates/GenericTemplate.hs" #-}+++{-# LINE 147 "templates/GenericTemplate.hs" #-}+indexShortOffAddr arr off = arr Happy_Data_Array.! off+++{-# INLINE happyLt #-}+happyLt x y = (x < y)+++++++readArrayBit arr bit =+    Bits.testBit (indexShortOffAddr arr (bit `div` 16)) (bit `mod` 16)+++++++-----------------------------------------------------------------------------+-- HappyState data type (not arrays)++++newtype HappyState b c = HappyState+        (Int ->                    -- token number+         Int ->                    -- token number (yes, again)+         b ->                           -- token semantic value+         HappyState b c ->              -- current state+         [HappyState b c] ->            -- state stack+         c)++++-----------------------------------------------------------------------------+-- Shifting a token++happyShift new_state (1) tk st sts stk@(x `HappyStk` _) =+     let i = (case x of { HappyErrorToken (i) -> i }) in+--     trace "shifting the error token" $+     new_state i i tk (HappyState (new_state)) ((st):(sts)) (stk)++happyShift new_state i tk st sts stk =+     happyNewToken new_state ((st):(sts)) ((HappyTerminal (tk))`HappyStk`stk)++-- happyReduce is specialised for the common cases.++happySpecReduce_0 i fn (1) tk st sts stk+     = happyFail [] (1) tk st sts stk+happySpecReduce_0 nt fn j tk st@((HappyState (action))) sts stk+     = action nt j tk st ((st):(sts)) (fn `HappyStk` stk)++happySpecReduce_1 i fn (1) tk st sts stk+     = happyFail [] (1) tk st sts stk+happySpecReduce_1 nt fn j tk _ sts@(((st@(HappyState (action))):(_))) (v1`HappyStk`stk')+     = let r = fn v1 in+       happySeq r (action nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_2 i fn (1) tk st sts stk+     = happyFail [] (1) tk st sts stk+happySpecReduce_2 nt fn j tk _ ((_):(sts@(((st@(HappyState (action))):(_))))) (v1`HappyStk`v2`HappyStk`stk')+     = let r = fn v1 v2 in+       happySeq r (action nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_3 i fn (1) tk st sts stk+     = happyFail [] (1) tk st sts stk+happySpecReduce_3 nt fn j tk _ ((_):(((_):(sts@(((st@(HappyState (action))):(_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')+     = let r = fn v1 v2 v3 in+       happySeq r (action nt j tk st sts (r `HappyStk` stk'))++happyReduce k i fn (1) tk st sts stk+     = happyFail [] (1) tk st sts stk+happyReduce k nt fn j tk st sts stk+     = case happyDrop (k - ((1) :: Int)) sts of+         sts1@(((st1@(HappyState (action))):(_))) ->+                let r = fn stk in  -- it doesn't hurt to always seq here...+                happyDoSeq r (action nt j tk st1 sts1 r)++happyMonadReduce k nt fn (1) tk st sts stk+     = happyFail [] (1) tk st sts stk+happyMonadReduce k nt fn j tk st sts stk =+      case happyDrop k ((st):(sts)) of+        sts1@(((st1@(HappyState (action))):(_))) ->+          let drop_stk = happyDropStk k stk in+          happyThen1 (fn stk tk) (\r -> action nt j tk st1 sts1 (r `HappyStk` drop_stk))++happyMonad2Reduce k nt fn (1) tk st sts stk+     = happyFail [] (1) tk st sts stk+happyMonad2Reduce k nt fn j tk st sts stk =+      case happyDrop k ((st):(sts)) of+        sts1@(((st1@(HappyState (action))):(_))) ->+         let drop_stk = happyDropStk k stk++++++             _ = nt :: Int+             new_state = action++          in+          happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))++happyDrop (0) l = l+happyDrop n ((_):(t)) = happyDrop (n - ((1) :: Int)) t++happyDropStk (0) l = l+happyDropStk n (x `HappyStk` xs) = happyDropStk (n - ((1)::Int)) xs++-----------------------------------------------------------------------------+-- Moving to a new state after a reduction++++++++++happyGoto action j tk st = action j j tk (HappyState action)+++-----------------------------------------------------------------------------+-- Error recovery ((1) is the error token)++-- parse error if we are in recovery and we fail again+happyFail explist (1) tk old_st _ stk@(x `HappyStk` _) =+     let i = (case x of { HappyErrorToken (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  (1) tk old_st (((HappyState (action))):(sts)) +                                                (saved_tok `HappyStk` _ `HappyStk` stk) =+--      trace ("discarding state, depth " ++ show (length stk))  $+        action (1) (1) tk (HappyState (action)) sts ((saved_tok`HappyStk`stk))+-}++-- Enter error recovery: generate an error token,+--                       save the old token and carry on.+happyFail explist i tk (HappyState (action)) sts stk =+--      trace "entering error recovery" $+        action (1) (1) tk (HappyState (action)) sts ( (HappyErrorToken (i)) `HappyStk` stk)++-- Internal happy errors:++notHappyAtAll :: a+notHappyAtAll = error "Internal Happy error\n"++-----------------------------------------------------------------------------+-- Hack to get the typechecker to accept our action functions++++++++-----------------------------------------------------------------------------+-- 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 `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 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/ParBNF.y view
@@ -85,22 +85,29 @@   '{' { PT _ (TS _ 38) }   '|' { PT _ (TS _ 39) }   '}' { PT _ (TS _ 40) }+  L_ident  { PT _ (TV $$) }+  L_quoted { PT _ (TL $$) }+  L_integ  { PT _ (TI $$) }+  L_charac { PT _ (TC $$) }+  L_doubl  { PT _ (TD $$) } -L_ident  { PT _ (TV $$) }-L_quoted { PT _ (TL $$) }-L_integ  { PT _ (TI $$) }-L_charac { PT _ (TC $$) }-L_doubl  { PT _ (TD $$) }+%% +Ident   :: { Ident }+Ident    : L_ident  { Ident $1 } -%%+String  :: { String }+String   : L_quoted {  $1 } -Ident   :: { Ident }   : L_ident  { Ident $1 }-String  :: { String }  : L_quoted {  $1 }-Integer :: { Integer } : L_integ  { (read ( $1)) :: Integer }-Char    :: { Char }    : L_charac { (read ( $1)) :: Char }-Double  :: { Double }  : L_doubl  { (read ( $1)) :: Double }+Integer :: { Integer }+Integer  : L_integ  { (read ( $1)) :: Integer } +Char    :: { Char }+Char     : L_charac { (read ( $1)) :: Char }++Double  :: { Double }+Double   : L_doubl  { (read ( $1)) :: Double }+ LGrammar :: { LGrammar } LGrammar : ListLDef { AbsBNF.LGr $1 } LDef :: { LDef }@@ -238,11 +245,11 @@  happyError :: [Token] -> Err a happyError ts =-  Bad $ "syntax error at " ++ tokenPos ts ++ +  Bad $ "syntax error at " ++ tokenPos ts ++   case ts of-    [] -> []+    []      -> []     [Err _] -> " due to lexer error"-    t:_ -> " before `" ++ id(prToken t) ++ "'"+    t:_     -> " before `" ++ id(prToken t) ++ "'"  myLexer = tokens }
src/PrintBNF.hs view
@@ -1,13 +1,20 @@+{-# LANGUAGE CPP #-}+#if __GLASGOW_HASKELL__ <= 708+{-# LANGUAGE OverlappingInstances #-}+#endif+{-# LANGUAGE FlexibleInstances #-} {-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}-module PrintBNF where --- pretty-printer generated by the BNF converter+-- | Pretty-printer for PrintBNF.+--   Generated by the BNF converter. -import AbsBNF+module PrintBNF where++import qualified AbsBNF import Data.Char +-- | The top-level printing method. --- the top-level printing method printTree :: Print a => a -> String printTree = render . prt 0 @@ -50,13 +57,14 @@ replicateS :: Int -> ShowS -> ShowS replicateS n f = concatS (replicate n f) --- the printer class does the job+-- | The printer class does the job.+ class Print a where   prt :: Int -> a -> Doc   prtList :: Int -> [a] -> Doc   prtList i = concatD . map (prt i) -instance Print a => Print [a] where+instance {-# OVERLAPPABLE #-} Print a => Print [a] where   prt = prtList  instance Print Char where@@ -72,147 +80,190 @@   _ -> showChar s  prPrec :: Int -> Int -> Doc -> Doc-prPrec i j = if j<i then parenth else id-+prPrec i j = if j < i then parenth else id  instance Print Integer where   prt _ x = doc (shows x)-+  prtList _ [] = concatD []+  prtList _ [x] = concatD [prt 0 x]+  prtList _ (x:xs) = concatD [prt 0 x, doc (showString ","), prt 0 xs]  instance Print Double where   prt _ x = doc (shows x) --instance Print Ident where-  prt _ (Ident i) = doc (showString i)+instance Print AbsBNF.Ident where+  prt _ (AbsBNF.Ident i) = doc (showString i)   prtList _ [x] = concatD [prt 0 x]   prtList _ (x:xs) = concatD [prt 0 x, doc (showString ","), prt 0 xs] -instance Print LGrammar where+instance Print AbsBNF.LGrammar where   prt i e = case e of-    LGr ldefs -> prPrec i 0 (concatD [prt 0 ldefs])+    AbsBNF.LGr ldefs -> prPrec i 0 (concatD [prt 0 ldefs]) -instance Print LDef where+instance Print AbsBNF.LDef where   prt i e = case e of-    DefAll def -> prPrec i 0 (concatD [prt 0 def])-    DefSome ids def -> prPrec i 0 (concatD [prt 0 ids, doc (showString ":"), prt 0 def])-    LDefView ids -> prPrec i 0 (concatD [doc (showString "views"), prt 0 ids])+    AbsBNF.DefAll def -> prPrec i 0 (concatD [prt 0 def])+    AbsBNF.DefSome ids def -> prPrec i 0 (concatD [prt 0 ids, doc (showString ":"), prt 0 def])+    AbsBNF.LDefView ids -> prPrec i 0 (concatD [doc (showString "views"), prt 0 ids])   prtList _ [] = concatD []   prtList _ [x] = concatD [prt 0 x]+   prtList _ (x:xs) = concatD [prt 0 x, doc (showString ";"), prt 0 xs]-instance Print Grammar where++instance Print [AbsBNF.LDef] where+  prt = prtList++instance Print [AbsBNF.Ident] where+  prt = prtList++instance Print AbsBNF.Grammar where   prt i e = case e of-    Grammar defs -> prPrec i 0 (concatD [prt 0 defs])+    AbsBNF.Grammar defs -> prPrec i 0 (concatD [prt 0 defs]) -instance Print Def where+instance Print [AbsBNF.Def] where+  prt = prtList++instance Print AbsBNF.Def where   prt i e = case e of-    Rule label cat items -> prPrec i 0 (concatD [prt 0 label, doc (showString "."), prt 0 cat, doc (showString "::="), prt 0 items])-    Comment str -> prPrec i 0 (concatD [doc (showString "comment"), prt 0 str])-    Comments str1 str2 -> prPrec i 0 (concatD [doc (showString "comment"), prt 0 str1, prt 0 str2])-    Internal label cat items -> prPrec i 0 (concatD [doc (showString "internal"), prt 0 label, doc (showString "."), prt 0 cat, doc (showString "::="), prt 0 items])-    Token id reg -> prPrec i 0 (concatD [doc (showString "token"), prt 0 id, prt 0 reg])-    PosToken id reg -> prPrec i 0 (concatD [doc (showString "position"), doc (showString "token"), prt 0 id, prt 0 reg])-    Entryp ids -> prPrec i 0 (concatD [doc (showString "entrypoints"), prt 0 ids])-    Separator minimumsize cat str -> prPrec i 0 (concatD [doc (showString "separator"), prt 0 minimumsize, prt 0 cat, prt 0 str])-    Terminator minimumsize cat str -> prPrec i 0 (concatD [doc (showString "terminator"), prt 0 minimumsize, prt 0 cat, prt 0 str])-    Delimiters cat str1 str2 separation minimumsize -> prPrec i 0 (concatD [doc (showString "delimiters"), prt 0 cat, prt 0 str1, prt 0 str2, prt 0 separation, prt 0 minimumsize])-    Coercions id n -> prPrec i 0 (concatD [doc (showString "coercions"), prt 0 id, prt 0 n])-    Rules id rhss -> prPrec i 0 (concatD [doc (showString "rules"), prt 0 id, doc (showString "::="), prt 0 rhss])-    Function id args exp -> prPrec i 0 (concatD [doc (showString "define"), prt 0 id, prt 0 args, doc (showString "="), prt 0 exp])-    Layout strs -> prPrec i 0 (concatD [doc (showString "layout"), prt 0 strs])-    LayoutStop strs -> prPrec i 0 (concatD [doc (showString "layout"), doc (showString "stop"), prt 0 strs])-    LayoutTop -> prPrec i 0 (concatD [doc (showString "layout"), doc (showString "toplevel")])+    AbsBNF.Rule label cat items -> prPrec i 0 (concatD [prt 0 label, doc (showString "."), prt 0 cat, doc (showString "::="), prt 0 items])+    AbsBNF.Comment str -> prPrec i 0 (concatD [doc (showString "comment"), prt 0 str])+    AbsBNF.Comments str1 str2 -> prPrec i 0 (concatD [doc (showString "comment"), prt 0 str1, prt 0 str2])+    AbsBNF.Internal label cat items -> prPrec i 0 (concatD [doc (showString "internal"), prt 0 label, doc (showString "."), prt 0 cat, doc (showString "::="), prt 0 items])+    AbsBNF.Token id reg -> prPrec i 0 (concatD [doc (showString "token"), prt 0 id, prt 0 reg])+    AbsBNF.PosToken id reg -> prPrec i 0 (concatD [doc (showString "position"), doc (showString "token"), prt 0 id, prt 0 reg])+    AbsBNF.Entryp ids -> prPrec i 0 (concatD [doc (showString "entrypoints"), prt 0 ids])+    AbsBNF.Separator minimumsize cat str -> prPrec i 0 (concatD [doc (showString "separator"), prt 0 minimumsize, prt 0 cat, prt 0 str])+    AbsBNF.Terminator minimumsize cat str -> prPrec i 0 (concatD [doc (showString "terminator"), prt 0 minimumsize, prt 0 cat, prt 0 str])+    AbsBNF.Delimiters cat str1 str2 separation minimumsize -> prPrec i 0 (concatD [doc (showString "delimiters"), prt 0 cat, prt 0 str1, prt 0 str2, prt 0 separation, prt 0 minimumsize])+    AbsBNF.Coercions id n -> prPrec i 0 (concatD [doc (showString "coercions"), prt 0 id, prt 0 n])+    AbsBNF.Rules id rhss -> prPrec i 0 (concatD [doc (showString "rules"), prt 0 id, doc (showString "::="), prt 0 rhss])+    AbsBNF.Function id args exp -> prPrec i 0 (concatD [doc (showString "define"), prt 0 id, prt 0 args, doc (showString "="), prt 0 exp])+    AbsBNF.Layout strs -> prPrec i 0 (concatD [doc (showString "layout"), prt 0 strs])+    AbsBNF.LayoutStop strs -> prPrec i 0 (concatD [doc (showString "layout"), doc (showString "stop"), prt 0 strs])+    AbsBNF.LayoutTop -> prPrec i 0 (concatD [doc (showString "layout"), doc (showString "toplevel")])   prtList _ [] = concatD []   prtList _ [x] = concatD [prt 0 x]+   prtList _ (x:xs) = concatD [prt 0 x, doc (showString ";"), prt 0 xs]-instance Print Item where++instance Print AbsBNF.Item where   prt i e = case e of-    Terminal str -> prPrec i 0 (concatD [prt 0 str])-    NTerminal cat -> prPrec i 0 (concatD [prt 0 cat])+    AbsBNF.Terminal str -> prPrec i 0 (concatD [prt 0 str])+    AbsBNF.NTerminal cat -> prPrec i 0 (concatD [prt 0 cat])   prtList _ [] = concatD []   prtList _ (x:xs) = concatD [prt 0 x, prt 0 xs]-instance Print Cat where++instance Print [AbsBNF.Item] where+  prt = prtList++instance Print AbsBNF.Cat where   prt i e = case e of-    ListCat cat -> prPrec i 0 (concatD [doc (showString "["), prt 0 cat, doc (showString "]")])-    IdCat id -> prPrec i 0 (concatD [prt 0 id])+    AbsBNF.ListCat cat -> prPrec i 0 (concatD [doc (showString "["), prt 0 cat, doc (showString "]")])+    AbsBNF.IdCat id -> prPrec i 0 (concatD [prt 0 id]) -instance Print Label where+instance Print AbsBNF.Label where   prt i e = case e of-    LabNoP labelid -> prPrec i 0 (concatD [prt 0 labelid])-    LabP labelid profitems -> prPrec i 0 (concatD [prt 0 labelid, prt 0 profitems])-    LabPF labelid1 labelid2 profitems -> prPrec i 0 (concatD [prt 0 labelid1, prt 0 labelid2, prt 0 profitems])-    LabF labelid1 labelid2 -> prPrec i 0 (concatD [prt 0 labelid1, prt 0 labelid2])+    AbsBNF.LabNoP labelid -> prPrec i 0 (concatD [prt 0 labelid])+    AbsBNF.LabP labelid profitems -> prPrec i 0 (concatD [prt 0 labelid, prt 0 profitems])+    AbsBNF.LabPF labelid1 labelid2 profitems -> prPrec i 0 (concatD [prt 0 labelid1, prt 0 labelid2, prt 0 profitems])+    AbsBNF.LabF labelid1 labelid2 -> prPrec i 0 (concatD [prt 0 labelid1, prt 0 labelid2]) -instance Print LabelId where+instance Print AbsBNF.LabelId where   prt i e = case e of-    Id id -> prPrec i 0 (concatD [prt 0 id])-    Wild -> prPrec i 0 (concatD [doc (showString "_")])-    ListE -> prPrec i 0 (concatD [doc (showString "["), doc (showString "]")])-    ListCons -> prPrec i 0 (concatD [doc (showString "("), doc (showString ":"), doc (showString ")")])-    ListOne -> prPrec i 0 (concatD [doc (showString "("), doc (showString ":"), doc (showString "["), doc (showString "]"), doc (showString ")")])+    AbsBNF.Id id -> prPrec i 0 (concatD [prt 0 id])+    AbsBNF.Wild -> prPrec i 0 (concatD [doc (showString "_")])+    AbsBNF.ListE -> prPrec i 0 (concatD [doc (showString "["), doc (showString "]")])+    AbsBNF.ListCons -> prPrec i 0 (concatD [doc (showString "("), doc (showString ":"), doc (showString ")")])+    AbsBNF.ListOne -> prPrec i 0 (concatD [doc (showString "("), doc (showString ":"), doc (showString "["), doc (showString "]"), doc (showString ")")]) -instance Print ProfItem where+instance Print AbsBNF.ProfItem where   prt i e = case e of-    ProfIt intlists ns -> prPrec i 0 (concatD [doc (showString "("), doc (showString "["), prt 0 intlists, doc (showString "]"), doc (showString ","), doc (showString "["), prt 0 ns, doc (showString "]"), doc (showString ")")])+    AbsBNF.ProfIt intlists ns -> prPrec i 0 (concatD [doc (showString "("), doc (showString "["), prt 0 intlists, doc (showString "]"), doc (showString ","), doc (showString "["), prt 0 ns, doc (showString "]"), doc (showString ")")])   prtList _ [x] = concatD [prt 0 x]   prtList _ (x:xs) = concatD [prt 0 x, prt 0 xs]-instance Print IntList where++instance Print AbsBNF.IntList where   prt i e = case e of-    Ints ns -> prPrec i 0 (concatD [doc (showString "["), prt 0 ns, doc (showString "]")])+    AbsBNF.Ints ns -> prPrec i 0 (concatD [doc (showString "["), prt 0 ns, doc (showString "]")])   prtList _ [] = concatD []   prtList _ [x] = concatD [prt 0 x]   prtList _ (x:xs) = concatD [prt 0 x, doc (showString ","), prt 0 xs]-instance Print Arg where++instance Print [Integer] where+  prt = prtList++instance Print [AbsBNF.IntList] where+  prt = prtList++instance Print [AbsBNF.ProfItem] where+  prt = prtList++instance Print AbsBNF.Arg where   prt i e = case e of-    Arg id -> prPrec i 0 (concatD [prt 0 id])+    AbsBNF.Arg id -> prPrec i 0 (concatD [prt 0 id])   prtList _ [] = concatD []   prtList _ (x:xs) = concatD [prt 0 x, prt 0 xs]-instance Print Separation where++instance Print [AbsBNF.Arg] where+  prt = prtList++instance Print AbsBNF.Separation where   prt i e = case e of-    SepNone -> prPrec i 0 (concatD [])-    SepTerm str -> prPrec i 0 (concatD [doc (showString "terminator"), prt 0 str])-    SepSepar str -> prPrec i 0 (concatD [doc (showString "separator"), prt 0 str])+    AbsBNF.SepNone -> prPrec i 0 (concatD [])+    AbsBNF.SepTerm str -> prPrec i 0 (concatD [doc (showString "terminator"), prt 0 str])+    AbsBNF.SepSepar str -> prPrec i 0 (concatD [doc (showString "separator"), prt 0 str]) -instance Print Exp where+instance Print [String] where+  prt = prtList++instance Print AbsBNF.Exp where   prt i e = case e of-    Cons exp1 exp2 -> prPrec i 0 (concatD [prt 1 exp1, doc (showString ":"), prt 0 exp2])-    App id exps -> prPrec i 1 (concatD [prt 0 id, prt 2 exps])-    Var id -> prPrec i 2 (concatD [prt 0 id])-    LitInt n -> prPrec i 2 (concatD [prt 0 n])-    LitChar c -> prPrec i 2 (concatD [prt 0 c])-    LitString str -> prPrec i 2 (concatD [prt 0 str])-    LitDouble d -> prPrec i 2 (concatD [prt 0 d])-    List exps -> prPrec i 2 (concatD [doc (showString "["), prt 0 exps, doc (showString "]")])+    AbsBNF.Cons exp1 exp2 -> prPrec i 0 (concatD [prt 1 exp1, doc (showString ":"), prt 0 exp2])+    AbsBNF.App id exps -> prPrec i 1 (concatD [prt 0 id, prt 2 exps])+    AbsBNF.Var id -> prPrec i 2 (concatD [prt 0 id])+    AbsBNF.LitInt n -> prPrec i 2 (concatD [prt 0 n])+    AbsBNF.LitChar c -> prPrec i 2 (concatD [prt 0 c])+    AbsBNF.LitString str -> prPrec i 2 (concatD [prt 0 str])+    AbsBNF.LitDouble d -> prPrec i 2 (concatD [prt 0 d])+    AbsBNF.List exps -> prPrec i 2 (concatD [doc (showString "["), prt 0 exps, doc (showString "]")])   prtList 2 [x] = concatD [prt 2 x]   prtList 2 (x:xs) = concatD [prt 2 x, prt 2 xs]   prtList _ [] = concatD []   prtList _ [x] = concatD [prt 0 x]   prtList _ (x:xs) = concatD [prt 0 x, doc (showString ","), prt 0 xs]-instance Print RHS where++instance Print [AbsBNF.Exp] where+  prt = prtList++instance Print AbsBNF.RHS where   prt i e = case e of-    RHS items -> prPrec i 0 (concatD [prt 0 items])+    AbsBNF.RHS items -> prPrec i 0 (concatD [prt 0 items])   prtList _ [x] = concatD [prt 0 x]   prtList _ (x:xs) = concatD [prt 0 x, doc (showString "|"), prt 0 xs]-instance Print MinimumSize where++instance Print [AbsBNF.RHS] where+  prt = prtList++instance Print AbsBNF.MinimumSize where   prt i e = case e of-    MNonempty -> prPrec i 0 (concatD [doc (showString "nonempty")])-    MEmpty -> prPrec i 0 (concatD [])+    AbsBNF.MNonempty -> prPrec i 0 (concatD [doc (showString "nonempty")])+    AbsBNF.MEmpty -> prPrec i 0 (concatD []) -instance Print Reg where+instance Print AbsBNF.Reg where   prt i e = case e of-    RSeq reg1 reg2 -> prPrec i 2 (concatD [prt 2 reg1, prt 3 reg2])-    RAlt reg1 reg2 -> prPrec i 1 (concatD [prt 1 reg1, doc (showString "|"), prt 2 reg2])-    RMinus reg1 reg2 -> prPrec i 1 (concatD [prt 2 reg1, doc (showString "-"), prt 2 reg2])-    RStar reg -> prPrec i 3 (concatD [prt 3 reg, doc (showString "*")])-    RPlus reg -> prPrec i 3 (concatD [prt 3 reg, doc (showString "+")])-    ROpt reg -> prPrec i 3 (concatD [prt 3 reg, doc (showString "?")])-    REps -> prPrec i 3 (concatD [doc (showString "eps")])-    RChar c -> prPrec i 3 (concatD [prt 0 c])-    RAlts str -> prPrec i 3 (concatD [doc (showString "["), prt 0 str, doc (showString "]")])-    RSeqs str -> prPrec i 3 (concatD [doc (showString "{"), prt 0 str, doc (showString "}")])-    RDigit -> prPrec i 3 (concatD [doc (showString "digit")])-    RLetter -> prPrec i 3 (concatD [doc (showString "letter")])-    RUpper -> prPrec i 3 (concatD [doc (showString "upper")])-    RLower -> prPrec i 3 (concatD [doc (showString "lower")])-    RAny -> prPrec i 3 (concatD [doc (showString "char")])+    AbsBNF.RSeq reg1 reg2 -> prPrec i 2 (concatD [prt 2 reg1, prt 3 reg2])+    AbsBNF.RAlt reg1 reg2 -> prPrec i 1 (concatD [prt 1 reg1, doc (showString "|"), prt 2 reg2])+    AbsBNF.RMinus reg1 reg2 -> prPrec i 1 (concatD [prt 2 reg1, doc (showString "-"), prt 2 reg2])+    AbsBNF.RStar reg -> prPrec i 3 (concatD [prt 3 reg, doc (showString "*")])+    AbsBNF.RPlus reg -> prPrec i 3 (concatD [prt 3 reg, doc (showString "+")])+    AbsBNF.ROpt reg -> prPrec i 3 (concatD [prt 3 reg, doc (showString "?")])+    AbsBNF.REps -> prPrec i 3 (concatD [doc (showString "eps")])+    AbsBNF.RChar c -> prPrec i 3 (concatD [prt 0 c])+    AbsBNF.RAlts str -> prPrec i 3 (concatD [doc (showString "["), prt 0 str, doc (showString "]")])+    AbsBNF.RSeqs str -> prPrec i 3 (concatD [doc (showString "{"), prt 0 str, doc (showString "}")])+    AbsBNF.RDigit -> prPrec i 3 (concatD [doc (showString "digit")])+    AbsBNF.RLetter -> prPrec i 3 (concatD [doc (showString "letter")])+    AbsBNF.RUpper -> prPrec i 3 (concatD [doc (showString "upper")])+    AbsBNF.RLower -> prPrec i 3 (concatD [doc (showString "lower")])+    AbsBNF.RAny -> prPrec i 3 (concatD [doc (showString "char")]) 
test/BNFC/Backend/BaseSpec.hs view
@@ -18,11 +18,11 @@ spec :: Spec spec = do   describe "Backend monad" $ do-    it "empty computation generates empty list op files" $+    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")]+        `shouldReturn` [("test.txt", "abcd\n")]   describe "writeFiles" $ do     it "creates the root directory if it doesn't exists" $       withSystemTempDirectory "bnfc-test" $ \tmpdir -> do@@ -40,7 +40,7 @@         setCurrentDirectory tmpdir         writeFiles "." (mkfile "file.txt" "abcd")         readFile "file.txt"-      `shouldReturn` "abcd"+      `shouldReturn` "abcd\n"     it "creates subdirectories" $       withSystemTempDirectory "bnfc-test" $ \tmpdir -> do         setCurrentDirectory tmpdir
test/BNFC/Backend/Common/MakefileSpec.hs view
@@ -11,4 +11,4 @@   describe "mkMakefile" $ do     it "uses the names in the options dictionary" $       let opts = defaultOptions { make = Just "MyMakefile" } in-      execBackend (mkMakefile opts "") `shouldReturn` [("MyMakefile","")]+      execBackend (mkMakefile opts (const "")) `shouldReturn` [("MyMakefile","")]
test/BNFC/OptionsSpec.hs view
@@ -75,6 +75,11 @@           parseMode["--c", "-mMyMakefile", "foo.cf"]             `shouldSet` (make, Just "MyMakefile") +isUsageError :: Mode -> Bool+isUsageError = \case+  UsageError{} -> True+  _ -> False+ -- ~~~ Arbitrary instances ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  randomOption :: Gen String