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 +39/−16
- Makefile +28/−9
- TODO +0/−112
- changelog +17/−0
- dist/build/bnfc/bnfc-tmp/LexBNF.hs +84/−666
- dist/build/bnfc/bnfc-tmp/ParBNF.hs +3/−3
- dist/build/unit-tests/unit-tests-tmp/LexBNF.hs +519/−0
- dist/build/unit-tests/unit-tests-tmp/ParBNF.hs +2459/−0
- runtime/Data/Matrix/Quad.hs +10/−10
- src/AbsBNF.hs +7/−4
- src/BNFC/Backend/Agda.hs +830/−0
- src/BNFC/Backend/Base.hs +11/−4
- src/BNFC/Backend/C.hs +40/−21
- src/BNFC/Backend/C/CFtoBisonC.hs +128/−72
- src/BNFC/Backend/C/CFtoCAbs.hs +108/−115
- src/BNFC/Backend/C/CFtoCPrinter.hs +10/−10
- src/BNFC/Backend/C/CFtoCSkel.hs +24/−24
- src/BNFC/Backend/C/CFtoFlexC.hs +56/−38
- src/BNFC/Backend/C/RegToFlex.hs +82/−0
- src/BNFC/Backend/CPP/Makefile.hs +6/−4
- src/BNFC/Backend/CPP/NoSTL.hs +16/−14
- src/BNFC/Backend/CPP/NoSTL/CFtoBison.hs +36/−26
- src/BNFC/Backend/CPP/NoSTL/CFtoCPPAbs.hs +5/−6
- src/BNFC/Backend/CPP/NoSTL/CFtoCVisitSkel.hs +5/−13
- src/BNFC/Backend/CPP/NoSTL/CFtoFlex.hs +96/−6
- src/BNFC/Backend/CPP/NoSTL/RegToFlex.hs +0/−72
- src/BNFC/Backend/CPP/PrettyPrinter.hs +18/−16
- src/BNFC/Backend/CPP/STL.hs +17/−15
- src/BNFC/Backend/CPP/STL/CFtoBisonSTL.hs +43/−32
- src/BNFC/Backend/CSharp.hs +3/−3
- src/BNFC/Backend/CSharp/CFtoGPLEX.hs +6/−6
- src/BNFC/Backend/CSharp/CFtoGPPG.hs +53/−41
- src/BNFC/Backend/Common/Makefile.hs +36/−24
- src/BNFC/Backend/Common/NamedVariables.hs +1/−1
- src/BNFC/Backend/Common/OOAbstract.hs +2/−3
- src/BNFC/Backend/Haskell.hs +243/−58
- src/BNFC/Backend/Haskell/CFtoAbstract.hs +194/−163
- src/BNFC/Backend/Haskell/CFtoAlex.hs +4/−3
- src/BNFC/Backend/Haskell/CFtoAlex2.hs +3/−2
- src/BNFC/Backend/Haskell/CFtoAlex3.hs +59/−60
- src/BNFC/Backend/Haskell/CFtoHappy.hs +127/−121
- src/BNFC/Backend/Haskell/CFtoLayout.hs +19/−8
- src/BNFC/Backend/Haskell/CFtoPrinter.hs +77/−49
- src/BNFC/Backend/Haskell/HsOpts.hs +39/−6
- src/BNFC/Backend/Haskell/MkErrM.hs +12/−1
- src/BNFC/Backend/Haskell/ToCNF.hs +172/−113
- src/BNFC/Backend/Haskell/Utils.hs +32/−21
- src/BNFC/Backend/HaskellGADT.hs +1/−1
- src/BNFC/Backend/HaskellGADT/CFtoAbstractGADT.hs +15/−9
- src/BNFC/Backend/HaskellGADT/HaskellGADTCommon.hs +6/−4
- src/BNFC/Backend/HaskellProfile.hs +1/−1
- src/BNFC/Backend/HaskellProfile/CFtoHappyProfile.hs +16/−22
- src/BNFC/Backend/Java.hs +101/−83
- src/BNFC/Backend/Java/CFtoAntlr4Lexer.hs +4/−4
- src/BNFC/Backend/Java/CFtoComposVisitor.hs +3/−3
- src/BNFC/Backend/Java/CFtoCup15.hs +8/−9
- src/BNFC/Backend/Java/CFtoFoldVisitor.hs +2/−2
- src/BNFC/Backend/Java/CFtoJLex15.hs +23/−20
- src/BNFC/Backend/Java/CFtoJavaAbs15.hs +5/−4
- src/BNFC/Backend/Java/CFtoJavaPrinter15.hs +2/−3
- src/BNFC/Backend/Java/CFtoVisitSkel15.hs +2/−2
- src/BNFC/Backend/Java/RegToJLex.hs +3/−2
- src/BNFC/Backend/Latex.hs +40/−34
- src/BNFC/Backend/OCaml.hs +3/−3
- src/BNFC/Backend/OCaml/CFtoOCamlAbs.hs +3/−3
- src/BNFC/Backend/OCaml/CFtoOCamlLex.hs +28/−30
- src/BNFC/Backend/OCaml/CFtoOCamlPrinter.hs +9/−8
- src/BNFC/Backend/OCaml/CFtoOCamlShow.hs +14/−11
- src/BNFC/Backend/OCaml/CFtoOCamlTest.hs +14/−9
- src/BNFC/Backend/OCaml/CFtoOCamlYacc.hs +24/−32
- src/BNFC/Backend/OCaml/OCamlUtil.hs +6/−0
- src/BNFC/Backend/Txt2Tag.hs +18/−19
- src/BNFC/Backend/XML.hs +6/−5
- src/BNFC/CF.hs +69/−54
- src/BNFC/GetCF.hs +67/−36
- src/BNFC/Lexing.hs +1/−1
- src/BNFC/MultiView.hs +13/−14
- src/BNFC/Options.hs +296/−145
- src/BNFC/PrettyPrint.hs +104/−24
- src/BNFC/ToCNFCore.hs +1/−1
- src/BNFC/Utils.hs +60/−8
- src/ErrM.hs +7/−1
- src/LexBNF.hs +8426/−389
- src/LexBNF.x +20/−12
- src/Main.hs +19/−13
- src/ParBNF.hs +3827/−3145
- src/ParBNF.y +21/−14
- src/PrintBNF.hs +145/−94
- test/BNFC/Backend/BaseSpec.hs +3/−3
- test/BNFC/Backend/Common/MakefileSpec.hs +1/−1
- test/BNFC/OptionsSpec.hs +5/−0
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