clafer 0.3.10 → 0.4.0
raw patch · 42 files changed
+3225/−3297 lines, 42 filesdep +doctestdep −HaXmldep ~HTTPdep ~QuickCheckdep ~aeson
Dependencies added: doctest
Dependencies removed: HaXml
Dependency ranges changed: HTTP, QuickCheck, aeson, array, base, bytestring, clafer, cmdargs, containers, directory, filepath, lens, lens-aeson, network, network-uri, parsec, process, string-conversions, tasty, tasty-hunit, tasty-th, text, transformers
Files
- CHANGES.md +16/−17
- Makefile +10/−15
- README.md +101/−65
- clafer.cabal +56/−64
- dist/build/Language/Clafer/Front/LexClafer.hs +31/−8
- dist/build/Language/Clafer/Front/ParClafer.hs +1763/−1744
- src-cmd/clafer.hs +4/−6
- src/Language/Clafer.hs +40/−72
- src/Language/Clafer/ClaferArgs.hs +62/−48
- src/Language/Clafer/Common.hs +54/−28
- src/Language/Clafer/Front/AbsClafer.hs +51/−47
- src/Language/Clafer/Front/LayoutResolver.hs +2/−1
- src/Language/Clafer/Front/LexClafer.x +5/−2
- src/Language/Clafer/Front/ParClafer.y +40/−40
- src/Language/Clafer/Front/PrintClafer.hs +31/−33
- src/Language/Clafer/Generator/Alloy.hs +75/−75
- src/Language/Clafer/Generator/Choco.hs +4/−1
- src/Language/Clafer/Generator/Concat.hs +1/−1
- src/Language/Clafer/Generator/Graph.hs +34/−36
- src/Language/Clafer/Generator/Html.hs +25/−32
- src/Language/Clafer/Generator/Python.hs +4/−1
- src/Language/Clafer/Generator/Schema.hs +0/−465
- src/Language/Clafer/Generator/Xml.hs +0/−213
- src/Language/Clafer/Intermediate/Desugarer.hs +58/−83
- src/Language/Clafer/Intermediate/Intclafer.hs +26/−5
- src/Language/Clafer/Intermediate/ResolverName.hs +18/−13
- src/Language/Clafer/Intermediate/ResolverType.hs +54/−87
- src/Language/Clafer/Intermediate/SimpleScopeAnalyzer.hs +1/−1
- src/Language/Clafer/Intermediate/StringAnalyzer.hs +8/−3
- src/Language/Clafer/Intermediate/Tracing.hs +54/−32
- src/Language/Clafer/Intermediate/TypeSystem.hs +484/−0
- src/Language/ClaferT.hs +1/−1
- test/Functions.hs +8/−1
- test/Suite/Positive.hs +2/−2
- test/Suite/Redefinition.hs +2/−2
- test/Suite/SimpleScopeAnalyser.hs +2/−2
- test/Suite/TypeSystem.hs +89/−0
- test/doctests.hs +4/−0
- test/test-suite.hs +5/−3
- tools/Makefile +0/−1
- tools/XsdCheck.class binary
- tools/XsdCheck.java +0/−47
CHANGES.md view
@@ -1,48 +1,47 @@-**Clafer Version 0.3.10 released on April 24, 2015** +# Clafer Version 0.4.0 released on Jul 28, 2015 +[Release](https://github.com/gsdlab/clafer/pull/68) + +# Clafer Version 0.3.10 released on April 24, 2015 + [Release](https://github.com/gsdlab/clafer/pull/66) -**Clafer Version 0.3.9 released on March 06, 2015** +# Clafer Version 0.3.9 released on March 06, 2015 [Release](https://github.com/gsdlab/clafer/pull/63) -**Clafer Version 0.3.8 released on January 27, 2015** +# Clafer Version 0.3.8 released on January 27, 2015 [Release](https://github.com/gsdlab/clafer/pull/60) -**Clafer Version 0.3.7 released on October 23, 2014** +# Clafer Version 0.3.7 released on October 23, 2014 [Release](https://github.com/gsdlab/clafer/pull/53) -**Clafer Version 0.3.6.1 released on July 08, 2014** +# Clafer Version 0.3.6.1 released on July 08, 2014 [Release](https://github.com/gsdlab/clafer/pull/50) -**Clafer Version 0.3.6 released on May 23, 2014** +# Clafer Version 0.3.6 released on May 23, 2014 [Release](https://github.com/gsdlab/clafer/pull/48) -**Clafer Version 0.3.5 released on January 20, 2014** +# Clafer Version 0.3.5 released on January 20, 2014 [Release](https://github.com/gsdlab/clafer/pull/44) -**Clafer Version 0.3.4 released on September 20, 2013** +# Clafer Version 0.3.4 released on September 20, 2013 -**Clafer Version 0.3.3 released on August 14, 2013** +# Clafer Version 0.3.3 released on August 14, 2013 [Release](https://github.com/gsdlab/clafer/pull/35) -**Clafer Version 0.3.2 released on April 11, 2013** +# Clafer Version 0.3.2 released on April 11, 2013 -**Clafer Version 0.3.1 released on October 17, 2012** +# Clafer Version 0.3.1 released on October 17, 2012 -**Clafer Version 0.3 released on July 17, 2012** +# Clafer Version 0.3 released on July 17, 2012 This was the first release of Clafer and included all code since the beginning of the project. Basic features - See the `README.md`. - - - - -
Makefile view
@@ -15,15 +15,11 @@ init: cabal sandbox init --sandbox=../.clafertools-cabal-sandbox - # Uncomment to use Haskell LTS in the sandbox - # wget http://www.stackage.org/snapshot/lts-1.4/cabal.config - # mv cabal.config ../.clafertools-cabal-sandbox - # the constraint is there to prevent installing utf8-string-1 which conflicts with gitit, which requires utf8-string <= 0.3.8. - cabal install --only-dependencies $(MAC_USR_LIB) --enable-tests --constraint="utf8-string==0.3.8" + cabal install --only-dependencies $(MAC_USR_LIB) --enable-tests --constraint="vector == 0.10.12.3" build: $(MAKE) -C $(TOOL_DIR) - cabal configure + cabal configure --enable-tests cabal build install: @@ -33,14 +29,13 @@ cp -f LICENSE $(to)/ cp -f CHANGES.md $(to)/clafer-CHANGES.md cp -f tools/alloy4.2.jar $(to)/tools - cp -f tools/XsdCheck.class $(to)/tools cp -f tools/ecore2clafer.jar $(to)/tools - cabal install --bindir=$(to) $(GPLK_LIBS_INCLUDES) $(MAC_USR_LIB) --ghc-option="-O2" + cabal install --bindir=$(to) $(GPLK_LIBS_INCLUDES) $(MAC_USR_LIB) # Removes current build and makes a clean new one (Don't use if starting from scratch!) cleanEnv: make clean - ghc-pkg unregister clafer --package-db=../.clafertools-cabal-sandbox/x86_64-windows-ghc-7.8.3 + cabal sandbox hc-pkg unregister clafer rm `which clafer` make @@ -48,10 +43,6 @@ grammar: $(MAKE) -C $(SRC_DIR) grammar -# build Schema.hs from ClaferIG.xsd, call after .xsd changed -Schema.hs: - $(MAKE) -C $(SRC_DIR) Schema.hs - # build Css.hs from clafer.css, call after .css changed Css.hs: $(MAKE) -C $(SRC_DIR) Css.hs @@ -72,8 +63,8 @@ cabal test $(MAKE) -C $(TEST_DIR) test -generateAlloyJSPythonXMLXHTMLDot: - $(MAKE) -C $(TEST_DIR) generateAlloyJSPythonXMLXHTMLDot +generateAlloyJSPythonHTMLDot: + $(MAKE) -C $(TEST_DIR) generateAlloyJSPythonHTMLDot diffRegressions: $(MAKE) -C $(TEST_DIR) diffRegressions @@ -93,3 +84,7 @@ tags: hasktags --ctags --extendedctag . + +codex: + codex update + mv codex.tags tags
README.md view
@@ -1,7 +1,6 @@-Clafer -====== +# Clafer, the Language -v0.3.10 +v0.4.0 [Clafer](http://clafer.org) is a general-purpose lightweight structural modeling language developed by [GSD Lab](http://gsd.uwaterloo.ca/), [University of Waterloo](http://uwaterloo.ca), and @@ -20,37 +19,33 @@ 3. *Domain Modeling* - aims at improving the understanding of the problem domain in the early stages of software development and determining the requirements with fewer defects. This is also known as *Concept Modeling* or *Ontology Modeling*. -Clafer Compiler -=============== +# Clafer, the Compiler -Clafer compiler provides a reference language implementation. -It translates models in Clafer to other formats (e.g., Alloy, XML, Python, JS, HTML, DOT) to allow for reasoning and processing with existing tools (Alloy Analyzer, Choco3, and Z3 SMT solver). +Clafer compiler provides a reference implementation of Clafer, the language. +It translates models in Clafer to other formats (e.g., Alloy, JSON, Python, JS, HTML, DOT) to allow for reasoning and processing with existing tools (Alloy Analyzer, Choco3, and Z3 SMT solver, GraphViz). Currently, the compiler is used by * Backends * Alloy-based Instance Generator ([ClaferIG](https://github.com/gsdlab/claferIG)), - * Choco3-based Instance Generator and Multi-Objective Optimizer ([chocosolver](https://github.com/gsdlab/chocosolver), [ClaferChocoIG](https://github.com/gsdlab/ClaferChocoIG)), and - * Z3-based Instance Generator and Multi-Objective Optimizer ([ClaferSMT](https://github.com/gsdlab/claferSMT)), + * Choco3-based Instance Generator and Multi-Objective Optimizer ([chocosolver](https://github.com/gsdlab/chocosolver), [ClaferChocoIG](https://github.com/gsdlab/ClaferChocoIG)). * Web Frontends * Clafer Integrated Development Environment ([ClaferIDE](https://github.com/gsdlab/claferIDE)), * Clafer Configurator ([ClaferConfigurator](https://github.com/gsdlab/ClaferConfigurator)), * Multi-Objective [Visualizer and Explorer](https://github.com/gsdlab/ClaferMooVisualizer), and * Clafer Wiki ([ClaferWiki](https://github.com/gsdlab/claferwiki)). -Contributors ------------- +## Contributors +* [Michał Antkiewicz](http://gsd.uwaterloo.ca/mantkiew), Main developer. * [Kacper Bak](http://gsd.uwaterloo.ca/kbak), Original developer. -* [Jimmy Liang](http://gsd.uwaterloo.ca/jliang), Main developer. -* [Michał Antkiewicz](http://gsd.uwaterloo.ca/mantkiew), Requirements, development, architecture, testing, technology transfer. +* [Jimmy Liang](http://gsd.uwaterloo.ca/jliang), Developer. * [Ed Zulkoski](http://gsd.uwaterloo.ca/ezulkosk), Python IR Generator. * Luke Michael Brown, co-op student May-Aug 2013. Many improvements. * Paulius Juodisius, [customized BNFC generator](https://github.com/juodaspaulius/bnfc) and layout resolver. * [Rafael Olaechea](http://gsd.uwaterloo.ca/rolaechea), Multi-Objective Optimization extensions. -Getting the Clafer Compiler ---------------------------- +## Getting the Clafer Compiler Clafer can be installed from a binary distribution (preferred), from Hackage, and from the source code. @@ -60,16 +55,16 @@ Optional: -* [Java Platform (JDK)](http://www.oracle.com/technetwork/java/javase/downloads/index.html) v8+, 32bit - * needed only for running XML output validation -* [Alloy4.1 and/or Alloy4.2](http://alloy.mit.edu/alloy/download.html) +* [Java Platform (JDK)](http://www.oracle.com/technetwork/java/javase/downloads/index.html) v8+, 32bit on Windows, 64bit otherwise + * needed only for running Alloy validation +* [Alloy4.2](http://alloy.mit.edu/alloy/download.html) * needed only for Alloy output validation * [GraphViz](http://graphviz.org/) * the program `dot` is needed only in the `html` mode for SVG graph generation ### Installation from binaries -Binary distributions of the release 0.3.10 of Clafer Tools for Windows, Mac, and Linux, +Binary distributions of the release 0.4.0 of Clafer Tools for Windows, Mac, and Linux, can be downloaded from [Clafer Tools - Binary Distributions](http://gsd.uwaterloo.ca/clafer-tools-binary-distributions). @@ -80,24 +75,24 @@ Dependencies -* [The Haskell Platform](http://hackage.haskell.org/platform/) v2014.2.0.0 - * Alternatively GHC >= 7.8.3 and Cabal >= 1.18 +* [GHC](https://www.haskell.org/downloads) v7.10.* -Clafer is now available on [Hackage](http://hackage.haskell.org/package/clafer-0.3.10/) and it can be installed using +Clafer is now available on [Hackage](http://hackage.haskell.org/package/clafer-0.4.0/) and it can be installed using 1. `cabal update` 2. `cabal install clafer` -3. `cd <cabal's lib or share folder>` (`C:\Users\<user>\AppData\Roaming\cabal\x86_64-windows-ghc-7.8.3\clafer-0.3.10` on Windows or `.cabal/share/x86_64-linux-ghc-7.8.3/clafer-0.3.10/` on Linux) -4. to automatically download Alloy jars - * execute `make` in `tools` +3. on Windows `cd C:\Users\<user>\AppData\Roaming\cabal\i386-windows-ghc-7.10.1\clafer-0.4.0` +4. on Linux `ca ~/.cabal/share/x86_64-linux-ghc-7.10.1/clafer-0.4.0/` +5. to automatically download Alloy jars, execute + * `cd tools` + * `make` ### Installation from the source code Dependencies -* [The Haskell Platform](http://hackage.haskell.org/platform/) v2014.2.0.0 - * Alternatively GHC >= 7.8.3 and Cabal >= 1.18 -* [Alloy4.1 and/or Alloy4.2](http://alloy.mit.edu/alloy/download.html) +* [GHC](https://www.haskell.org/downloads) v7.10.* +* [Alloy4.2](http://alloy.mit.edu/alloy/download.html) * downloaded automatically during the build * [Git](http://git-scm.com/) @@ -136,35 +131,30 @@ #### Note: > On Windows, use `/` with the `make` command instead of `\`. -Integration with Sublime Text 2/3 ---------------------------------- +## Integration with Sublime Text 2/3 See [ClaferToolsST](https://github.com/gsdlab/ClaferToolsST) -Integration with VIM --------------------- +## Integration with VIM See [clafer-vim](https://github.com/wasowski/clafer-vim) Usage ===== -Clafer Compiler ---------------- +## Clafer Compiler (As printed by `clafer --help`) ``` -Clafer 0.3.10 +Clafer 0.4.0 clafer [OPTIONS] [FILE] Common flags: -m --mode=CLAFERMODE Generated output type. Available - CLAFERMODEs are: 'alloy' (Alloy 4.1); - 'alloy42' (default, Alloy 4.2); 'xml' - (intermediate representation of - Clafer model); 'json' (intermediate + CLAFERMODEs are: 'alloy' (default, + Alloy 4.2); 'json' (intermediate representation of Clafer model); 'clafer' (analyzed and desugared clafer model); 'html' (original model @@ -178,38 +168,28 @@ can be specified at the same time, e.g., '-m alloy -m html'. -o --console-output Output code on console. - -i --flatten-inheritance Flatten inheritance ('alloy' and - 'alloy42' modes only). + -i --flatten-inheritance Flatten inheritance ('alloy' mode + only). --timeout-analysis=INT Timeout for analysis. -l --no-layout Don't resolve off-side rule layout. - --nl --new-layout Use new fast layout resolver + -n --nl --new-layout Use new fast layout resolver (experimental). -c --check-duplicates Check duplicated clafer names in the entire model. -f --skip-resolver Skip name resolution. -k --keep-unused Keep uninstantated abstract clafers - ('alloy' and 'alloy42' modes only). + ('alloy' mode only). -s --no-stats Don't print statistics. - --schema Show Clafer IR (intermediate - representation) XML schema. -v --validate Validate outputs of all modes. Uses - 'tools/XsdCheck.class' for XML, - 'tools/alloy4.jar' and 'tools/alloy4.2.jar' for Alloy models, and Clafer translator for desugared Clafer models. Use '--tooldir' to override the default location of these tools. - --nr --noalloyruncommand For usage with partial instances: - Don't generate the alloy 'run show - for ... ' command, and rename @.ref - with unique names ('alloy' and - 'alloy42' modes only). --tooldir=DIR Specify the tools directory ('validate' only). Default: 'tools/'. -a --alloy-mapping Generate mapping to Alloy source - code ('alloy' and 'alloy42' modes - only). + code ('alloy' mode only). --self-contained Generate a self-contained html document ('html' mode only). --add-graph Add a graph to the generated html @@ -228,15 +208,11 @@ none or simple (default). --check-afm --afm Throws an error if the cardinality of any of the clafers is above 1. - --sg --skip-goals Skip generation of Alloy code for - goals. Useful for all tools working - with standard Alloy. --meta-data Generate a 'fully qualified name'-'least-partially-qualified name'-'unique ID' map ('.cfr-map'). - In Alloy, Alloy42, and Choco modes, - generate the scopes map - ('.cfr-scope'). + In Alloy and Choco modes, generate + the scopes map ('.cfr-scope'). -? --help Display help message -V --version Print version information --numeric-version Print just the version number @@ -246,9 +222,9 @@ Multiple modes can be used at the same time. For example, -`clafer model.cfr -m alloy -m xml -m html -m graph --self-contained --show-references --no-stats` +`clafer model.cfr -m alloy -m json -m html -m graph --self-contained --show-references --no-stats` -The mode `-m alloy42` is only the default mode if no other modes are given. When other modes are given, the mode `-m alloy42` must be added explicitly if needed. +The mode `-m alloy` is only the default mode if no other modes are given. When other modes are given, the mode `-m alloy` must be added explicitly if needed. Additionally, `[OPTIONS]` can also be specified directly in the model file by inserting the following compiler directive as the first line of the file: @@ -278,9 +254,69 @@ * `//# GRAPH` - marks the insertion point for a graph rendering. The graph is only produced in HTML mode with the argument `--add-graph`. * `//# STATS` - marks the insertion point for module statistics. The statistics can be omitted using the argument `--no-stats`. * `//# SUMMARY` - shorthand for `//# GRAPH` and `//# STATS` -* `//# QUALITY_ATTRIBUTE` - is used by ClaferMooVisualizer and ClaferConfigurator to distinguish quality attributes, which should be filtered out, from other clafers. -Need help? -========== +He is some information about the development of the clafer compiler. + +## Branching + +We are following the simplified version of the [successful Git branching model](http://nvie.com/posts/a-successful-git-branching-model/). +The branch `master` is for releases and hot fixes only. +The branch `develop` is for minor development and for integration of features from feature branches. +For any substantial work, branch off from `develop` and create a pull request back into `develop` after the work is completed. +We do testing and code review before merging into develop. +If the `develop` is ahead, merge it into the feature branch and perform integration testing there. +To make a release, we create a pull request from `develop` into `master`. +We tag `master` with version numbers after each release merge. + +## Testing + +We have both automated tests and regression tests. + +To run the automated tests (including both unit tests and [doctests](https://github.com/sol/doctest#readme)), execute + +``` +cabal test +``` + + +To only run unit tests, execute `cabal test test-suite`. + +To only run doctests, execute `cabal test doctests`. + +For instructions for adding new modules to the doctest suite, see [cabal integration](https://github.com/sol/doctest#cabal-integration). + +To run all the automated tests and the regression tests, execute + +``` +make test +``` + +We do test-driven development in the following way: + +1. create a test case Clafer model in either `test/positive` or `test/negative` depending on whether a test case should compile successfully or return an error. For example, see a positive test case [test/positive/redefinition.cfr](https://github.com/gsdlab/clafer/blob/namedDrefs/test/positive/redefinition.cfr). +2. produce the intended compiler output automatically if possible and manually fix the output. Save the intended output as a regression test case. For example, see [test/regression/redefinition.cfr.reg](https://github.com/gsdlab/clafer/blob/namedDrefs/test/regression/redefinition.als.reg). +3. implement the feature to reproduce the intended output: compiler the test case and execute + +``` +cd test +make diffRegressions +``` + +this will show you how the current output diverges from the intended output. + + +## Modifying the grammar + +We are using a [customized version of BNCF](https://github.com/juodaspaulius/bnfc). +Clone the repository and install a binary of `bnfc` so that it's visible in your `PATH`. +After changing the grammar, execute + +``` +make grammar +``` + + +# Need help? + * Visit [language's website](http://clafer.org). * Report issues to [issue tracker](https://github.com/gsdlab/clafer/issues)
clafer.cabal view
@@ -1,7 +1,7 @@ Name: clafer -Version: 0.3.10 -Synopsis: clafer compiles Clafer models to other formats, such as Alloy, XML, HTML, Dot. -Description: Clafer is a general purpose, lightweight, structural modeling language developed at GSD Lab, University of Waterloo, and MODELS group at IT University of Copenhagen. Lightweight modeling aims at improving the understanding of the problem domain in the early stages of software development and determining the requirements with fewer defects. Clafer's goal is to make modeling more accessible to a wider range of users and domains. The tool provides a reference language implementation. It translates models to other formats (e.g. Alloy, XML) to allow for reasoning with existing tools. +Version: 0.4.0 +Synopsis: Compiles Clafer models to other formats: Alloy, JavaScript, JSON, HTML, Dot. +Description: Clafer is a general purpose, lightweight, structural modeling language developed at GSD Lab, University of Waterloo, and MODELS group at IT University of Copenhagen. Lightweight modeling aims at improving the understanding of the problem domain in the early stages of software development and determining the requirements with fewer defects. Clafer's goal is to make modeling more accessible to a wider range of users and domains. The tool provides a reference language implementation. It translates models to other formats (e.g. Alloy, JavaScript, JSON) to allow for reasoning with existing tools. Homepage: http://clafer.org License: MIT License-file: LICENSE @@ -15,70 +15,58 @@ , CHANGES.md , logo.pdf , Makefile - , tools/XsdCheck.java - , tools/XsdCheck.class , tools/ecore2clafer.jar , tools/Makefile source-repository head type: git location: git://github.com/gsdlab/clafer.git Executable clafer - build-tools: ghc >= 7.8.3 + build-tools: ghc >= 7.10.1 default-language: Haskell2010 main-is: clafer.hs hs-source-dirs: src-cmd - build-depends: base >= 4.7.0.1 && < 5 - , containers >= 0.5.5.1 - , filepath >= 1.3.0.2 - , process >= 1.1.0.2 + build-depends: base >= 4.8.0.0 && < 5 + , containers >= 0.5.6.2 + , filepath >= 1.4.0.0 + , process >= 1.2.3.0 , mtl >= 2.2.1 - , cmdargs >= 0.10.7 + , cmdargs >= 0.10.13 , split >= 0.2.2 - , clafer == 0.3.10 - if os(windows) - build-depends: HaXml == 1.24 - else - build-depends: HaXml >= 1.24 - + , clafer == 0.4.0 other-modules: Paths_clafer library - build-tools: ghc >= 7.8.3 + build-tools: ghc >= 7.10.1 default-language: Haskell2010 - build-depends: array >= 0.4.0.1 - , base >= 4.7.0.1 && < 5 - , bytestring >= 0.10.4.0 - , containers >= 0.5.5.1 - , directory >= 1.2.1.0 - , filepath >= 1.3.0.2 - , process >= 1.1.0.2 - , transformers >= 0.3.0.0 + build-depends: array >= 0.5.1.0 + , base >= 4.8.0.0 && < 5 + , bytestring >= 0.10.6.0 + , containers >= 0.5.6.2 + , directory >= 1.2.2.0 + , filepath >= 1.4.0.0 + , process >= 1.2.3.0 + , transformers >= 0.4.2.0 - , HTTP >= 4000.2.10 + , HTTP >= 4000.2.20 , mtl >= 2.2.1 - , network >= 2.6 - , parsec >= 3.1.3 - , text >= 1.1.0.0 + , network >= 2.6.2.1 + , parsec >= 3.1.9 + , text >= 1.2.1.1 - , aeson >= 0.7.0.6 - , cmdargs >= 0.10.7 + , aeson >= 0.8.0.2 + , cmdargs >= 0.10.13 , data-stringmap >= 1.0.1.1 , executable-path >= 0.0.3 , json-builder >= 0.3 - , lens >= 4.7 - , lens-aeson >= 1.0.0.3 - , network-uri >= 2.6 - , string-conversions >= 0.3.0.2 + , lens >= 4.11.1 + , lens-aeson >= 1.0.0.4 + , network-uri >= 2.6.0.3 + , string-conversions >= 0.4 , split >= 0.2.2 - if os(windows) - build-depends: HaXml == 1.24 - else - build-depends: HaXml >= 1.24 - hs-source-dirs: src ghc-options: -Wall -fno-warn-orphans exposed-modules: Language.Clafer @@ -101,9 +89,7 @@ , Language.Clafer.Generator.Graph , Language.Clafer.Generator.Html , Language.Clafer.Generator.Python - , Language.Clafer.Generator.Schema , Language.Clafer.Generator.Stats - , Language.Clafer.Generator.Xml , Language.Clafer.Intermediate.Desugarer , Language.Clafer.Intermediate.Intclafer , Language.Clafer.Intermediate.Resolver @@ -115,45 +101,51 @@ , Language.Clafer.Intermediate.StringAnalyzer , Language.Clafer.Intermediate.Tracing , Language.Clafer.Intermediate.Transformer + , Language.Clafer.Intermediate.TypeSystem , Language.Clafer.Optimizer.Optimizer , Language.Clafer.SplitJoin - other-modules: Paths_clafer - , GetURL + , Paths_clafer + other-modules: GetURL Test-Suite test-suite - build-tools: ghc >= 7.8.3 + build-tools: ghc >= 7.10.1 default-language: Haskell2010 type: exitcode-stdio-1.0 main-is: test-suite.hs hs-source-dirs: test - build-depends: base >= 4.7.0.1 && < 5 - , containers >= 0.5.5.1 - , directory >= 1.2.1.0 - , filepath >= 1.3.0.2 + build-depends: base >= 4.8.0.0 && < 5 + , containers >= 0.5.6.2 + , directory >= 1.2.2.0 + , filepath >= 1.4.0.0 , HUnit >= 1.2.5.2 , mtl >= 2.2.1 - , QuickCheck >= 2.6 + , QuickCheck >= 2.8.1 , data-stringmap >= 1.0.1.1 - , lens >= 4.7 - , lens-aeson >= 1.0.0.3 - , tasty >= 0.10 - , tasty-hunit >= 0.9 - , tasty-th >= 0.1.2 - - , clafer == 0.3.10 + , lens >= 4.11.1 + , lens-aeson >= 1.0.0.4 + , tasty >= 0.10.1.2 + , tasty-hunit >= 0.9.2 + , tasty-th >= 0.1.3 - if os(windows) - build-depends: HaXml == 1.24 - else - build-depends: HaXml >= 1.24 + , clafer == 0.4.0 ghc-options: -Wall - other-modules: Paths_clafer - , Functions + other-modules: Functions , Suite.Positive , Suite.Negative , Suite.SimpleScopeAnalyser , Suite.Redefinition + , Suite.TypeSystem + +Test-suite doctests + build-tools: ghc >= 7.10.1 + default-language: Haskell2010 + type: exitcode-stdio-1.0 + ghc-options: -threaded -Wall + main-is: doctests.hs + hs-source-dirs: test + build-depends: base + , doctest >= 0.10.1
dist/build/Language/Clafer/Front/LexClafer.hs view
@@ -29,19 +29,19 @@ import GlaExts #endif alex_base :: AlexAddr -alex_base = AlexA# "\xf8\xff\xff\xff\x4c\x00\x00\x00\xcc\x00\x00\x00\x4c\x01\x00\x00\x4c\x02\x00\x00\x0c\x02\x00\x00\x00\x00\x00\x00\x7d\x02\x00\x00\x7d\x03\x00\x00\x34\x00\x00\x00\x3d\x03\x00\x00\x13\x04\x00\x00\x00\x00\x00\x00\x7f\x03\x00\x00\x93\x04\x00\x00\x08\x05\x00\x00\xd9\xff\xff\xff\x4d\x00\x00\x00\x61\x00\x00\x00\xe1\xff\xff\xff\x08\x06\x00\x00\xc8\x05\x00\x00\x00\x00\x00\x00\xbe\x06\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\xed\xff\xff\xff\xdd\xff\xff\xff\x4f\x00\x00\x00\xd6\xff\xff\xff\xd7\xff\xff\xff\x00\x00\x00\x00\x9a\xff\xff\xff\xfa\xff\xff\xff\x3d\x00\x00\x00\xf1\xff\xff\xff\x2d\x00\x00\x00\x79\x00\x00\x00\x99\x06\x00\x00\x8c\x00\x00\x00\x00\x00\x00\x00\x97\x07\x00\x00"# +alex_base = AlexA# "\xf8\xff\xff\xff\x4c\x00\x00\x00\xcc\x00\x00\x00\x4c\x01\x00\x00\x4c\x02\x00\x00\x0c\x02\x00\x00\x00\x00\x00\x00\x7d\x02\x00\x00\x7d\x03\x00\x00\x34\x00\x00\x00\x3d\x03\x00\x00\x13\x04\x00\x00\x00\x00\x00\x00\x7f\x03\x00\x00\x93\x04\x00\x00\x08\x05\x00\x00\xd6\xff\xff\xff\x4d\x00\x00\x00\x61\x00\x00\x00\xea\xff\xff\xff\x08\x06\x00\x00\xc8\x05\x00\x00\x00\x00\x00\x00\xbe\x06\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\xe7\xff\xff\xff\xe8\xff\xff\xff\x4f\x00\x00\x00\xd5\xff\xff\xff\xd7\xff\xff\xff\x00\x00\x00\x00\x9b\xff\xff\xff\xde\xff\xff\xff\x52\x00\x00\x00\xf1\xff\xff\xff\x0e\x00\x00\x00\x79\x00\x00\x00\x8c\x00\x00\x00\x99\x06\x00\x00\x00\x00\x00\x00\x97\x07\x00\x00"# alex_table :: AlexAddr -alex_table = AlexA# "\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x12\x00\x1f\x00\x1f\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x0b\x00\x19\x00\x1d\x00\x0f\x00\x1f\x00\x17\x00\x1f\x00\x13\x00\x1f\x00\x1f\x00\x1f\x00\x24\x00\x1b\x00\x1f\x00\x1c\x00\x23\x00\x1a\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x1e\x00\x1f\x00\x22\x00\x21\x00\x1e\x00\x1f\x00\x1f\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x1f\x00\x1f\x00\x1f\x00\x0f\x00\x1f\x00\x1f\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x1f\x00\x20\x00\x1f\x00\x01\x00\x1f\x00\x00\x00\x1f\x00\x21\x00\x18\x00\x1f\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x00\x00\x21\x00\x00\x00\x00\x00\x0f\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\x19\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x0f\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x05\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\x14\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x02\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x04\x00\x05\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\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x28\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x14\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\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\x02\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\x03\x00\x06\x00\x06\x00\x06\x00\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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_table = AlexA# "\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x1f\x00\x0b\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x17\x00\x1f\x00\x19\x00\x1d\x00\x0f\x00\x1f\x00\x1f\x00\x1f\x00\x13\x00\x1f\x00\x1f\x00\x1f\x00\x24\x00\x1b\x00\x1f\x00\x1c\x00\x23\x00\x1a\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x1e\x00\x1f\x00\x22\x00\x21\x00\x1e\x00\x1f\x00\x1f\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x1f\x00\x1f\x00\x1f\x00\x0f\x00\x00\x00\x1f\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x1f\x00\x20\x00\x1f\x00\x01\x00\x00\x00\x00\x00\x00\x00\x12\x00\x18\x00\x1f\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x1f\x00\x21\x00\x1f\x00\x21\x00\x0f\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x0f\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\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\x04\x00\x05\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\x14\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x02\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x04\x00\x05\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\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x28\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\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\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x14\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\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\x02\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0d\x00\x03\x00\x06\x00\x06\x00\x06\x00\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x2d\x00\x26\x00\x2b\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3d\x00\x3d\x00\x3e\x00\x7c\x00\x2a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x2f\x00\x25\x00\x26\x00\x2e\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\x3e\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\x22\x00\x2a\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\x2a\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x2f\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\x3e\x00\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\x20\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\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\x2a\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\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\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\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\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x26\x00\x2a\x00\x3d\x00\x2b\x00\x3d\x00\x3e\x00\x2f\x00\x7c\x00\x20\x00\x21\x00\x22\x00\x23\x00\x3e\x00\x25\x00\x26\x00\x2e\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\x2a\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\x22\x00\xff\xff\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\x2a\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x2f\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\x3a\x00\x3e\x00\x3c\x00\x3d\x00\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\x20\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\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\x2a\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\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\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\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\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x0b\x00\xff\xff\xff\xff\x0b\x00\x0b\x00\x0c\x00\x0c\x00\x0f\x00\xff\xff\x0f\x00\x0b\x00\x16\x00\x16\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x17\x00\x17\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"# -alex_accept = listArray (0::Int,41) [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_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),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_5),AlexAcc (alex_action_6),AlexAcc (alex_action_7)] -{-# LINE 42 "src\Language\Clafer\Front\LexClafer.x" #-} +alex_accept = listArray (0::Int,41) [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_3),AlexAcc (alex_action_3),AlexAcc (alex_action_3),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)] +{-# LINE 43 "src\Language\Clafer\Front\LexClafer.x" #-} tok :: (Posn -> String -> Token) -> (Posn -> String -> Token) @@ -59,6 +59,7 @@ | TC !String -- character literals | T_PosInteger !String | T_PosDouble !String + | T_PosReal !String | T_PosString !String | T_PosIdent !String @@ -97,6 +98,7 @@ PT _ (TC s) -> s PT _ (T_PosInteger s) -> s PT _ (T_PosDouble s) -> s + PT _ (T_PosReal s) -> s PT _ (T_PosString s) -> s PT _ (T_PosIdent s) -> s @@ -197,13 +199,34 @@ alex_action_3 = tok (\p s -> PT p (eitherResIdent (TV . share) s)) alex_action_4 = tok (\p s -> PT p (eitherResIdent (T_PosInteger . share) s)) alex_action_5 = tok (\p s -> PT p (eitherResIdent (T_PosDouble . share) s)) -alex_action_6 = tok (\p s -> PT p (eitherResIdent (T_PosString . share) s)) -alex_action_7 = tok (\p s -> PT p (eitherResIdent (T_PosIdent . share) s)) -alex_action_8 = tok (\p s -> PT p (eitherResIdent (TV . share) s)) +alex_action_6 = tok (\p s -> PT p (eitherResIdent (T_PosReal . share) s)) +alex_action_7 = tok (\p s -> PT p (eitherResIdent (T_PosString . share) s)) +alex_action_8 = tok (\p s -> PT p (eitherResIdent (T_PosIdent . share) s)) +alex_action_9 = tok (\p s -> PT p (eitherResIdent (TV . share) s)) {-# LINE 1 "templates\GenericTemplate.hs" #-} {-# LINE 1 "templates\\GenericTemplate.hs" #-} {-# LINE 1 "<built-in>" #-} {-# LINE 1 "<command-line>" #-} +{-# LINE 8 "<command-line>" #-} +{-# LINE 1 "C:\\dev\\MinGHC-7.10.1\\ghc-7.10.1\\lib/include\\ghcversion.h" #-} + + + + + + + + + + + + + + + + + +{-# LINE 8 "<command-line>" #-} {-# LINE 1 "templates\\GenericTemplate.hs" #-} -- ----------------------------------------------------------------------------- -- ALEX TEMPLATE
dist/build/Language/Clafer/Front/ParClafer.hs view
@@ -30,1750 +30,1769 @@ happyOut9 :: (HappyAbsSyn ) -> (PosDouble) happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x {-# INLINE happyOut9 #-} -happyIn10 :: (PosString) -> (HappyAbsSyn ) -happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn10 #-} -happyOut10 :: (HappyAbsSyn ) -> (PosString) -happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut10 #-} -happyIn11 :: (PosIdent) -> (HappyAbsSyn ) -happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn11 #-} -happyOut11 :: (HappyAbsSyn ) -> (PosIdent) -happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut11 #-} -happyIn12 :: (Module) -> (HappyAbsSyn ) -happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn12 #-} -happyOut12 :: (HappyAbsSyn ) -> (Module) -happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut12 #-} -happyIn13 :: (Declaration) -> (HappyAbsSyn ) -happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn13 #-} -happyOut13 :: (HappyAbsSyn ) -> (Declaration) -happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut13 #-} -happyIn14 :: (Clafer) -> (HappyAbsSyn ) -happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn14 #-} -happyOut14 :: (HappyAbsSyn ) -> (Clafer) -happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut14 #-} -happyIn15 :: (Constraint) -> (HappyAbsSyn ) -happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn15 #-} -happyOut15 :: (HappyAbsSyn ) -> (Constraint) -happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut15 #-} -happyIn16 :: (SoftConstraint) -> (HappyAbsSyn ) -happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn16 #-} -happyOut16 :: (HappyAbsSyn ) -> (SoftConstraint) -happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut16 #-} -happyIn17 :: (Goal) -> (HappyAbsSyn ) -happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn17 #-} -happyOut17 :: (HappyAbsSyn ) -> (Goal) -happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut17 #-} -happyIn18 :: (Abstract) -> (HappyAbsSyn ) -happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn18 #-} -happyOut18 :: (HappyAbsSyn ) -> (Abstract) -happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut18 #-} -happyIn19 :: (Elements) -> (HappyAbsSyn ) -happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn19 #-} -happyOut19 :: (HappyAbsSyn ) -> (Elements) -happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut19 #-} -happyIn20 :: (Element) -> (HappyAbsSyn ) -happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn20 #-} -happyOut20 :: (HappyAbsSyn ) -> (Element) -happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut20 #-} -happyIn21 :: (Super) -> (HappyAbsSyn ) -happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn21 #-} -happyOut21 :: (HappyAbsSyn ) -> (Super) -happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut21 #-} -happyIn22 :: (Reference) -> (HappyAbsSyn ) -happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn22 #-} -happyOut22 :: (HappyAbsSyn ) -> (Reference) -happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut22 #-} -happyIn23 :: (Init) -> (HappyAbsSyn ) -happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn23 #-} -happyOut23 :: (HappyAbsSyn ) -> (Init) -happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut23 #-} -happyIn24 :: (InitHow) -> (HappyAbsSyn ) -happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn24 #-} -happyOut24 :: (HappyAbsSyn ) -> (InitHow) -happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut24 #-} -happyIn25 :: (GCard) -> (HappyAbsSyn ) -happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn25 #-} -happyOut25 :: (HappyAbsSyn ) -> (GCard) -happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut25 #-} -happyIn26 :: (Card) -> (HappyAbsSyn ) -happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn26 #-} -happyOut26 :: (HappyAbsSyn ) -> (Card) -happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut26 #-} -happyIn27 :: (NCard) -> (HappyAbsSyn ) -happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn27 #-} -happyOut27 :: (HappyAbsSyn ) -> (NCard) -happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut27 #-} -happyIn28 :: (ExInteger) -> (HappyAbsSyn ) -happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn28 #-} -happyOut28 :: (HappyAbsSyn ) -> (ExInteger) -happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut28 #-} -happyIn29 :: (Name) -> (HappyAbsSyn ) -happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn29 #-} -happyOut29 :: (HappyAbsSyn ) -> (Name) -happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut29 #-} -happyIn30 :: (Exp) -> (HappyAbsSyn ) -happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn30 #-} -happyOut30 :: (HappyAbsSyn ) -> (Exp) -happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut30 #-} -happyIn31 :: (Exp) -> (HappyAbsSyn ) -happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn31 #-} -happyOut31 :: (HappyAbsSyn ) -> (Exp) -happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut31 #-} -happyIn32 :: (Exp) -> (HappyAbsSyn ) -happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn32 #-} -happyOut32 :: (HappyAbsSyn ) -> (Exp) -happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut32 #-} -happyIn33 :: (Exp) -> (HappyAbsSyn ) -happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn33 #-} -happyOut33 :: (HappyAbsSyn ) -> (Exp) -happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut33 #-} -happyIn34 :: (Exp) -> (HappyAbsSyn ) -happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn34 #-} -happyOut34 :: (HappyAbsSyn ) -> (Exp) -happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut34 #-} -happyIn35 :: (Exp) -> (HappyAbsSyn ) -happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn35 #-} -happyOut35 :: (HappyAbsSyn ) -> (Exp) -happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut35 #-} -happyIn36 :: (Exp) -> (HappyAbsSyn ) -happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn36 #-} -happyOut36 :: (HappyAbsSyn ) -> (Exp) -happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut36 #-} -happyIn37 :: (Exp) -> (HappyAbsSyn ) -happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn37 #-} -happyOut37 :: (HappyAbsSyn ) -> (Exp) -happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut37 #-} -happyIn38 :: (Exp) -> (HappyAbsSyn ) -happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn38 #-} -happyOut38 :: (HappyAbsSyn ) -> (Exp) -happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut38 #-} -happyIn39 :: (Exp) -> (HappyAbsSyn ) -happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn39 #-} -happyOut39 :: (HappyAbsSyn ) -> (Exp) -happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut39 #-} -happyIn40 :: (Exp) -> (HappyAbsSyn ) -happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn40 #-} -happyOut40 :: (HappyAbsSyn ) -> (Exp) -happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut40 #-} -happyIn41 :: (Exp) -> (HappyAbsSyn ) -happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn41 #-} -happyOut41 :: (HappyAbsSyn ) -> (Exp) -happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut41 #-} -happyIn42 :: (Exp) -> (HappyAbsSyn ) -happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn42 #-} -happyOut42 :: (HappyAbsSyn ) -> (Exp) -happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut42 #-} -happyIn43 :: (Exp) -> (HappyAbsSyn ) -happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn43 #-} -happyOut43 :: (HappyAbsSyn ) -> (Exp) -happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut43 #-} -happyIn44 :: (SetExp) -> (HappyAbsSyn ) -happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn44 #-} -happyOut44 :: (HappyAbsSyn ) -> (SetExp) -happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut44 #-} -happyIn45 :: (SetExp) -> (HappyAbsSyn ) -happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn45 #-} -happyOut45 :: (HappyAbsSyn ) -> (SetExp) -happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut45 #-} -happyIn46 :: (SetExp) -> (HappyAbsSyn ) -happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn46 #-} -happyOut46 :: (HappyAbsSyn ) -> (SetExp) -happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut46 #-} -happyIn47 :: (SetExp) -> (HappyAbsSyn ) -happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn47 #-} -happyOut47 :: (HappyAbsSyn ) -> (SetExp) -happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut47 #-} -happyIn48 :: (SetExp) -> (HappyAbsSyn ) -happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn48 #-} -happyOut48 :: (HappyAbsSyn ) -> (SetExp) -happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut48 #-} -happyIn49 :: (SetExp) -> (HappyAbsSyn ) -happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn49 #-} -happyOut49 :: (HappyAbsSyn ) -> (SetExp) -happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut49 #-} -happyIn50 :: (SetExp) -> (HappyAbsSyn ) -happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn50 #-} -happyOut50 :: (HappyAbsSyn ) -> (SetExp) -happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut50 #-} -happyIn51 :: (Decl) -> (HappyAbsSyn ) -happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn51 #-} -happyOut51 :: (HappyAbsSyn ) -> (Decl) -happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut51 #-} -happyIn52 :: (Quant) -> (HappyAbsSyn ) -happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn52 #-} -happyOut52 :: (HappyAbsSyn ) -> (Quant) -happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut52 #-} -happyIn53 :: (EnumId) -> (HappyAbsSyn ) -happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn53 #-} -happyOut53 :: (HappyAbsSyn ) -> (EnumId) -happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut53 #-} -happyIn54 :: (ModId) -> (HappyAbsSyn ) -happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn54 #-} -happyOut54 :: (HappyAbsSyn ) -> (ModId) -happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut54 #-} -happyIn55 :: (LocId) -> (HappyAbsSyn ) -happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn55 #-} -happyOut55 :: (HappyAbsSyn ) -> (LocId) -happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut55 #-} -happyIn56 :: ([Declaration]) -> (HappyAbsSyn ) -happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn56 #-} -happyOut56 :: (HappyAbsSyn ) -> ([Declaration]) -happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut56 #-} -happyIn57 :: ([EnumId]) -> (HappyAbsSyn ) -happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn57 #-} -happyOut57 :: (HappyAbsSyn ) -> ([EnumId]) -happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut57 #-} -happyIn58 :: ([Element]) -> (HappyAbsSyn ) -happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn58 #-} -happyOut58 :: (HappyAbsSyn ) -> ([Element]) -happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut58 #-} -happyIn59 :: ([Exp]) -> (HappyAbsSyn ) -happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn59 #-} -happyOut59 :: (HappyAbsSyn ) -> ([Exp]) -happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut59 #-} -happyIn60 :: ([LocId]) -> (HappyAbsSyn ) -happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn60 #-} -happyOut60 :: (HappyAbsSyn ) -> ([LocId]) -happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut60 #-} -happyIn61 :: ([ModId]) -> (HappyAbsSyn ) -happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyIn61 #-} -happyOut61 :: (HappyAbsSyn ) -> ([ModId]) -happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOut61 #-} -happyInTok :: (Token) -> (HappyAbsSyn ) -happyInTok x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyInTok #-} -happyOutTok :: (HappyAbsSyn ) -> (Token) -happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x -{-# INLINE happyOutTok #-} - - -happyActOffsets :: HappyAddr -happyActOffsets = HappyA# "\x00\x00\x33\x01\x34\x01\x25\x01\x19\x01\x0b\x01\x00\x00\xf0\x00\x00\x00\xf0\x00\x0e\x01\xef\x00\x00\x00\xef\x00\x80\x01\x00\x00\xef\x00\x9d\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\x00\xee\x00\x1e\x01\xe7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x01\x0a\x01\xea\x00\xe9\x00\x1a\x01\x00\x00\xf0\x05\x00\x00\x50\x00\x07\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x0f\x01\xfd\x00\xec\x00\xed\x00\xeb\x00\x00\x00\xbe\x00\xd7\x00\x00\x00\xad\x00\x27\x00\x75\x00\x27\x00\x00\x00\xd7\xff\x27\x00\x00\x00\x92\x00\x92\x00\x00\x00\x00\x00\x00\x00\x27\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xd9\x00\x0f\x00\xdd\x00\x1b\x00\xd8\x00\xac\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x7f\x00\xfd\xff\x00\x00\x00\x00\x00\x00\xc1\x00\x27\x00\xc1\x00\xa3\x00\x00\x00\xa5\x00\xc6\x00\xc7\x00\x95\x00\x00\x00\xd0\x00\x78\x00\x00\x00\xf0\x05\x94\x00\x18\x00\x00\x00\x93\x00\x8b\x00\xfd\xff\xfd\xff\xfd\xff\xfd\xff\xfd\xff\xfd\xff\xfd\xff\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xad\x00\xa2\x00\x92\x00\x92\x00\x92\x00\x92\x00\x92\x00\xb0\x00\x8e\x00\x8d\x00\xc3\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x07\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xfd\xff\xb5\x00\xb7\x00\xa4\x00\xa6\x00\x85\x00\x00\x00\x7d\x00\x75\x00\x00\x00\x00\x00\x00\x00\x77\x00\xfd\xff\x6d\x00\x75\x00\x27\x00\x64\x00\x1b\x00\xfd\xff\xfd\xff\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x6a\x01\x46\x00\x64\x00\x64\x00\xf3\xff\x51\x00\x00\x00\x00\x00\x64\x00\x75\x00\x00\x00\x75\x00\x78\x00\x00\x00\x00\x00\x00\x00\x31\x00\x3d\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# - -happyGotoOffsets :: HappyAddr -happyGotoOffsets = HappyA# "\x1c\x00\x0c\x00\x70\x00\x65\x00\x68\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\xf7\xff\x00\x00\xa1\x00\x00\x00\x00\x00\x82\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x35\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x02\xeb\xff\x3b\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\x8b\x04\x00\x00\x00\x00\xb3\x03\xc1\x05\x0c\x02\xa7\x05\x00\x00\x2a\x01\x91\x05\x00\x00\xc8\x02\x99\x02\x00\x00\x00\x00\x00\x00\x77\x05\x00\x00\x61\x05\x00\x00\x00\x00\x00\x00\xdd\x01\x00\x00\x0b\x00\x05\x00\x00\x00\x15\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x00\x00\x00\x00\x03\x00\x45\x06\x00\x00\x00\x00\x00\x00\x00\x00\x47\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\xfb\x00\x31\x06\x90\x06\x88\x06\xcf\x00\x7a\x06\x71\x06\x5b\x06\x17\x05\x01\x05\xe7\x04\xd1\x04\xa2\x04\x73\x04\x5b\x04\x43\x04\x2b\x04\x13\x04\xfb\x03\xe3\x03\x00\x00\x84\x03\x55\x03\x26\x03\xf7\x02\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x19\x06\x52\x00\x7f\x01\x31\x05\x00\x00\x0a\x00\x03\x06\xed\x05\x00\x00\x00\x00\x00\x00\x00\x00\xdb\xff\xde\x01\x76\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x01\x00\x00\x21\x01\x00\x00\x00\x00\x00\x00\x00\x00\xd7\x05\xfb\xff\xf2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# - -happyDefActions :: HappyAddr -happyDefActions = HappyA# "\x84\xff\xef\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfa\xff\x00\x00\x7e\xff\x00\x00\x00\x00\x00\x00\x7e\xff\x00\x00\xdd\xff\xee\xff\x00\x00\xef\xff\x83\xff\xeb\xff\xe9\xff\xe7\xff\xe8\xff\xf4\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xff\xda\xff\xd9\xff\xdb\xff\xdc\xff\x00\x00\x7e\xff\x00\x00\xa1\xff\xa0\xff\x9f\xff\x86\xff\x8f\xff\x7d\xff\xc9\xff\xc5\xff\xc3\xff\xc1\xff\xbf\xff\xbd\xff\xbb\xff\xb2\xff\xb0\xff\xad\xff\xa9\xff\xa4\xff\xa2\xff\x9e\xff\x9a\xff\x98\xff\x96\xff\x94\xff\x92\xff\x90\xff\x00\x00\x7a\xff\xce\xff\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\x00\x00\x00\x00\x8a\xff\x00\x00\x00\x00\x8c\xff\x8b\xff\x89\xff\x00\x00\x88\xff\x00\x00\xf9\xff\xf8\xff\xf7\xff\x00\x00\xf2\xff\xe6\xff\x00\x00\x00\x00\xd7\xff\xd3\xff\xed\xff\xd2\xff\xd4\xff\xd5\xff\xd6\xff\x00\x00\xcf\xff\xd1\xff\xd0\xff\xe4\xff\x00\x00\xf1\xff\xa8\xff\xa7\xff\xc7\xff\x00\x00\xc8\xff\x00\x00\x85\xff\x00\x00\x7c\xff\x00\x00\x00\x00\xa5\xff\x00\x00\x9e\xff\xa6\xff\xbc\xff\x00\x00\x86\xff\xb1\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\xc6\xff\xc4\xff\xc2\xff\xc0\xff\xbe\xff\x00\x00\xb4\xff\xb6\xff\xb9\xff\xb8\xff\xb7\xff\xba\xff\xb5\xff\xae\xff\xaf\xff\xab\xff\xac\xff\xaa\xff\x9b\xff\x00\x00\x9c\xff\x99\xff\x97\xff\x95\xff\x93\xff\x91\xff\x00\x00\x00\x00\x79\xff\x8e\xff\x9d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\xff\xd7\xff\x00\x00\x00\x00\x87\xff\x82\xff\xf5\xff\xea\xff\x80\xff\xef\xff\x00\x00\xe2\xff\xe3\xff\xe1\xff\x00\x00\xcc\xff\x7b\xff\x8d\xff\x00\x00\xca\xff\x00\x00\x00\x00\xb3\xff\xcb\xff\xcd\xff\x00\x00\xed\xff\x00\x00\xde\xff\xdf\xff\x81\xff\x7f\xff\xec\xff\xe0\xff\xf3\xff\xa3\xff"# - -happyCheck :: HappyAddr -happyCheck = HappyA# "\xff\xff\x2a\x00\x01\x00\x06\x00\x03\x00\x00\x00\x0b\x00\x06\x00\x15\x00\x03\x00\x00\x00\x04\x00\x06\x00\x32\x00\x0d\x00\x08\x00\x1d\x00\x0e\x00\x06\x00\x0d\x00\x0b\x00\x00\x00\x0a\x00\x08\x00\x0d\x00\x14\x00\x13\x00\x44\x00\x12\x00\x13\x00\x33\x00\x01\x00\x04\x00\x03\x00\x03\x00\x08\x00\x06\x00\x0a\x00\x25\x00\x12\x00\x13\x00\x28\x00\x33\x00\x0d\x00\x14\x00\x06\x00\x2d\x00\x17\x00\x2f\x00\x30\x00\x31\x00\x2d\x00\x33\x00\x34\x00\x35\x00\x06\x00\x03\x00\x38\x00\x39\x00\x3a\x00\x03\x00\x22\x00\x38\x00\x21\x00\x3a\x00\x44\x00\x41\x00\x42\x00\x43\x00\x44\x00\x28\x00\x41\x00\x42\x00\x43\x00\x44\x00\x2d\x00\x30\x00\x2f\x00\x30\x00\x31\x00\x41\x00\x33\x00\x34\x00\x35\x00\x2d\x00\x03\x00\x38\x00\x39\x00\x3a\x00\x01\x00\x0a\x00\x03\x00\x41\x00\x0d\x00\x06\x00\x41\x00\x42\x00\x43\x00\x44\x00\x0f\x00\x10\x00\x0d\x00\x33\x00\x2e\x00\x41\x00\x42\x00\x43\x00\x44\x00\x03\x00\x08\x00\x35\x00\x0b\x00\x0c\x00\x09\x00\x41\x00\x42\x00\x43\x00\x44\x00\x01\x00\x07\x00\x03\x00\x03\x00\x3d\x00\x06\x00\x2b\x00\x25\x00\x15\x00\x07\x00\x28\x00\x2f\x00\x0d\x00\x0b\x00\x0c\x00\x2d\x00\x34\x00\x2f\x00\x30\x00\x31\x00\x44\x00\x33\x00\x34\x00\x35\x00\x0f\x00\x10\x00\x38\x00\x39\x00\x3a\x00\x01\x00\x03\x00\x03\x00\x11\x00\x2e\x00\x06\x00\x41\x00\x42\x00\x43\x00\x44\x00\x28\x00\x35\x00\x0d\x00\x3e\x00\x00\x00\x2d\x00\x2d\x00\x2f\x00\x30\x00\x31\x00\x31\x00\x33\x00\x34\x00\x35\x00\x0b\x00\x0c\x00\x38\x00\x39\x00\x3a\x00\x03\x00\x44\x00\x11\x00\x06\x00\x13\x00\x3e\x00\x41\x00\x42\x00\x43\x00\x44\x00\x0d\x00\x3e\x00\x16\x00\x19\x00\x2d\x00\x2d\x00\x09\x00\x2f\x00\x31\x00\x0e\x00\x06\x00\x33\x00\x34\x00\x35\x00\x05\x00\x3c\x00\x38\x00\x39\x00\x3a\x00\x3f\x00\x1e\x00\x44\x00\x2e\x00\x3e\x00\x03\x00\x41\x00\x42\x00\x43\x00\x44\x00\x07\x00\x44\x00\x44\x00\x2d\x00\x14\x00\x2f\x00\x17\x00\x3b\x00\x1e\x00\x33\x00\x34\x00\x35\x00\x3e\x00\x15\x00\x38\x00\x39\x00\x3a\x00\x2a\x00\x3d\x00\x12\x00\x2d\x00\x44\x00\x14\x00\x41\x00\x42\x00\x43\x00\x44\x00\x00\x00\x01\x00\x02\x00\x03\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x1d\x00\x24\x00\x11\x00\x2e\x00\x03\x00\x41\x00\x42\x00\x43\x00\x44\x00\x16\x00\x35\x00\x19\x00\x09\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\x0e\x00\x2c\x00\x05\x00\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x3c\x00\x2b\x00\x35\x00\x1e\x00\x3f\x00\x2f\x00\x44\x00\x03\x00\x03\x00\x1c\x00\x34\x00\x12\x00\x23\x00\x44\x00\x1a\x00\x45\x00\x45\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\x41\x00\x2c\x00\x29\x00\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x2b\x00\x2b\x00\x35\x00\x23\x00\x2f\x00\x2f\x00\x27\x00\xff\xff\xff\xff\x34\x00\x34\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x1a\x00\x35\x00\xff\xff\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x23\x00\x0c\x00\xff\xff\x26\x00\x27\x00\xff\xff\x29\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\x40\x00\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x32\x00\xff\xff\x35\x00\xff\xff\x36\x00\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\xff\xff\x0c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\x15\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\x15\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\x15\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\x15\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x1a\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\x29\x00\xff\xff\x15\x00\x2c\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\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\xff\xff\x2c\x00\x15\x00\x2e\x00\x45\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\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\xff\xff\x2c\x00\x15\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\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\xff\xff\x2c\x00\x15\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\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\xff\xff\x2c\x00\x15\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\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\xff\xff\x2c\x00\x15\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\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\xff\xff\x2c\x00\x15\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\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\xff\xff\x2c\x00\x15\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\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\xff\xff\x2c\x00\x15\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\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\xff\xff\x2c\x00\x15\x00\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x15\x00\xff\xff\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x35\x00\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\x35\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\x15\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x15\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x15\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x15\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x15\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x15\x00\x00\x00\x01\x00\x02\x00\x03\x00\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\x03\x00\xff\xff\x02\x00\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\x03\x00\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\x35\x00\x1d\x00\xff\xff\x1f\x00\x20\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\x03\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\x34\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\x03\x00\xff\xff\x03\x00\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\x15\x00\x2e\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\x2a\x00\xff\xff\x2e\x00\x03\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\x35\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\x03\x00\xff\xff\xff\xff\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\xff\xff\xff\xff\x2e\x00\xff\xff\x03\x00\xff\xff\xff\xff\xff\xff\x15\x00\x35\x00\xff\xff\xff\xff\x03\x00\xff\xff\xff\xff\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x15\x00\xff\xff\x2e\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x15\x00\x35\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\x29\x00\x2a\x00\xff\xff\xff\xff\x35\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\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"# - -happyTable :: HappyAddr -happyTable = HappyA# "\x00\x00\x72\x00\x42\x00\xa9\x00\x43\x00\x61\x00\xdb\x00\x44\x00\xd6\x00\x43\x00\x5a\x00\x84\x00\x44\x00\xc2\x00\x45\x00\x85\x00\xd7\x00\xba\x00\x0d\x00\x45\x00\xc0\x00\x5a\x00\x0e\x00\x64\x00\x64\x00\x62\x00\x86\x00\x54\x00\xc6\x00\x5c\x00\x54\x00\x42\x00\x10\x00\x43\x00\x56\x00\x5e\x00\x44\x00\x5f\x00\x67\x00\x5b\x00\x5c\x00\x47\x00\x21\x00\x45\x00\x85\xff\x44\x00\x48\x00\x85\xff\x49\x00\x4a\x00\x4b\x00\x48\x00\x4c\x00\x4d\x00\x4e\x00\x44\x00\x58\x00\x4f\x00\x50\x00\x51\x00\x27\x00\x60\x00\x4f\x00\x46\x00\x51\x00\x54\x00\x07\x00\x52\x00\x53\x00\x54\x00\x47\x00\x07\x00\x52\x00\x53\x00\x54\x00\x48\x00\x11\x00\x49\x00\x4a\x00\x4b\x00\x07\x00\x4c\x00\x4d\x00\x4e\x00\x48\x00\x6d\x00\x4f\x00\x50\x00\x51\x00\x42\x00\x87\x00\x43\x00\x07\x00\x88\x00\x44\x00\x07\x00\x52\x00\x53\x00\x54\x00\xd3\x00\xd4\x00\x45\x00\x23\x00\x3f\x00\x07\x00\x52\x00\x53\x00\x54\x00\x27\x00\x09\x00\xb1\x00\x82\x00\x83\x00\x07\x00\x07\x00\x52\x00\x53\x00\x54\x00\x42\x00\x0b\x00\x43\x00\xbd\x00\xc2\x00\x44\x00\xd3\x00\x56\x00\x59\x00\xb3\x00\x47\x00\x6f\x00\x45\x00\x82\x00\x83\x00\x48\x00\xc9\x00\x49\x00\x4a\x00\x4b\x00\x54\x00\x4c\x00\x4d\x00\x4e\x00\xbc\x00\xbd\x00\x4f\x00\x50\x00\x51\x00\x42\x00\xbd\x00\x43\x00\x7d\x00\x3f\x00\x44\x00\x07\x00\x52\x00\x53\x00\x54\x00\x47\x00\x40\x00\x45\x00\xc4\x00\x1a\x00\x48\x00\xbe\x00\x49\x00\x4a\x00\x4b\x00\xd7\x00\x4c\x00\x4d\x00\x4e\x00\x82\x00\x83\x00\x4f\x00\x50\x00\x51\x00\x43\x00\x54\x00\x1b\x00\x44\x00\x1c\x00\xcc\x00\x07\x00\x52\x00\x53\x00\x54\x00\x45\x00\xce\x00\x7e\x00\x7f\x00\xbe\x00\x48\x00\x80\x00\x49\x00\xbf\x00\x81\x00\x44\x00\x4c\x00\x4d\x00\x4e\x00\x91\x00\x92\x00\x4f\x00\x50\x00\x51\x00\x93\x00\x94\x00\x54\x00\x9b\x00\xb1\x00\x27\x00\x07\x00\x52\x00\x53\x00\x54\x00\xb4\x00\x54\x00\x54\x00\x48\x00\xb6\x00\x49\x00\xb7\x00\xb9\x00\x94\x00\x4c\x00\x4d\x00\x4e\x00\xb8\x00\x28\x00\x4f\x00\x50\x00\x51\x00\x7c\x00\xc2\x00\x58\x00\x48\x00\x54\x00\x66\x00\x07\x00\x52\x00\x53\x00\x54\x00\x24\x00\x25\x00\x26\x00\x27\x00\xab\x00\x3b\x00\x3c\x00\x3d\x00\x61\x00\x78\x00\x7d\x00\x3f\x00\x6d\x00\x07\x00\x52\x00\x53\x00\x54\x00\x7e\x00\x40\x00\x7f\x00\x80\x00\x28\x00\xda\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\x81\x00\x3e\x00\x91\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x92\x00\xaf\x00\x40\x00\x94\x00\x93\x00\x6f\x00\x54\x00\x6d\x00\x6d\x00\x95\x00\x70\x00\x58\x00\x23\x00\x54\x00\x09\x00\xff\xff\xff\xff\x28\x00\xd0\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\x07\x00\x3e\x00\x0b\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\xb4\x00\x6e\x00\x40\x00\x0d\x00\x6f\x00\x6f\x00\x10\x00\x00\x00\x00\x00\x70\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\xd1\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x09\x00\x40\x00\x00\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0e\x00\x0d\x00\x17\x00\x00\x00\x19\x00\x10\x00\x00\x00\x0b\x00\x28\x00\xc8\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\xda\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x1e\x00\x00\x00\x40\x00\x00\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x28\x00\xcc\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x00\x00\x40\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0e\x00\x00\x00\xd8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\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\x28\x00\x73\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\x74\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\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\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\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\x28\x00\x00\x00\x00\x00\x95\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\x00\x00\x6a\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\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\x28\x00\x00\x00\x00\x00\x69\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\x00\x00\x6a\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\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\x28\x00\x00\x00\x00\x00\x6b\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\x00\x00\x6a\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\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\x28\x00\x00\x00\x00\x00\x00\x00\x96\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\x00\x00\x6a\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\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\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\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\x00\x00\x6a\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\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\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\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\x00\x00\x6a\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\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\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\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\x00\x00\x6a\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x09\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x19\x00\x10\x00\x00\x00\x0b\x00\x00\x00\x28\x00\x1a\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x76\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\x00\x00\x6a\x00\x28\x00\x3f\x00\xf6\xff\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\xcf\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\x00\x00\x6a\x00\x28\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x9b\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\x00\x00\x6a\x00\x28\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x9c\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\x00\x00\x6a\x00\x28\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x9d\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\x00\x00\x6a\x00\x28\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x9e\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\x00\x00\x6a\x00\x28\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x9f\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\x00\x00\x6a\x00\x28\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\xa0\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\x00\x00\x6a\x00\x28\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x78\x00\x00\x00\x40\x00\xa1\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\x00\x00\x6a\x00\x28\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x7a\x00\x28\x00\x00\x00\x3f\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x40\x00\x00\x00\xa2\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\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\x28\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\xa4\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x28\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\xa6\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x28\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\x00\x00\x79\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x28\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\x00\x00\x68\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x28\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\x00\x00\x72\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x28\x00\x24\x00\x25\x00\x26\x00\x27\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x27\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\xdc\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x27\x00\x00\x00\x8a\x00\x00\x00\x00\x00\x8b\x00\x40\x00\x8c\x00\x00\x00\x8d\x00\x8e\x00\xc4\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x27\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x90\x00\x00\x00\x00\x00\xc5\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x27\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x28\x00\x3f\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\xae\x00\x00\x00\x3f\x00\x27\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x40\x00\x00\x00\x00\x00\xb9\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x27\x00\x00\x00\x00\x00\xa7\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x28\x00\x40\x00\x00\x00\x00\x00\x27\x00\x00\x00\x00\x00\xa9\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x28\x00\x00\x00\x3f\x00\xaa\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x28\x00\x40\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\xac\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x00\x00\xad\x00\x3d\x00\x00\x00\x00\x00\x40\x00\x3f\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"# - -happyReduceArr = Happy_Data_Array.array (5, 134) [ - (5 , happyReduce_5), - (6 , happyReduce_6), - (7 , happyReduce_7), - (8 , happyReduce_8), - (9 , happyReduce_9), - (10 , happyReduce_10), - (11 , happyReduce_11), - (12 , happyReduce_12), - (13 , happyReduce_13), - (14 , happyReduce_14), - (15 , happyReduce_15), - (16 , happyReduce_16), - (17 , happyReduce_17), - (18 , happyReduce_18), - (19 , happyReduce_19), - (20 , happyReduce_20), - (21 , happyReduce_21), - (22 , happyReduce_22), - (23 , happyReduce_23), - (24 , happyReduce_24), - (25 , happyReduce_25), - (26 , happyReduce_26), - (27 , happyReduce_27), - (28 , happyReduce_28), - (29 , happyReduce_29), - (30 , happyReduce_30), - (31 , happyReduce_31), - (32 , happyReduce_32), - (33 , happyReduce_33), - (34 , happyReduce_34), - (35 , happyReduce_35), - (36 , happyReduce_36), - (37 , happyReduce_37), - (38 , happyReduce_38), - (39 , happyReduce_39), - (40 , happyReduce_40), - (41 , happyReduce_41), - (42 , happyReduce_42), - (43 , happyReduce_43), - (44 , happyReduce_44), - (45 , happyReduce_45), - (46 , happyReduce_46), - (47 , happyReduce_47), - (48 , happyReduce_48), - (49 , happyReduce_49), - (50 , happyReduce_50), - (51 , happyReduce_51), - (52 , happyReduce_52), - (53 , happyReduce_53), - (54 , happyReduce_54), - (55 , happyReduce_55), - (56 , happyReduce_56), - (57 , happyReduce_57), - (58 , happyReduce_58), - (59 , happyReduce_59), - (60 , happyReduce_60), - (61 , happyReduce_61), - (62 , happyReduce_62), - (63 , happyReduce_63), - (64 , happyReduce_64), - (65 , happyReduce_65), - (66 , happyReduce_66), - (67 , happyReduce_67), - (68 , happyReduce_68), - (69 , happyReduce_69), - (70 , happyReduce_70), - (71 , happyReduce_71), - (72 , happyReduce_72), - (73 , happyReduce_73), - (74 , happyReduce_74), - (75 , happyReduce_75), - (76 , happyReduce_76), - (77 , happyReduce_77), - (78 , happyReduce_78), - (79 , happyReduce_79), - (80 , happyReduce_80), - (81 , happyReduce_81), - (82 , happyReduce_82), - (83 , happyReduce_83), - (84 , happyReduce_84), - (85 , happyReduce_85), - (86 , happyReduce_86), - (87 , happyReduce_87), - (88 , happyReduce_88), - (89 , happyReduce_89), - (90 , happyReduce_90), - (91 , happyReduce_91), - (92 , happyReduce_92), - (93 , happyReduce_93), - (94 , happyReduce_94), - (95 , happyReduce_95), - (96 , happyReduce_96), - (97 , happyReduce_97), - (98 , happyReduce_98), - (99 , happyReduce_99), - (100 , happyReduce_100), - (101 , happyReduce_101), - (102 , happyReduce_102), - (103 , happyReduce_103), - (104 , happyReduce_104), - (105 , happyReduce_105), - (106 , happyReduce_106), - (107 , happyReduce_107), - (108 , happyReduce_108), - (109 , happyReduce_109), - (110 , happyReduce_110), - (111 , happyReduce_111), - (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) - ] - -happy_n_terms = 70 :: Int -happy_n_nonterms = 54 :: Int - -happyReduce_5 = happySpecReduce_1 0# happyReduction_5 -happyReduction_5 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn8 - (PosInteger (mkPosToken happy_var_1) - )} - -happyReduce_6 = happySpecReduce_1 1# happyReduction_6 -happyReduction_6 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn9 - (PosDouble (mkPosToken happy_var_1) - )} - -happyReduce_7 = happySpecReduce_1 2# happyReduction_7 -happyReduction_7 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn10 - (PosString (mkPosToken happy_var_1) - )} - -happyReduce_8 = happySpecReduce_1 3# happyReduction_8 -happyReduction_8 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn11 - (PosIdent (mkPosToken happy_var_1) - )} - -happyReduce_9 = happySpecReduce_1 4# happyReduction_9 -happyReduction_9 happy_x_1 - = case happyOut56 happy_x_1 of { happy_var_1 -> - happyIn12 - (Module ((mkCatSpan happy_var_1)) (reverse happy_var_1) - )} - -happyReduce_10 = happyReduce 4# 5# happyReduction_10 -happyReduction_10 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut11 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - case happyOut57 happy_x_4 of { happy_var_4 -> - happyIn13 - (EnumDecl ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_11 = happySpecReduce_1 5# happyReduction_11 -happyReduction_11 happy_x_1 - = case happyOut20 happy_x_1 of { happy_var_1 -> - happyIn13 - (ElementDecl ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_12 = happyReduce 8# 6# happyReduction_12 -happyReduction_12 (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 happyOut18 happy_x_1 of { happy_var_1 -> - case happyOut25 happy_x_2 of { happy_var_2 -> - case happyOut11 happy_x_3 of { happy_var_3 -> - case happyOut21 happy_x_4 of { happy_var_4 -> - case happyOut22 happy_x_5 of { happy_var_5 -> - case happyOut26 happy_x_6 of { happy_var_6 -> - case happyOut23 happy_x_7 of { happy_var_7 -> - case happyOut19 happy_x_8 of { happy_var_8 -> - happyIn14 - (Clafer ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkCatSpan happy_var_4) >- (mkCatSpan happy_var_5) >- (mkCatSpan happy_var_6) >- (mkCatSpan happy_var_7) >- (mkCatSpan happy_var_8)) happy_var_1 happy_var_2 happy_var_3 happy_var_4 happy_var_5 happy_var_6 happy_var_7 happy_var_8 - ) `HappyStk` happyRest}}}}}}}} - -happyReduce_13 = happySpecReduce_3 7# happyReduction_13 -happyReduction_13 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut59 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - happyIn15 - (Constraint ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2) - )}}} - -happyReduce_14 = happyReduce 4# 8# happyReduction_14 -happyReduction_14 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut59 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { happy_var_4 -> - happyIn16 - (SoftConstraint ((mkTokenSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4)) (reverse happy_var_3) - ) `HappyStk` happyRest}}}} - -happyReduce_15 = happySpecReduce_3 9# happyReduction_15 -happyReduction_15 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut59 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - happyIn17 - (Goal ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2) - )}}} - -happyReduce_16 = happySpecReduce_0 10# happyReduction_16 -happyReduction_16 = happyIn18 - (AbstractEmpty noSpan - ) - -happyReduce_17 = happySpecReduce_1 10# happyReduction_17 -happyReduction_17 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn18 - (Abstract ((mkTokenSpan happy_var_1)) - )} - -happyReduce_18 = happySpecReduce_0 11# happyReduction_18 -happyReduction_18 = happyIn19 - (ElementsEmpty noSpan - ) - -happyReduce_19 = happySpecReduce_3 11# happyReduction_19 -happyReduction_19 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut58 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - happyIn19 - (ElementsList ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2) - )}}} - -happyReduce_20 = happySpecReduce_1 12# happyReduction_20 -happyReduction_20 happy_x_1 - = case happyOut14 happy_x_1 of { happy_var_1 -> - happyIn20 - (Subclafer ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_21 = happyReduce 4# 12# happyReduction_21 -happyReduction_21 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut29 happy_x_2 of { happy_var_2 -> - case happyOut26 happy_x_3 of { happy_var_3 -> - case happyOut19 happy_x_4 of { happy_var_4 -> - happyIn20 - (ClaferUse ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_3 happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_22 = happySpecReduce_1 12# happyReduction_22 -happyReduction_22 happy_x_1 - = case happyOut15 happy_x_1 of { happy_var_1 -> - happyIn20 - (Subconstraint ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_23 = happySpecReduce_1 12# happyReduction_23 -happyReduction_23 happy_x_1 - = case happyOut17 happy_x_1 of { happy_var_1 -> - happyIn20 - (Subgoal ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_24 = happySpecReduce_1 12# happyReduction_24 -happyReduction_24 happy_x_1 - = case happyOut16 happy_x_1 of { happy_var_1 -> - happyIn20 - (Subsoftconstraint ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_25 = happySpecReduce_0 13# happyReduction_25 -happyReduction_25 = happyIn21 - (SuperEmpty noSpan - ) - -happyReduce_26 = happySpecReduce_2 13# happyReduction_26 -happyReduction_26 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut44 happy_x_2 of { happy_var_2 -> - happyIn21 - (SuperSome ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_27 = happySpecReduce_0 14# happyReduction_27 -happyReduction_27 = happyIn22 - (ReferenceEmpty noSpan - ) - -happyReduce_28 = happySpecReduce_2 14# happyReduction_28 -happyReduction_28 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut44 happy_x_2 of { happy_var_2 -> - happyIn22 - (ReferenceSet ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_29 = happySpecReduce_2 14# happyReduction_29 -happyReduction_29 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut44 happy_x_2 of { happy_var_2 -> - happyIn22 - (ReferenceBag ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_30 = happySpecReduce_0 15# happyReduction_30 -happyReduction_30 = happyIn23 - (InitEmpty noSpan - ) - -happyReduce_31 = happySpecReduce_2 15# happyReduction_31 -happyReduction_31 happy_x_2 - happy_x_1 - = case happyOut24 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - happyIn23 - (InitSome ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_1 happy_var_2 - )}} - -happyReduce_32 = happySpecReduce_1 16# happyReduction_32 -happyReduction_32 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn24 - (InitConstant ((mkTokenSpan happy_var_1)) - )} - -happyReduce_33 = happySpecReduce_1 16# happyReduction_33 -happyReduction_33 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn24 - (InitDefault ((mkTokenSpan happy_var_1)) - )} - -happyReduce_34 = happySpecReduce_0 17# happyReduction_34 -happyReduction_34 = happyIn25 - (GCardEmpty noSpan - ) - -happyReduce_35 = happySpecReduce_1 17# happyReduction_35 -happyReduction_35 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn25 - (GCardXor ((mkTokenSpan happy_var_1)) - )} - -happyReduce_36 = happySpecReduce_1 17# happyReduction_36 -happyReduction_36 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn25 - (GCardOr ((mkTokenSpan happy_var_1)) - )} - -happyReduce_37 = happySpecReduce_1 17# happyReduction_37 -happyReduction_37 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn25 - (GCardMux ((mkTokenSpan happy_var_1)) - )} - -happyReduce_38 = happySpecReduce_1 17# happyReduction_38 -happyReduction_38 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn25 - (GCardOpt ((mkTokenSpan happy_var_1)) - )} - -happyReduce_39 = happySpecReduce_1 17# happyReduction_39 -happyReduction_39 happy_x_1 - = case happyOut27 happy_x_1 of { happy_var_1 -> - happyIn25 - (GCardInterval ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_40 = happySpecReduce_0 18# happyReduction_40 -happyReduction_40 = happyIn26 - (CardEmpty noSpan - ) - -happyReduce_41 = happySpecReduce_1 18# happyReduction_41 -happyReduction_41 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn26 - (CardLone ((mkTokenSpan happy_var_1)) - )} - -happyReduce_42 = happySpecReduce_1 18# happyReduction_42 -happyReduction_42 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn26 - (CardSome ((mkTokenSpan happy_var_1)) - )} - -happyReduce_43 = happySpecReduce_1 18# happyReduction_43 -happyReduction_43 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn26 - (CardAny ((mkTokenSpan happy_var_1)) - )} - -happyReduce_44 = happySpecReduce_1 18# happyReduction_44 -happyReduction_44 happy_x_1 - = case happyOut8 happy_x_1 of { happy_var_1 -> - happyIn26 - (CardNum ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_45 = happySpecReduce_1 18# happyReduction_45 -happyReduction_45 happy_x_1 - = case happyOut27 happy_x_1 of { happy_var_1 -> - happyIn26 - (CardInterval ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_46 = happySpecReduce_3 19# happyReduction_46 -happyReduction_46 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut8 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut28 happy_x_3 of { happy_var_3 -> - happyIn27 - (NCard ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_47 = happySpecReduce_1 20# happyReduction_47 -happyReduction_47 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn28 - (ExIntegerAst ((mkTokenSpan happy_var_1)) - )} - -happyReduce_48 = happySpecReduce_1 20# happyReduction_48 -happyReduction_48 happy_x_1 - = case happyOut8 happy_x_1 of { happy_var_1 -> - happyIn28 - (ExIntegerNum ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_49 = happySpecReduce_1 21# happyReduction_49 -happyReduction_49 happy_x_1 - = case happyOut61 happy_x_1 of { happy_var_1 -> - happyIn29 - (Path ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_50 = happyReduce 5# 22# happyReduction_50 -happyReduction_50 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut51 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { happy_var_4 -> - case happyOut30 happy_x_5 of { happy_var_5 -> - happyIn30 - (DeclAllDisj ((mkTokenSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4) >- (mkCatSpan happy_var_5)) happy_var_3 happy_var_5 - ) `HappyStk` happyRest}}}}} - -happyReduce_51 = happyReduce 4# 22# happyReduction_51 -happyReduction_51 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut51 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - case happyOut30 happy_x_4 of { happy_var_4 -> - happyIn30 - (DeclAll ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_52 = happyReduce 5# 22# happyReduction_52 -happyReduction_52 (happy_x_5 `HappyStk` - happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut52 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut51 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_4 of { happy_var_4 -> - case happyOut30 happy_x_5 of { happy_var_5 -> - happyIn30 - (DeclQuantDisj ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4) >- (mkCatSpan happy_var_5)) happy_var_1 happy_var_3 happy_var_5 - ) `HappyStk` happyRest}}}}} - -happyReduce_53 = happyReduce 4# 22# happyReduction_53 -happyReduction_53 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut52 happy_x_1 of { happy_var_1 -> - case happyOut51 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - case happyOut30 happy_x_4 of { happy_var_4 -> - happyIn30 - (DeclQuant ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_1 happy_var_2 happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_54 = happySpecReduce_1 22# happyReduction_54 -happyReduction_54 happy_x_1 - = case happyOut31 happy_x_1 of { happy_var_1 -> - happyIn30 - (happy_var_1 - )} - -happyReduce_55 = happySpecReduce_2 23# happyReduction_55 -happyReduction_55 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut32 happy_x_2 of { happy_var_2 -> - happyIn31 - (EGMax ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_56 = happySpecReduce_2 23# happyReduction_56 -happyReduction_56 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut32 happy_x_2 of { happy_var_2 -> - happyIn31 - (EGMin ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_57 = happySpecReduce_3 23# happyReduction_57 -happyReduction_57 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut31 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut32 happy_x_3 of { happy_var_3 -> - happyIn31 - (EIff ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_58 = happySpecReduce_1 23# happyReduction_58 -happyReduction_58 happy_x_1 - = case happyOut32 happy_x_1 of { happy_var_1 -> - happyIn31 - (happy_var_1 - )} - -happyReduce_59 = happySpecReduce_3 24# happyReduction_59 -happyReduction_59 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut32 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut33 happy_x_3 of { happy_var_3 -> - happyIn32 - (EImplies ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_60 = happySpecReduce_1 24# happyReduction_60 -happyReduction_60 happy_x_1 - = case happyOut33 happy_x_1 of { happy_var_1 -> - happyIn32 - (happy_var_1 - )} - -happyReduce_61 = happySpecReduce_3 25# happyReduction_61 -happyReduction_61 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut33 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut34 happy_x_3 of { happy_var_3 -> - happyIn33 - (EOr ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_62 = happySpecReduce_1 25# happyReduction_62 -happyReduction_62 happy_x_1 - = case happyOut34 happy_x_1 of { happy_var_1 -> - happyIn33 - (happy_var_1 - )} - -happyReduce_63 = happySpecReduce_3 26# happyReduction_63 -happyReduction_63 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut34 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut35 happy_x_3 of { happy_var_3 -> - happyIn34 - (EXor ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_64 = happySpecReduce_1 26# happyReduction_64 -happyReduction_64 happy_x_1 - = case happyOut35 happy_x_1 of { happy_var_1 -> - happyIn34 - (happy_var_1 - )} - -happyReduce_65 = happySpecReduce_3 27# happyReduction_65 -happyReduction_65 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut35 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut36 happy_x_3 of { happy_var_3 -> - happyIn35 - (EAnd ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_66 = happySpecReduce_1 27# happyReduction_66 -happyReduction_66 happy_x_1 - = case happyOut36 happy_x_1 of { happy_var_1 -> - happyIn35 - (happy_var_1 - )} - -happyReduce_67 = happySpecReduce_2 28# happyReduction_67 -happyReduction_67 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut37 happy_x_2 of { happy_var_2 -> - happyIn36 - (ENeg ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_68 = happySpecReduce_1 28# happyReduction_68 -happyReduction_68 happy_x_1 - = case happyOut37 happy_x_1 of { happy_var_1 -> - happyIn36 - (happy_var_1 - )} - -happyReduce_69 = happySpecReduce_3 29# happyReduction_69 -happyReduction_69 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut37 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut38 happy_x_3 of { happy_var_3 -> - happyIn37 - (ELt ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_70 = happySpecReduce_3 29# happyReduction_70 -happyReduction_70 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut37 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut38 happy_x_3 of { happy_var_3 -> - happyIn37 - (EGt ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_71 = happySpecReduce_3 29# happyReduction_71 -happyReduction_71 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut37 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut38 happy_x_3 of { happy_var_3 -> - happyIn37 - (EEq ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_72 = happySpecReduce_3 29# happyReduction_72 -happyReduction_72 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut37 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut38 happy_x_3 of { happy_var_3 -> - happyIn37 - (ELte ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_73 = happySpecReduce_3 29# happyReduction_73 -happyReduction_73 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut37 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut38 happy_x_3 of { happy_var_3 -> - happyIn37 - (EGte ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_74 = happySpecReduce_3 29# happyReduction_74 -happyReduction_74 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut37 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut38 happy_x_3 of { happy_var_3 -> - happyIn37 - (ENeq ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_75 = happySpecReduce_3 29# happyReduction_75 -happyReduction_75 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut37 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut38 happy_x_3 of { happy_var_3 -> - happyIn37 - (EIn ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_76 = happyReduce 4# 29# happyReduction_76 -happyReduction_76 (happy_x_4 `HappyStk` - happy_x_3 `HappyStk` - happy_x_2 `HappyStk` - happy_x_1 `HappyStk` - happyRest) - = case happyOut37 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - case happyOut38 happy_x_4 of { happy_var_4 -> - happyIn37 - (ENin ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_1 happy_var_4 - ) `HappyStk` happyRest}}}} - -happyReduce_77 = happySpecReduce_1 29# happyReduction_77 -happyReduction_77 happy_x_1 - = case happyOut38 happy_x_1 of { happy_var_1 -> - happyIn37 - (happy_var_1 - )} - -happyReduce_78 = happySpecReduce_2 30# happyReduction_78 -happyReduction_78 happy_x_2 - happy_x_1 - = case happyOut52 happy_x_1 of { happy_var_1 -> - case happyOut42 happy_x_2 of { happy_var_2 -> - happyIn38 - (QuantExp ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_1 happy_var_2 - )}} - -happyReduce_79 = happySpecReduce_1 30# happyReduction_79 -happyReduction_79 happy_x_1 - = case happyOut39 happy_x_1 of { happy_var_1 -> - happyIn38 - (happy_var_1 - )} - -happyReduce_80 = happySpecReduce_3 31# happyReduction_80 -happyReduction_80 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut39 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut40 happy_x_3 of { happy_var_3 -> - happyIn39 - (EAdd ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_81 = happySpecReduce_3 31# happyReduction_81 -happyReduction_81 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut39 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut40 happy_x_3 of { happy_var_3 -> - happyIn39 - (ESub ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_82 = happySpecReduce_1 31# happyReduction_82 -happyReduction_82 happy_x_1 - = case happyOut40 happy_x_1 of { happy_var_1 -> - happyIn39 - (happy_var_1 - )} - -happyReduce_83 = happySpecReduce_3 32# happyReduction_83 -happyReduction_83 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut40 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut41 happy_x_3 of { happy_var_3 -> - happyIn40 - (EMul ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_84 = happySpecReduce_3 32# happyReduction_84 -happyReduction_84 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut40 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut41 happy_x_3 of { happy_var_3 -> - happyIn40 - (EDiv ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_85 = happySpecReduce_3 32# happyReduction_85 -happyReduction_85 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut40 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut41 happy_x_3 of { happy_var_3 -> - happyIn40 - (ERem ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_86 = happySpecReduce_1 32# happyReduction_86 -happyReduction_86 happy_x_1 - = case happyOut41 happy_x_1 of { happy_var_1 -> - happyIn40 - (happy_var_1 - )} - -happyReduce_87 = happySpecReduce_2 33# happyReduction_87 -happyReduction_87 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut42 happy_x_2 of { happy_var_2 -> - happyIn41 - (ESumSetExp ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_88 = happySpecReduce_2 33# happyReduction_88 -happyReduction_88 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut42 happy_x_2 of { happy_var_2 -> - happyIn41 - (EProdSetExp ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_89 = happySpecReduce_2 33# happyReduction_89 -happyReduction_89 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut42 happy_x_2 of { happy_var_2 -> - happyIn41 - (ECSetExp ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_90 = happySpecReduce_2 33# happyReduction_90 -happyReduction_90 happy_x_2 - happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut42 happy_x_2 of { happy_var_2 -> - happyIn41 - (EMinExp ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 - )}} - -happyReduce_91 = happySpecReduce_1 33# happyReduction_91 -happyReduction_91 happy_x_1 - = case happyOut42 happy_x_1 of { happy_var_1 -> - happyIn41 - (happy_var_1 - )} - -happyReduce_92 = happyReduce 6# 34# happyReduction_92 -happyReduction_92 (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 happyOutTok happy_x_1 of { happy_var_1 -> - case happyOut42 happy_x_2 of { happy_var_2 -> - case happyOutTok happy_x_3 of { happy_var_3 -> - case happyOut42 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_5 of { happy_var_5 -> - case happyOut43 happy_x_6 of { happy_var_6 -> - happyIn42 - (EImpliesElse ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4) >- (mkTokenSpan happy_var_5) >- (mkCatSpan happy_var_6)) happy_var_2 happy_var_4 happy_var_6 - ) `HappyStk` happyRest}}}}}} - -happyReduce_93 = happySpecReduce_1 34# happyReduction_93 -happyReduction_93 happy_x_1 - = case happyOut43 happy_x_1 of { happy_var_1 -> - happyIn42 - (happy_var_1 - )} - -happyReduce_94 = happySpecReduce_1 35# happyReduction_94 -happyReduction_94 happy_x_1 - = case happyOut8 happy_x_1 of { happy_var_1 -> - happyIn43 - (EInt ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_95 = happySpecReduce_1 35# happyReduction_95 -happyReduction_95 happy_x_1 - = case happyOut9 happy_x_1 of { happy_var_1 -> - happyIn43 - (EDouble ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_96 = happySpecReduce_1 35# happyReduction_96 -happyReduction_96 happy_x_1 - = case happyOut10 happy_x_1 of { happy_var_1 -> - happyIn43 - (EStr ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_97 = happySpecReduce_1 35# happyReduction_97 -happyReduction_97 happy_x_1 - = case happyOut44 happy_x_1 of { happy_var_1 -> - happyIn43 - (ESetExp ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_98 = happySpecReduce_3 35# happyReduction_98 -happyReduction_98 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut30 happy_x_2 of { happy_var_2 -> - happyIn43 - (happy_var_2 - )} - -happyReduce_99 = happySpecReduce_3 36# happyReduction_99 -happyReduction_99 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut44 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut45 happy_x_3 of { happy_var_3 -> - happyIn44 - (Union ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_100 = happySpecReduce_3 36# happyReduction_100 -happyReduction_100 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut44 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut45 happy_x_3 of { happy_var_3 -> - happyIn44 - (UnionCom ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_101 = happySpecReduce_1 36# happyReduction_101 -happyReduction_101 happy_x_1 - = case happyOut45 happy_x_1 of { happy_var_1 -> - happyIn44 - (happy_var_1 - )} - -happyReduce_102 = happySpecReduce_3 37# happyReduction_102 -happyReduction_102 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut45 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut46 happy_x_3 of { happy_var_3 -> - happyIn45 - (Difference ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_103 = happySpecReduce_1 37# happyReduction_103 -happyReduction_103 happy_x_1 - = case happyOut46 happy_x_1 of { happy_var_1 -> - happyIn45 - (happy_var_1 - )} - -happyReduce_104 = happySpecReduce_3 38# happyReduction_104 -happyReduction_104 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut46 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut47 happy_x_3 of { happy_var_3 -> - happyIn46 - (Intersection ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_105 = happySpecReduce_1 38# happyReduction_105 -happyReduction_105 happy_x_1 - = case happyOut47 happy_x_1 of { happy_var_1 -> - happyIn46 - (happy_var_1 - )} - -happyReduce_106 = happySpecReduce_3 39# happyReduction_106 -happyReduction_106 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut47 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut48 happy_x_3 of { happy_var_3 -> - happyIn47 - (Domain ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_107 = happySpecReduce_1 39# happyReduction_107 -happyReduction_107 happy_x_1 - = case happyOut48 happy_x_1 of { happy_var_1 -> - happyIn47 - (happy_var_1 - )} - -happyReduce_108 = happySpecReduce_3 40# happyReduction_108 -happyReduction_108 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut48 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut49 happy_x_3 of { happy_var_3 -> - happyIn48 - (Range ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_109 = happySpecReduce_1 40# happyReduction_109 -happyReduction_109 happy_x_1 - = case happyOut49 happy_x_1 of { happy_var_1 -> - happyIn48 - (happy_var_1 - )} - -happyReduce_110 = happySpecReduce_3 41# happyReduction_110 -happyReduction_110 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut49 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut50 happy_x_3 of { happy_var_3 -> - happyIn49 - (Join ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_111 = happySpecReduce_1 41# happyReduction_111 -happyReduction_111 happy_x_1 - = case happyOut50 happy_x_1 of { happy_var_1 -> - happyIn49 - (happy_var_1 - )} - -happyReduce_112 = happySpecReduce_1 42# happyReduction_112 -happyReduction_112 happy_x_1 - = case happyOut29 happy_x_1 of { happy_var_1 -> - happyIn50 - (ClaferId ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_113 = happySpecReduce_3 42# happyReduction_113 -happyReduction_113 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut44 happy_x_2 of { happy_var_2 -> - happyIn50 - (happy_var_2 - )} - -happyReduce_114 = happySpecReduce_3 43# happyReduction_114 -happyReduction_114 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut60 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_2 of { happy_var_2 -> - case happyOut44 happy_x_3 of { happy_var_3 -> - happyIn51 - (Decl ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 - )}}} - -happyReduce_115 = happySpecReduce_1 44# happyReduction_115 -happyReduction_115 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn52 - (QuantNo ((mkTokenSpan happy_var_1)) - )} - -happyReduce_116 = happySpecReduce_1 44# happyReduction_116 -happyReduction_116 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn52 - (QuantNot ((mkTokenSpan happy_var_1)) - )} - -happyReduce_117 = happySpecReduce_1 44# happyReduction_117 -happyReduction_117 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn52 - (QuantLone ((mkTokenSpan happy_var_1)) - )} - -happyReduce_118 = happySpecReduce_1 44# happyReduction_118 -happyReduction_118 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn52 - (QuantOne ((mkTokenSpan happy_var_1)) - )} - -happyReduce_119 = happySpecReduce_1 44# happyReduction_119 -happyReduction_119 happy_x_1 - = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn52 - (QuantSome ((mkTokenSpan happy_var_1)) - )} - -happyReduce_120 = happySpecReduce_1 45# happyReduction_120 -happyReduction_120 happy_x_1 - = case happyOut11 happy_x_1 of { happy_var_1 -> - happyIn53 - (EnumIdIdent ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_121 = happySpecReduce_1 46# happyReduction_121 -happyReduction_121 happy_x_1 - = case happyOut11 happy_x_1 of { happy_var_1 -> - happyIn54 - (ModIdIdent ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_122 = happySpecReduce_1 47# happyReduction_122 -happyReduction_122 happy_x_1 - = case happyOut11 happy_x_1 of { happy_var_1 -> - happyIn55 - (LocIdIdent ((mkCatSpan happy_var_1)) happy_var_1 - )} - -happyReduce_123 = happySpecReduce_0 48# happyReduction_123 -happyReduction_123 = happyIn56 - ([] - ) - -happyReduce_124 = happySpecReduce_2 48# happyReduction_124 -happyReduction_124 happy_x_2 - happy_x_1 - = case happyOut56 happy_x_1 of { happy_var_1 -> - case happyOut13 happy_x_2 of { happy_var_2 -> - happyIn56 - (flip (:) happy_var_1 happy_var_2 - )}} - -happyReduce_125 = happySpecReduce_1 49# happyReduction_125 -happyReduction_125 happy_x_1 - = case happyOut53 happy_x_1 of { happy_var_1 -> - happyIn57 - ((:[]) happy_var_1 - )} - -happyReduce_126 = happySpecReduce_3 49# happyReduction_126 -happyReduction_126 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut53 happy_x_1 of { happy_var_1 -> - case happyOut57 happy_x_3 of { happy_var_3 -> - happyIn57 - ((:) happy_var_1 happy_var_3 - )}} - -happyReduce_127 = happySpecReduce_0 50# happyReduction_127 -happyReduction_127 = happyIn58 - ([] - ) - -happyReduce_128 = happySpecReduce_2 50# happyReduction_128 -happyReduction_128 happy_x_2 - happy_x_1 - = case happyOut58 happy_x_1 of { happy_var_1 -> - case happyOut20 happy_x_2 of { happy_var_2 -> - happyIn58 - (flip (:) happy_var_1 happy_var_2 - )}} - -happyReduce_129 = happySpecReduce_0 51# happyReduction_129 -happyReduction_129 = happyIn59 - ([] - ) - -happyReduce_130 = happySpecReduce_2 51# happyReduction_130 -happyReduction_130 happy_x_2 - happy_x_1 - = case happyOut59 happy_x_1 of { happy_var_1 -> - case happyOut30 happy_x_2 of { happy_var_2 -> - happyIn59 - (flip (:) happy_var_1 happy_var_2 - )}} - -happyReduce_131 = happySpecReduce_1 52# happyReduction_131 -happyReduction_131 happy_x_1 - = case happyOut55 happy_x_1 of { happy_var_1 -> - happyIn60 - ((:[]) happy_var_1 - )} - -happyReduce_132 = happySpecReduce_3 52# happyReduction_132 -happyReduction_132 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut55 happy_x_1 of { happy_var_1 -> - case happyOut60 happy_x_3 of { happy_var_3 -> - happyIn60 - ((:) happy_var_1 happy_var_3 - )}} - -happyReduce_133 = happySpecReduce_1 53# happyReduction_133 -happyReduction_133 happy_x_1 - = case happyOut54 happy_x_1 of { happy_var_1 -> - happyIn61 - ((:[]) happy_var_1 - )} - -happyReduce_134 = happySpecReduce_3 53# happyReduction_134 -happyReduction_134 happy_x_3 - happy_x_2 - happy_x_1 - = case happyOut54 happy_x_1 of { happy_var_1 -> - case happyOut61 happy_x_3 of { happy_var_3 -> - happyIn61 - ((:) happy_var_1 happy_var_3 - )}} - -happyNewToken action sts stk [] = - happyDoAction 69# 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 _ (TS _ 41) -> cont 41#; - PT _ (TS _ 42) -> cont 42#; - PT _ (TS _ 43) -> cont 43#; - PT _ (TS _ 44) -> cont 44#; - PT _ (TS _ 45) -> cont 45#; - PT _ (TS _ 46) -> cont 46#; - PT _ (TS _ 47) -> cont 47#; - PT _ (TS _ 48) -> cont 48#; - PT _ (TS _ 49) -> cont 49#; - PT _ (TS _ 50) -> cont 50#; - PT _ (TS _ 51) -> cont 51#; - PT _ (TS _ 52) -> cont 52#; - PT _ (TS _ 53) -> cont 53#; - PT _ (TS _ 54) -> cont 54#; - PT _ (TS _ 55) -> cont 55#; - PT _ (TS _ 56) -> cont 56#; - PT _ (TS _ 57) -> cont 57#; - PT _ (TS _ 58) -> cont 58#; - PT _ (TS _ 59) -> cont 59#; - PT _ (TS _ 60) -> cont 60#; - PT _ (TS _ 61) -> cont 61#; - PT _ (TS _ 62) -> cont 62#; - PT _ (TS _ 63) -> cont 63#; - PT _ (TS _ 64) -> cont 64#; - PT _ (T_PosInteger _) -> cont 65#; - PT _ (T_PosDouble _) -> cont 66#; - PT _ (T_PosString _) -> cont 67#; - PT _ (T_PosIdent _) -> cont 68#; - _ -> happyError' (tk:tks) - } - -happyError_ 69# 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 - -pModule tks = happySomeParser where - happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut12 x)) - -pClafer tks = happySomeParser where - happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut14 x)) - -pConstraint tks = happySomeParser where - happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (happyOut15 x)) - -pSoftConstraint tks = happySomeParser where - happySomeParser = happyThen (happyParse 3# tks) (\x -> happyReturn (happyOut16 x)) - -pGoal tks = happySomeParser where - happySomeParser = happyThen (happyParse 4# tks) (\x -> happyReturn (happyOut17 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 (pp ts) $ "syntax error at " ++ tokenPos ts ++ - case ts of - [] -> [] - [Err _] -> " due to lexer error" - _ -> " before " ++ unwords (map (id . prToken) (take 4 ts)) - -myLexer = tokens - -gp x@(PT (Pn _ l c) _) = Span (Pos (toInteger l) (toInteger c)) (Pos (toInteger l) (toInteger c + toInteger (length $ prToken x))) -pp (PT (Pn _ l c) _ :_) = Pos (toInteger l) (toInteger c) -pp (Err (Pn _ l c) :_) = Pos (toInteger l) (toInteger c) -pp _ = error "EOF" - -mkCatSpan :: (Spannable c) => c -> Span -mkCatSpan = getSpan - -mkTokenSpan :: Token -> Span -mkTokenSpan = gp -{-# LINE 1 "templates\GenericTemplate.hs" #-} -{-# LINE 1 "templates\\GenericTemplate.hs" #-} -{-# LINE 1 "<built-in>" #-} -{-# LINE 1 "<command-line>" #-} +happyIn10 :: (PosReal) -> (HappyAbsSyn ) +happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn10 #-} +happyOut10 :: (HappyAbsSyn ) -> (PosReal) +happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut10 #-} +happyIn11 :: (PosString) -> (HappyAbsSyn ) +happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn11 #-} +happyOut11 :: (HappyAbsSyn ) -> (PosString) +happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut11 #-} +happyIn12 :: (PosIdent) -> (HappyAbsSyn ) +happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn12 #-} +happyOut12 :: (HappyAbsSyn ) -> (PosIdent) +happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut12 #-} +happyIn13 :: (Module) -> (HappyAbsSyn ) +happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn13 #-} +happyOut13 :: (HappyAbsSyn ) -> (Module) +happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut13 #-} +happyIn14 :: (Declaration) -> (HappyAbsSyn ) +happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn14 #-} +happyOut14 :: (HappyAbsSyn ) -> (Declaration) +happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut14 #-} +happyIn15 :: (Clafer) -> (HappyAbsSyn ) +happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn15 #-} +happyOut15 :: (HappyAbsSyn ) -> (Clafer) +happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut15 #-} +happyIn16 :: (Constraint) -> (HappyAbsSyn ) +happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn16 #-} +happyOut16 :: (HappyAbsSyn ) -> (Constraint) +happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut16 #-} +happyIn17 :: (Assertion) -> (HappyAbsSyn ) +happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn17 #-} +happyOut17 :: (HappyAbsSyn ) -> (Assertion) +happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut17 #-} +happyIn18 :: (Goal) -> (HappyAbsSyn ) +happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn18 #-} +happyOut18 :: (HappyAbsSyn ) -> (Goal) +happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut18 #-} +happyIn19 :: (Abstract) -> (HappyAbsSyn ) +happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn19 #-} +happyOut19 :: (HappyAbsSyn ) -> (Abstract) +happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut19 #-} +happyIn20 :: (Elements) -> (HappyAbsSyn ) +happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn20 #-} +happyOut20 :: (HappyAbsSyn ) -> (Elements) +happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut20 #-} +happyIn21 :: (Element) -> (HappyAbsSyn ) +happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn21 #-} +happyOut21 :: (HappyAbsSyn ) -> (Element) +happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut21 #-} +happyIn22 :: (Super) -> (HappyAbsSyn ) +happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn22 #-} +happyOut22 :: (HappyAbsSyn ) -> (Super) +happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut22 #-} +happyIn23 :: (Reference) -> (HappyAbsSyn ) +happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn23 #-} +happyOut23 :: (HappyAbsSyn ) -> (Reference) +happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut23 #-} +happyIn24 :: (Init) -> (HappyAbsSyn ) +happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn24 #-} +happyOut24 :: (HappyAbsSyn ) -> (Init) +happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut24 #-} +happyIn25 :: (InitHow) -> (HappyAbsSyn ) +happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn25 #-} +happyOut25 :: (HappyAbsSyn ) -> (InitHow) +happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut25 #-} +happyIn26 :: (GCard) -> (HappyAbsSyn ) +happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn26 #-} +happyOut26 :: (HappyAbsSyn ) -> (GCard) +happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut26 #-} +happyIn27 :: (Card) -> (HappyAbsSyn ) +happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn27 #-} +happyOut27 :: (HappyAbsSyn ) -> (Card) +happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut27 #-} +happyIn28 :: (NCard) -> (HappyAbsSyn ) +happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn28 #-} +happyOut28 :: (HappyAbsSyn ) -> (NCard) +happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut28 #-} +happyIn29 :: (ExInteger) -> (HappyAbsSyn ) +happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn29 #-} +happyOut29 :: (HappyAbsSyn ) -> (ExInteger) +happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut29 #-} +happyIn30 :: (Name) -> (HappyAbsSyn ) +happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn30 #-} +happyOut30 :: (HappyAbsSyn ) -> (Name) +happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut30 #-} +happyIn31 :: (Exp) -> (HappyAbsSyn ) +happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn31 #-} +happyOut31 :: (HappyAbsSyn ) -> (Exp) +happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut31 #-} +happyIn32 :: (Exp) -> (HappyAbsSyn ) +happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn32 #-} +happyOut32 :: (HappyAbsSyn ) -> (Exp) +happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut32 #-} +happyIn33 :: (Exp) -> (HappyAbsSyn ) +happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn33 #-} +happyOut33 :: (HappyAbsSyn ) -> (Exp) +happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut33 #-} +happyIn34 :: (Exp) -> (HappyAbsSyn ) +happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn34 #-} +happyOut34 :: (HappyAbsSyn ) -> (Exp) +happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut34 #-} +happyIn35 :: (Exp) -> (HappyAbsSyn ) +happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn35 #-} +happyOut35 :: (HappyAbsSyn ) -> (Exp) +happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut35 #-} +happyIn36 :: (Exp) -> (HappyAbsSyn ) +happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn36 #-} +happyOut36 :: (HappyAbsSyn ) -> (Exp) +happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut36 #-} +happyIn37 :: (Exp) -> (HappyAbsSyn ) +happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn37 #-} +happyOut37 :: (HappyAbsSyn ) -> (Exp) +happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut37 #-} +happyIn38 :: (Exp) -> (HappyAbsSyn ) +happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn38 #-} +happyOut38 :: (HappyAbsSyn ) -> (Exp) +happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut38 #-} +happyIn39 :: (Exp) -> (HappyAbsSyn ) +happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn39 #-} +happyOut39 :: (HappyAbsSyn ) -> (Exp) +happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut39 #-} +happyIn40 :: (Exp) -> (HappyAbsSyn ) +happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn40 #-} +happyOut40 :: (HappyAbsSyn ) -> (Exp) +happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut40 #-} +happyIn41 :: (Exp) -> (HappyAbsSyn ) +happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn41 #-} +happyOut41 :: (HappyAbsSyn ) -> (Exp) +happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut41 #-} +happyIn42 :: (Exp) -> (HappyAbsSyn ) +happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn42 #-} +happyOut42 :: (HappyAbsSyn ) -> (Exp) +happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut42 #-} +happyIn43 :: (Exp) -> (HappyAbsSyn ) +happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn43 #-} +happyOut43 :: (HappyAbsSyn ) -> (Exp) +happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut43 #-} +happyIn44 :: (Exp) -> (HappyAbsSyn ) +happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn44 #-} +happyOut44 :: (HappyAbsSyn ) -> (Exp) +happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut44 #-} +happyIn45 :: (Exp) -> (HappyAbsSyn ) +happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn45 #-} +happyOut45 :: (HappyAbsSyn ) -> (Exp) +happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut45 #-} +happyIn46 :: (Exp) -> (HappyAbsSyn ) +happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn46 #-} +happyOut46 :: (HappyAbsSyn ) -> (Exp) +happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut46 #-} +happyIn47 :: (Exp) -> (HappyAbsSyn ) +happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn47 #-} +happyOut47 :: (HappyAbsSyn ) -> (Exp) +happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut47 #-} +happyIn48 :: (Exp) -> (HappyAbsSyn ) +happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn48 #-} +happyOut48 :: (HappyAbsSyn ) -> (Exp) +happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut48 #-} +happyIn49 :: (Exp) -> (HappyAbsSyn ) +happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn49 #-} +happyOut49 :: (HappyAbsSyn ) -> (Exp) +happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut49 #-} +happyIn50 :: (Exp) -> (HappyAbsSyn ) +happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn50 #-} +happyOut50 :: (HappyAbsSyn ) -> (Exp) +happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut50 #-} +happyIn51 :: (Decl) -> (HappyAbsSyn ) +happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn51 #-} +happyOut51 :: (HappyAbsSyn ) -> (Decl) +happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut51 #-} +happyIn52 :: (Quant) -> (HappyAbsSyn ) +happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn52 #-} +happyOut52 :: (HappyAbsSyn ) -> (Quant) +happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut52 #-} +happyIn53 :: (EnumId) -> (HappyAbsSyn ) +happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn53 #-} +happyOut53 :: (HappyAbsSyn ) -> (EnumId) +happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut53 #-} +happyIn54 :: (ModId) -> (HappyAbsSyn ) +happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn54 #-} +happyOut54 :: (HappyAbsSyn ) -> (ModId) +happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut54 #-} +happyIn55 :: (LocId) -> (HappyAbsSyn ) +happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn55 #-} +happyOut55 :: (HappyAbsSyn ) -> (LocId) +happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut55 #-} +happyIn56 :: ([Declaration]) -> (HappyAbsSyn ) +happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn56 #-} +happyOut56 :: (HappyAbsSyn ) -> ([Declaration]) +happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut56 #-} +happyIn57 :: ([EnumId]) -> (HappyAbsSyn ) +happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn57 #-} +happyOut57 :: (HappyAbsSyn ) -> ([EnumId]) +happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut57 #-} +happyIn58 :: ([Element]) -> (HappyAbsSyn ) +happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn58 #-} +happyOut58 :: (HappyAbsSyn ) -> ([Element]) +happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut58 #-} +happyIn59 :: ([Exp]) -> (HappyAbsSyn ) +happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn59 #-} +happyOut59 :: (HappyAbsSyn ) -> ([Exp]) +happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut59 #-} +happyIn60 :: ([LocId]) -> (HappyAbsSyn ) +happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn60 #-} +happyOut60 :: (HappyAbsSyn ) -> ([LocId]) +happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut60 #-} +happyIn61 :: ([ModId]) -> (HappyAbsSyn ) +happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn61 #-} +happyOut61 :: (HappyAbsSyn ) -> ([ModId]) +happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut61 #-} +happyInTok :: (Token) -> (HappyAbsSyn ) +happyInTok x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyInTok #-} +happyOutTok :: (HappyAbsSyn ) -> (Token) +happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOutTok #-} + + +happyActOffsets :: HappyAddr +happyActOffsets = HappyA# "\x00\x00\x72\x01\x74\x01\x6d\x01\x7b\x01\x57\x01\x00\x00\x4e\x01\x00\x00\x4e\x01\x70\x01\x4b\x01\x00\x00\x4b\x01\xaa\x00\x00\x00\x4b\x01\x21\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x01\x45\x01\x60\x01\x43\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x01\x51\x01\x31\x01\x32\x01\x68\x01\x00\x00\xff\xff\x00\x00\x08\x00\xda\x00\x00\x00\x00\x00\x53\x01\x54\x01\x3f\x00\x56\x01\x59\x01\x4a\x01\x00\x00\x31\x00\x1f\x01\x00\x00\xb0\x00\x29\x00\x77\x00\x29\x00\x00\x00\xde\xff\x29\x00\x00\x00\x93\x00\x93\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x2d\x01\xfe\xff\x21\x01\xfb\xff\x1a\x01\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x00\x00\x00\x00\x00\x00\x00\x39\x00\xb9\x00\x00\x00\x00\x00\x00\x00\xf6\x00\x29\x00\xf6\x00\xef\x00\x00\x00\xd4\x00\xf5\x00\xf7\x00\xc5\x00\x00\x00\x02\x01\x00\x00\xff\xff\xc3\x00\xfc\xff\x00\x00\xc7\x00\xc2\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xcc\x00\xcc\x00\xcc\x00\xcc\x00\xcc\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xb0\x00\xca\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\xd9\x00\xb7\x00\xb4\x00\xea\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x00\xda\x00\x00\x00\x00\x00\x00\x00\xd8\x00\x0d\x00\xde\x00\xde\x00\xd1\x00\xc0\x00\x00\x00\xa9\x00\x77\x00\x00\x00\x00\x00\x9d\x00\xb9\x00\x8b\x00\x77\x00\x29\x00\xb8\x00\xfb\xff\xb9\x00\xb9\x00\x00\x00\x85\x00\x00\x00\x00\x00\x00\x00\x19\x01\x79\x00\x0d\x00\x0d\x00\xf4\xff\x99\x00\x00\x00\x00\x00\x9c\x00\x77\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x6c\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x00\x00\x00"# + +happyGotoOffsets :: HappyAddr +happyGotoOffsets = HappyA# "\x11\x00\x04\x00\x9a\x00\x98\x00\x86\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x00\x00\x00\x00\x5c\x00\x00\x00\x65\x00\x00\x00\x00\x00\x30\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x87\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x02\x4c\x00\x48\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\x97\x04\x00\x00\x00\x00\xc0\x03\xd4\x05\x19\x02\xbd\x05\x00\x00\x9f\x00\xa4\x05\x00\x00\xd5\x02\xa6\x02\x00\x00\x00\x00\x00\x00\x8d\x05\x00\x00\x74\x05\x00\x00\x00\x00\x00\x00\x00\x00\xea\x01\x00\x00\x5b\x00\x0c\x00\x00\x00\x5d\x00\x00\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x58\x00\xa5\x06\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x51\x00\xbe\x06\x8e\x06\x84\x06\x75\x06\x6d\x06\x54\x06\x1d\x06\x2d\x05\x14\x05\xfd\x04\xe4\x04\xcd\x04\x80\x04\x67\x04\x50\x04\x37\x04\x20\x04\x07\x04\xf0\x03\x00\x00\x91\x03\x62\x03\x33\x03\x04\x03\x77\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x01\x00\x00\x00\x00\x00\x00\x04\x06\x09\x00\x8c\x01\x44\x05\x00\x00\x14\x00\x3d\x06\x34\x06\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xff\x5e\x01\x20\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x01\x00\x00\x2e\x01\x00\x00\x00\x00\x00\x00\xed\x05\x0f\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# + +happyDefActions :: HappyAddr +happyDefActions = HappyA# "\x84\xff\xee\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfa\xff\x00\x00\x7e\xff\x00\x00\x00\x00\x00\x00\x7e\xff\x00\x00\xdc\xff\xed\xff\x00\x00\xee\xff\x83\xff\xea\xff\xe8\xff\xe6\xff\xe7\xff\xf3\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd7\xff\xd9\xff\xd8\xff\xda\xff\xdb\xff\x00\x00\x7e\xff\x00\x00\x92\xff\x91\xff\x90\xff\x8f\xff\x86\xff\x93\xff\x7d\xff\xc8\xff\xc4\xff\xc2\xff\xc0\xff\xbe\xff\xbc\xff\xba\xff\xb1\xff\xaf\xff\xac\xff\xa8\xff\xa3\xff\xa1\xff\x9f\xff\x9d\xff\x9a\xff\x98\xff\x96\xff\x94\xff\x00\x00\x7a\xff\xcd\xff\x00\x00\x00\x00\x00\x00\x00\x00\xef\xff\x00\x00\x00\x00\x8a\xff\x00\x00\x00\x00\x8c\xff\x8b\xff\x89\xff\x00\x00\x88\xff\x00\x00\xf9\xff\xf8\xff\xf7\xff\xf6\xff\x00\x00\xf1\xff\xe5\xff\x00\x00\x00\x00\xd6\xff\xd2\xff\xec\xff\xd1\xff\xd3\xff\xd4\xff\xd5\xff\x00\x00\xce\xff\xd0\xff\xcf\xff\xe3\xff\x00\x00\xf0\xff\xa7\xff\xa6\xff\xc6\xff\x00\x00\xc7\xff\x00\x00\x85\xff\x00\x00\x7c\xff\x00\x00\x00\x00\xa4\xff\x00\x00\xa5\xff\xbb\xff\x00\x00\x86\xff\xb0\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\xc5\xff\xc3\xff\xc1\xff\xbf\xff\xbd\xff\x00\x00\xb3\xff\xb5\xff\xb8\xff\xb7\xff\xb6\xff\xb9\xff\xb4\xff\xad\xff\xae\xff\xaa\xff\xab\xff\xa9\xff\xa0\xff\x9e\xff\x9b\xff\x9c\xff\x99\xff\x97\xff\x95\xff\x00\x00\x00\x00\x79\xff\x8e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\xff\xd6\xff\x00\x00\x00\x00\x87\xff\x82\xff\xf4\xff\xe9\xff\x80\xff\xee\xff\x00\x00\xe1\xff\xe2\xff\xe0\xff\x00\x00\xcb\xff\x7b\xff\x8d\xff\x00\x00\xc9\xff\x00\x00\xb2\xff\xca\xff\xcc\xff\x00\x00\xec\xff\x00\x00\xdd\xff\xde\xff\x81\xff\x7f\xff\xeb\xff\xdf\xff\xf2\xff\xa2\xff"# + +happyCheck :: HappyAddr +happyCheck = HappyA# "\xff\xff\x02\x00\x01\x00\x08\x00\x03\x00\x0a\x00\x08\x00\x06\x00\x2a\x00\x15\x00\x32\x00\x07\x00\x00\x00\x04\x00\x0d\x00\x0b\x00\x14\x00\x1d\x00\x0a\x00\x17\x00\x00\x00\x0d\x00\x05\x00\x18\x00\x0b\x00\x0c\x00\x1b\x00\x0c\x00\x1d\x00\x22\x00\x1f\x00\x20\x00\x01\x00\x15\x00\x03\x00\x45\x00\x04\x00\x06\x00\x25\x00\x13\x00\x14\x00\x28\x00\x10\x00\x11\x00\x0d\x00\x2e\x00\x2d\x00\x06\x00\x2f\x00\x30\x00\x31\x00\x34\x00\x33\x00\x34\x00\x35\x00\x06\x00\x2f\x00\x38\x00\x39\x00\x3a\x00\x41\x00\x34\x00\x04\x00\x41\x00\x21\x00\x30\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x28\x00\x0f\x00\x10\x00\x0b\x00\x0c\x00\x2d\x00\x2d\x00\x2f\x00\x30\x00\x31\x00\x31\x00\x33\x00\x34\x00\x35\x00\x04\x00\x2d\x00\x38\x00\x39\x00\x3a\x00\x01\x00\x2a\x00\x03\x00\x00\x00\x2d\x00\x06\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x0d\x00\x0f\x00\x2e\x00\x0e\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x35\x00\x13\x00\x14\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x12\x00\x01\x00\x14\x00\x03\x00\x0c\x00\x2b\x00\x06\x00\x25\x00\x33\x00\x2f\x00\x28\x00\x04\x00\x04\x00\x0d\x00\x34\x00\x2d\x00\x04\x00\x2f\x00\x30\x00\x31\x00\x04\x00\x33\x00\x34\x00\x35\x00\x33\x00\x0a\x00\x38\x00\x39\x00\x3a\x00\x01\x00\x16\x00\x03\x00\x33\x00\x04\x00\x06\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x28\x00\x0d\x00\x09\x00\x08\x00\x04\x00\x2d\x00\x19\x00\x2f\x00\x30\x00\x31\x00\x3d\x00\x33\x00\x34\x00\x35\x00\x2e\x00\x2b\x00\x38\x00\x39\x00\x3a\x00\x2f\x00\x03\x00\x35\x00\x19\x00\x06\x00\x34\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x0d\x00\x45\x00\x06\x00\x2d\x00\x2d\x00\x2f\x00\x3e\x00\x2b\x00\x31\x00\x33\x00\x34\x00\x35\x00\x11\x00\x2b\x00\x38\x00\x39\x00\x3a\x00\x2f\x00\x03\x00\x45\x00\x11\x00\x06\x00\x34\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x0d\x00\x09\x00\x3e\x00\x32\x00\x2d\x00\x04\x00\x2f\x00\x36\x00\x37\x00\x08\x00\x33\x00\x34\x00\x35\x00\x3c\x00\x3e\x00\x38\x00\x39\x00\x3a\x00\x41\x00\x0e\x00\x13\x00\x16\x00\x05\x00\x3c\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3f\x00\x1e\x00\x2e\x00\x2d\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x38\x00\x3e\x00\x3a\x00\x45\x00\x45\x00\x07\x00\x45\x00\x14\x00\x17\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x3e\x00\x45\x00\x1e\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\x3b\x00\x2c\x00\x12\x00\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x1a\x00\x35\x00\x3d\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x23\x00\x0d\x00\x1d\x00\x26\x00\x27\x00\x14\x00\x29\x00\x24\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\x40\x00\x2c\x00\x11\x00\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x09\x00\x35\x00\x0e\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x16\x00\x0d\x00\x19\x00\x05\x00\x3c\x00\x1e\x00\x3f\x00\x1c\x00\x12\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\x45\x00\x2c\x00\x45\x00\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x46\x00\x35\x00\x23\x00\x46\x00\x1a\x00\x29\x00\x23\x00\x41\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\x16\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\x16\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\x16\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\x16\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\x00\xff\xff\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\x16\x00\x29\x00\xff\xff\xff\xff\x2c\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x46\x00\x35\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\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x35\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\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\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\xff\xff\x2c\x00\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x2c\x00\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x2c\x00\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x2c\x00\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\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\xff\xff\x2c\x00\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x2c\x00\x16\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\xff\xff\xff\xff\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x35\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\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\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\x35\x00\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\x16\x00\xff\xff\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x16\x00\x2e\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x35\x00\x2e\x00\x16\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2a\x00\x35\x00\xff\xff\x16\x00\x2e\x00\xff\xff\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\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\x2a\x00\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x35\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"# + +happyTable :: HappyAddr +happyTable = HappyA# "\x00\x00\x89\x00\x42\x00\x5f\x00\x43\x00\x60\x00\x65\x00\x44\x00\x73\x00\xd3\x00\xc0\x00\x0d\x00\x62\x00\x6e\x00\x45\x00\x0e\x00\x85\xff\xd4\x00\x87\x00\x85\xff\x5b\x00\x88\x00\x10\x00\x8a\x00\x80\x00\x81\x00\x8b\x00\xd8\x00\x8c\x00\x61\x00\x8d\x00\x8e\x00\x42\x00\x63\x00\x43\x00\x55\x00\xbb\x00\x44\x00\x68\x00\xc4\x00\x5d\x00\x47\x00\xd0\x00\xd1\x00\x45\x00\x8f\x00\x48\x00\x44\x00\x49\x00\x4a\x00\x4b\x00\x90\x00\x4c\x00\x4d\x00\x4e\x00\x44\x00\x70\x00\x4f\x00\x50\x00\x51\x00\x07\x00\xc7\x00\x28\x00\x07\x00\x46\x00\x11\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x47\x00\xba\x00\xbb\x00\x80\x00\x81\x00\x48\x00\xbc\x00\x49\x00\x4a\x00\x4b\x00\xd4\x00\x4c\x00\x4d\x00\x4e\x00\x6e\x00\x48\x00\x4f\x00\x50\x00\x51\x00\x42\x00\x7c\x00\x43\x00\x5b\x00\x48\x00\x44\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x1a\x00\x45\x00\xb8\x00\x3f\x00\x65\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\xb0\x00\x5c\x00\x5d\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x1b\x00\x42\x00\x1c\x00\x43\x00\xbe\x00\xae\x00\x44\x00\x57\x00\x55\x00\x70\x00\x47\x00\x57\x00\x28\x00\x45\x00\x71\x00\x48\x00\x6e\x00\x49\x00\x4a\x00\x4b\x00\x59\x00\x4c\x00\x4d\x00\x4e\x00\x21\x00\x07\x00\x4f\x00\x50\x00\x51\x00\x42\x00\x5a\x00\x43\x00\x23\x00\xbb\x00\x44\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x47\x00\x45\x00\x09\x00\x0b\x00\x6e\x00\x48\x00\x83\x00\x49\x00\x4a\x00\x4b\x00\xc0\x00\x4c\x00\x4d\x00\x4e\x00\x3f\x00\xb2\x00\x4f\x00\x50\x00\x51\x00\x70\x00\x43\x00\x40\x00\x83\x00\x44\x00\x71\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x45\x00\x55\x00\x44\x00\x48\x00\xbc\x00\x49\x00\xc2\x00\xd0\x00\xbd\x00\x4c\x00\x4d\x00\x4e\x00\x7d\x00\x6f\x00\x4f\x00\x50\x00\x51\x00\x70\x00\x43\x00\x55\x00\x7d\x00\x44\x00\x71\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x45\x00\x7e\x00\xca\x00\x1e\x00\x48\x00\x84\x00\x49\x00\x1f\x00\x20\x00\x85\x00\x4c\x00\x4d\x00\x4e\x00\x21\x00\xcc\x00\x4f\x00\x50\x00\x51\x00\x07\x00\x7f\x00\x86\x00\x82\x00\x91\x00\x92\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x93\x00\x94\x00\x9b\x00\x48\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x4f\x00\xb0\x00\x51\x00\x55\x00\x55\x00\xb2\x00\x55\x00\xb4\x00\xb5\x00\x07\x00\x52\x00\x53\x00\x54\x00\x55\x00\xb6\x00\x55\x00\x94\x00\x29\x00\xd7\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\xb7\x00\x3e\x00\x59\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x09\x00\x40\x00\xc0\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0e\x00\x0d\x00\x17\x00\x62\x00\x19\x00\x10\x00\x67\x00\x0b\x00\x78\x00\x29\x00\xcd\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\xd7\x00\x3e\x00\x7d\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x7e\x00\x40\x00\x7f\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0e\x00\x82\x00\xd5\x00\x83\x00\x91\x00\x92\x00\x94\x00\x93\x00\x95\x00\x59\x00\x29\x00\xce\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\x55\x00\x3e\x00\x55\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xff\xff\x40\x00\x23\x00\xff\xff\x09\x00\x0b\x00\x0d\x00\x07\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\xc6\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\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\x29\x00\xca\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\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\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\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\x29\x00\x74\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\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\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\x00\x00\x3e\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\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\x29\x00\x00\x00\x00\x00\x95\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\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\x29\x00\x00\x00\x00\x00\x6a\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\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\x29\x00\x00\x00\x00\x00\x6c\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\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\x29\x00\x00\x00\x00\x00\x00\x00\x96\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x40\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x19\x00\x10\x00\x29\x00\x0b\x00\x00\x00\x00\x00\x1a\x00\x97\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xf5\xff\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\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\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\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\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\x00\x00\x6b\x00\x00\x00\x3f\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\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\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x76\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\x00\x00\x6b\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\xcc\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x9b\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x9c\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x9d\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x9e\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x9f\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\xa0\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x78\x00\x40\x00\x00\x00\x00\x00\xa1\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x6b\x00\x29\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x7a\x00\x00\x00\x00\x00\x3f\x00\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x40\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\xa3\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\xa5\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xa7\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\xc2\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\xc3\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x40\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xa8\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x29\x00\x00\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\xa9\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x29\x00\x3f\x00\xaa\x00\x3b\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x40\x00\x3f\x00\x29\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\xab\x00\x3c\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\x3d\x00\x40\x00\x00\x00\x29\x00\x3f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x29\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\xad\x00\x00\x00\x00\x00\x00\x00\x3f\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"# + +happyReduceArr = Happy_Data_Array.array (5, 134) [ + (5 , happyReduce_5), + (6 , happyReduce_6), + (7 , happyReduce_7), + (8 , happyReduce_8), + (9 , happyReduce_9), + (10 , happyReduce_10), + (11 , happyReduce_11), + (12 , happyReduce_12), + (13 , happyReduce_13), + (14 , happyReduce_14), + (15 , happyReduce_15), + (16 , happyReduce_16), + (17 , happyReduce_17), + (18 , happyReduce_18), + (19 , happyReduce_19), + (20 , happyReduce_20), + (21 , happyReduce_21), + (22 , happyReduce_22), + (23 , happyReduce_23), + (24 , happyReduce_24), + (25 , happyReduce_25), + (26 , happyReduce_26), + (27 , happyReduce_27), + (28 , happyReduce_28), + (29 , happyReduce_29), + (30 , happyReduce_30), + (31 , happyReduce_31), + (32 , happyReduce_32), + (33 , happyReduce_33), + (34 , happyReduce_34), + (35 , happyReduce_35), + (36 , happyReduce_36), + (37 , happyReduce_37), + (38 , happyReduce_38), + (39 , happyReduce_39), + (40 , happyReduce_40), + (41 , happyReduce_41), + (42 , happyReduce_42), + (43 , happyReduce_43), + (44 , happyReduce_44), + (45 , happyReduce_45), + (46 , happyReduce_46), + (47 , happyReduce_47), + (48 , happyReduce_48), + (49 , happyReduce_49), + (50 , happyReduce_50), + (51 , happyReduce_51), + (52 , happyReduce_52), + (53 , happyReduce_53), + (54 , happyReduce_54), + (55 , happyReduce_55), + (56 , happyReduce_56), + (57 , happyReduce_57), + (58 , happyReduce_58), + (59 , happyReduce_59), + (60 , happyReduce_60), + (61 , happyReduce_61), + (62 , happyReduce_62), + (63 , happyReduce_63), + (64 , happyReduce_64), + (65 , happyReduce_65), + (66 , happyReduce_66), + (67 , happyReduce_67), + (68 , happyReduce_68), + (69 , happyReduce_69), + (70 , happyReduce_70), + (71 , happyReduce_71), + (72 , happyReduce_72), + (73 , happyReduce_73), + (74 , happyReduce_74), + (75 , happyReduce_75), + (76 , happyReduce_76), + (77 , happyReduce_77), + (78 , happyReduce_78), + (79 , happyReduce_79), + (80 , happyReduce_80), + (81 , happyReduce_81), + (82 , happyReduce_82), + (83 , happyReduce_83), + (84 , happyReduce_84), + (85 , happyReduce_85), + (86 , happyReduce_86), + (87 , happyReduce_87), + (88 , happyReduce_88), + (89 , happyReduce_89), + (90 , happyReduce_90), + (91 , happyReduce_91), + (92 , happyReduce_92), + (93 , happyReduce_93), + (94 , happyReduce_94), + (95 , happyReduce_95), + (96 , happyReduce_96), + (97 , happyReduce_97), + (98 , happyReduce_98), + (99 , happyReduce_99), + (100 , happyReduce_100), + (101 , happyReduce_101), + (102 , happyReduce_102), + (103 , happyReduce_103), + (104 , happyReduce_104), + (105 , happyReduce_105), + (106 , happyReduce_106), + (107 , happyReduce_107), + (108 , happyReduce_108), + (109 , happyReduce_109), + (110 , happyReduce_110), + (111 , happyReduce_111), + (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) + ] + +happy_n_terms = 71 :: Int +happy_n_nonterms = 54 :: Int + +happyReduce_5 = happySpecReduce_1 0# happyReduction_5 +happyReduction_5 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn8 + (PosInteger (mkPosToken happy_var_1) + )} + +happyReduce_6 = happySpecReduce_1 1# happyReduction_6 +happyReduction_6 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn9 + (PosDouble (mkPosToken happy_var_1) + )} + +happyReduce_7 = happySpecReduce_1 2# happyReduction_7 +happyReduction_7 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn10 + (PosReal (mkPosToken happy_var_1) + )} + +happyReduce_8 = happySpecReduce_1 3# happyReduction_8 +happyReduction_8 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn11 + (PosString (mkPosToken happy_var_1) + )} + +happyReduce_9 = happySpecReduce_1 4# happyReduction_9 +happyReduction_9 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn12 + (PosIdent (mkPosToken happy_var_1) + )} + +happyReduce_10 = happySpecReduce_1 5# happyReduction_10 +happyReduction_10 happy_x_1 + = case happyOut56 happy_x_1 of { happy_var_1 -> + happyIn13 + (Module ((mkCatSpan happy_var_1)) (reverse happy_var_1) + )} + +happyReduce_11 = happyReduce 4# 6# happyReduction_11 +happyReduction_11 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut12 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + case happyOut57 happy_x_4 of { happy_var_4 -> + happyIn14 + (EnumDecl ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_12 = happySpecReduce_1 6# happyReduction_12 +happyReduction_12 happy_x_1 + = case happyOut21 happy_x_1 of { happy_var_1 -> + happyIn14 + (ElementDecl ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_13 = happyReduce 8# 7# happyReduction_13 +happyReduction_13 (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 happyOut19 happy_x_1 of { happy_var_1 -> + case happyOut26 happy_x_2 of { happy_var_2 -> + case happyOut12 happy_x_3 of { happy_var_3 -> + case happyOut22 happy_x_4 of { happy_var_4 -> + case happyOut23 happy_x_5 of { happy_var_5 -> + case happyOut27 happy_x_6 of { happy_var_6 -> + case happyOut24 happy_x_7 of { happy_var_7 -> + case happyOut20 happy_x_8 of { happy_var_8 -> + happyIn15 + (Clafer ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkCatSpan happy_var_4) >- (mkCatSpan happy_var_5) >- (mkCatSpan happy_var_6) >- (mkCatSpan happy_var_7) >- (mkCatSpan happy_var_8)) happy_var_1 happy_var_2 happy_var_3 happy_var_4 happy_var_5 happy_var_6 happy_var_7 happy_var_8 + ) `HappyStk` happyRest}}}}}}}} + +happyReduce_14 = happySpecReduce_3 8# happyReduction_14 +happyReduction_14 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut59 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + happyIn16 + (Constraint ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2) + )}}} + +happyReduce_15 = happyReduce 4# 9# happyReduction_15 +happyReduction_15 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut59 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { happy_var_4 -> + happyIn17 + (Assertion ((mkTokenSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4)) (reverse happy_var_3) + ) `HappyStk` happyRest}}}} + +happyReduce_16 = happySpecReduce_3 10# happyReduction_16 +happyReduction_16 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut59 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + happyIn18 + (Goal ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2) + )}}} + +happyReduce_17 = happySpecReduce_0 11# happyReduction_17 +happyReduction_17 = happyIn19 + (AbstractEmpty noSpan + ) + +happyReduce_18 = happySpecReduce_1 11# happyReduction_18 +happyReduction_18 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn19 + (Abstract ((mkTokenSpan happy_var_1)) + )} + +happyReduce_19 = happySpecReduce_0 12# happyReduction_19 +happyReduction_19 = happyIn20 + (ElementsEmpty noSpan + ) + +happyReduce_20 = happySpecReduce_3 12# happyReduction_20 +happyReduction_20 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut58 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + happyIn20 + (ElementsList ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3)) (reverse happy_var_2) + )}}} + +happyReduce_21 = happySpecReduce_1 13# happyReduction_21 +happyReduction_21 happy_x_1 + = case happyOut15 happy_x_1 of { happy_var_1 -> + happyIn21 + (Subclafer ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_22 = happyReduce 4# 13# happyReduction_22 +happyReduction_22 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut30 happy_x_2 of { happy_var_2 -> + case happyOut27 happy_x_3 of { happy_var_3 -> + case happyOut20 happy_x_4 of { happy_var_4 -> + happyIn21 + (ClaferUse ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_3 happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_23 = happySpecReduce_1 13# happyReduction_23 +happyReduction_23 happy_x_1 + = case happyOut16 happy_x_1 of { happy_var_1 -> + happyIn21 + (Subconstraint ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_24 = happySpecReduce_1 13# happyReduction_24 +happyReduction_24 happy_x_1 + = case happyOut18 happy_x_1 of { happy_var_1 -> + happyIn21 + (Subgoal ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_25 = happySpecReduce_1 13# happyReduction_25 +happyReduction_25 happy_x_1 + = case happyOut17 happy_x_1 of { happy_var_1 -> + happyIn21 + (SubAssertion ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_26 = happySpecReduce_0 14# happyReduction_26 +happyReduction_26 = happyIn22 + (SuperEmpty noSpan + ) + +happyReduce_27 = happySpecReduce_2 14# happyReduction_27 +happyReduction_27 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut49 happy_x_2 of { happy_var_2 -> + happyIn22 + (SuperSome ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_28 = happySpecReduce_0 15# happyReduction_28 +happyReduction_28 = happyIn23 + (ReferenceEmpty noSpan + ) + +happyReduce_29 = happySpecReduce_2 15# happyReduction_29 +happyReduction_29 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut46 happy_x_2 of { happy_var_2 -> + happyIn23 + (ReferenceSet ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_30 = happySpecReduce_2 15# happyReduction_30 +happyReduction_30 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut46 happy_x_2 of { happy_var_2 -> + happyIn23 + (ReferenceBag ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_31 = happySpecReduce_0 16# happyReduction_31 +happyReduction_31 = happyIn24 + (InitEmpty noSpan + ) + +happyReduce_32 = happySpecReduce_2 16# happyReduction_32 +happyReduction_32 happy_x_2 + happy_x_1 + = case happyOut25 happy_x_1 of { happy_var_1 -> + case happyOut31 happy_x_2 of { happy_var_2 -> + happyIn24 + (InitSome ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_1 happy_var_2 + )}} + +happyReduce_33 = happySpecReduce_1 17# happyReduction_33 +happyReduction_33 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn25 + (InitConstant ((mkTokenSpan happy_var_1)) + )} + +happyReduce_34 = happySpecReduce_1 17# happyReduction_34 +happyReduction_34 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn25 + (InitDefault ((mkTokenSpan happy_var_1)) + )} + +happyReduce_35 = happySpecReduce_0 18# happyReduction_35 +happyReduction_35 = happyIn26 + (GCardEmpty noSpan + ) + +happyReduce_36 = happySpecReduce_1 18# happyReduction_36 +happyReduction_36 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn26 + (GCardXor ((mkTokenSpan happy_var_1)) + )} + +happyReduce_37 = happySpecReduce_1 18# happyReduction_37 +happyReduction_37 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn26 + (GCardOr ((mkTokenSpan happy_var_1)) + )} + +happyReduce_38 = happySpecReduce_1 18# happyReduction_38 +happyReduction_38 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn26 + (GCardMux ((mkTokenSpan happy_var_1)) + )} + +happyReduce_39 = happySpecReduce_1 18# happyReduction_39 +happyReduction_39 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn26 + (GCardOpt ((mkTokenSpan happy_var_1)) + )} + +happyReduce_40 = happySpecReduce_1 18# happyReduction_40 +happyReduction_40 happy_x_1 + = case happyOut28 happy_x_1 of { happy_var_1 -> + happyIn26 + (GCardInterval ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_41 = happySpecReduce_0 19# happyReduction_41 +happyReduction_41 = happyIn27 + (CardEmpty noSpan + ) + +happyReduce_42 = happySpecReduce_1 19# happyReduction_42 +happyReduction_42 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn27 + (CardLone ((mkTokenSpan happy_var_1)) + )} + +happyReduce_43 = happySpecReduce_1 19# happyReduction_43 +happyReduction_43 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn27 + (CardSome ((mkTokenSpan happy_var_1)) + )} + +happyReduce_44 = happySpecReduce_1 19# happyReduction_44 +happyReduction_44 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn27 + (CardAny ((mkTokenSpan happy_var_1)) + )} + +happyReduce_45 = happySpecReduce_1 19# happyReduction_45 +happyReduction_45 happy_x_1 + = case happyOut8 happy_x_1 of { happy_var_1 -> + happyIn27 + (CardNum ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_46 = happySpecReduce_1 19# happyReduction_46 +happyReduction_46 happy_x_1 + = case happyOut28 happy_x_1 of { happy_var_1 -> + happyIn27 + (CardInterval ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_47 = happySpecReduce_3 20# happyReduction_47 +happyReduction_47 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut8 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut29 happy_x_3 of { happy_var_3 -> + happyIn28 + (NCard ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_48 = happySpecReduce_1 21# happyReduction_48 +happyReduction_48 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn29 + (ExIntegerAst ((mkTokenSpan happy_var_1)) + )} + +happyReduce_49 = happySpecReduce_1 21# happyReduction_49 +happyReduction_49 happy_x_1 + = case happyOut8 happy_x_1 of { happy_var_1 -> + happyIn29 + (ExIntegerNum ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_50 = happySpecReduce_1 22# happyReduction_50 +happyReduction_50 happy_x_1 + = case happyOut61 happy_x_1 of { happy_var_1 -> + happyIn30 + (Path ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_51 = happyReduce 5# 23# happyReduction_51 +happyReduction_51 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut51 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { happy_var_4 -> + case happyOut31 happy_x_5 of { happy_var_5 -> + happyIn31 + (EDeclAllDisj ((mkTokenSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4) >- (mkCatSpan happy_var_5)) happy_var_3 happy_var_5 + ) `HappyStk` happyRest}}}}} + +happyReduce_52 = happyReduce 4# 23# happyReduction_52 +happyReduction_52 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut51 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + case happyOut31 happy_x_4 of { happy_var_4 -> + happyIn31 + (EDeclAll ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_2 happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_53 = happyReduce 5# 23# 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 happyOut52 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut51 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { happy_var_4 -> + case happyOut31 happy_x_5 of { happy_var_5 -> + happyIn31 + (EDeclQuantDisj ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3) >- (mkTokenSpan happy_var_4) >- (mkCatSpan happy_var_5)) happy_var_1 happy_var_3 happy_var_5 + ) `HappyStk` happyRest}}}}} + +happyReduce_54 = happyReduce 4# 23# happyReduction_54 +happyReduction_54 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut52 happy_x_1 of { happy_var_1 -> + case happyOut51 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + case happyOut31 happy_x_4 of { happy_var_4 -> + happyIn31 + (EDeclQuant ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_1 happy_var_2 happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_55 = happySpecReduce_1 23# happyReduction_55 +happyReduction_55 happy_x_1 + = case happyOut32 happy_x_1 of { happy_var_1 -> + happyIn31 + (happy_var_1 + )} + +happyReduce_56 = happySpecReduce_2 24# happyReduction_56 +happyReduction_56 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut33 happy_x_2 of { happy_var_2 -> + happyIn32 + (EGMax ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_57 = happySpecReduce_2 24# happyReduction_57 +happyReduction_57 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut33 happy_x_2 of { happy_var_2 -> + happyIn32 + (EGMin ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_58 = happySpecReduce_3 24# happyReduction_58 +happyReduction_58 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut32 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut33 happy_x_3 of { happy_var_3 -> + happyIn32 + (EIff ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_59 = happySpecReduce_1 24# happyReduction_59 +happyReduction_59 happy_x_1 + = case happyOut33 happy_x_1 of { happy_var_1 -> + happyIn32 + (happy_var_1 + )} + +happyReduce_60 = happySpecReduce_3 25# happyReduction_60 +happyReduction_60 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut33 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut34 happy_x_3 of { happy_var_3 -> + happyIn33 + (EImplies ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_61 = happySpecReduce_1 25# happyReduction_61 +happyReduction_61 happy_x_1 + = case happyOut34 happy_x_1 of { happy_var_1 -> + happyIn33 + (happy_var_1 + )} + +happyReduce_62 = happySpecReduce_3 26# happyReduction_62 +happyReduction_62 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut34 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut35 happy_x_3 of { happy_var_3 -> + happyIn34 + (EOr ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_63 = happySpecReduce_1 26# happyReduction_63 +happyReduction_63 happy_x_1 + = case happyOut35 happy_x_1 of { happy_var_1 -> + happyIn34 + (happy_var_1 + )} + +happyReduce_64 = happySpecReduce_3 27# happyReduction_64 +happyReduction_64 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut35 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut36 happy_x_3 of { happy_var_3 -> + happyIn35 + (EXor ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_65 = happySpecReduce_1 27# happyReduction_65 +happyReduction_65 happy_x_1 + = case happyOut36 happy_x_1 of { happy_var_1 -> + happyIn35 + (happy_var_1 + )} + +happyReduce_66 = happySpecReduce_3 28# happyReduction_66 +happyReduction_66 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut36 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut37 happy_x_3 of { happy_var_3 -> + happyIn36 + (EAnd ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_67 = happySpecReduce_1 28# happyReduction_67 +happyReduction_67 happy_x_1 + = case happyOut37 happy_x_1 of { happy_var_1 -> + happyIn36 + (happy_var_1 + )} + +happyReduce_68 = happySpecReduce_2 29# happyReduction_68 +happyReduction_68 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut38 happy_x_2 of { happy_var_2 -> + happyIn37 + (ENeg ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_69 = happySpecReduce_1 29# happyReduction_69 +happyReduction_69 happy_x_1 + = case happyOut38 happy_x_1 of { happy_var_1 -> + happyIn37 + (happy_var_1 + )} + +happyReduce_70 = happySpecReduce_3 30# happyReduction_70 +happyReduction_70 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut38 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut39 happy_x_3 of { happy_var_3 -> + happyIn38 + (ELt ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_71 = happySpecReduce_3 30# happyReduction_71 +happyReduction_71 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut38 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut39 happy_x_3 of { happy_var_3 -> + happyIn38 + (EGt ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_72 = happySpecReduce_3 30# happyReduction_72 +happyReduction_72 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut38 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut39 happy_x_3 of { happy_var_3 -> + happyIn38 + (EEq ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_73 = happySpecReduce_3 30# happyReduction_73 +happyReduction_73 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut38 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut39 happy_x_3 of { happy_var_3 -> + happyIn38 + (ELte ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_74 = happySpecReduce_3 30# happyReduction_74 +happyReduction_74 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut38 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut39 happy_x_3 of { happy_var_3 -> + happyIn38 + (EGte ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_75 = happySpecReduce_3 30# happyReduction_75 +happyReduction_75 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut38 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut39 happy_x_3 of { happy_var_3 -> + happyIn38 + (ENeq ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_76 = happySpecReduce_3 30# happyReduction_76 +happyReduction_76 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut38 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut39 happy_x_3 of { happy_var_3 -> + happyIn38 + (EIn ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_77 = happyReduce 4# 30# happyReduction_77 +happyReduction_77 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut38 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + case happyOut39 happy_x_4 of { happy_var_4 -> + happyIn38 + (ENin ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4)) happy_var_1 happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_78 = happySpecReduce_1 30# happyReduction_78 +happyReduction_78 happy_x_1 + = case happyOut39 happy_x_1 of { happy_var_1 -> + happyIn38 + (happy_var_1 + )} + +happyReduce_79 = happySpecReduce_2 31# happyReduction_79 +happyReduction_79 happy_x_2 + happy_x_1 + = case happyOut52 happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_2 of { happy_var_2 -> + happyIn39 + (EQuantExp ((mkCatSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_1 happy_var_2 + )}} + +happyReduce_80 = happySpecReduce_1 31# happyReduction_80 +happyReduction_80 happy_x_1 + = case happyOut40 happy_x_1 of { happy_var_1 -> + happyIn39 + (happy_var_1 + )} + +happyReduce_81 = happySpecReduce_3 32# happyReduction_81 +happyReduction_81 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut40 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut41 happy_x_3 of { happy_var_3 -> + happyIn40 + (EAdd ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_82 = happySpecReduce_3 32# happyReduction_82 +happyReduction_82 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut40 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut41 happy_x_3 of { happy_var_3 -> + happyIn40 + (ESub ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_83 = happySpecReduce_1 32# happyReduction_83 +happyReduction_83 happy_x_1 + = case happyOut41 happy_x_1 of { happy_var_1 -> + happyIn40 + (happy_var_1 + )} + +happyReduce_84 = happySpecReduce_3 33# happyReduction_84 +happyReduction_84 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut41 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut42 happy_x_3 of { happy_var_3 -> + happyIn41 + (EMul ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_85 = happySpecReduce_3 33# happyReduction_85 +happyReduction_85 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut41 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut42 happy_x_3 of { happy_var_3 -> + happyIn41 + (EDiv ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_86 = happySpecReduce_3 33# happyReduction_86 +happyReduction_86 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut41 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut42 happy_x_3 of { happy_var_3 -> + happyIn41 + (ERem ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_87 = happySpecReduce_1 33# happyReduction_87 +happyReduction_87 happy_x_1 + = case happyOut42 happy_x_1 of { happy_var_1 -> + happyIn41 + (happy_var_1 + )} + +happyReduce_88 = happySpecReduce_2 34# happyReduction_88 +happyReduction_88 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_2 of { happy_var_2 -> + happyIn42 + (ESum ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_89 = happySpecReduce_2 34# happyReduction_89 +happyReduction_89 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_2 of { happy_var_2 -> + happyIn42 + (EProd ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_90 = happySpecReduce_2 34# happyReduction_90 +happyReduction_90 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_2 of { happy_var_2 -> + happyIn42 + (ECard ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_91 = happySpecReduce_2 34# happyReduction_91 +happyReduction_91 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_2 of { happy_var_2 -> + happyIn42 + (EMinExp ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2)) happy_var_2 + )}} + +happyReduce_92 = happySpecReduce_1 34# happyReduction_92 +happyReduction_92 happy_x_1 + = case happyOut43 happy_x_1 of { happy_var_1 -> + happyIn42 + (happy_var_1 + )} + +happyReduce_93 = happyReduce 6# 35# happyReduction_93 +happyReduction_93 (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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + case happyOut43 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { happy_var_5 -> + case happyOut44 happy_x_6 of { happy_var_6 -> + happyIn43 + (EImpliesElse ((mkTokenSpan happy_var_1) >- (mkCatSpan happy_var_2) >- (mkTokenSpan happy_var_3) >- (mkCatSpan happy_var_4) >- (mkTokenSpan happy_var_5) >- (mkCatSpan happy_var_6)) happy_var_2 happy_var_4 happy_var_6 + ) `HappyStk` happyRest}}}}}} + +happyReduce_94 = happySpecReduce_1 35# happyReduction_94 +happyReduction_94 happy_x_1 + = case happyOut44 happy_x_1 of { happy_var_1 -> + happyIn43 + (happy_var_1 + )} + +happyReduce_95 = happySpecReduce_3 36# happyReduction_95 +happyReduction_95 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut44 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut45 happy_x_3 of { happy_var_3 -> + happyIn44 + (EDomain ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_96 = happySpecReduce_1 36# happyReduction_96 +happyReduction_96 happy_x_1 + = case happyOut45 happy_x_1 of { happy_var_1 -> + happyIn44 + (happy_var_1 + )} + +happyReduce_97 = happySpecReduce_3 37# happyReduction_97 +happyReduction_97 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut45 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut46 happy_x_3 of { happy_var_3 -> + happyIn45 + (ERange ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_98 = happySpecReduce_1 37# happyReduction_98 +happyReduction_98 happy_x_1 + = case happyOut46 happy_x_1 of { happy_var_1 -> + happyIn45 + (happy_var_1 + )} + +happyReduce_99 = happySpecReduce_3 38# happyReduction_99 +happyReduction_99 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut46 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut47 happy_x_3 of { happy_var_3 -> + happyIn46 + (EUnion ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_100 = happySpecReduce_3 38# happyReduction_100 +happyReduction_100 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut46 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut47 happy_x_3 of { happy_var_3 -> + happyIn46 + (EUnionCom ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_101 = happySpecReduce_1 38# happyReduction_101 +happyReduction_101 happy_x_1 + = case happyOut47 happy_x_1 of { happy_var_1 -> + happyIn46 + (happy_var_1 + )} + +happyReduce_102 = happySpecReduce_3 39# happyReduction_102 +happyReduction_102 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut47 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut48 happy_x_3 of { happy_var_3 -> + happyIn47 + (EDifference ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_103 = happySpecReduce_1 39# happyReduction_103 +happyReduction_103 happy_x_1 + = case happyOut48 happy_x_1 of { happy_var_1 -> + happyIn47 + (happy_var_1 + )} + +happyReduce_104 = happySpecReduce_3 40# happyReduction_104 +happyReduction_104 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut48 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut49 happy_x_3 of { happy_var_3 -> + happyIn48 + (EIntersection ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_105 = happySpecReduce_1 40# happyReduction_105 +happyReduction_105 happy_x_1 + = case happyOut49 happy_x_1 of { happy_var_1 -> + happyIn48 + (happy_var_1 + )} + +happyReduce_106 = happySpecReduce_3 41# happyReduction_106 +happyReduction_106 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut49 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut50 happy_x_3 of { happy_var_3 -> + happyIn49 + (EJoin ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_107 = happySpecReduce_1 41# happyReduction_107 +happyReduction_107 happy_x_1 + = case happyOut50 happy_x_1 of { happy_var_1 -> + happyIn49 + (happy_var_1 + )} + +happyReduce_108 = happySpecReduce_1 42# happyReduction_108 +happyReduction_108 happy_x_1 + = case happyOut30 happy_x_1 of { happy_var_1 -> + happyIn50 + (ClaferId ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_109 = happySpecReduce_1 42# happyReduction_109 +happyReduction_109 happy_x_1 + = case happyOut8 happy_x_1 of { happy_var_1 -> + happyIn50 + (EInt ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_110 = happySpecReduce_1 42# happyReduction_110 +happyReduction_110 happy_x_1 + = case happyOut9 happy_x_1 of { happy_var_1 -> + happyIn50 + (EDouble ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_111 = happySpecReduce_1 42# happyReduction_111 +happyReduction_111 happy_x_1 + = case happyOut10 happy_x_1 of { happy_var_1 -> + happyIn50 + (EReal ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_112 = happySpecReduce_1 42# happyReduction_112 +happyReduction_112 happy_x_1 + = case happyOut11 happy_x_1 of { happy_var_1 -> + happyIn50 + (EStr ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_113 = happySpecReduce_3 42# happyReduction_113 +happyReduction_113 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut31 happy_x_2 of { happy_var_2 -> + happyIn50 + (happy_var_2 + )} + +happyReduce_114 = happySpecReduce_3 43# happyReduction_114 +happyReduction_114 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut60 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOut44 happy_x_3 of { happy_var_3 -> + happyIn51 + (Decl ((mkCatSpan happy_var_1) >- (mkTokenSpan happy_var_2) >- (mkCatSpan happy_var_3)) happy_var_1 happy_var_3 + )}}} + +happyReduce_115 = happySpecReduce_1 44# happyReduction_115 +happyReduction_115 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn52 + (QuantNo ((mkTokenSpan happy_var_1)) + )} + +happyReduce_116 = happySpecReduce_1 44# happyReduction_116 +happyReduction_116 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn52 + (QuantNot ((mkTokenSpan happy_var_1)) + )} + +happyReduce_117 = happySpecReduce_1 44# happyReduction_117 +happyReduction_117 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn52 + (QuantLone ((mkTokenSpan happy_var_1)) + )} + +happyReduce_118 = happySpecReduce_1 44# happyReduction_118 +happyReduction_118 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn52 + (QuantOne ((mkTokenSpan happy_var_1)) + )} + +happyReduce_119 = happySpecReduce_1 44# happyReduction_119 +happyReduction_119 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn52 + (QuantSome ((mkTokenSpan happy_var_1)) + )} + +happyReduce_120 = happySpecReduce_1 45# happyReduction_120 +happyReduction_120 happy_x_1 + = case happyOut12 happy_x_1 of { happy_var_1 -> + happyIn53 + (EnumIdIdent ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_121 = happySpecReduce_1 46# happyReduction_121 +happyReduction_121 happy_x_1 + = case happyOut12 happy_x_1 of { happy_var_1 -> + happyIn54 + (ModIdIdent ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_122 = happySpecReduce_1 47# happyReduction_122 +happyReduction_122 happy_x_1 + = case happyOut12 happy_x_1 of { happy_var_1 -> + happyIn55 + (LocIdIdent ((mkCatSpan happy_var_1)) happy_var_1 + )} + +happyReduce_123 = happySpecReduce_0 48# happyReduction_123 +happyReduction_123 = happyIn56 + ([] + ) + +happyReduce_124 = happySpecReduce_2 48# happyReduction_124 +happyReduction_124 happy_x_2 + happy_x_1 + = case happyOut56 happy_x_1 of { happy_var_1 -> + case happyOut14 happy_x_2 of { happy_var_2 -> + happyIn56 + (flip (:) happy_var_1 happy_var_2 + )}} + +happyReduce_125 = happySpecReduce_1 49# happyReduction_125 +happyReduction_125 happy_x_1 + = case happyOut53 happy_x_1 of { happy_var_1 -> + happyIn57 + ((:[]) happy_var_1 + )} + +happyReduce_126 = happySpecReduce_3 49# happyReduction_126 +happyReduction_126 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut53 happy_x_1 of { happy_var_1 -> + case happyOut57 happy_x_3 of { happy_var_3 -> + happyIn57 + ((:) happy_var_1 happy_var_3 + )}} + +happyReduce_127 = happySpecReduce_0 50# happyReduction_127 +happyReduction_127 = happyIn58 + ([] + ) + +happyReduce_128 = happySpecReduce_2 50# happyReduction_128 +happyReduction_128 happy_x_2 + happy_x_1 + = case happyOut58 happy_x_1 of { happy_var_1 -> + case happyOut21 happy_x_2 of { happy_var_2 -> + happyIn58 + (flip (:) happy_var_1 happy_var_2 + )}} + +happyReduce_129 = happySpecReduce_0 51# happyReduction_129 +happyReduction_129 = happyIn59 + ([] + ) + +happyReduce_130 = happySpecReduce_2 51# happyReduction_130 +happyReduction_130 happy_x_2 + happy_x_1 + = case happyOut59 happy_x_1 of { happy_var_1 -> + case happyOut31 happy_x_2 of { happy_var_2 -> + happyIn59 + (flip (:) happy_var_1 happy_var_2 + )}} + +happyReduce_131 = happySpecReduce_1 52# happyReduction_131 +happyReduction_131 happy_x_1 + = case happyOut55 happy_x_1 of { happy_var_1 -> + happyIn60 + ((:[]) happy_var_1 + )} + +happyReduce_132 = happySpecReduce_3 52# happyReduction_132 +happyReduction_132 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut55 happy_x_1 of { happy_var_1 -> + case happyOut60 happy_x_3 of { happy_var_3 -> + happyIn60 + ((:) happy_var_1 happy_var_3 + )}} + +happyReduce_133 = happySpecReduce_1 53# happyReduction_133 +happyReduction_133 happy_x_1 + = case happyOut54 happy_x_1 of { happy_var_1 -> + happyIn61 + ((:[]) happy_var_1 + )} + +happyReduce_134 = happySpecReduce_3 53# happyReduction_134 +happyReduction_134 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut54 happy_x_1 of { happy_var_1 -> + case happyOut61 happy_x_3 of { happy_var_3 -> + happyIn61 + ((:) happy_var_1 happy_var_3 + )}} + +happyNewToken action sts stk [] = + happyDoAction 70# 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 _ (TS _ 41) -> cont 41#; + PT _ (TS _ 42) -> cont 42#; + PT _ (TS _ 43) -> cont 43#; + PT _ (TS _ 44) -> cont 44#; + PT _ (TS _ 45) -> cont 45#; + PT _ (TS _ 46) -> cont 46#; + PT _ (TS _ 47) -> cont 47#; + PT _ (TS _ 48) -> cont 48#; + PT _ (TS _ 49) -> cont 49#; + PT _ (TS _ 50) -> cont 50#; + PT _ (TS _ 51) -> cont 51#; + PT _ (TS _ 52) -> cont 52#; + PT _ (TS _ 53) -> cont 53#; + PT _ (TS _ 54) -> cont 54#; + PT _ (TS _ 55) -> cont 55#; + PT _ (TS _ 56) -> cont 56#; + PT _ (TS _ 57) -> cont 57#; + PT _ (TS _ 58) -> cont 58#; + PT _ (TS _ 59) -> cont 59#; + PT _ (TS _ 60) -> cont 60#; + PT _ (TS _ 61) -> cont 61#; + PT _ (TS _ 62) -> cont 62#; + PT _ (TS _ 63) -> cont 63#; + PT _ (TS _ 64) -> cont 64#; + PT _ (T_PosInteger _) -> cont 65#; + PT _ (T_PosDouble _) -> cont 66#; + PT _ (T_PosReal _) -> cont 67#; + PT _ (T_PosString _) -> cont 68#; + PT _ (T_PosIdent _) -> cont 69#; + _ -> happyError' (tk:tks) + } + +happyError_ 70# 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 + +pModule tks = happySomeParser where + happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut13 x)) + +pClafer tks = happySomeParser where + happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut15 x)) + +pConstraint tks = happySomeParser where + happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (happyOut16 x)) + +pAssertion tks = happySomeParser where + happySomeParser = happyThen (happyParse 3# tks) (\x -> happyReturn (happyOut17 x)) + +pGoal tks = happySomeParser where + happySomeParser = happyThen (happyParse 4# tks) (\x -> happyReturn (happyOut18 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 (pp ts) $ "syntax error at " ++ tokenPos ts ++ + case ts of + [] -> [] + [Err _] -> " due to lexer error" + _ -> " before " ++ unwords (map (id . prToken) (take 4 ts)) + +myLexer = tokens + +gp x@(PT (Pn _ l c) _) = Span (Pos (toInteger l) (toInteger c)) (Pos (toInteger l) (toInteger c + toInteger (length $ prToken x))) +pp (PT (Pn _ l c) _ :_) = Pos (toInteger l) (toInteger c) +pp (Err (Pn _ l c) :_) = Pos (toInteger l) (toInteger c) +pp _ = error "EOF" + +mkCatSpan :: (Spannable c) => c -> Span +mkCatSpan = getSpan + +mkTokenSpan :: Token -> Span +mkTokenSpan = gp +{-# LINE 1 "templates\GenericTemplate.hs" #-} +{-# LINE 1 "templates\\GenericTemplate.hs" #-} +{-# LINE 1 "<built-in>" #-} +{-# LINE 1 "<command-line>" #-} +{-# LINE 9 "<command-line>" #-} +{-# LINE 1 "C:\\dev\\MinGHC-7.10.1\\ghc-7.10.1\\lib/include\\ghcversion.h" #-} + + + + + + + + + + + + + + + + + +{-# LINE 9 "<command-line>" #-} {-# LINE 1 "templates\\GenericTemplate.hs" #-} -- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp
src-cmd/clafer.hs view
@@ -1,5 +1,5 @@ {- - Copyright (C) 2012-2014 Kacper Bak, Jimmy Liang, Michal Antkiewicz <http://gsd.uwaterloo.ca> + Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang, Michal Antkiewicz <http://gsd.uwaterloo.ca> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in @@ -40,11 +40,9 @@ return () start :: ClaferArgs -> InputModel-> IO () -start args' model = if schema args' - then putStrLn claferIRXSD - else if ecore2clafer args' - then runEcore2Clafer (file args') $ (tooldir args') - else runCompiler Nothing args' model +start args' model = if ecore2clafer args' + then runEcore2Clafer (file args') $ (tooldir args') + else runCompiler Nothing args' model runEcore2Clafer :: FilePath -> FilePath -> IO () runEcore2Clafer ecoreFile toolPath
src/Language/Clafer.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE NamedFieldPuns #-} {- - Copyright (C) 2012-2014 Kacper Bak, Jimmy Liang, Michal Antkiewicz <http://gsd.uwaterloo.ca> + Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang, Michal Antkiewicz <http://gsd.uwaterloo.ca> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in @@ -80,7 +80,6 @@ , getEnv , putEnv , CompilerResult(..) - , claferIRXSD , InputModel , Token , Module @@ -128,9 +127,7 @@ import Language.Clafer.Generator.Graph import Language.Clafer.Generator.Html import Language.Clafer.Generator.Python -import Language.Clafer.Generator.Schema import Language.Clafer.Generator.Stats -import Language.Clafer.Generator.Xml import Language.Clafer.Intermediate.Desugarer import Language.Clafer.Intermediate.Intclafer import Language.Clafer.Intermediate.Resolver @@ -251,22 +248,18 @@ inScopeModes :: Bool inScopeModes = Alloy `elem` mode args' || - Alloy42 `elem` mode args' || Choco `elem` mode args' getScopesList :: (Map.Map ClaferMode CompilerResult) -> [(UID, Integer)] getScopesList resultsMap = let alloyResult = Map.lookup Alloy resultsMap - alloy42Result = Map.lookup Alloy42 resultsMap chocoResult = Map.lookup Choco resultsMap in if (isNothing alloyResult) - then if (isNothing alloy42Result) - then if (isNothing chocoResult) - then [] - else scopesList $ fromJust chocoResult - else scopesList $ fromJust alloy42Result + then if (isNothing chocoResult) + then [] + else scopesList $ fromJust chocoResult else scopesList $ fromJust alloyResult summary :: String -> CompilerResult -> CompilerResult @@ -285,14 +278,9 @@ let path = (tooldir args') ++ "/" liftIO $ putStrLn ("Validating '" ++ fo ++"'") let modes = mode args' - when (Xml `elem` modes && "xml" `isSuffixOf` fo) $ do - writeFile "ClaferIR.xsd" claferIRXSD - voidf $ system $ "java -classpath " ++ path ++ " XsdCheck ClaferIR.xsd " ++ fo - when (Alloy `elem` modes && "als41" `isSuffixOf` fo) $ do - voidf $ system $ validateAlloy path "4" ++ fo - when (Alloy42 `elem` modes && "als" `isSuffixOf` fo) $ do + when (Alloy `elem` modes && ".als" `isSuffixOf` fo) $ do voidf $ system $ validateAlloy path "4.2" ++ fo - when (Mode.Clafer `elem` modes && "des.cfr" `isSuffixOf` fo) $ do + when (Mode.Clafer `elem` modes && ".des.cfr" `isSuffixOf` fo) $ do voidf $ system $ "../dist/build/clafer/clafer -s -m=clafer " ++ fo validateAlloy :: String -> String -> String @@ -467,6 +455,7 @@ realLiterals = filter isIDouble iexps productOperators = filter isProductOperator iexps isIDouble (IDouble _) = True + isIDouble (IReal _) = True isIDouble _ = False isProductOperator (IFunExp op' _) = op' == iProdSet isProductOperator _ = False @@ -476,8 +465,8 @@ where iClafers :: [ IClafer ] iClafers = universeOn biplate iModule - hasReferenceToReal (IClafer{_reference=(Just IReference{_ref=pexp'})}) = (getSuperId pexp') == "real" - hasReferenceToReal _ = False + hasReferenceToReal (IClafer{_reference=(Just IReference{_ref=pexp'})}) = any (`elem` [ "real", "double" ]) $ getRefIds pexp' + hasReferenceToReal _ = False -- | Generates outputs for the given IR. generate :: Monad m => ClaferT m (Map.Map ClaferMode CompilerResult) @@ -499,44 +488,12 @@ (if (Alloy `elem` modes) then if (hasNoRealLiterals && hasNoReferenceToReal && hasNoProductOperator) then - let - (imod,strMap) = astrModule iModule - alloyCode = genModule cargs{mode = [Alloy]} (imod, genv) scopes - addCommentStats = if no_stats cargs then const else addStats - in - [ (Alloy, - CompilerResult { - extension = "als41", - outputCode = addCommentStats (fst alloyCode) stats, - statistics = stats, - claferEnv = env, - mappingToAlloy = fromMaybe [] (Just $ snd alloyCode), - stringMap = strMap, - scopesList = scopes - }) - ] - else [ (Alloy, - NoCompilerResult { - reason = "Alloy output unavailable because the model contains: " - ++ (if hasNoRealLiterals then "" else " | a real number literal") - ++ (if hasNoReferenceToReal then "" else " | a reference to a real") - ++ (if hasNoProductOperator then "" else " | the product operator") - ++ "." - }) - ] - else [] - ) - ++ - -- result for Alloy42 - (if (Alloy42 `elem` modes) - then if (hasNoRealLiterals && hasNoReferenceToReal && hasNoProductOperator) - then let (imod,strMap) = astrModule iModule - alloyCode = genModule cargs{mode = [Alloy42]} (imod, genv) scopes + alloyCode = genModule cargs{mode = [Alloy]} (imod, genv) scopes addCommentStats = if no_stats cargs then const else addStats in - [ (Alloy42, + [ (Alloy, CompilerResult { extension = "als", outputCode = addCommentStats (fst alloyCode) stats, @@ -558,26 +515,20 @@ ] else [] ) - -- result for XML - ++ (if (Xml `elem` modes) - then [ (Xml, - CompilerResult { - extension = "xml", - outputCode = genXmlModule iModule, - statistics = stats, - claferEnv = env, - mappingToAlloy = [], - stringMap = Map.empty, - scopesList = [] - }) ] - else [] - ) -- result for JSON ++ (if (JSON `elem` modes) then [ (JSON, CompilerResult { extension = "json", - outputCode = convertString $ encode $ toJSON iModule, + outputCode = concat + [ "{" + , (case gatherObjectivesAndAttributes iModule $ astModuleTrace env of + Nothing -> "" + Just objectives -> "\"objectives\":" ++ (convertString $ encode $ toJSON objectives) ++ ",") + , "\"iModule\":" + , convertString $ encode $ toJSON iModule + , "}" + ], statistics = stats, claferEnv = env, mappingToAlloy = [], @@ -713,6 +664,23 @@ showInterval (n, -1) = show n ++ "..*" showInterval (n, m) = show n ++ ".." ++ show m --- | The XML Schema of the IR -claferIRXSD :: String -claferIRXSD = Language.Clafer.Generator.Schema.xsd +gatherObjectivesAndAttributes :: IModule -> Map.Map Span [Ast] -> Maybe ObjectivesAndAttributes +gatherObjectivesAndAttributes iModule astModuleTrace' = let + objectives = (foldl' gatherObjectives [] $ _mDecls iModule) + in if null objectives + then Nothing + else Just $ ObjectivesAndAttributes objectives (map _uid $ filter isIntClafer iClafers) + where + gatherObjectives :: [String] -> IElement -> [String] + gatherObjectives objs (IEGoal _ cpexp') = printCPexp (Map.lookup (_inPos cpexp') astModuleTrace'):objs + gatherObjectives objs _ = objs + + printCPexp :: Maybe [Ast] -> String + printCPexp (Just [e]) = printAstNode e + printCPexp _ = "[BUG]: expression not found!" + + iClafers :: [ IClafer ] + iClafers = universeOn biplate iModule + + isIntClafer (IClafer{_reference=(Just IReference{_ref=pexp'})}) = any (`elem` ["integer", "int"]) $ getRefIds pexp' + isIntClafer _ = False
src/Language/Clafer/ClaferArgs.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE DeriveDataTypeable #-} {- - Copyright (C) 2012-2014 Kacper Bak, Jimmy Liang <http://gsd.uwaterloo.ca> + Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang <http://gsd.uwaterloo.ca> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in @@ -26,11 +26,9 @@ -} module Language.Clafer.ClaferArgs where -import System.IO ( stdin, hGetContents ) import System.Console.CmdArgs import System.Console.CmdArgs.Explicit hiding (mode) import Data.List -import Data.Maybe import Language.Clafer.SplitJoin import Paths_clafer (version) import Data.Version (showVersion) @@ -38,10 +36,10 @@ import GetURL -- | Type of output to be generated at the end of compilation -data ClaferMode = Alloy42 | Alloy | Xml | JSON | Clafer | Html | Graph | CVLGraph | Python | Choco +data ClaferMode = Alloy | JSON | Clafer | Html | Graph | CVLGraph | Python | Choco deriving (Eq, Show, Ord, Data, Typeable) instance Default ClaferMode where - def = Alloy42 + def = Alloy -- | Scope inference strategy data ScopeStrategy = None | Simple @@ -60,9 +58,7 @@ skip_resolver :: Bool, keep_unused :: Bool, no_stats :: Bool, - schema :: Bool, validate :: Bool, - noalloyruncommand :: Bool, tooldir :: FilePath, alloy_mapping :: Bool, self_contained :: Bool, @@ -72,28 +68,25 @@ ecore2clafer :: Bool, scope_strategy :: ScopeStrategy, afm :: Bool, - skip_goals :: Bool, meta_data :: Bool, file :: FilePath - } deriving (Show, Data, Typeable) + } deriving (Eq, Show, Data, Typeable) clafer :: ClaferArgs clafer = ClaferArgs { - mode = [] &= help "Generated output type. Available CLAFERMODEs are: 'alloy' (Alloy 4.1); 'alloy42' (default, Alloy 4.2); 'xml' (intermediate representation of Clafer model); 'json' (intermediate representation of Clafer model); 'clafer' (analyzed and desugared clafer model); 'html' (original model in HTML); 'graph' (graphical representation written in DOT language); 'cvlgraph' (cvl notation representation written in DOT language); 'python' (generates IR in python); 'choco' (Choco constraint programming solver). Multiple modes can be specified at the same time, e.g., '-m alloy -m html'." &= name "m", + mode = [] &= help "Generated output type. Available CLAFERMODEs are: 'alloy' (default, Alloy 4.2); 'json' (intermediate representation of Clafer model); 'clafer' (analyzed and desugared clafer model); 'html' (original model in HTML); 'graph' (graphical representation written in DOT language); 'cvlgraph' (cvl notation representation written in DOT language); 'python' (generates IR in python); 'choco' (Choco constraint programming solver). Multiple modes can be specified at the same time, e.g., '-m alloy -m html'." &= name "m", console_output = def &= help "Output code on console." &= name "o", - flatten_inheritance = def &= help "Flatten inheritance ('alloy' and 'alloy42' modes only)." &= name "i", + flatten_inheritance = def &= help "Flatten inheritance ('alloy' mode only)." &= name "i", timeout_analysis = def &= help "Timeout for analysis.", no_layout = def &= help "Don't resolve off-side rule layout." &= name "l", new_layout = def &= help "Use new fast layout resolver (experimental)." &= name "nl", check_duplicates = def &= help "Check duplicated clafer names in the entire model." &= name "c", skip_resolver = def &= help "Skip name resolution." &= name "f", - keep_unused = def &= help "Keep uninstantated abstract clafers ('alloy' and 'alloy42' modes only)." &= name "k", + keep_unused = def &= help "Keep uninstantated abstract clafers ('alloy' mode only)." &= name "k", no_stats = def &= help "Don't print statistics." &= name "s", - schema = def &= help "Show Clafer IR (intermediate representation) XML schema.", - validate = def &= help "Validate outputs of all modes. Uses 'tools/XsdCheck.class' for XML, 'tools/alloy4.jar' and 'tools/alloy4.2.jar' for Alloy models, and Clafer translator for desugared Clafer models. Use '--tooldir' to override the default location of these tools." &= name "v", - noalloyruncommand = def &= help "For usage with partial instances: Don't generate the alloy 'run show for ... ' command, and rename @.ref with unique names ('alloy' and 'alloy42' modes only)." &= name "nr", + validate = def &= help "Validate outputs of all modes. Uses 'tools/alloy4.2.jar' for Alloy models, and Clafer translator for desugared Clafer models. Use '--tooldir' to override the default location of these tools." &= name "v", tooldir = def &= typDir &= help "Specify the tools directory ('validate' only). Default: 'tools/'.", - alloy_mapping = def &= help "Generate mapping to Alloy source code ('alloy' and 'alloy42' modes only)." &= name "a", + alloy_mapping = def &= help "Generate mapping to Alloy source code ('alloy' mode only)." &= name "a", self_contained = def &= help "Generate a self-contained html document ('html' mode only).", add_graph = def &= help "Add a graph to the generated html model ('html' mode only). Requires the \"dot\" executable to be on the system path.", show_references = def &= help "Whether the links for references should be rendered. ('html' and 'graph' modes only)." &= name "sr", @@ -101,52 +94,51 @@ ecore2clafer = def &= help "Translate an ECore model into Clafer.", scope_strategy = def &= help "Use scope computation strategy: none or simple (default)." &= name "ss", afm = def &= help "Throws an error if the cardinality of any of the clafers is above 1." &= name "check-afm", - skip_goals = def &= help "Skip generation of Alloy code for goals. Useful for all tools working with standard Alloy." &= name "sg", - meta_data = def &= help "Generate a 'fully qualified name'-'least-partially-qualified name'-'unique ID' map ('.cfr-map'). In Alloy, Alloy42, and Choco modes, generate the scopes map ('.cfr-scope').", + meta_data = def &= help "Generate a 'fully qualified name'-'least-partially-qualified name'-'unique ID' map ('.cfr-map'). In Alloy and Choco modes, generate the scopes map ('.cfr-scope').", file = def &= args &= typ "FILE" } &= summary ("Clafer " ++ showVersion Paths_clafer.version) &= program "clafer" mergeArgs :: ClaferArgs -> ClaferArgs -> ClaferArgs -mergeArgs a1 a2 = ClaferArgs (mode a1) (coMergeArg) +mergeArgs a1 a2 = ClaferArgs (mode a1) coMergeArg (mergeArg flatten_inheritance) (mergeArg timeout_analysis) (mergeArg no_layout) (mergeArg new_layout) (mergeArg check_duplicates) (mergeArg skip_resolver) - (mergeArg keep_unused) (mergeArg no_stats) (mergeArg schema) - (mergeArg validate) (mergeArg noalloyruncommand) (toolMergeArg) + (mergeArg keep_unused) (mergeArg no_stats) + (mergeArg validate) toolMergeArg (mergeArg alloy_mapping) (mergeArg self_contained) (mergeArg add_graph) (mergeArg show_references) (mergeArg add_comments) (mergeArg ecore2clafer) - (mergeArg scope_strategy) (mergeArg afm) (mergeArg skip_goals) + (mergeArg scope_strategy) (mergeArg afm) (mergeArg meta_data) (mergeArg file) where coMergeArg :: Bool - coMergeArg = if (r1 /= False) then r1 else - if (r2 /= False) then r2 else (null $ file a1) + coMergeArg = if r1 then r1 else + if r2 then r2 else (null $ file a1) where r1 = console_output a1;r2 = console_output a2 toolMergeArg :: String - toolMergeArg = if (r1 /= "") then r1 else - if (r2 /= "") then r2 else "/tools" + toolMergeArg = if r1 /= "" then r1 else + if r2 /= "" then r2 else "/tools" where r1 = tooldir a1;r2 = tooldir a2 mergeArg :: (Default a, Eq a) => (ClaferArgs -> a) -> a - mergeArg f = (\r -> if (r /= def) then r else f a2) $ f a1 + mergeArg f = (\r -> if r /= def then r else f a2) $ f a1 mainArgs :: IO (ClaferArgs, String) mainArgs = do - args' <- cmdArgs clafer - model <- retrieveModelFromURL $ file args' - let args'' = argsWithOPTIONS args' model - -- Alloy42 should be the default mode but only if nothing else was specified - -- cannot use [ Alloy42 ] as the default in the definition of `clafer :: ClaferArgs` since - -- Alloy42 will always be a mode in addition to the other specified modes (it will become mandatory) - let args''' = if null $ mode args'' - then args''{mode = [ Alloy42 ]} - else args'' - return $ (args''', model) + argsFromCmd <- cmdArgs clafer + model <- retrieveModelFromURL $ file argsFromCmd + let argsWithOpts = argsWithOPTIONS argsFromCmd model + -- Alloy should be the default mode but only if nothing else was specified + -- cannot use [ Alloy ] as the default in the definition of `clafer :: ClaferArgs` since + -- Alloy will always be a mode in addition to the other specified modes (it will become mandatory) + let argsWithDef = if null $ mode argsWithOpts + then argsWithOpts{mode = [ Alloy ]} + else argsWithOpts + return (argsWithDef, model) retrieveModelFromURL :: String -> IO String -retrieveModelFromURL url = do +retrieveModelFromURL url = case url of - "" -> hGetContents stdin -- this is the pre-module system behavior + "" -> getContents -- this is the pre-module system behavior ('f':'i':'l':'e':':':'/':'/':n) -> readFile n ('h':'t':'t':'p':':':'/':'/':_) -> getURL url ('f':'t':'p':':':'/':'/':_) -> getURL url @@ -154,14 +146,36 @@ argsWithOPTIONS :: ClaferArgs -> String -> ClaferArgs argsWithOPTIONS args' model = - let - firstLine = case lines model of - [] -> "" - (s:_) -> s - options = fromMaybe "" $ stripPrefix "//# OPTIONS " firstLine - in - either (const args') (mergeArgs args' . cmdArgsValue) $ - process (cmdArgsMode clafer) $ Language.Clafer.SplitJoin.splitArgs options + if "//# OPTIONS " `isPrefixOf` model + then either (const args') (mergeArgs args' . cmdArgsValue) $ -- merge wth command line arguments, which take precedence + process (cmdArgsMode clafer) $ -- instantiate ClaferArgs record + Language.Clafer.SplitJoin.splitArgs $ -- extract individual arguments + drop 12 $ -- strip "//# OPTIONS " + takeWhile (/= '\n') model -- get first line + else args' defaultClaferArgs :: ClaferArgs -defaultClaferArgs = ClaferArgs [ def ] True False 0 False False False False False False False False False "tools/" False False False False False False Simple False False False "" +defaultClaferArgs = ClaferArgs + { mode = [ def ] + , console_output = True + , flatten_inheritance = False + , timeout_analysis = 0 + , no_layout = False + , new_layout = False + , check_duplicates = False + , skip_resolver = False + , keep_unused = False + , no_stats = False + , validate = False + , tooldir = "tools/" + , alloy_mapping = False + , self_contained = False + , add_graph = False + , show_references = False + , add_comments = False + , ecore2clafer = False + , scope_strategy = Simple + , afm = False + , meta_data = False + , file = "" + }
src/Language/Clafer/Common.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE DeriveDataTypeable, RankNTypes, KindSignatures, FlexibleContexts #-} {- - Copyright (C) 2012-2014 Kacper Bak, Jimmy Liang <http://gsd.uwaterloo.ca> + Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang <http://gsd.uwaterloo.ca> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in @@ -50,8 +50,6 @@ mkInteger :: Read a => PosInteger -> a mkInteger (PosInteger (_, n)) = read n -type Ident = PosIdent - -- | Returns only [] or [_] getSuper :: IClafer -> [String] getSuper claf = case getSuperId <$> _super claf of @@ -59,21 +57,37 @@ Just "clafer" -> error "Bug: The identifier 'clafer' should never be returned as super type" Just x -> [x] --- | Returns only [] or [_] +-- | Returns a list of any length getReference :: IClafer -> [String] -getReference c = case getSuperId <$> _ref <$> _reference c of - Nothing -> [] - Just x -> [x] +getReference c = case _ref <$> _reference c of + Nothing -> [] + Just ref' -> getRefIds ref' --- | Returns only [] or [_] or [_, _] +-- | Returns a list of any length getSuperAndReference :: IClafer -> [String] getSuperAndReference c = (getSuper c) ++ (getReference c) getSuperId :: PExp -> String getSuperId (PExp _ _ _ (IClaferId{ _sident = s})) = s getSuperId (PExp _ _ _ (IFunExp{_op=".", _exps = [_, rightExp]})) = getSuperId rightExp -getSuperId pexp' = error $ "Bug: getSuperId called not on '[PExp (IClaferId)]' but instead on '" ++ show pexp' ++ "'" +getSuperId pexp' = error $ "[Bug] Commmon.getSuperId called on unexpected argument '" ++ show pexp' ++ "'" +getRefIds :: PExp -> [String] +getRefIds (PExp _ _ _ (IClaferId{ _sident = s})) = [s] +getRefIds (PExp _ _ _ (IFunExp{_op=".", _exps = [_, rightExp]})) = getRefIds rightExp +getRefIds (PExp _ _ _ (IFunExp{_op="ifthenelse", _exps = [_, leftExp, rightExp]})) = getRefIds leftExp ++ getRefIds rightExp +getRefIds (PExp _ _ _ (IFunExp{_op="++", _exps = [leftExp, rightExp]})) = getRefIds leftExp ++ getRefIds rightExp +getRefIds (PExp _ _ _ (IFunExp{_op=",", _exps = [leftExp, rightExp]})) = getRefIds leftExp ++ getRefIds rightExp +getRefIds (PExp _ _ _ (IFunExp{_op="--", _exps = [leftExp, rightExp]})) = getRefIds leftExp ++ getRefIds rightExp +getRefIds (PExp _ _ _ (IFunExp{_op="**", _exps = [leftExp, rightExp]})) = getRefIds leftExp ++ getRefIds rightExp +getRefIds (PExp _ _ _ (IFunExp{_op="<:", _exps = [_, rightExp]})) = getRefIds rightExp +getRefIds (PExp _ _ _ (IFunExp{_op=":>", _exps = [leftExp, _]})) = getRefIds leftExp +getRefIds (PExp _ _ _ (IInt _)) = [integerType] +getRefIds (PExp _ _ _ (IDouble _)) = [doubleType] +getRefIds (PExp _ _ _ (IReal _)) = [realType] +getRefIds (PExp _ _ _ (IStr _)) = [stringType] +getRefIds pexp' = error $ "[Bug] Commmon.getRefIds called on unexpected argument '" ++ show pexp' ++ "'" + isEqClaferId :: String -> IClafer -> Bool isEqClaferId uid' claf' = _uid claf' == uid' @@ -107,8 +121,9 @@ getClaferName _ = "" isTopLevel :: IClafer -> Bool -isTopLevel IClafer{_parentUID="root"} = True -isTopLevel _ = False +isTopLevel IClafer{_parentUID="root"} = True +isTopLevel IClafer{_parentUID="clafer"} = True +isTopLevel _ = False -- ----------------------------------------------------------------------------- -- conversions @@ -130,14 +145,15 @@ createUidIClaferMap iModule = foldl' (\accumMap' claf -> SMap.insert (_uid claf) claf accumMap') (SMap.singleton rootIdent rootClafer) - (integerClafer : intClafer : stringClafer : realClafer : booleanClafer : clafer : allClafers) + (integerClafer : intClafer : stringClafer : doubleClafer : realClafer : booleanClafer : clafer : allClafers) where allClafers :: [ IClafer ] allClafers = universeOn biplate iModule rootClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) rootIdent rootIdent "" Nothing Nothing (Just (1,1)) (1, 1) (_mDecls iModule) - integerClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) integerType integerType "" Nothing Nothing (Just (1,1)) (1, 1) [] - intClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) "int" "int" "" Nothing Nothing (Just (1,1)) (1, 1) [] + integerClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) integerType integerType "" (Just $ pExpDefPidPos $ IClaferId "" doubleType True $ Just doubleType) Nothing (Just (1,1)) (1, 1) [] + intClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) "int" "int" "" (Just $ pExpDefPidPos $ IClaferId "" doubleType True $ Just doubleType) Nothing (Just (1,1)) (1, 1) [] stringClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) stringType stringType "" Nothing Nothing (Just (1,1)) (1, 1) [] + doubleClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) doubleType doubleType "" (Just $ pExpDefPidPos $ IClaferId "" realType True $ Just realType) Nothing (Just (1,1)) (1, 1) [] realClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) realType realType "" Nothing Nothing (Just (1,1)) (1, 1) [] booleanClafer = IClafer noSpan False (Just $ IGCard False (0, -1)) booleanType booleanType "" Nothing Nothing (Just (1,1)) (1, 1) [] clafer = IClafer noSpan False (Just $ IGCard False (0, -1)) baseClafer baseClafer "" Nothing Nothing (Just (1,1)) (1, 1) [] @@ -148,6 +164,9 @@ findIClafer :: UIDIClaferMap -> UID -> Maybe IClafer findIClafer uidIClaferMap uid' = SMap.lookup uid' uidIClaferMap +isTopLevelByUID :: UIDIClaferMap -> UID -> Maybe Bool +isTopLevelByUID uidIClaferMap uid' = isTopLevel <$> (findIClafer uidIClaferMap uid') + -- | Finds all super clafers according to sFun findHierarchy :: (IClafer -> [String]) -> UIDIClaferMap -> IClafer -> [IClafer] findHierarchy sFun uidIClaferMap clafer = case sFun clafer of @@ -172,9 +191,9 @@ if uidToFind == _uid currentClafer then return currentClafer else do - superClaferUID <- getSuperId <$> _super currentClafer - superClafer <- findIClafer uidIClaferMap superClaferUID - findUIDinSupers uidIClaferMap uidToFind superClafer + superClaferUID <- getSuperId <$> _super currentClafer + superClafer <- findIClafer uidIClaferMap superClaferUID + findUIDinSupers uidIClaferMap uidToFind superClafer -- | traverse the containment hierarchy upwards to find a clafer with the given uidToFind findUIDinParents :: UIDIClaferMap -> UID -> IClafer -> Maybe IClafer @@ -190,11 +209,11 @@ { _headClafer :: IClafer -- ^ the clafer for which the match is computed , _parentClafer :: IClafer -- ^ parent of the head clafer , _parentsSuperClafer :: Maybe IClafer -- ^ parent of the super of the head clafer - , _targetClafer :: Maybe IClafer -- ^ target of the head clafer - , _targetsSuperClafer :: Maybe IClafer -- ^ super of the target of the head clafer + , _targetClafer :: [IClafer] -- ^ targets of the head clafer + , _targetsSuperClafer :: [IClafer] -- ^ super of the target of the head clafer , _superClafer :: IClafer -- ^ super of the head clafer (must exist, otherwise no match) , _superClafersParent :: IClafer -- ^ parent of the super of the head clafer - , _superClafersTarget :: Maybe IClafer -- ^ target of the super of the head clafer + , _superClafersTarget :: [IClafer] -- ^ targets of the super of the head clafer } deriving Show -- | This represents a match of this shape @@ -248,7 +267,7 @@ = case (_reference hc, _reference hcs) of (Just IReference{_isSet=headIsSet}, Just IReference{_isSet=superIsSet}) -> superIsSet <= headIsSet -- set (True) implies set (True), bag (False) allows bag (False) or set (True) _ -> True -- covers 1) only one of them has a ref, and 2) none of them has a ref - properTargetSubtyping NestedInheritanceMatch{_targetClafer=(Just targetClafer), _superClafersTarget=(Just superClafersTarget)} + properTargetSubtyping NestedInheritanceMatch{_targetClafer=[targetClafer], _superClafersTarget=[superClafersTarget]} = isJust $ findUIDinSupers uidIClaferMap (_uid superClafersTarget) targetClafer properTargetSubtyping _ = True -- covers 1) only one of the target clafers exists, and 2) none of the target clafers exist @@ -277,12 +296,16 @@ let parentsSuperClafer :: Maybe IClafer parentsSuperClafer = findIClafer uidIClaferMap =<< getSuperId <$> _super parentClafer -- safe to use fromJust becuase _super is not isNothing - targetClafer :: Maybe IClafer - targetClafer = findIClafer uidIClaferMap =<< getSuperId <$> _ref <$> _reference headClafer - targetsSuperClafer :: Maybe IClafer - targetsSuperClafer = findIClafer uidIClaferMap =<< getSuperId <$> (_super =<< targetClafer) - superClafersTarget :: Maybe IClafer - superClafersTarget = findIClafer uidIClaferMap =<< getSuperId <$> _ref <$> _reference superClafer + targetClafer :: [IClafer] + targetClafer = case _ref <$> _reference headClafer of + Just pexp' -> mapMaybe (findIClafer uidIClaferMap) (getRefIds pexp') + Nothing -> [] + targetsSuperClafer :: [IClafer] + targetsSuperClafer = mapMaybe (findIClafer uidIClaferMap) $ map getSuperId $ catMaybes $ map _super targetClafer + superClafersTarget :: [IClafer] + superClafersTarget = case _ref <$> _reference superClafer of + Just pexp' -> mapMaybe (findIClafer uidIClaferMap) (getRefIds pexp') + Nothing -> [] -- traceM $ "matched parentsSuperClafer " ++ show (_uid <$> parentsSuperClafer) -- traceM $ "matched targetClafer " ++ show (_uid <$> targetClafer) -- traceM $ "matched targetsSuperClafer " ++ show (_uid <$> targetsSuperClafer) @@ -512,6 +535,9 @@ realType :: String realType = "real" +doubleType :: String +doubleType = "double" + booleanType :: String booleanType = "boolean" @@ -522,7 +548,7 @@ modSep = "\\" primitiveTypes :: [String] -primitiveTypes = [stringType, intType, integerType, realType] +primitiveTypes = [stringType, intType, integerType, doubleType, realType] isPrimitive :: String -> Bool isPrimitive = flip elem primitiveTypes
src/Language/Clafer/Front/AbsClafer.hs view
@@ -32,6 +32,8 @@ deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) newtype PosDouble = PosDouble ((Int,Int),String) deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) +newtype PosReal = PosReal ((Int,Int),String) + deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) newtype PosString = PosString ((Int,Int),String) deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) newtype PosIdent = PosIdent ((Int,Int),String) @@ -48,6 +50,12 @@ where c' = toInteger c l' = toInteger l +instance Spannable PosReal where + getSpan (PosReal ((c, l), lex')) = + Span (Pos c' l') (Pos c' $ l' + len lex') + where + c' = toInteger c + l' = toInteger l instance Spannable PosString where getSpan (PosString ((c, l), lex')) = Span (Pos c' l') (Pos c' $ l' + len lex') @@ -83,11 +91,11 @@ instance Spannable Constraint where getSpan (Constraint s _ ) = s -data SoftConstraint = SoftConstraint Span [Exp] +data Assertion = Assertion Span [Exp] deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) -instance Spannable SoftConstraint where - getSpan (SoftConstraint s _ ) = s +instance Spannable Assertion where + getSpan (Assertion s _ ) = s data Goal = Goal Span [Exp] deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) @@ -110,7 +118,7 @@ | ClaferUse Span Name Card Elements | Subconstraint Span Constraint | Subgoal Span Goal - | Subsoftconstraint Span SoftConstraint + | SubAssertion Span Assertion deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) instance Spannable Element where @@ -118,8 +126,8 @@ getSpan (ClaferUse s _ _ _ ) = s getSpan (Subconstraint s _ ) = s getSpan (Subgoal s _ ) = s - getSpan (Subsoftconstraint s _ ) = s -data Super = SuperEmpty Span | SuperSome Span SetExp + getSpan (SubAssertion s _ ) = s +data Super = SuperEmpty Span | SuperSome Span Exp deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) instance Spannable Super where @@ -127,8 +135,8 @@ getSpan (SuperSome s _ ) = s data Reference = ReferenceEmpty Span - | ReferenceSet Span SetExp - | ReferenceBag Span SetExp + | ReferenceSet Span Exp + | ReferenceBag Span Exp deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) instance Spannable Reference where @@ -196,10 +204,10 @@ instance Spannable Name where getSpan (Path s _ ) = s data Exp - = DeclAllDisj Span Decl Exp - | DeclAll Span Decl Exp - | DeclQuantDisj Span Quant Decl Exp - | DeclQuant Span Quant Decl Exp + = EDeclAllDisj Span Decl Exp + | EDeclAll Span Decl Exp + | EDeclQuantDisj Span Quant Decl Exp + | EDeclQuant Span Quant Decl Exp | EGMax Span Exp | EGMin Span Exp | EIff Span Exp Exp @@ -216,28 +224,36 @@ | ENeq Span Exp Exp | EIn Span Exp Exp | ENin Span Exp Exp - | QuantExp Span Quant Exp + | EQuantExp Span Quant Exp | EAdd Span Exp Exp | ESub Span Exp Exp | EMul Span Exp Exp | EDiv Span Exp Exp | ERem Span Exp Exp - | ESumSetExp Span Exp - | EProdSetExp Span Exp - | ECSetExp Span Exp + | ESum Span Exp + | EProd Span Exp + | ECard Span Exp | EMinExp Span Exp | EImpliesElse Span Exp Exp Exp + | EDomain Span Exp Exp + | ERange Span Exp Exp + | EUnion Span Exp Exp + | EUnionCom Span Exp Exp + | EDifference Span Exp Exp + | EIntersection Span Exp Exp + | EJoin Span Exp Exp + | ClaferId Span Name | EInt Span PosInteger | EDouble Span PosDouble + | EReal Span PosReal | EStr Span PosString - | ESetExp Span SetExp deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) instance Spannable Exp where - getSpan (DeclAllDisj s _ _ ) = s - getSpan (DeclAll s _ _ ) = s - getSpan (DeclQuantDisj s _ _ _ ) = s - getSpan (DeclQuant s _ _ _ ) = s + getSpan (EDeclAllDisj s _ _ ) = s + getSpan (EDeclAll s _ _ ) = s + getSpan (EDeclQuantDisj s _ _ _ ) = s + getSpan (EDeclQuant s _ _ _ ) = s getSpan (EGMax s _ ) = s getSpan (EGMin s _ ) = s getSpan (EIff s _ _ ) = s @@ -254,42 +270,30 @@ getSpan (ENeq s _ _ ) = s getSpan (EIn s _ _ ) = s getSpan (ENin s _ _ ) = s - getSpan (QuantExp s _ _ ) = s + getSpan (EQuantExp s _ _ ) = s getSpan (EAdd s _ _ ) = s getSpan (ESub s _ _ ) = s getSpan (EMul s _ _ ) = s getSpan (EDiv s _ _ ) = s getSpan (ERem s _ _ ) = s - getSpan (ESumSetExp s _ ) = s - getSpan (EProdSetExp s _ ) = s - getSpan (ECSetExp s _ ) = s + getSpan (ESum s _ ) = s + getSpan (EProd s _ ) = s + getSpan (ECard s _ ) = s getSpan (EMinExp s _ ) = s getSpan (EImpliesElse s _ _ _ ) = s + getSpan (EDomain s _ _ ) = s + getSpan (ERange s _ _ ) = s + getSpan (EUnion s _ _ ) = s + getSpan (EUnionCom s _ _ ) = s + getSpan (EDifference s _ _ ) = s + getSpan (EIntersection s _ _ ) = s + getSpan (EJoin s _ _ ) = s + getSpan (ClaferId s _ ) = s getSpan (EInt s _ ) = s getSpan (EDouble s _ ) = s + getSpan (EReal s _ ) = s getSpan (EStr s _ ) = s - getSpan (ESetExp s _ ) = s -data SetExp - = Union Span SetExp SetExp - | UnionCom Span SetExp SetExp - | Difference Span SetExp SetExp - | Intersection Span SetExp SetExp - | Domain Span SetExp SetExp - | Range Span SetExp SetExp - | Join Span SetExp SetExp - | ClaferId Span Name - deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) - -instance Spannable SetExp where - getSpan (Union s _ _ ) = s - getSpan (UnionCom s _ _ ) = s - getSpan (Difference s _ _ ) = s - getSpan (Intersection s _ _ ) = s - getSpan (Domain s _ _ ) = s - getSpan (Range s _ _ ) = s - getSpan (Join s _ _ ) = s - getSpan (ClaferId s _ ) = s -data Decl = Decl Span [LocId] SetExp +data Decl = Decl Span [LocId] Exp deriving (Eq, Ord, Show, Read, Data, Typeable, Generic) instance Spannable Decl where
src/Language/Clafer/Front/LayoutResolver.hs view
@@ -182,6 +182,7 @@ addNewLines' :: (Monad m) => Int -> [Token] -> ClaferT m [ExToken] addNewLines' _ [] = return [] addNewLines' 0 (t:[]) = return [ExToken t] +addNewLines' 1 (t:[]) = return [ExToken t] addNewLines' _ ((PT (Pn z x y) t):[]) = throwErr $ ParseErr (ErrPos z fPos fPos) $ "']' bracket missing for (" ++ show t ++ ")" where fPos = (Pos (fromIntegral x) (fromIntegral y)) @@ -196,7 +197,7 @@ addNewLines' (n - 1) (t1:ts) >>= (return . (ExToken t0:)) | isNewLine t0 t1 = addNewLines' n (t1:ts) >>= (return . (ExToken t0:) . (NewLine (column t1, n):)) | otherwise = addNewLines' n (t1:ts) >>= (return . (ExToken t0:)) -addNewLines' _ _ = throwErr (ClaferErr "Function addNewLines' from LayoutResolver was given invalid arguments" :: CErr Span) -- This should never happen! +addNewLines' _ tokens' = throwErr (ClaferErr ("[bug] LayoutResolver.addNewLines': invalid argument:" ++ show tokens') :: CErr Span) -- This should never happen! adjust :: (Monad m) => [Token] -> ClaferT m [Token]
src/Language/Clafer/Front/LexClafer.x view
@@ -20,7 +20,7 @@ $u = [\0-\255] -- universal: any character @rsyms = -- symbols and non-identifier-like reserved words - \= | \[ | \] | \< \< | \> \> | \{ | \} | \` | \: | \- \> | \- \> \> | \: \= | \? | \+ | \* | \. \. | \| | \< \= \> | \= \> | \| \| | \& \& | \! | \< | \> | \< \= | \> \= | \! \= | \- | \/ | \% | \# | \+ \+ | \, | \- \- | \* \* | \< \: | \: \> | \. | \; | \\ | \( | \) + \= | \[ | \] | \< \< | \> \> | \{ | \} | \` | \: | \- \> | \- \> \> | \: \= | \? | \+ | \* | \. \. | \| | \< \= \> | \= \> | \| \| | \& \& | \! | \< | \> | \< \= | \> \= | \! \= | \- | \/ | \% | \# | \< \: | \: \> | \+ \+ | \, | \- \- | \* \* | \. | \; | \\ | \( | \) :- "//" [.]* ; -- Toss single line comments @@ -29,7 +29,8 @@ $white+ ; @rsyms { tok (\p s -> PT p (eitherResIdent (TV . share) s)) } $d + { tok (\p s -> PT p (eitherResIdent (T_PosInteger . share) s)) } -$d + \. $d + (e \- ? $d +)? { tok (\p s -> PT p (eitherResIdent (T_PosDouble . share) s)) } +$d + \. $d + e \- ? $d + { tok (\p s -> PT p (eitherResIdent (T_PosDouble . share) s)) } +$d + \. $d + { tok (\p s -> PT p (eitherResIdent (T_PosReal . share) s)) } \" ($u # [\" \\]| \\ [\" \\ n t]) * \" { tok (\p s -> PT p (eitherResIdent (T_PosString . share) s)) } $l ($l | $d | \_ | \')* { tok (\p s -> PT p (eitherResIdent (T_PosIdent . share) s)) } @@ -56,6 +57,7 @@ | TC !String -- character literals | T_PosInteger !String | T_PosDouble !String + | T_PosReal !String | T_PosString !String | T_PosIdent !String @@ -94,6 +96,7 @@ PT _ (TC s) -> s PT _ (T_PosInteger s) -> s PT _ (T_PosDouble s) -> s + PT _ (T_PosReal s) -> s PT _ (T_PosString s) -> s PT _ (T_PosIdent s) -> s
src/Language/Clafer/Front/ParClafer.y view
@@ -11,7 +11,7 @@ %name pModule Module %name pClafer Clafer %name pConstraint Constraint -%name pSoftConstraint SoftConstraint +%name pAssertion Assertion %name pGoal Goal -- no lexer declaration %monad { Err } { thenM } { returnM } @@ -84,6 +84,7 @@ L_PosInteger { PT _ (T_PosInteger _) } L_PosDouble { PT _ (T_PosDouble _) } +L_PosReal { PT _ (T_PosReal _) } L_PosString { PT _ (T_PosString _) } L_PosIdent { PT _ (T_PosIdent _) } @@ -92,6 +93,7 @@ PosInteger :: { PosInteger} : L_PosInteger { PosInteger (mkPosToken $1)} PosDouble :: { PosDouble} : L_PosDouble { PosDouble (mkPosToken $1)} +PosReal :: { PosReal} : L_PosReal { PosReal (mkPosToken $1)} PosString :: { PosString} : L_PosString { PosString (mkPosToken $1)} PosIdent :: { PosIdent} : L_PosIdent { PosIdent (mkPosToken $1)} @@ -104,8 +106,8 @@ Clafer : Abstract GCard PosIdent Super Reference Card Init Elements { Clafer ((mkCatSpan $1) >- (mkCatSpan $2) >- (mkCatSpan $3) >- (mkCatSpan $4) >- (mkCatSpan $5) >- (mkCatSpan $6) >- (mkCatSpan $7) >- (mkCatSpan $8)) $1 $2 $3 $4 $5 $6 $7 $8 } Constraint :: { Constraint } Constraint : '[' ListExp ']' { Constraint ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3)) (reverse $2) } -SoftConstraint :: { SoftConstraint } -SoftConstraint : 'assert' '[' ListExp ']' { SoftConstraint ((mkTokenSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4)) (reverse $3) } +Assertion :: { Assertion } +Assertion : 'assert' '[' ListExp ']' { Assertion ((mkTokenSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4)) (reverse $3) } Goal :: { Goal } Goal : '<<' ListExp '>>' { Goal ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3)) (reverse $2) } Abstract :: { Abstract } @@ -119,14 +121,14 @@ | '`' Name Card Elements { ClaferUse ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkCatSpan $3) >- (mkCatSpan $4)) $2 $3 $4 } | Constraint { Subconstraint ((mkCatSpan $1)) $1 } | Goal { Subgoal ((mkCatSpan $1)) $1 } - | SoftConstraint { Subsoftconstraint ((mkCatSpan $1)) $1 } + | Assertion { SubAssertion ((mkCatSpan $1)) $1 } Super :: { Super } Super : {- empty -} { SuperEmpty noSpan } - | ':' SetExp { SuperSome ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } + | ':' Exp18 { SuperSome ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } Reference :: { Reference } Reference : {- empty -} { ReferenceEmpty noSpan } - | '->' SetExp { ReferenceSet ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } - | '->>' SetExp { ReferenceBag ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } + | '->' Exp15 { ReferenceSet ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } + | '->>' Exp15 { ReferenceBag ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } Init :: { Init } Init : {- empty -} { InitEmpty noSpan } | InitHow Exp { InitSome ((mkCatSpan $1) >- (mkCatSpan $2)) $1 $2 } @@ -155,10 +157,10 @@ Name :: { Name } Name : ListModId { Path ((mkCatSpan $1)) $1 } Exp :: { Exp } -Exp : 'all' 'disj' Decl '|' Exp { DeclAllDisj ((mkTokenSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4) >- (mkCatSpan $5)) $3 $5 } - | 'all' Decl '|' Exp { DeclAll ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $2 $4 } - | Quant 'disj' Decl '|' Exp { DeclQuantDisj ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4) >- (mkCatSpan $5)) $1 $3 $5 } - | Quant Decl '|' Exp { DeclQuant ((mkCatSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $1 $2 $4 } +Exp : 'all' 'disj' Decl '|' Exp { EDeclAllDisj ((mkTokenSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4) >- (mkCatSpan $5)) $3 $5 } + | 'all' Decl '|' Exp { EDeclAll ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $2 $4 } + | Quant 'disj' Decl '|' Exp { EDeclQuantDisj ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3) >- (mkTokenSpan $4) >- (mkCatSpan $5)) $1 $3 $5 } + | Quant Decl '|' Exp { EDeclQuant ((mkCatSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $1 $2 $4 } | Exp1 { $1 } Exp1 :: { Exp } Exp1 : 'max' Exp2 { EGMax ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } @@ -191,7 +193,7 @@ | Exp7 'not' 'in' Exp8 { ENin ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4)) $1 $4 } | Exp8 { $1 } Exp8 :: { Exp } -Exp8 : Quant Exp12 { QuantExp ((mkCatSpan $1) >- (mkCatSpan $2)) $1 $2 } +Exp8 : Quant Exp12 { EQuantExp ((mkCatSpan $1) >- (mkCatSpan $2)) $1 $2 } | Exp9 { $1 } Exp9 :: { Exp } Exp9 : Exp9 '+' Exp10 { EAdd ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } @@ -203,44 +205,42 @@ | Exp10 '%' Exp11 { ERem ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } | Exp11 { $1 } Exp11 :: { Exp } -Exp11 : 'sum' Exp12 { ESumSetExp ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } - | 'product' Exp12 { EProdSetExp ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } - | '#' Exp12 { ECSetExp ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } +Exp11 : 'sum' Exp12 { ESum ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } + | 'product' Exp12 { EProd ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } + | '#' Exp12 { ECard ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } | '-' Exp12 { EMinExp ((mkTokenSpan $1) >- (mkCatSpan $2)) $2 } | Exp12 { $1 } Exp12 :: { Exp } Exp12 : 'if' Exp12 'then' Exp12 'else' Exp13 { EImpliesElse ((mkTokenSpan $1) >- (mkCatSpan $2) >- (mkTokenSpan $3) >- (mkCatSpan $4) >- (mkTokenSpan $5) >- (mkCatSpan $6)) $2 $4 $6 } | Exp13 { $1 } Exp13 :: { Exp } -Exp13 : PosInteger { EInt ((mkCatSpan $1)) $1 } +Exp13 : Exp13 '<:' Exp14 { EDomain ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp14 { $1 } +Exp14 :: { Exp } +Exp14 : Exp14 ':>' Exp15 { ERange ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp15 { $1 } +Exp15 :: { Exp } +Exp15 : Exp15 '++' Exp16 { EUnion ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp15 ',' Exp16 { EUnionCom ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp16 { $1 } +Exp16 :: { Exp } +Exp16 : Exp16 '--' Exp17 { EDifference ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp17 { $1 } +Exp17 :: { Exp } +Exp17 : Exp17 '**' Exp18 { EIntersection ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp18 { $1 } +Exp18 :: { Exp } +Exp18 : Exp18 '.' Exp19 { EJoin ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } + | Exp19 { $1 } +Exp19 :: { Exp } +Exp19 : Name { ClaferId ((mkCatSpan $1)) $1 } + | PosInteger { EInt ((mkCatSpan $1)) $1 } | PosDouble { EDouble ((mkCatSpan $1)) $1 } + | PosReal { EReal ((mkCatSpan $1)) $1 } | PosString { EStr ((mkCatSpan $1)) $1 } - | SetExp { ESetExp ((mkCatSpan $1)) $1 } | '(' Exp ')' { $2 } -SetExp :: { SetExp } -SetExp : SetExp '++' SetExp1 { Union ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | SetExp ',' SetExp1 { UnionCom ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | SetExp1 { $1 } -SetExp1 :: { SetExp } -SetExp1 : SetExp1 '--' SetExp2 { Difference ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | SetExp2 { $1 } -SetExp2 :: { SetExp } -SetExp2 : SetExp2 '**' SetExp3 { Intersection ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | SetExp3 { $1 } -SetExp3 :: { SetExp } -SetExp3 : SetExp3 '<:' SetExp4 { Domain ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | SetExp4 { $1 } -SetExp4 :: { SetExp } -SetExp4 : SetExp4 ':>' SetExp5 { Range ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | SetExp5 { $1 } -SetExp5 :: { SetExp } -SetExp5 : SetExp5 '.' SetExp6 { Join ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } - | SetExp6 { $1 } -SetExp6 :: { SetExp } -SetExp6 : Name { ClaferId ((mkCatSpan $1)) $1 } - | '(' SetExp ')' { $2 } Decl :: { Decl } -Decl : ListLocId ':' SetExp { Decl ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } +Decl : ListLocId ':' Exp13 { Decl ((mkCatSpan $1) >- (mkTokenSpan $2) >- (mkCatSpan $3)) $1 $3 } Quant :: { Quant } Quant : 'no' { QuantNo ((mkTokenSpan $1)) } | 'not' { QuantNot ((mkTokenSpan $1)) }
src/Language/Clafer/Front/PrintClafer.hs view
@@ -7,7 +7,6 @@ import Data.Char import Prelude hiding (exp, init) - -- the top-level printing method printTree :: Print a => a -> String printTree = render . prt 0 @@ -88,6 +87,10 @@ prt _ (PosDouble (_,i)) = doc (showString ( i)) +instance Print PosReal where + prt _ (PosReal (_,i)) = doc (showString ( i)) + + instance Print PosString where prt _ (PosString (_,i)) = doc (showString ( i)) @@ -117,9 +120,9 @@ prt i e = case e of Constraint _ exps -> prPrec i 0 (concatD [doc (showString "["), prt 0 exps, doc (showString "]")]) -instance Print SoftConstraint where +instance Print Assertion where prt i e = case e of - SoftConstraint _ exps -> prPrec i 0 (concatD [doc (showString "assert"), doc (showString "["), prt 0 exps, doc (showString "]")]) + Assertion _ exps -> prPrec i 0 (concatD [doc (showString "assert"), doc (showString "["), prt 0 exps, doc (showString "]")]) instance Print Goal where prt i e = case e of @@ -141,7 +144,7 @@ ClaferUse _ name card elements -> prPrec i 0 (concatD [doc (showString "`"), prt 0 name, prt 0 card, prt 0 elements]) Subconstraint _ constraint -> prPrec i 0 (concatD [prt 0 constraint]) Subgoal _ goal -> prPrec i 0 (concatD [prt 0 goal]) - Subsoftconstraint _ softconstraint -> prPrec i 0 (concatD [prt 0 softconstraint]) + SubAssertion _ assertion -> prPrec i 0 (concatD [prt 0 assertion]) prtList es = case es of [] -> (concatD []) x:xs -> (concatD [prt 0 x, prt 0 xs]) @@ -149,13 +152,13 @@ instance Print Super where prt i e = case e of SuperEmpty _ -> prPrec i 0 (concatD []) - SuperSome _ setexp -> prPrec i 0 (concatD [doc (showString ":"), prt 0 setexp]) + SuperSome _ exp18 -> prPrec i 0 (concatD [doc (showString ":"), prt 18 exp18]) instance Print Reference where prt i e = case e of ReferenceEmpty _ -> prPrec i 0 (concatD []) - ReferenceSet _ setexp -> prPrec i 0 (concatD [doc (showString "->"), prt 0 setexp]) - ReferenceBag _ setexp -> prPrec i 0 (concatD [doc (showString "->>"), prt 0 setexp]) + ReferenceSet _ exp15 -> prPrec i 0 (concatD [doc (showString "->"), prt 15 exp15]) + ReferenceBag _ exp15 -> prPrec i 0 (concatD [doc (showString "->>"), prt 15 exp15]) instance Print Init where prt i e = case e of @@ -200,10 +203,10 @@ instance Print Exp where prt i e = case e of - DeclAllDisj _ decl exp -> prPrec i 0 (concatD [doc (showString "all"), doc (showString "disj"), prt 0 decl, doc (showString "|"), prt 0 exp]) - DeclAll _ decl exp -> prPrec i 0 (concatD [doc (showString "all"), prt 0 decl, doc (showString "|"), prt 0 exp]) - DeclQuantDisj _ quant decl exp -> prPrec i 0 (concatD [prt 0 quant, doc (showString "disj"), prt 0 decl, doc (showString "|"), prt 0 exp]) - DeclQuant _ quant decl exp -> prPrec i 0 (concatD [prt 0 quant, prt 0 decl, doc (showString "|"), prt 0 exp]) + EDeclAllDisj _ decl exp -> prPrec i 0 (concatD [doc (showString "all"), doc (showString "disj"), prt 0 decl, doc (showString "|"), prt 0 exp]) + EDeclAll _ decl exp -> prPrec i 0 (concatD [doc (showString "all"), prt 0 decl, doc (showString "|"), prt 0 exp]) + EDeclQuantDisj _ quant decl exp -> prPrec i 0 (concatD [prt 0 quant, doc (showString "disj"), prt 0 decl, doc (showString "|"), prt 0 exp]) + EDeclQuant _ quant decl exp -> prPrec i 0 (concatD [prt 0 quant, prt 0 decl, doc (showString "|"), prt 0 exp]) EGMax _ exp2 -> prPrec i 1 (concatD [doc (showString "max"), prt 2 exp2]) EGMin _ exp2 -> prPrec i 1 (concatD [doc (showString "min"), prt 2 exp2]) EIff _ exp1 exp2 -> prPrec i 1 (concatD [prt 1 exp1, doc (showString "<=>"), prt 2 exp2]) @@ -220,39 +223,36 @@ ENeq _ exp7 exp8 -> prPrec i 7 (concatD [prt 7 exp7, doc (showString "!="), prt 8 exp8]) EIn _ exp7 exp8 -> prPrec i 7 (concatD [prt 7 exp7, doc (showString "in"), prt 8 exp8]) ENin _ exp7 exp8 -> prPrec i 7 (concatD [prt 7 exp7, doc (showString "not"), doc (showString "in"), prt 8 exp8]) - QuantExp _ quant exp12 -> prPrec i 8 (concatD [prt 0 quant, prt 12 exp12]) + EQuantExp _ quant exp12 -> prPrec i 8 (concatD [prt 0 quant, prt 12 exp12]) EAdd _ exp9 exp10 -> prPrec i 9 (concatD [prt 9 exp9, doc (showString "+"), prt 10 exp10]) ESub _ exp9 exp10 -> prPrec i 9 (concatD [prt 9 exp9, doc (showString "-"), prt 10 exp10]) EMul _ exp10 exp11 -> prPrec i 10 (concatD [prt 10 exp10, doc (showString "*"), prt 11 exp11]) EDiv _ exp10 exp11 -> prPrec i 10 (concatD [prt 10 exp10, doc (showString "/"), prt 11 exp11]) ERem _ exp10 exp11 -> prPrec i 10 (concatD [prt 10 exp10, doc (showString "%"), prt 11 exp11]) - ESumSetExp _ exp12 -> prPrec i 11 (concatD [doc (showString "sum"), prt 12 exp12]) - EProdSetExp _ exp12 -> prPrec i 11 (concatD [doc (showString "product"), prt 12 exp12]) - ECSetExp _ exp12 -> prPrec i 11 (concatD [doc (showString "#"), prt 12 exp12]) + ESum _ exp12 -> prPrec i 11 (concatD [doc (showString "sum"), prt 12 exp12]) + EProd _ exp12 -> prPrec i 11 (concatD [doc (showString "product"), prt 12 exp12]) + ECard _ exp12 -> prPrec i 11 (concatD [doc (showString "#"), prt 12 exp12]) EMinExp _ exp12 -> prPrec i 11 (concatD [doc (showString "-"), prt 12 exp12]) EImpliesElse _ exp120 exp12 exp13 -> prPrec i 12 (concatD [doc (showString "if"), prt 12 exp120, doc (showString "then"), prt 12 exp12, doc (showString "else"), prt 13 exp13]) - EInt _ posinteger -> prPrec i 13 (concatD [prt 0 posinteger]) - EDouble _ posdouble -> prPrec i 13 (concatD [prt 0 posdouble]) - EStr _ posstring -> prPrec i 13 (concatD [prt 0 posstring]) - ESetExp _ setexp -> prPrec i 13 (concatD [prt 0 setexp]) + EDomain _ exp13 exp14 -> prPrec i 13 (concatD [prt 13 exp13, doc (showString "<:"), prt 14 exp14]) + ERange _ exp14 exp15 -> prPrec i 14 (concatD [prt 14 exp14, doc (showString ":>"), prt 15 exp15]) + EUnion _ exp15 exp16 -> prPrec i 15 (concatD [prt 15 exp15, doc (showString "++"), prt 16 exp16]) + EUnionCom _ exp15 exp16 -> prPrec i 15 (concatD [prt 15 exp15, doc (showString ","), prt 16 exp16]) + EDifference _ exp16 exp17 -> prPrec i 16 (concatD [prt 16 exp16, doc (showString "--"), prt 17 exp17]) + EIntersection _ exp17 exp18 -> prPrec i 17 (concatD [prt 17 exp17, doc (showString "**"), prt 18 exp18]) + EJoin _ exp18 exp19 -> prPrec i 18 (concatD [prt 18 exp18, doc (showString "."), prt 19 exp19]) + ClaferId _ name -> prPrec i 19 (concatD [prt 0 name]) + EInt _ posinteger -> prPrec i 19 (concatD [prt 0 posinteger]) + EDouble _ posdouble -> prPrec i 19 (concatD [prt 0 posdouble]) + EReal _ posreal -> prPrec i 19 (concatD [prt 0 posreal]) + EStr _ posstring -> prPrec i 19 (concatD [prt 0 posstring]) prtList es = case es of [] -> (concatD []) x:xs -> (concatD [prt 0 x, prt 0 xs]) -instance Print SetExp where - prt i e = case e of - Union _ setexp setexp1 -> prPrec i 0 (concatD [prt 0 setexp, doc (showString "++"), prt 1 setexp1]) - UnionCom _ setexp setexp1 -> prPrec i 0 (concatD [prt 0 setexp, doc (showString ","), prt 1 setexp1]) - Difference _ setexp1 setexp2 -> prPrec i 1 (concatD [prt 1 setexp1, doc (showString "--"), prt 2 setexp2]) - Intersection _ setexp2 setexp3 -> prPrec i 2 (concatD [prt 2 setexp2, doc (showString "**"), prt 3 setexp3]) - Domain _ setexp3 setexp4 -> prPrec i 3 (concatD [prt 3 setexp3, doc (showString "<:"), prt 4 setexp4]) - Range _ setexp4 setexp5 -> prPrec i 4 (concatD [prt 4 setexp4, doc (showString ":>"), prt 5 setexp5]) - Join _ setexp5 setexp6 -> prPrec i 5 (concatD [prt 5 setexp5, doc (showString "."), prt 6 setexp6]) - ClaferId _ name -> prPrec i 6 (concatD [prt 0 name]) - instance Print Decl where prt i e = case e of - Decl _ locids setexp -> prPrec i 0 (concatD [prt 0 locids, doc (showString ":"), prt 0 setexp]) + Decl _ locids exp13 -> prPrec i 0 (concatD [prt 0 locids, doc (showString ":"), prt 13 exp13]) instance Print Quant where prt i e = case e of @@ -282,5 +282,3 @@ prtList es = case es of [x] -> (concatD [prt 0 x]) x:xs -> (concatD [prt 0 x, doc (showString ";"), prt 0 xs]) - -
src/Language/Clafer/Generator/Alloy.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE RankNTypes, FlexibleContexts #-} {- - Copyright (C) 2012-2013 Kacper Bak, Jimmy Liang, Rafael Olaechea <http://gsd.uwaterloo.ca> + Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang, Michal Antkiewicz, Rafael Olaechea <http://gsd.uwaterloo.ca> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in @@ -20,7 +20,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -} --- | Generates Alloy4.1 or 4.2 code for a Clafer model +-- | Generates Alloy4.2 code for a Clafer model module Language.Clafer.Generator.Alloy (genModule) where import Control.Applicative @@ -44,8 +44,6 @@ -- | Alloy code generation --- 07th Mayo 2012 Rafael Olaechea --- Added Logic to print a goal block in case there is at least one goal. genModule :: ClaferArgs -> (IModule, GEnv) -> [(UID, Integer)] -> (Result, [(Span, IrTrace)]) genModule claferargs' (imodule, genv) scopes = (flatten output, filter ((/= NoTrace) . snd) $ mapLineCol output) where @@ -56,50 +54,24 @@ forScopes' = "for 1" ++ genScopes scopes genEnv = GenEnv claferargs' (uidClaferMap genv) forScopes' - output = header genEnv +++ (cconcat $ map (genDeclaration genEnv) (_mDecls imodule)) +++ - if ((not $ skip_goals claferargs') && length goals_list > 0) then - CString "objectives o_global {\n" +++ (cintercalate (CString ",\n") goals_list) +++ CString "\n}" - else - CString "" - where - goals_list = filterNull (map (genDeclarationGoalsOnly genEnv) (_mDecls imodule)) + output = header genEnv +++ (cconcat $ map (genDeclaration genEnv) (_mDecls imodule)) header :: GenEnv -> Concat header genEnv = CString $ unlines [ "open util/integer" , "pred show {}" - , if (validate $ claferargs genEnv) || (noalloyruncommand $ claferargs genEnv) + , if (validate $ claferargs genEnv) then "" else "run show " ++ forScopes genEnv , ""] - -- 07th Mayo 2012 Rafael Olaechea --- Modified so that we can collect all goals into a single block as required per the way goals are handled in modified alloy. -genDeclarationGoalsOnly :: GenEnv -> IElement -> Concat -genDeclarationGoalsOnly genEnv x = case x of - IEClafer _ -> CString "" - IEConstraint _ _ -> CString "" - IEGoal _ (PExp _ _ _ innerexp) -> case innerexp of - IFunExp op' exps' -> if op' == iGMax || op' == iGMin then - mkMetric op' $ genPExp genEnv [] (head exps') - else - error "unary operator distinct from (min/max) at the topmost level of a goal element" - _ -> error "no unary operator (min/max) at the topmost level of a goal element." - --- 07th Mayo 2012 Rafael Olaechea --- Removed goal from this function as they will now all be collected into a single block. genDeclaration :: GenEnv -> IElement -> Concat genDeclaration genEnv x = case x of IEClafer clafer' -> (genClafer genEnv [] clafer') +++ (mkFact $ cconcat $ genSetUniquenessConstraint clafer') IEConstraint True pexp -> mkFact $ genPExp genEnv [] pexp IEConstraint False pexp -> mkAssert genEnv (genAssertName pexp) $ genPExp genEnv [] pexp - IEGoal _ (PExp _ _ _ innerexp) -> case innerexp of - IFunExp op' _ -> if op' == iGMax || op' == iGMin then - CString "" - else - error "unary operator distinct from (min/max) at the topmost level of a goal element" - _ -> error "no unary operator (min/max) at the topmost level of a goal element." + IEGoal _ _ -> CString "" mkFact :: Concat -> Concat mkFact x@(CString "") = x @@ -119,9 +91,6 @@ , CString "\n\n" ] -mkMetric :: String -> Concat -> Concat -mkMetric goalopname xs = cconcat [ if goalopname == iGMax then CString "maximize" else CString "minimize", CString " ", xs, CString " "] - mkSet :: Concat -> Concat mkSet xs = cconcat [CString "{ ", xs, CString " }"] @@ -163,12 +132,11 @@ claferDecl :: IClafer -> Concat -> Concat claferDecl c rest = cconcat [ genOptCard c - , CString $ genAbstract $ _isAbstract c + , CString $ if _isAbstract c then "abstract " else "" , CString "sig " , Concat NoTrace [CString $ _uid c, genExtends $ _super c, CString "\n", rest] ] where - genAbstract isAbs = if isAbs then "abstract " else "" genExtends Nothing = CString "" genExtends (Just (PExp _ _ _ (IClaferId _ i _ _))) = CString " " +++ Concat NoTrace [CString $ "extends " ++ i] -- todo: handle multiple inheritance @@ -192,7 +160,7 @@ where r = if isJust $ _reference c then - Just $ Concat NoTrace [CString $ genRel (if (noalloyruncommand $ claferargs genEnv) then (_uid c ++ "_ref") else "ref") + Just $ Concat NoTrace [CString $ genRel (genRefName $ _uid c) c {_card = Just (1, 1)} $ flatten $ refType genEnv c] else @@ -202,6 +170,9 @@ genRelName :: String -> String genRelName name = "r_" ++ name +genRefName :: String -> String +genRefName name = name ++ "_ref" + genRel :: String -> IClafer -> String -> String genRel name c rType = genAlloyRel name (genCardCrude $ _card c) rType' where @@ -211,7 +182,7 @@ genAlloyRel name card' rType = concat [name, " : ", card', " ", rType] refType :: GenEnv -> IClafer -> Concat -refType genEnv c = fromMaybe (CString "") $ fmap ((genType genEnv).getTarget) $ _ref <$> _reference c +refType genEnv c = fromMaybe (CString "") (((genType genEnv).getTarget) <$> (_ref <$> _reference c)) getTarget :: PExp -> PExp @@ -233,6 +204,7 @@ genConstraints genEnv resPath c = (genParentConst resPath c) : (genGroupConst genEnv c) + : (genRefSubrelationConstriant (uidIClaferMap genEnv) c) {- genPathConst produces incorrect code for top-level clafers abstract System @@ -251,7 +223,7 @@ -} : constraints where - constraints = concat $ map genConst $ _elements c + constraints = concatMap genConst $ _elements c genConst x = case x of IEConstraint True pexp -> [ genPExp genEnv ((_uid c) : resPath) pexp ] IEConstraint False pexp -> [ CString "// Assertion " +++ (genAssertName pexp) +++ CString " ignored since nested assertions are not supported in Alloy.\n"] @@ -262,7 +234,7 @@ ) : (genParentSubrelationConstriant (uidIClaferMap genEnv) c') : (genSetUniquenessConstraint c') - IEGoal _ _ -> error "getConst function from Alloy generator was given a Goal, this function should only be given a Constrain or Clafer" -- This should never happen + IEGoal _ _ -> error "[bug] Alloy.getConst: should not be given a goal." -- This should never happen genSetUniquenessConstraint :: IClafer -> [Concat] @@ -275,7 +247,7 @@ (case isTopLevel c of False -> "all disj x, y : this.@" ++ (genRelName $ _uid c) True -> " all disj x, y : " ++ (_uid c))) - ++ " | (x.@ref) != (y.@ref) " + ++ " | (x.@" ++ genRefName (_uid c) ++ ") != (y.@" ++ genRefName (_uid c) ++ ") " ] else [] _ -> []) @@ -283,7 +255,7 @@ ) genParentSubrelationConstriant :: UIDIClaferMap -> IClafer -> Concat -genParentSubrelationConstriant uidIClaferMap' headClafer = +genParentSubrelationConstriant uidIClaferMap' headClafer = case match of Nothing -> CString "" Just NestedInheritanceMatch { @@ -298,6 +270,28 @@ where match = matchNestedInheritance uidIClaferMap' headClafer +-- See Common.NestedInheritanceMatch +genRefSubrelationConstriant :: UIDIClaferMap -> IClafer -> Concat +genRefSubrelationConstriant uidIClaferMap' headClafer = + if isJust $ _reference headClafer + then + case match of + Nothing -> CString "" + Just NestedInheritanceMatch + { _superClafer = superClafer + , _superClafersTarget = superClafersTarget + } -> case (isProperRefinement uidIClaferMap' match, not $ null superClafersTarget) of + ((True, True, True), True) -> CString $ concat + [ genRefName $ _uid headClafer + , " in " + , genRefName $ _uid superClafer + ] + _ -> CString "" + else CString "" + where + match = matchNestedInheritance uidIClaferMap' headClafer + + -- optimization: if only boolean features then the parent is unique genParentConst :: [String] -> IClafer -> Concat genParentConst [] _ = CString "" @@ -423,32 +417,39 @@ genPExp' genEnv resPath (PExp iType' pid' pos exp') = case exp' of IDeclPExp q d pexp -> Concat (IrPExp pid') $ [ CString $ genQuant q, CString " " - , cintercalate (CString ", ") $ map ((genDecl genEnv resPath)) d + , cintercalate (CString ", ") $ map (genDecl genEnv resPath) d , CString $ optBar d, genPExp' genEnv resPath pexp] where optBar [] = "" optBar _ = " | " - IClaferId _ "ref" _ _ -> CString "@ref" + IClaferId _ "integer" _ _ -> CString "Int" + IClaferId _ "int" _ _ -> CString "Int" + IClaferId _ "string" _ _ -> CString "Int" + IClaferId _ "ref" _ _ -> CString $ "@" ++ getTClaferUID iType' ++ "_ref" + where + getTClaferUID (Just TMap{_so = TClafer{_hi = [u]}}) = u + getTClaferUID (Just TMap{_so = TClafer{_hi = (u:_)}}) = u + getTClaferUID t = error $ "[bug] Alloy.genPExp'.getTClaferUID: unknown type: " ++ show t IClaferId _ sid istop _ -> CString $ - if head sid == '~' then sid else - if isNothing iType' then sid' else case fromJust $ iType' of - TInteger -> vsident - TReal -> vsident - TString -> vsident - _ -> sid' + if head sid == '~' + then sid + else case iType' of + Just TInteger -> vsident + Just TDouble -> vsident + Just TReal -> vsident + Just TString -> vsident + _ -> sid' where sid' = (if istop then "" else '@' : genRelName "") ++ sid - -- 29/March/2012 Rafael Olaechea: ref is now prepended with clafer name to be able to refer to it from partial instances. - -- 30/March/2012 Rafael Olaechea added referredClaferUniqeuid to fix problems when having this.x > number (e.g test/positive/i10.cfr ) - vsident = if (noalloyruncommand $ claferargs genEnv) then sid' ++ ".@" ++ referredClaferUniqeuid ++ "_ref" else sid' ++ ".@ref" - where referredClaferUniqeuid = if sid == "this" then (head resPath) else sid + vsident = sid' ++ ".@" ++ genRefName (if sid == "this" then head resPath else sid) IFunExp _ _ -> case exp'' of IFunExp _ _ -> genIFunExp pid' genEnv resPath exp'' _ -> genPExp' genEnv resPath $ PExp iType' pid' pos exp'' where exp'' = transformExp exp' IInt n -> CString $ show n - IDouble _ -> error "no real numbers allowed" + IDouble _ -> error "no double numbers allowed" + IReal _ -> error "no real numbers allowed" IStr _ -> error "no strings allowed" @@ -472,22 +473,22 @@ if (op' == iSumSet) then genIFunExp pid' genEnv resPath (IFunExp iSumSet' [(removeright (head exps')), (getRight $ head exps')]) else if (op' == iSumSet') - then Concat (IrPExp pid') $ intl exps'' (map CString $ genOp (Alloy42 `elem` (mode $ claferargs genEnv)) iSumSet) - else Concat (IrPExp pid') $ intl exps'' (map CString $ genOp (Alloy42 `elem` (mode $ claferargs genEnv)) op') + then Concat (IrPExp pid') $ intl exps'' (map CString $ genOp iSumSet) + else Concat (IrPExp pid') $ intl exps'' (map CString $ genOp op') where intl - | op' == iSumSet' = flip $ interleave + | op' == iSumSet' = flip interleave | op' `elem` arithBinOps && length exps' == 2 = interleave | otherwise = \xs ys -> reverse $ interleave (reverse xs) (reverse ys) exps'' = map (optBrArg genEnv resPath) exps' -genIFunExp _ _ _ _ = error "Function genIFunExp from Alloy Generator expected a IFunExp as an argument but was given something else" --This should never happen +genIFunExp _ _ _ x = error $ "[bug] Alloy.genIFunExp: expecting a IFunExp, instead got: " ++ show x--This should never happen optBrArg :: GenEnv -> [String] -> PExp -> Concat optBrArg genEnv resPath x = brFun (genPExp' genEnv resPath) x where brFun = case x of - PExp _ _ _ (IClaferId _ _ _ _) -> ($) + PExp _ _ _ IClaferId{} -> ($) PExp _ _ _ (IInt _) -> ($) _ -> brArg @@ -500,13 +501,10 @@ brArg :: (a -> Concat) -> a -> Concat brArg f arg = cconcat [CString "(", f arg, CString ")"] --- isAlloy42 -genOp :: Bool -> String -> [String] -genOp True op' +genOp :: String -> [String] +genOp op' | op' == iPlus = [".plus[", "]"] | op' == iSub = [".minus[", "]"] - | otherwise = genOp False op' -genOp _ op' | op' == iSumSet = ["sum temp : "," | temp."] | op' == iProdSet = ["prod temp : "," | temp."] | op' `elem` unOps = [op'] @@ -523,7 +521,7 @@ | op' == iRange = [" :> "] | op' == iJoin = ["."] | op' == iIfThenElse = [" => ", " else "] -genOp _ _ = error "This should never happen" +genOp op' = error $ "[bug] Alloy.genOp: Unmatched operator: " ++ op' -- adjust parent adjustPExp :: [String] -> PExp -> PExp @@ -536,7 +534,7 @@ where (adjNav, adjExps) = if op' == iJoin then (aNav, id) else (id, adjustPExp resPath) - IClaferId _ _ _ _ -> aNav x + IClaferId{} -> aNav x _ -> x where aNav = fst.(adjustNav resPath) @@ -571,9 +569,8 @@ genDisj :: Bool -> String -genDisj x = case x of - False -> "" - True -> "disj" +genDisj True = "disj" +genDisj False = "" -- mapping line/columns between Clafer and Alloy code @@ -638,9 +635,12 @@ firstLine = 1 :: LineNo removeright :: PExp -> PExp -removeright (PExp _ _ _ (IFunExp _ (x : (PExp _ _ _ (IClaferId _ _ _ _)) : _))) = x -removeright (PExp t id' pos (IFunExp o (x1:x2:xs))) = (PExp t id' pos (IFunExp o (x1:(removeright x2):xs))) -removeright (PExp _ _ _ _) = error "Function removeright from the AlloyGenerator expects a PExp with a IFunExp inside, was given something else" --This should never happen +removeright (PExp _ _ _ (IFunExp _ (x : (PExp _ _ _ IClaferId{}) : _))) = x +removeright (PExp _ _ _ (IFunExp _ (x : (PExp _ _ _ (IInt _ )) : _))) = x +removeright (PExp _ _ _ (IFunExp _ (x : (PExp _ _ _ (IStr _ )) : _))) = x +removeright (PExp _ _ _ (IFunExp _ (x : (PExp _ _ _ (IDouble _ )) : _))) = x +removeright (PExp t id' pos (IFunExp o (x1:x2:xs))) = PExp t id' pos (IFunExp o (x1:(removeright x2):xs)) +removeright x@PExp{} = error $ "[bug] AlloyGenerator.removeright: expects a PExp with a IFunExp inside but was given: " ++ show x --This should never happen getRight :: PExp -> PExp getRight (PExp _ _ _ (IFunExp _ (_:x:_))) = getRight x
src/Language/Clafer/Generator/Choco.hs view
@@ -185,7 +185,9 @@ genConstraintExp (IFunExp "sum" args') | [arg] <- args', PExp{_exp = IFunExp{_exps = [a, PExp{_exp = IClaferId{_sident = "ref"}}]}} <- rewrite arg = "sum(" ++ genConstraintPExp a ++ ")" - | otherwise = error "Choco: Unexpected sum argument." + | [arg] <- args' = + "sum(" ++ genConstraintPExp arg ++ ")" + | otherwise = error $ "[bug] Choco.genConstraintExp: Unexpected sum argument: " ++ show args' genConstraintExp (IFunExp "product" args') | [arg] <- args', PExp{_exp = IFunExp{_exps = [a, PExp{_exp = IClaferId{_sident = "ref"}}]}} <- rewrite arg = "product(" ++ genConstraintPExp a ++ ")" @@ -203,6 +205,7 @@ genConstraintExp (IInt val) = "constant(" ++ show val ++ ")" genConstraintExp (IStr val) = "constant(" ++ show val ++ ")" genConstraintExp (IDouble val) = "constant(" ++ show val ++ ")" + genConstraintExp (IReal val) = "constant(" ++ show val ++ ")" mapQuant INo = "none" mapQuant ISome = "some"
src/Language/Clafer/Generator/Concat.hs view
@@ -1,5 +1,5 @@ {- - Copyright (C) 2012-2013 Kacper Bak <http://gsd.uwaterloo.ca> + Copyright (C) 2012-2015 Kacper Bak <http://gsd.uwaterloo.ca> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in
src/Language/Clafer/Generator/Graph.hs view
@@ -137,14 +137,14 @@ graphSimpleSuper (SuperEmpty _) _ _ _ = "" graphSimpleSuper (SuperSome _ setExp) topLevel irMap _ = let - super' = parent $ graphSimpleSetExp setExp topLevel irMap + super' = parent $ graphSimpleExp setExp topLevel irMap in if super' == "error" then "" else "\"" ++ fromJust (snd3 topLevel) ++ "\" -> \"" ++ - parent (graphSimpleSetExp setExp topLevel irMap) ++ + parent (graphSimpleExp setExp topLevel irMap) ++ "\"" ++ " [" ++ if fst3 topLevel == True then "arrowhead=onormal constraint=true weight=100];\n" @@ -153,9 +153,10 @@ graphSimpleReference :: Reference -> (Bool, Maybe String, Maybe String) -> Map.Map Span [Ir] -> Bool -> String graphSimpleReference (ReferenceEmpty _) _ _ _ = "" graphSimpleReference (ReferenceSet _ setExp) topLevel irMap showRefs = - case graphSimpleSetExp setExp topLevel irMap of + case graphSimpleExp setExp topLevel irMap of ["integer"] -> "" ["int"] -> "" + ["double"] -> "" ["real"] -> "" ["string"] -> "" [target] -> @@ -173,10 +174,11 @@ "];\n" _ -> "" graphSimpleReference (ReferenceBag _ setExp) topLevel irMap showRefs = - case graphSimpleSetExp setExp topLevel irMap of + case graphSimpleExp setExp topLevel irMap of ["integer"] -> "" ["int"] -> "" ["real"] -> "" + ["double"] -> "" ["string"] -> "" [target] -> ("\"" ++ @@ -212,21 +214,22 @@ graphSimpleExp _ _ _ = "" graphSimpleQuant _ _ _ = "" graphSimpleGoal _ _ _ = "" -graphSimpleSoftConstraint _ _ _ = "" +graphSimpleAssertion _ _ _ = "" graphSimpleAbstract _ _ _ = "" graphSimpleGCard _ _ _ = "" graphSimpleNCard _ _ _ = "" graphSimpleExInteger _ _ _ = ""-} -graphSimpleSetExp :: SetExp -> (Bool, Maybe String, Maybe String) -> Map.Map Span [Ir] -> [String] -graphSimpleSetExp (ClaferId _ name) topLevel irMap = [graphSimpleName name topLevel irMap] -graphSimpleSetExp (Union _ set1 set2) topLevel irMap = graphSimpleSetExp set1 topLevel irMap ++ graphSimpleSetExp set2 topLevel irMap -graphSimpleSetExp (UnionCom _ set1 set2) topLevel irMap = graphSimpleSetExp set1 topLevel irMap ++ graphSimpleSetExp set2 topLevel irMap -graphSimpleSetExp (Difference _ set1 set2) topLevel irMap = graphSimpleSetExp set1 topLevel irMap ++ graphSimpleSetExp set2 topLevel irMap -graphSimpleSetExp (Intersection _ set1 set2) topLevel irMap = graphSimpleSetExp set1 topLevel irMap ++ graphSimpleSetExp set2 topLevel irMap -graphSimpleSetExp (Domain _ set1 set2) topLevel irMap = graphSimpleSetExp set1 topLevel irMap ++ graphSimpleSetExp set2 topLevel irMap -graphSimpleSetExp (Range _ set1 set2) topLevel irMap = graphSimpleSetExp set1 topLevel irMap ++ graphSimpleSetExp set2 topLevel irMap -graphSimpleSetExp (Join _ set1 set2) topLevel irMap = graphSimpleSetExp set1 topLevel irMap ++ graphSimpleSetExp set2 topLevel irMap +graphSimpleExp :: Exp -> (Bool, Maybe String, Maybe String) -> Map.Map Span [Ir] -> [String] +graphSimpleExp (ClaferId _ name) topLevel irMap = [graphSimpleName name topLevel irMap] +graphSimpleExp (EUnion _ set1 set2) topLevel irMap = graphSimpleExp set1 topLevel irMap ++ graphSimpleExp set2 topLevel irMap +graphSimpleExp (EUnionCom _ set1 set2) topLevel irMap = graphSimpleExp set1 topLevel irMap ++ graphSimpleExp set2 topLevel irMap +graphSimpleExp (EDifference _ set1 set2) topLevel irMap = graphSimpleExp set1 topLevel irMap ++ graphSimpleExp set2 topLevel irMap +graphSimpleExp (EIntersection _ set1 set2) topLevel irMap = graphSimpleExp set1 topLevel irMap ++ graphSimpleExp set2 topLevel irMap +graphSimpleExp (EDomain _ set1 set2) topLevel irMap = graphSimpleExp set1 topLevel irMap ++ graphSimpleExp set2 topLevel irMap +graphSimpleExp (ERange _ set1 set2) topLevel irMap = graphSimpleExp set1 topLevel irMap ++ graphSimpleExp set2 topLevel irMap +graphSimpleExp (EJoin _ set1 set2) topLevel irMap = graphSimpleExp set1 topLevel irMap ++ graphSimpleExp set2 topLevel irMap +graphSimpleExp _ _ _ = [] {-graphSimpleEnumId :: EnumId -> (Bool, Maybe String, Maybe String) -> Map.Map Span [Ir] -> String graphSimpleEnumId (EnumIdIdent posident) _ irMap = graphSimplePosIdent posident irMap @@ -248,7 +251,7 @@ graphCVLElement (ClaferUse s _ _ _) parent' irMap = if parent' == Nothing then "" else "?" ++ " -> " ++ getUseId s irMap ++ " [arrowhead = onormal style = dashed constraint = false];\n" graphCVLElement (Subconstraint _ constraint) parent' irMap = graphCVLConstraint constraint parent' irMap graphCVLElement (Subgoal _ constraint) parent' irMap = graphCVLGoal constraint parent' irMap -graphCVLElement (Subsoftconstraint _ constraint) parent' irMap = graphCVLSoftConstraint constraint parent' irMap +graphCVLElement (SubAssertion _ constraint) parent' irMap = graphCVLAssertion constraint parent' irMap graphCVLElements :: Elements -> Maybe String -> Map.Map Span [Ir] -> String graphCVLElements (ElementsEmpty _) _ _ = "" @@ -269,12 +272,12 @@ graphCVLSuper :: Super -> Maybe String -> Map.Map Span [Ir] -> String graphCVLSuper (SuperEmpty _) _ _ = "" -graphCVLSuper (SuperSome _ setExp) parent' irMap = ":" ++ concat (graphCVLSetExp setExp parent' irMap) +graphCVLSuper (SuperSome _ setExp) parent' irMap = ":" ++ concat (graphCVLExp setExp parent' irMap) graphCVLReference :: Reference -> Maybe String -> Map.Map Span [Ir] -> String graphCVLReference (ReferenceEmpty _) _ _ = "" -graphCVLReference (ReferenceSet _ setExp) parent' irMap = "->" ++ concat (graphCVLSetExp setExp parent' irMap) -graphCVLReference (ReferenceBag _ setExp) parent' irMap = "->>" ++ concat (graphCVLSetExp setExp parent' irMap) +graphCVLReference (ReferenceSet _ setExp) parent' irMap = "->" ++ concat (graphCVLExp setExp parent' irMap) +graphCVLReference (ReferenceBag _ setExp) parent' irMap = "->>" ++ concat (graphCVLExp setExp parent' irMap) graphCVLName :: Name -> Maybe String -> Map.Map Span [Ir] -> String graphCVLName (Path _ modids) parent' irMap = unwords $ map (\x -> graphCVLModId x parent' irMap) modids @@ -291,8 +294,8 @@ in uid' ++ " [label=\"" ++ body' ++ "\" shape=parallelogram];\n" ++ if parent' == Nothing then "" else uid' ++ " -> \"" ++ fromJust parent' ++ "\";\n" -graphCVLSoftConstraint :: SoftConstraint -> Maybe String -> Map.Map Span [Ir] -> String -graphCVLSoftConstraint (SoftConstraint s exps') parent' irMap = let body' = htmlChars $ genTooltip (Module s [ElementDecl s (Subsoftconstraint s (SoftConstraint s exps'))]) irMap; +graphCVLAssertion :: Assertion -> Maybe String -> Map.Map Span [Ir] -> String +graphCVLAssertion (Assertion s exps') parent' irMap = let body' = htmlChars $ genTooltip (Module s [ElementDecl s (SubAssertion s (Assertion s exps'))]) irMap; uid' = "\"" ++ getExpId s irMap ++ "\"" in uid' ++ " [label=\"" ++ body' ++ "\" shape=parallelogram];\n" ++ if parent' == Nothing then "" else uid' ++ " -> \"" ++ fromJust parent' ++ "\";\n" @@ -333,18 +336,19 @@ graphCVLExp _ _ _ = "" graphCVLQuant _ _ _ = "" graphCVLGoal _ _ _ = "" -graphCVLSoftConstraint _ _ _ = "" +graphCVLAssertion _ _ _ = "" graphCVLAbstract _ _ _ = ""-} -graphCVLSetExp :: SetExp -> Maybe String -> Map.Map Span [Ir] -> [String] -graphCVLSetExp (ClaferId _ name) parent' irMap = [graphCVLName name parent' irMap] -graphCVLSetExp (Union _ set1 set2) parent' irMap = graphCVLSetExp set1 parent' irMap ++ graphCVLSetExp set2 parent' irMap -graphCVLSetExp (UnionCom _ set1 set2) parent' irMap = graphCVLSetExp set1 parent' irMap ++ graphCVLSetExp set2 parent' irMap -graphCVLSetExp (Difference _ set1 set2) parent' irMap = graphCVLSetExp set1 parent' irMap ++ graphCVLSetExp set2 parent' irMap -graphCVLSetExp (Intersection _ set1 set2) parent' irMap = graphCVLSetExp set1 parent' irMap ++ graphCVLSetExp set2 parent' irMap -graphCVLSetExp (Domain _ set1 set2) parent' irMap = graphCVLSetExp set1 parent' irMap ++ graphCVLSetExp set2 parent' irMap -graphCVLSetExp (Range _ set1 set2) parent' irMap = graphCVLSetExp set1 parent' irMap ++ graphCVLSetExp set2 parent' irMap -graphCVLSetExp (Join _ set1 set2) parent' irMap = graphCVLSetExp set1 parent' irMap ++ graphCVLSetExp set2 parent' irMap +graphCVLExp :: Exp -> Maybe String -> Map.Map Span [Ir] -> [String] +graphCVLExp (ClaferId _ name) parent' irMap = [graphCVLName name parent' irMap] +graphCVLExp (EUnion _ set1 set2) parent' irMap = graphCVLExp set1 parent' irMap ++ graphCVLExp set2 parent' irMap +graphCVLExp (EUnionCom _ set1 set2) parent' irMap = graphCVLExp set1 parent' irMap ++ graphCVLExp set2 parent' irMap +graphCVLExp (EDifference _ set1 set2) parent' irMap = graphCVLExp set1 parent' irMap ++ graphCVLExp set2 parent' irMap +graphCVLExp (EIntersection _ set1 set2) parent' irMap = graphCVLExp set1 parent' irMap ++ graphCVLExp set2 parent' irMap +graphCVLExp (EDomain _ set1 set2) parent' irMap = graphCVLExp set1 parent' irMap ++ graphCVLExp set2 parent' irMap +graphCVLExp (ERange _ set1 set2) parent' irMap = graphCVLExp set1 parent' irMap ++ graphCVLExp set2 parent' irMap +graphCVLExp (EJoin _ set1 set2) parent' irMap = graphCVLExp set1 parent' irMap ++ graphCVLExp set2 parent' irMap +graphCVLExp _ _ _ = [] {-graphCVLEnumId (EnumIdIdent posident) _ irMap = graphCVLPosIdent posident irMap graphCVLEnumId (PosEnumIdIdent _ posident) parent irMap = graphCVLEnumId (EnumIdIdent posident) parent irMap-} @@ -388,12 +392,6 @@ then "Uid not Found" else let IRClafer iClaf = head $ fromJust $ Map.lookup s irMap in _uid iClaf - -{-getSuperId :: Span -> Map.Map Span [Ir] -> String -getSuperId s irMap = if Map.lookup s irMap == Nothing - then "Uid not Found" - else let IRPExp pexp = head $ fromJust $ Map.lookup s irMap in - sident $ exp pexp-} getUseId :: Span -> Map.Map Span [Ir] -> String getUseId s irMap = if Map.lookup s irMap == Nothing
src/Language/Clafer/Generator/Html.hs view
@@ -157,7 +157,7 @@ (comments', preComments) = printPreComment s comments; (comments'', comment) = printComment s comments' -printElement (Subsoftconstraint s constraint) indent irMap html comments = +printElement (SubAssertion s constraint) indent irMap html comments = preComments ++ printIndent indent html ++ printAssertion constraint indent irMap html comments'' ++ @@ -179,7 +179,7 @@ span' (Subconstraint s _) = s span' (ClaferUse s _ _ _) = s span' (Subgoal s _) = s - span' (Subsoftconstraint s _) = s + span' (SubAssertion s _) = s printClafer :: Clafer -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String printClafer (Clafer s abstract gCard id' super' reference' crd init' es) indent irMap html comments = @@ -245,12 +245,12 @@ printSuper :: Super -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String printSuper (SuperEmpty _) _ _ _ _ = "" -printSuper (SuperSome _ setExp) indent irMap html comments = (while html "<span class=\"keyword\">") ++ " : " ++ (while html "</span>") ++ printSetExp setExp indent irMap html comments +printSuper (SuperSome _ setExp) indent irMap html comments = (while html "<span class=\"keyword\">") ++ " : " ++ (while html "</span>") ++ printExp setExp indent irMap html comments printReference :: Reference -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String printReference (ReferenceEmpty _) _ _ _ _ = "" -printReference (ReferenceSet _ setExp) indent irMap html comments = (while html "<span class=\"keyword\">") ++ " -> " ++ (while html "</span>") ++ printSetExp setExp indent irMap html comments -printReference (ReferenceBag _ setExp) indent irMap html comments = (while html "<span class=\"keyword\">") ++ " ->> " ++ (while html "</span>") ++ printSetExp setExp indent irMap html comments +printReference (ReferenceSet _ setExp) indent irMap html comments = (while html "<span class=\"keyword\">") ++ " -> " ++ (while html "</span>") ++ printExp setExp indent irMap html comments +printReference (ReferenceBag _ setExp) indent irMap html comments = (while html "<span class=\"keyword\">") ++ " ->> " ++ (while html "</span>") ++ printExp setExp indent irMap html comments printCard :: Card -> String @@ -272,8 +272,8 @@ " " ++ while html "<span class=\"keyword\">" ++ "]" ++ while html "</span>" -printAssertion :: SoftConstraint -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String -printAssertion (SoftConstraint _ exps') indent irMap html comments = concatMap (\x -> printAssertion' x indent irMap html comments) exps' +printAssertion :: Assertion -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String +printAssertion (Assertion _ exps') indent irMap html comments = concatMap (\x -> printAssertion' x indent irMap html comments) exps' printAssertion' :: Exp -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String printAssertion' exp' indent' irMap html comments = while html "<span class=\"keyword\">" ++ "assert [" ++ while html "</span>" ++ @@ -285,7 +285,7 @@ printDecl :: Decl-> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String printDecl (Decl _ locids setExp) indent irMap html comments = (concat $ intersperse "; " $ map printLocId locids) ++ - (while html "<span class=\"keyword\">") ++ " : " ++ (while html "</span>") ++ printSetExp setExp indent irMap html comments + (while html "<span class=\"keyword\">") ++ " : " ++ (while html "</span>") ++ printExp setExp indent irMap html comments where printLocId :: LocId -> String printLocId (LocIdIdent _ (PosIdent (_, ident'))) = ident' @@ -299,15 +299,14 @@ printInitHow (InitDefault _) = " := " printExp :: Exp -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String -printExp (DeclAllDisj _ decl exp') indent irMap html comments = "all disj " ++ (printDecl decl indent irMap html comments) ++ " | " ++ (printExp exp' indent irMap html comments) -printExp (DeclAll _ decl exp') indent irMap html comments = "all " ++ (printDecl decl indent irMap html comments) ++ " | " ++ (printExp exp' indent irMap html comments) -printExp (DeclQuantDisj _ quant' decl exp') indent irMap html comments = (printQuant quant' html) ++ "disj" ++ (printDecl decl indent irMap html comments) ++ " | " ++ (printExp exp' indent irMap html comments) -printExp (DeclQuant _ quant' decl exp') indent irMap html comments = (printQuant quant' html) ++ (printDecl decl indent irMap html comments) ++ " | " ++ (printExp exp' indent irMap html comments) +printExp (EDeclAllDisj _ decl exp') indent irMap html comments = "all disj " ++ (printDecl decl indent irMap html comments) ++ " | " ++ (printExp exp' indent irMap html comments) +printExp (EDeclAll _ decl exp') indent irMap html comments = "all " ++ (printDecl decl indent irMap html comments) ++ " | " ++ (printExp exp' indent irMap html comments) +printExp (EDeclQuantDisj _ quant' decl exp') indent irMap html comments = (printQuant quant' html) ++ "disj" ++ (printDecl decl indent irMap html comments) ++ " | " ++ (printExp exp' indent irMap html comments) +printExp (EDeclQuant _ quant' decl exp') indent irMap html comments = (printQuant quant' html) ++ (printDecl decl indent irMap html comments) ++ " | " ++ (printExp exp' indent irMap html comments) printExp (EGMax _ exp') indent irMap html comments = "max " ++ printExp exp' indent irMap html comments printExp (EGMin _ exp') indent irMap html comments = "min " ++ printExp exp' indent irMap html comments printExp (ENeq _ exp'1 exp'2) indent irMap html comments = (printExp exp'1 indent irMap html comments) ++ " != " ++ (printExp exp'2 indent irMap html comments) -printExp (ESetExp _ setExp) indent irMap html comments = printSetExp setExp indent irMap html comments -printExp (QuantExp _ quant' exp') indent irMap html comments = printQuant quant' html ++ printExp exp' indent irMap html comments +printExp (EQuantExp _ quant' exp') indent irMap html comments = printQuant quant' html ++ printExp exp' indent irMap html comments printExp (EImplies _ exp'1 exp'2) indent irMap html comments = (printExp exp'1 indent irMap html comments) ++ (if html then " => " else " => ") ++ printExp exp'2 indent irMap html comments printExp (EAnd _ exp'1 exp'2) indent irMap html comments = (printExp exp'1 indent irMap html comments) ++ (if html then " && " else " && ") ++ printExp exp'2 indent irMap html comments printExp (EOr _ exp'1 exp'2) indent irMap html comments = (printExp exp'1 indent irMap html comments) ++ (if html then " || " else " || ") ++ printExp exp'2 indent irMap html comments @@ -326,25 +325,24 @@ printExp (EMul _ exp'1 exp'2) indent irMap html comments = (printExp exp'1 indent irMap html comments) ++ " * " ++ printExp exp'2 indent irMap html comments printExp (EDiv _ exp'1 exp'2) indent irMap html comments = (printExp exp'1 indent irMap html comments) ++ (if html then " / " else " / ") ++ printExp exp'2 indent irMap html comments printExp (ERem _ exp'1 exp'2) indent irMap html comments = (printExp exp'1 indent irMap html comments) ++ (if html then " % " else " % ") ++ printExp exp'2 indent irMap html comments -printExp (ESumSetExp _ exp') indent irMap html comments = "sum " ++ printExp exp' indent irMap html comments -printExp (EProdSetExp _ exp') indent irMap html comments = "product " ++ printExp exp' indent irMap html comments -printExp (ECSetExp _ exp') indent irMap html comments = "# " ++ printExp exp' indent irMap html comments +printExp (ESum _ exp') indent irMap html comments = "sum " ++ printExp exp' indent irMap html comments +printExp (EProd _ exp') indent irMap html comments = "product " ++ printExp exp' indent irMap html comments +printExp (ECard _ exp') indent irMap html comments = "# " ++ printExp exp' indent irMap html comments printExp (EMinExp _ exp') indent irMap html comments = "-" ++ printExp exp' indent irMap html comments printExp (EImpliesElse _ exp'1 exp'2 exp'3) indent irMap html comments = "if " ++ (printExp exp'1 indent irMap html comments) ++ " then " ++ (printExp exp'2 indent irMap html comments) ++ " else " ++ (printExp exp'3 indent irMap html comments) +printExp (ClaferId _ name) indent irMap html comments = printName name indent irMap html comments +printExp (EUnion _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ "++" ++ (printExp set2 indent irMap html comments) +printExp (EUnionCom _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ ", " ++ (printExp set2 indent irMap html comments) +printExp (EDifference _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ "--" ++ (printExp set2 indent irMap html comments) +printExp (EIntersection _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ "&" ++ (printExp set2 indent irMap html comments) +printExp (EDomain _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ "<:" ++ (printExp set2 indent irMap html comments) +printExp (ERange _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ ":>" ++ (printExp set2 indent irMap html comments) +printExp (EJoin _ set1 set2) indent irMap html comments = (printExp set1 indent irMap html comments) ++ "." ++ (printExp set2 indent irMap html comments) printExp (EInt _ (PosInteger (_, num))) _ _ _ _ = num printExp (EDouble _ (PosDouble (_, num))) _ _ _ _ = num +printExp (EReal _ (PosReal (_, num))) _ _ _ _ = num printExp (EStr _ (PosString (_, str))) _ _ _ _ = str -printSetExp :: SetExp -> Int -> Map.Map Span [Ir] -> Bool -> [(Span, String)] -> String -printSetExp (ClaferId _ name) indent irMap html comments = printName name indent irMap html comments -printSetExp (Union _ set1 set2) indent irMap html comments = (printSetExp set1 indent irMap html comments) ++ "++" ++ (printSetExp set2 indent irMap html comments) -printSetExp (UnionCom _ set1 set2) indent irMap html comments = (printSetExp set1 indent irMap html comments) ++ ", " ++ (printSetExp set2 indent irMap html comments) -printSetExp (Difference _ set1 set2) indent irMap html comments = (printSetExp set1 indent irMap html comments) ++ "--" ++ (printSetExp set2 indent irMap html comments) -printSetExp (Intersection _ set1 set2) indent irMap html comments = (printSetExp set1 indent irMap html comments) ++ "&" ++ (printSetExp set2 indent irMap html comments) -printSetExp (Domain _ set1 set2) indent irMap html comments = (printSetExp set1 indent irMap html comments) ++ "<:" ++ (printSetExp set2 indent irMap html comments) -printSetExp (Range _ set1 set2) indent irMap html comments = (printSetExp set1 indent irMap html comments) ++ ":>" ++ (printSetExp set2 indent irMap html comments) -printSetExp (Join _ set1 set2) indent irMap html comments = (printSetExp set1 indent irMap html comments) ++ "." ++ (printSetExp set2 indent irMap html comments) - printQuant :: Quant -> Bool -> String printQuant quant' html = case quant' of (QuantNo _) -> (while html "<span class=\"keyword\">") ++ "no" ++ (while html "</span>") ++ " " @@ -405,11 +403,6 @@ then "Uid not Found" else let IRClafer iClaf = head $ fromJust $ Map.lookup s irMap in _uid iClaf - -{-getSuperId span irMap = if Map.lookup span irMap == Nothing - then "Uid not Found" - else let IRPExp pexp = head $ fromJust $ Map.lookup span irMap in - sident $ exp pexp-} getUseId :: Span -> Map.Map Span [Ir] -> (String, String) getUseId s irMap = if Map.lookup s irMap == Nothing
src/Language/Clafer/Generator/Python.hs view
@@ -187,7 +187,9 @@ genConstraintExp (IFunExp "sum" args') | [arg] <- args', PExp{_exp = IFunExp{_exps = [a, PExp{_exp = IClaferId{_sident = "ref"}}]}} <- rewrite arg = "sum(" ++ genConstraintPExp a ++ ")" - | otherwise = error "Python: Unexpected sum argument." + | [arg] <- args' = + "sum(" ++ genConstraintPExp arg ++ ")" + | otherwise = error $ "[bug] Python.genConstraintExp: Unexpected sum argument: " ++ show args' genConstraintExp (IFunExp "product" args') | [arg] <- args', PExp{_exp = IFunExp{_exps = [a, PExp{_exp = IClaferId{_sident = "ref"}}]}} <- rewrite arg = "product(" ++ genConstraintPExp a ++ ")" @@ -205,6 +207,7 @@ genConstraintExp (IInt val) = "constant(" ++ show val ++ ")" genConstraintExp (IStr val) = "constant(" ++ show val ++ ")" genConstraintExp (IDouble val) = "constant(" ++ show val ++ ")" + genConstraintExp (IReal val) = "constant(" ++ show val ++ ")" mapQuant INo = "none" mapQuant ISome = "some"
− src/Language/Clafer/Generator/Schema.hs
@@ -1,465 +0,0 @@-{- - Copyright (C) 2012 Jimmy Liang <http://gsd.uwaterloo.ca> - - Permission is hereby granted, free of charge, to any person obtaining a copy of - this software and associated documentation files (the "Software"), to deal in - the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - of the Software, and to permit persons to whom the Software is furnished to do - so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. --} -module Language.Clafer.Generator.Schema where -xsd :: String -xsd = concat [ "" - , "<!-- ........................................................................ *\n" - , " * Clafer Project *\n" - , " * http://clafer.org *\n" - , " * *\n" - , " * File description: XML schema of Clafer intermediate representation (IR) *\n" - , " * Depends on: Haskell IR data types defined for clafer (Intclafer.hs) *\n" - , " * Author: Leonardo Passos <lpassos@gsd.uwaterloo.ca> *\n" - , " * Contributors: Jimmy Liang <jliang@gsd.uwaterloo.ca> *\n" - , " * Michal Antkiewicz <mantkiew@gsd.uwaterloo.ca> *\n" - , " * Date: October 19th, 2011 *\n" - , " * Last update: February 4th, 2015 *\n" - , " * ......................................................................... *\n" - , " */\n" - , "-->\n" - , "<xs:schema targetNamespace=\"http://clafer.org/ir\"\n" - , " elementFormDefault=\"qualified\"\n" - , " xmlns=\"http://clafer.org/ir\"\n" - , " xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"\n" - , " xmlns:cl=\"http://clafer.org/ir\">\n" - , "\n" - , " <!-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->\n" - , " <!--\n" - , "data IType\n" - , " = TBoolean\n" - , " | TString\n" - , " | TInteger\n" - , " | TReal\n" - , " | TClafer [UID]\n" - , " -->\n" - , " <xs:complexType name=\"IType\" abstract=\"true\"/>\n" - , " <xs:element name=\"Type\" type=\"cl:IType\"/>\n" - , "\n" - , " <xs:complexType name=\"IBoolean\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"cl:IType\"/>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <xs:complexType name=\"IString\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"cl:IType\"/>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <xs:complexType name=\"IInteger\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"cl:IType\"/>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <xs:complexType name=\"IReal\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"cl:IType\"/>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <xs:complexType name=\"ISet\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"cl:IType\"/>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <!-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->\n" - , " <!--\n" - , "data IModule\n" - , " = IModule\n" - , " { _mName :: String\n" - , " , _mDecls :: [IElement]\n" - , " }\n" - , " -->\n" - , "\n" - , " <xs:complexType name=\"IModule\">\n" - , " <xs:sequence>\n" - , " <xs:element name=\"Name\" type=\"xs:string\"/>\n" - , " <xs:element ref=\"Declaration\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n" - , " </xs:sequence>\n" - , " </xs:complexType>\n" - , "\n" - , " <xs:element name=\"Module\" type=\"cl:IModule\"/>\n" - , "\n" - , " <!-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->\n" - , " <!--\n" - , "data IClafer\n" - , " = IClafer\n" - , " { _cinPos :: Span\n" - , " , _isAbstract :: Bool\n" - , " , _gcard :: Maybe IGCard\n" - , " , _ident :: CName\n" - , " , _uid :: UID\n" - , " , _parentUID :: UID\n" - , " , _super :: Maybe PExp\n" - , " , _reference :: Maybe IReference\n" - , " , _card :: Maybe Interval\n" - , " , _glCard :: Interval\n" - , " , _elements :: [IElement]\n" - , " }\n" - , " -->\n" - , " <xs:complexType name=\"IClafer\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"IElement\">\n" - , " <xs:sequence>\n" - , " <xs:element name=\"Position\">\n" - , " <xs:complexType>\n" - , " <xs:sequence>\n" - , " <xs:element name=\"Start\">\n" - , " <xs:complexType>\n" - , " <xs:sequence>\n" - , " <xs:element ref=\"IntLiteral\" minOccurs=\"2\" maxOccurs=\"2\"/>\n" - , " </xs:sequence>\n" - , " </xs:complexType>\n" - , " </xs:element>\n" - , " <xs:element name=\"End\">\n" - , " <xs:complexType>\n" - , " <xs:sequence>\n" - , " <xs:element ref=\"IntLiteral\" minOccurs=\"2\" maxOccurs=\"2\"/>\n" - , " </xs:sequence>\n" - , " </xs:complexType>\n" - , " </xs:element>\n" - , " </xs:sequence>\n" - , " </xs:complexType>\n" - , " </xs:element>\n" - , " <xs:element name=\"IsAbstract\" type=\"xs:boolean\"/>\n" - , " <xs:element name=\"GroupCard\" type=\"cl:IGroupCard\" minOccurs=\"0\" maxOccurs=\"1\"/>\n" - , " <xs:element name=\"Id\" type=\"xs:string\"/>\n" - , " <xs:element name=\"UniqueId\" type=\"xs:string\"/>\n" - , " <xs:element name=\"ParentUniqueId\" type=\"xs:string\"/>\n" - , " <xs:element name=\"Super\" type=\"cl:IParentExp\" minOccurs=\"0\" maxOccurs=\"1\"/>\n" - , " <xs:element name=\"Reference\" type=\"cl:IReference\" minOccurs=\"0\" maxOccurs=\"1\"/>\n" - , " <xs:element name=\"Card\" type=\"cl:IInterval\" minOccurs=\"0\" maxOccurs=\"1\"/>\n" - , " <xs:element name=\"GlobalCard\" type=\"cl:IInterval\"/>\n" - , " <xs:element ref=\"Declaration\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n" - , " </xs:sequence>\n" - , " </xs:extension>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <!-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->\n" - , " <!--\n" - , "data IElement\n" - , " = IEClafer\n" - , " { _iClafer :: IClafer\n" - , " }\n" - , " | IEConstraint\n" - , " { _isHard :: Bool\n" - , " , _cpexp :: PExp\n" - , " }\n" - , " | IEGoal\n" - , " { _isMaximize :: Bool\n" - , " , _cpexp :: PExp\n" - , " }\n" - , " -->\n" - , "\n" - , " <xs:complexType name=\"IElement\" abstract=\"true\"/>\n" - , " <xs:element name=\"Declaration\" type=\"IElement\"/>\n" - , "\n" - , " <!-- No need to create IEClafer type. IClafer is already a subtype\n" - , " of IElement\n" - , " -->\n" - , "\n" - , " <xs:complexType name=\"IConstraint\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"cl:IElement\">\n" - , " <xs:sequence>\n" - , " <xs:element name=\"IsHard\" type=\"xs:boolean\"/>\n" - , " <xs:element name=\"ParentExp\" type=\"cl:IParentExp\"/>\n" - , " </xs:sequence>\n" - , " </xs:extension>\n" - , "\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <xs:complexType name=\"IGoal\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"cl:IElement\">\n" - , " <xs:sequence>\n" - , " <xs:element name=\"IsMaximize\" type=\"xs:boolean\"/>\n" - , " <xs:element name=\"ParentExp\" type=\"cl:IParentExp\"/>\n" - , " </xs:sequence>\n" - , " </xs:extension>\n" - , "\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <!-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->\n" - , " <!--\n" - , "data IReference\n" - , " = IReference\n" - , " { _isSet :: Bool\n" - , " , _ref :: PExp\n" - , " }\n" - , " -->\n" - , " <xs:complexType name=\"IReference\">\n" - , " <xs:sequence>\n" - , " <xs:element name=\"IsSet\" type=\"xs:boolean\"/>\n" - , " <xs:element name=\"Ref\" type=\"cl:IParentExp\"/>\n" - , " </xs:sequence>\n" - , " </xs:complexType>\n" - , "\n" - , " <!-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->\n" - , " <!--\n" - , "data IGCard\n" - , " = IGCard\n" - , " { _isKeyword :: Bool\n" - , " , _interval :: Interval\n" - , " }\n" - , " -->\n" - , "\n" - , " <xs:complexType name=\"IGroupCard\">\n" - , " <xs:sequence>\n" - , " <xs:element name=\"IsKeyword\" type=\"xs:boolean\"/>\n" - , " <xs:element name=\"Interval\" type=\"cl:IInterval\"/>\n" - , " </xs:sequence>\n" - , " </xs:complexType>\n" - , "\n" - , " <!-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->\n" - , " <!-- type Interval = (Integer, ExInteger) -->\n" - , "\n" - , " <xs:complexType name=\"IInterval\">\n" - , " <xs:sequence>\n" - , " <xs:element name=\"Min\">\n" - , " <xs:complexType>\n" - , " <xs:sequence>\n" - , " <xs:element ref=\"IntLiteral\"/>\n" - , " </xs:sequence>\n" - , " </xs:complexType>\n" - , " </xs:element>\n" - , " <xs:element name=\"Max\">\n" - , " <xs:complexType>\n" - , " <xs:sequence>\n" - , " <xs:element ref=\"IntLiteral\"/>\n" - , " </xs:sequence>\n" - , " </xs:complexType>\n" - , " </xs:element>\n" - , " </xs:sequence>\n" - , " </xs:complexType>\n" - , "\n" - , " <!-- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .-->\n" - , " <!--\n" - , "data PExp\n" - , " = PExp\n" - , " { _iType :: Maybe IType\n" - , " , _pid :: String\n" - , " , _inPos :: Span\n" - , " , _exp :: IExp\n" - , " }\n" - , " -->\n" - , "\n" - , " <xs:complexType name=\"IParentExp\">\n" - , " <xs:sequence>\n" - , " <xs:element name=\"Type\" type=\"cl:IType\" minOccurs=\"0\" maxOccurs=\"1\"/>\n" - , " <xs:element name=\"ParentId\" type=\"xs:string\" minOccurs=\"0\" maxOccurs=\"1\"/>\n" - , " <xs:element name=\"Position\">\n" - , " <xs:complexType>\n" - , " <xs:sequence>\n" - , " <xs:element name=\"Start\">\n" - , " <xs:complexType>\n" - , " <xs:sequence>\n" - , " <xs:element ref=\"IntLiteral\" minOccurs=\"2\" maxOccurs=\"2\"/>\n" - , " </xs:sequence>\n" - , " </xs:complexType>\n" - , " </xs:element>\n" - , " <xs:element name=\"End\">\n" - , " <xs:complexType>\n" - , " <xs:sequence>\n" - , " <xs:element ref=\"IntLiteral\" minOccurs=\"2\" maxOccurs=\"2\"/>\n" - , " </xs:sequence>\n" - , " </xs:complexType>\n" - , " </xs:element>\n" - , " </xs:sequence>\n" - , " </xs:complexType>\n" - , " </xs:element>\n" - , " <xs:element name=\"Exp\" type=\"cl:IExp\"/>\n" - , " </xs:sequence>\n" - , " </xs:complexType>\n" - , "\n" - , "\n" - , " <!-- ......................................................................-->\n" - , " <!--\n" - , "data IExp\n" - , " = IDeclPExp\n" - , " { _quant :: IQuant\n" - , " , _oDecls :: [IDecl]\n" - , " , _bpexp :: PExp\n" - , " }\n" - , " | IFunExp\n" - , " { _op :: String\n" - , " , _exps :: [PExp]\n" - , " }\n" - , " | IInt\n" - , " { _iint :: Integer\n" - , " }\n" - , " | IDouble\n" - , " { _idouble :: Double\n" - , " }\n" - , " | IStr\n" - , " { _istr :: String\n" - , " }\n" - , " | IClaferId\n" - , " { _modName :: String\n" - , " , _sident :: CName\n" - , " , _isTop :: Bool\n" - , " , _binding :: ClaferBinding\n" - , " }\n" - , " -->\n" - , " <xs:complexType name=\"IExp\" abstract=\"true\"/>\n" - , "\n" - , " <xs:complexType name=\"IDeclarationParentExp\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"cl:IExp\">\n" - , " <xs:sequence>\n" - , " <xs:element name=\"Quantifier\" type=\"cl:IQuantifier\"/>\n" - , " <xs:element name=\"Declaration\" type=\"cl:IDeclaration\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n" - , " <xs:element name=\"BodyParentExp\" type=\"cl:IParentExp\"/>\n" - , " </xs:sequence>\n" - , " </xs:extension>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <xs:complexType name=\"IFunctionExp\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"IExp\">\n" - , " <xs:sequence>\n" - , " <xs:element name=\"Operation\" type=\"xs:string\"/>\n" - , " <xs:element name=\"Argument\" minOccurs=\"0\" maxOccurs=\"unbounded\" type=\"IParentExp\"/>\n" - , " </xs:sequence>\n" - , " </xs:extension>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <xs:complexType name=\"IIntExp\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"IExp\">\n" - , " <xs:sequence>\n" - , " <xs:element ref=\"IntLiteral\"/>\n" - , " </xs:sequence>\n" - , " </xs:extension>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <xs:complexType name=\"IDoubleExp\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"IExp\">\n" - , " <xs:sequence>\n" - , " <xs:element ref=\"DoubleLiteral\"/>\n" - , " </xs:sequence>\n" - , " </xs:extension>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <xs:complexType name=\"IStringExp\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"IExp\">\n" - , " <xs:sequence>\n" - , " <xs:element ref=\"StringLiteral\"/>\n" - , " </xs:sequence>\n" - , " </xs:extension>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , "\n" - , " <xs:complexType name=\"IClaferId\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"IExp\">\n" - , " <xs:sequence>\n" - , " <xs:element name=\"ModuleName\" type=\"xs:string\" minOccurs=\"0\" maxOccurs=\"1\"/>\n" - , " <xs:element name=\"Id\" type=\"xs:string\" />\n" - , " <xs:element name=\"IsTop\" type=\"xs:boolean\"/>\n" - , " <xs:element name=\"Bind\" type=\"xs:string\" />\n" - , " </xs:sequence>\n" - , " </xs:extension>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <!-- ......................................................................-->\n" - , " <!--\n" - , "data IDecl\n" - , " = IDecl\n" - , " { _isDisj :: Bool\n" - , " , _decls :: [CName]\n" - , " , _body :: PExp\n" - , " }\n" - , " -->\n" - , "\n" - , " <xs:complexType name=\"IDeclaration\">\n" - , " <xs:sequence>\n" - , " <xs:element name=\"IsDisjunct\" type=\"xs:boolean\"/>\n" - , " <xs:element name=\"LocalDeclaration\" type=\"xs:string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n" - , " <xs:element name=\"Body\" type=\"cl:IParentExp\"/>\n" - , " </xs:sequence>\n" - , " </xs:complexType>\n" - , "\n" - , " <!-- ......................................................................-->\n" - , " <!--\n" - , "data IQuant\n" - , " = INo\n" - , " | ILone\n" - , " | IOne\n" - , " | ISome\n" - , " | IAll\n" - , " -->\n" - , "\n" - , " <xs:complexType name=\"IQuantifier\" abstract=\"true\"/>\n" - , "\n" - , " <xs:complexType name=\"INo\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"cl:IQuantifier\"/>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <xs:complexType name=\"ILone\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"cl:IQuantifier\"/>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <xs:complexType name=\"IOne\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"cl:IQuantifier\"/>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <xs:complexType name=\"ISome\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"cl:IQuantifier\"/>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <xs:complexType name=\"IAll\">\n" - , " <xs:complexContent>\n" - , " <xs:extension base=\"cl:IQuantifier\"/>\n" - , " </xs:complexContent>\n" - , " </xs:complexType>\n" - , "\n" - , " <!-- ......................................................................-->\n" - , "\n" - , " <xs:element name=\"IntLiteral\" type=\"xs:integer\"/>\n" - , " <xs:element name=\"DoubleLiteral\" type=\"xs:double\"/>\n" - , " <xs:element name=\"StringLiteral\" type=\"xs:string\"/>\n" - , "\n" - , "</xs:schema>\n" - , ""]
− src/Language/Clafer/Generator/Xml.hs
@@ -1,213 +0,0 @@-{- - Copyright (C) 2012 Kacper Bak, Jimmy Liang <http://gsd.uwaterloo.ca> - - Permission is hereby granted, free of charge, to any person obtaining a copy of - this software and associated documentation files (the "Software"), to deal in - the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - of the Software, and to permit persons to whom the Software is furnished to do - so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. --} --- | Generates a XML representation of IR conforming to the ClaferIR.xsd. -module Language.Clafer.Generator.Xml where - --- import Text.XML.HaXml.XmlContent.Haskell hiding (Result) - -import Data.Maybe (fromMaybe) - -import Language.Clafer.Common -import Language.Clafer.Front.AbsClafer -import Language.Clafer.Intermediate.Intclafer - -tag :: String -> String -> String -tag name exp' = concat ["<", name, ">", exp', "</", name, ">\n"] - -optTag :: Maybe a -> (a -> String) -> String -optTag ele f = maybe "" f ele - -tagType :: String -> String -> String -> String -tagType name typename exp' = opening ++ rest - where - opening = concat ["<", name, " xsi:type=\"cl:", typename, "\""] - rest - | null exp' = " />" - | otherwise = concat [">", exp', "</", name, ">"] - -genXmlInteger :: Integer -> String -genXmlInteger n = tag "IntLiteral" $ show n - -genXmlBoolean :: String -> Bool -> String -genXmlBoolean label b = tag label $ toLowerS $ show b - -genXmlString :: String -> String -genXmlString str = tag "StringLiteral" str - -genXmlIntPair :: (Integer, Integer) -> String -genXmlIntPair (x, y) = concat - [ genXmlInteger x - , genXmlInteger y] - --- | Generate an XML representation of the IR -genXmlModule :: IModule -> Result -genXmlModule imodule = concat - [ "<?xml version=\"1.0\"?>" - , "<Module xmlns=\"http://clafer.org/ir\"" - , " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" - , " xmlns:cl=\"http://clafer.org/ir\"" - , " xsi:schemaLocation=\"http://clafer.org/ir https://github.com/gsdlab/clafer/blob/master/src/ClaferIR.xsd\">" - , tag "Name" $ _mName imodule - , concatMap genXmlElement $ _mDecls imodule - , "</Module>"] - - -genXmlClafer :: IClafer -> Result -genXmlClafer x = case x of - IClafer pos abstract gcrd id' uid' puid' super' reference' crd glcard es -> - concat [ tag "Position" $ genXmlPosition pos - , genXmlAbstract abstract - , optTag gcrd genXmlGCard - , genXmlId id' - , genXmlUid uid' - , genXmlParentUid puid' - , genXmlSuper super' - , genXmlReference reference' - , optTag crd genXmlCard - , genXmlGlCard glcard - , concatMap genXmlElement es] - -genXmlAbstract :: Bool -> String -genXmlAbstract isAbs = genXmlBoolean "IsAbstract" isAbs - -genXmlGCard :: IGCard -> String -genXmlGCard (IGCard isKeyword' interval') = tag "GroupCard" $ concat - [ genXmlBoolean "IsKeyword" isKeyword' - , tag "Interval" $ genXmlInterval interval'] - -genXmlInterval :: (Integer, Integer) -> String -genXmlInterval (nMin, nMax) = concat - [ tag "Min" $ genXmlInteger nMin - , tag "Max" $ genXmlInteger nMax] - -genXmlId :: String -> String -genXmlId ident' = tag "Id" ident' - -genXmlUid :: String -> String -genXmlUid uid' = tag "UniqueId" uid' - -genXmlParentUid :: String -> String -genXmlParentUid uid' = tag "ParentUniqueId" uid' - -genXmlSuper :: Maybe PExp -> String -genXmlSuper x = case x of - Nothing -> "" - Just pexp' -> genXmlPExp "Super" pexp' - -genXmlReference :: Maybe IReference -> String -genXmlReference x = case x of - Nothing -> "" - Just (IReference isSet' pexp') -> tag "Reference" $ concat - [ genXmlBoolean "IsSet" isSet' - , genXmlPExp "Ref" pexp'] - -genXmlCard :: (Integer, Integer) -> String -genXmlCard interval' = tag "Card" $ genXmlInterval interval' - -genXmlGlCard :: (Integer, Integer) -> String -genXmlGlCard interval' = tag "GlobalCard" $ genXmlInterval interval' - -genXmlElement :: IElement -> String -genXmlElement x = case x of - IEClafer clafer -> tagType "Declaration" "IClafer" $ genXmlClafer clafer - IEConstraint isHard' pexp -> tagType "Declaration" "IConstraint" $ concat - [ genXmlBoolean "IsHard" isHard' - , genXmlPExp "ParentExp" pexp] - IEGoal isMaximize' pexp -> tagType "Declaration" "IGoal" $ concat - [ genXmlBoolean "IsMaximize" isMaximize' - , genXmlPExp "ParentExp" pexp] - - -genXmlAnyOp :: (a -> String) -> (a -> String) -> [(String, a)] -> String -genXmlAnyOp ft f xs = concatMap - (\(tname, texp) -> tagType tname (ft texp) $ f texp) xs - -genXmlPExp :: String -> PExp -> String -genXmlPExp tagName (PExp iType' pid' pos' iexp) = tag tagName $ concat - [ optTag iType' genXmlIType - , tag "ParentId" pid' - , tag "Position" $ genXmlPosition pos' - , tagType "Exp" (genXmlIExpType iexp) $ genXmlIExp iexp] - -genXmlPosition :: Span -> String -genXmlPosition (Span (Pos s1 s2) (Pos e1 e2)) = concat - [ tag "Start" $ genXmlIntPair (s1, s2) - , tag "End" $ genXmlIntPair (e1, e2)] - -genXmlIExpType :: IExp -> String -genXmlIExpType x = case x of - IDeclPExp _ _ _ -> "IDeclarationParentExp" - IFunExp _ _ -> "IFunctionExp" - IInt _ -> "IIntExp" - IDouble _ -> "IDoubleExp" - IStr _ -> "IStringExp" - IClaferId _ _ _ _ -> "IClaferId" - -genXmlIExp :: IExp -> String -genXmlIExp x = case x of - IDeclPExp quant' decls' pexp -> concat - [ tagType "Quantifier" (genXmlQuantType quant') "" - , concatMap genXmlDecl decls' - , genXmlPExp "BodyParentExp" pexp] - IFunExp op' exps' -> concat - [ tag "Operation" $ concatMap escape op' - , concatMap (genXmlPExp "Argument") exps'] - where - escape '\"' = """ - escape '\'' = "'" - escape '<' = "<" - escape '>' = ">" - escape '&' = "&" - escape y = [y] - IInt n -> genXmlInteger n - IDouble n -> tag "DoubleLiteral" $ show n - IStr str -> genXmlString str - IClaferId modName' sident' isTop' bind' -> concat - [ tag "ModuleName" modName' - , tag "Id" sident' - , genXmlBoolean "IsTop" isTop' - , tag "Bind" $ fromMaybe "" bind' ] - -genXmlDecl :: IDecl -> String -genXmlDecl (IDecl disj locids pexp) = tag "Declaration" $ concat - [ genXmlBoolean "IsDisjunct" disj - , concatMap (tag "LocalDeclaration") locids - , genXmlPExp "Body" pexp] - -genXmlQuantType :: IQuant -> String -genXmlQuantType x = case x of - INo -> "INo" - ILone -> "ILone" - IOne -> "IOne" - ISome -> "ISome" - IAll -> "IAll" - -genXmlITypeType :: IType -> String -genXmlITypeType x = case x of - TBoolean -> "IBoolean" - TString -> "IString" - TInteger -> "IInteger" - TReal -> "IReal" - TClafer _ -> "ISet" - -genXmlIType :: IType -> String -genXmlIType x = tagType "Type" (genXmlITypeType x) ""
src/Language/Clafer/Intermediate/Desugarer.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE RankNTypes #-} {- - Copyright (C) 2012-2014 Kacper Bak, Jimmy Liang, Michal Antkiewicz, Paulius Juodisius <http://gsd.uwaterloo.ca> + Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang, Michal Antkiewicz, Paulius Juodisius <http://gsd.uwaterloo.ca> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in @@ -71,8 +71,8 @@ sugarDeclaration (IEClafer clafer) = ElementDecl (_cinPos clafer) $ Subclafer (_cinPos clafer) $ sugarClafer clafer sugarDeclaration (IEConstraint True constraint) = ElementDecl (_inPos constraint) $ Subconstraint (_inPos constraint) $ sugarConstraint constraint -sugarDeclaration (IEConstraint False softconstraint) = - ElementDecl (_inPos softconstraint) $ Subsoftconstraint (_inPos softconstraint) $ sugarSoftConstraint softconstraint +sugarDeclaration (IEConstraint False assertion) = + ElementDecl (_inPos assertion) $ SubAssertion (_inPos assertion) $ sugarAssertion assertion sugarDeclaration (IEGoal _ goal) = ElementDecl (_inPos goal) $ Subgoal (_inPos goal) $ sugarGoal goal @@ -95,8 +95,9 @@ "" "" (desugarSuper super'') (desugarReference reference'') (desugarCard crd'') (0, -1) (desugarElements elements'')) : (desugarInit id'' init'') -getPExpClaferIdent :: SetExp -> String +getPExpClaferIdent :: Exp -> String getPExpClaferIdent (ClaferId _ (Path _ [ (ModIdIdent _ (PosIdent (_, ident'))) ] )) = ident' +getPExpClaferIdent (EJoin _ _ e2) = getPExpClaferIdent e2 getPExpClaferIdent _ = error "Desugarer:getPExpClaferIdent not given a ClaferId PExp" sugarClafer :: IClafer -> Clafer @@ -108,12 +109,12 @@ desugarSuper :: Super -> Maybe PExp desugarSuper (SuperEmpty _) = Nothing desugarSuper (SuperSome _ (ClaferId _ (Path _ [ (ModIdIdent _ (PosIdent (_, "clafer"))) ] ))) = Nothing -desugarSuper (SuperSome _ setexp) = Just $ desugarSetExp setexp +desugarSuper (SuperSome _ setexp) = Just $ desugarExp setexp desugarReference :: Reference -> Maybe IReference desugarReference (ReferenceEmpty _) = Nothing -desugarReference (ReferenceSet _ setexp) = Just $ IReference True $ desugarSetExp setexp -desugarReference (ReferenceBag _ setexp) = Just $ IReference False $ desugarSetExp setexp +desugarReference (ReferenceSet _ setexp) = Just $ IReference True $ desugarExp setexp +desugarReference (ReferenceBag _ setexp) = Just $ IReference False $ desugarExp setexp desugarInit :: PosIdent -> Init -> [IElement] desugarInit _ (InitEmpty _) = [] @@ -147,13 +148,12 @@ sugarSuper :: Maybe PExp -> Super sugarSuper Nothing = SuperEmpty noSpan -sugarSuper (Just pexp'@(PExp _ _ _ (IClaferId _ _ _ _))) = SuperSome noSpan (sugarSetExp pexp') -sugarSuper (Just pexp') = error $ "Function sugarSuper from Desugarer expects a PExp (IClaferId) but instead was given: " ++ show pexp' -- Should never happen +sugarSuper (Just pexp') = SuperSome noSpan (sugarExp pexp') sugarReference :: Maybe IReference -> Reference sugarReference Nothing = ReferenceEmpty noSpan -sugarReference (Just (IReference True pexp')) = ReferenceSet noSpan (sugarSetExp pexp') -sugarReference (Just (IReference False pexp')) = ReferenceBag noSpan (sugarSetExp pexp') +sugarReference (Just (IReference True pexp')) = ReferenceSet noSpan (sugarExp pexp') +sugarReference (Just (IReference False pexp')) = ReferenceBag noSpan (sugarExp pexp') sugarInitHow :: Bool -> InitHow sugarInitHow True = InitConstant noSpan @@ -164,8 +164,8 @@ desugarConstraint (Constraint _ exps') = desugarPath $ desugarExp $ (if length exps' > 1 then foldl1 (EAnd noSpan) else head) exps' -desugarSoftConstraint :: SoftConstraint -> PExp -desugarSoftConstraint (SoftConstraint _ exps') = desugarPath $ desugarExp $ +desugarAssertion :: Assertion -> PExp +desugarAssertion (Assertion _ exps') = desugarPath $ desugarExp $ (if length exps' > 1 then foldl1 (EAnd noSpan) else head) exps' desugarGoal :: Goal -> PExp @@ -175,8 +175,8 @@ sugarConstraint :: PExp -> Constraint sugarConstraint pexp = Constraint (_inPos pexp) $ map sugarExp [pexp] -sugarSoftConstraint :: PExp -> SoftConstraint -sugarSoftConstraint pexp = SoftConstraint (_inPos pexp) $ map sugarExp [pexp] +sugarAssertion :: PExp -> Assertion +sugarAssertion pexp = Assertion (_inPos pexp) $ map sugarExp [pexp] sugarGoal :: PExp -> Goal sugarGoal pexp = Goal (_inPos pexp) $ map sugarExp [pexp] @@ -208,8 +208,8 @@ (SuperSome s (ClaferId s name)) (ReferenceEmpty s) crd (InitEmpty s) es Subconstraint _ constraint -> [IEConstraint True $ desugarConstraint constraint] - Subsoftconstraint _ softconstraint -> - [IEConstraint False $ desugarSoftConstraint softconstraint] + SubAssertion _ assertion -> + [IEConstraint False $ desugarAssertion assertion] Subgoal _ goal -> [IEGoal True $ desugarGoal goal] @@ -217,7 +217,7 @@ sugarElement x = case x of IEClafer claf -> Subclafer noSpan $ sugarClafer claf IEConstraint True constraint -> Subconstraint noSpan $ sugarConstraint constraint - IEConstraint False softconstraint -> Subsoftconstraint noSpan $ sugarSoftConstraint softconstraint + IEConstraint False assertion -> SubAssertion noSpan $ sugarAssertion assertion IEGoal _ goal -> Subgoal noSpan $ sugarGoal goal desugarGCard :: GCard -> Maybe IGCard @@ -273,12 +273,12 @@ desugarExp' :: Exp -> IExp desugarExp' x = case x of - DeclAllDisj _ decl exp' -> + EDeclAllDisj _ decl exp' -> IDeclPExp IAll [desugarDecl True decl] (dpe exp') - DeclAll _ decl exp' -> IDeclPExp IAll [desugarDecl False decl] (dpe exp') - DeclQuantDisj _ quant' decl exp' -> + EDeclAll _ decl exp' -> IDeclPExp IAll [desugarDecl False decl] (dpe exp') + EDeclQuantDisj _ quant' decl exp' -> IDeclPExp (desugarQuant quant') [desugarDecl True decl] (dpe exp') - DeclQuant _ quant' decl exp' -> + EDeclQuant _ quant' decl exp' -> IDeclPExp (desugarQuant quant') [desugarDecl False decl] (dpe exp') EIff _ exp0 exp' -> dop iIff [exp0, exp'] EImplies _ exp0 exp' -> dop iImpl [exp0, exp'] @@ -287,7 +287,7 @@ EXor _ exp0 exp' -> dop iXor [exp0, exp'] EAnd _ exp0 exp' -> dop iAnd [exp0, exp'] ENeg _ exp' -> dop iNot [exp'] - QuantExp _ quant' exp' -> + EQuantExp _ quant' exp' -> IDeclPExp (desugarQuant quant') [] (desugarExp exp') ELt _ exp0 exp' -> dop iLt [exp0, exp'] EGt _ exp0 exp' -> dop iGt [exp0, exp'] @@ -302,16 +302,24 @@ EMul _ exp0 exp' -> dop iMul [exp0, exp'] EDiv _ exp0 exp' -> dop iDiv [exp0, exp'] ERem _ exp0 exp' -> dop iRem [exp0, exp'] - ECSetExp _ exp' -> dop iCSet [exp'] - ESumSetExp _ exp' -> dop iSumSet [exp'] - EProdSetExp _ exp' -> dop iProdSet [exp'] + ECard _ exp' -> dop iCSet [exp'] + ESum _ exp' -> dop iSumSet [exp'] + EProd _ exp' -> dop iProdSet [exp'] EMinExp _ exp' -> dop iMin [exp'] EGMax _ exp' -> dop iGMax [exp'] EGMin _ exp' -> dop iGMin [exp'] EInt _ n -> IInt $ mkInteger n EDouble _ (PosDouble n) -> IDouble $ read $ snd n + EReal _ (PosReal n) -> IReal $ read $ snd n EStr _ (PosString str) -> IStr $ snd str - ESetExp _ sexp -> desugarSetExp' sexp + EUnion _ exp0 exp' -> dop iUnion [exp0, exp'] + EUnionCom _ exp0 exp' -> dop iUnion [exp0, exp'] + EDifference _ exp0 exp' -> dop iDifference [exp0, exp'] + EIntersection _ exp0 exp' -> dop iIntersection [exp0, exp'] + EDomain _ exp0 exp' -> dop iDomain [exp0, exp'] + ERange _ exp0 exp' -> dop iRange [exp0, exp'] + EJoin _ exp0 exp' -> dop iJoin [exp0, exp'] + ClaferId _ name -> desugarName name where dop = desugarOp desugarExp dpe = desugarPath.desugarExp @@ -326,62 +334,43 @@ trans = if op' `elem` ([iNot, iIfThenElse] ++ logBinOps) then desugarPath else id - -desugarSetExp :: SetExp -> PExp -desugarSetExp x = pExpDefPid (getSpan x) $ desugarSetExp' x - - -desugarSetExp' :: SetExp -> IExp -desugarSetExp' x = case x of - Union _ exp0 exp' -> dop iUnion [exp0, exp'] - UnionCom _ exp0 exp' -> dop iUnion [exp0, exp'] - Difference _ exp0 exp' -> dop iDifference [exp0, exp'] - Intersection _ exp0 exp' -> dop iIntersection [exp0, exp'] - Domain _ exp0 exp' -> dop iDomain [exp0, exp'] - Range _ exp0 exp' -> dop iRange [exp0, exp'] - Join _ exp0 exp' -> dop iJoin [exp0, exp'] - ClaferId _ name -> desugarName name - - where - dop = desugarOp desugarSetExp - - sugarExp :: PExp -> Exp sugarExp x = sugarExp' $ _exp x sugarExp' :: IExp -> Exp sugarExp' x = case x of - IDeclPExp quant' [] pexp -> QuantExp noSpan (sugarQuant quant') (sugarExp pexp) + IDeclPExp quant' [] pexp -> EQuantExp noSpan (sugarQuant quant') (sugarExp pexp) IDeclPExp IAll (decl@(IDecl True _ _):[]) pexp -> - DeclAllDisj noSpan (sugarDecl decl) (sugarExp pexp) + EDeclAllDisj noSpan (sugarDecl decl) (sugarExp pexp) IDeclPExp IAll (decl@(IDecl False _ _):[]) pexp -> - DeclAll noSpan (sugarDecl decl) (sugarExp pexp) + EDeclAll noSpan (sugarDecl decl) (sugarExp pexp) IDeclPExp quant' (decl@(IDecl True _ _):[]) pexp -> - DeclQuantDisj noSpan (sugarQuant quant') (sugarDecl decl) (sugarExp pexp) + EDeclQuantDisj noSpan (sugarQuant quant') (sugarDecl decl) (sugarExp pexp) IDeclPExp quant' (decl@(IDecl False _ _):[]) pexp -> - DeclQuant noSpan (sugarQuant quant') (sugarDecl decl) (sugarExp pexp) + EDeclQuant noSpan (sugarQuant quant') (sugarDecl decl) (sugarExp pexp) + IClaferId "" id' _ _ -> ClaferId noSpan $ Path noSpan [ModIdIdent noSpan $ mkIdent id'] + IClaferId modName' id' _ _ -> ClaferId noSpan $ Path noSpan $ (sugarModId modName') : [sugarModId id'] + IInt n -> EInt noSpan $ PosInteger ((0, 0), show n) + IDouble n -> EDouble noSpan $ PosDouble ((0, 0), show n) + IReal n -> EReal noSpan $ PosReal ((0, 0), show n) + IStr str -> EStr noSpan $ PosString ((0, 0), str) IFunExp op' exps' -> if op' `elem` unOps then (sugarUnOp op') (exps''!!0) - else if op' `elem` setBinOps then (ESetExp noSpan $ sugarSetExp' x) else if op' `elem` binOps then (sugarOp op') (exps''!!0) (exps''!!1) else (sugarTerOp op') (exps''!!0) (exps''!!1) (exps''!!2) where exps'' = map sugarExp exps' - IInt n -> EInt noSpan $ PosInteger ((0, 0), show n) - IDouble n -> EDouble noSpan $ PosDouble ((0, 0), show n) - IStr str -> EStr noSpan $ PosString ((0, 0), str) - IClaferId _ _ _ _ -> ESetExp noSpan $ sugarSetExp' x - _ -> error "Function sugarExp' from Desugarer was given an invalid argument" -- This should never happen + x' -> error $ "Desugarer.sugarExp': invalid argument: " ++ show x' -- This should never happen where sugarUnOp op'' | op'' == iNot = ENeg noSpan - | op'' == iCSet = ECSetExp noSpan + | op'' == iCSet = ECard noSpan | op'' == iMin = EMinExp noSpan | op'' == iGMax = EGMax noSpan | op'' == iGMin = EGMin noSpan - | op'' == iSumSet = ESumSetExp noSpan - | op'' == iProdSet = EProdSetExp noSpan + | op'' == iSumSet = ESum noSpan + | op'' == iProdSet = EProd noSpan | otherwise = error $ show op'' ++ "is not an op" sugarOp op'' | op'' == iIff = EIff noSpan @@ -402,32 +391,18 @@ | op'' == iMul = EMul noSpan | op'' == iDiv = EDiv noSpan | op'' == iRem = ERem noSpan + | op'' == iUnion = EUnion noSpan + | op'' == iDifference = EDifference noSpan + | op'' == iIntersection = EIntersection noSpan + | op'' == iDomain = EDomain noSpan + | op'' == iRange = ERange noSpan + | op'' == iJoin = EJoin noSpan | otherwise = error $ show op'' ++ "is not an op" sugarTerOp op'' | op'' == iIfThenElse = EImpliesElse noSpan | otherwise = error $ show op'' ++ "is not an op" -sugarSetExp :: PExp -> SetExp -sugarSetExp x = sugarSetExp' $ _exp x - - -sugarSetExp' :: IExp -> SetExp -sugarSetExp' (IFunExp op' exps') = (sugarOp op') (exps''!!0) (exps''!!1) - where - exps'' = map sugarSetExp exps' - sugarOp op'' - | op'' == iUnion = Union noSpan - | op'' == iDifference = Difference noSpan - | op'' == iIntersection = Intersection noSpan - | op'' == iDomain = Domain noSpan - | op'' == iRange = Range noSpan - | op'' == iJoin = Join noSpan - | otherwise = error "Invalid argument given to function sygarSetExp' in Desugarer" -sugarSetExp' (IClaferId "" id' _ _) = ClaferId noSpan $ Path noSpan [ModIdIdent noSpan $ mkIdent id'] -sugarSetExp' (IClaferId modName' id' _ _) = ClaferId noSpan $ Path noSpan $ (sugarModId modName') : [sugarModId id'] -sugarSetExp' _ = error "IDecelPexp, IInt, IDobule, and IStr can not be sugared into a setExp!" --This should never happen - desugarPath :: PExp -> PExp desugarPath (PExp iType' pid' pos' x) = reducePExp $ PExp iType' pid' pos' result where @@ -467,12 +442,12 @@ desugarDecl :: Bool -> Decl -> IDecl desugarDecl isDisj' (Decl _ locids exp') = - IDecl isDisj' (map desugarLocId locids) (desugarSetExp exp') + IDecl isDisj' (map desugarLocId locids) (desugarExp exp') sugarDecl :: IDecl -> Decl sugarDecl (IDecl _ locids exp') = - Decl noSpan (map sugarLocId locids) (sugarSetExp exp') + Decl noSpan (map sugarLocId locids) (sugarExp exp') desugarLocId :: LocId -> String
src/Language/Clafer/Intermediate/Intclafer.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE TemplateHaskell, DeriveDataTypeable #-} {- - Copyright (C) 2012-2014 Kacper Bak, Jimmy Liang, Michal Antkiewicz, Luke Michael Brown <http://gsd.uwaterloo.ca> + Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang, Michal Antkiewicz, Luke Michael Brown <http://gsd.uwaterloo.ca> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in @@ -58,11 +58,19 @@ = TBoolean | TString | TInteger + | TDouble | TReal - -- | the type is an intersection of the listed clafers - -- supports having paths in the inheritance hierarchy - -- supports multiple inheritance - | TClafer [UID] + | TClafer + { _hi :: [UID] -- ^ [UID] represents an inheritance hierarchy obtained using @Common.findHierarchy + } + | TMap -- Represents a map from the src class to the target class + { _so :: IType -- ^ must only be a TClass + , _ta :: IType -- ^ must only be a TClass + } + | TUnion + { _un :: [IType] -- ^ [IType] is a list of basic types (not union types) + } + deriving (Eq,Ord,Show,Data,Typeable) -- | each file contains exactly one mode. A module is a list of declarations @@ -164,6 +172,10 @@ { _iint :: Integer } -- | real number + | IReal + { _ireal :: Double + } + -- | double-precision floating point number | IDouble { _idouble :: Double } @@ -398,3 +410,12 @@ instance ToJSON Pos where toJSON _ = Null + +-- | Datatype used for JSON output. See Language.Clafer.gatherObjectivesAndAttributes +data ObjectivesAndAttributes + = ObjectivesAndAttributes + { _qualities :: [String] + , _attributes :: [String] + } + +$(deriveToJSON defaultOptions{fieldLabelModifier = tail} ''ObjectivesAndAttributes)
src/Language/Clafer/Intermediate/ResolverName.hs view
@@ -54,7 +54,7 @@ -- | How a given name was resolved data HowResolved - = Special -- ^ "this", "parent", "children", and "root" + = Special -- ^ "this", "parent", "ref", "root", and "children" | TypeSpecial -- ^ primitive type: "integer", "string" | Binding -- ^ local variable (in constraints) | Subclafers -- ^ clafer's descendant @@ -156,6 +156,7 @@ IFunExp op' exps' -> if op' == iJoin then resNav else IFunExp op' <$> mapM (resolvePExp env) exps' IInt _ -> return x IDouble _ -> return x + IReal _ -> return x IStr _ -> return x IClaferId _ _ _ _ -> resNav where @@ -185,32 +186,36 @@ | otherwise = mkPath' modName' <$> resolveImmName pos' env id' y -> throwError $ SemanticErr pos' $ "Cannot resolve nav of " ++ show y --- depending on how resolved construct a path +-- | Depending on how resolved construct a navigation path from 'context env' mkPath :: SEnv -> (HowResolved, String, [IClafer]) -> (IExp, [IClafer]) -mkPath env (howResolved, id', path) = case howResolved of +mkPath env (howResolved, id', path) = case howResolved of Binding -> (IClaferId "" id' True Nothing, path) - Special -> (specIExp, path) + Special -> (specIExp id', path) TypeSpecial -> (IClaferId "" id' True (Just id'), path) Subclafers -> (toNav $ tail $ reverse $ map toTuple path, path) Ancestor -> (toNav' $ adjustAncestor (fromJust $ context env) (reverse $ map toTuple $ resPath env) (reverse $ map toTuple path), path) - _ -> (toNav' $ reverse $ map toTuple path, path) + Reference -> (toNav' $ reverse $ map toTuple path, path) + AbsClafer -> (toNav' $ reverse $ map toTuple path, path) + TopClafer -> (toNav' $ reverse $ map toTuple path, path) where - toNav = foldl' - (\exp' (id'', c) -> IFunExp iJoin [pExpDefPidPos exp', mkPLClaferId id'' False $ _uid <$> c]) + toNav tuplePath = foldl' + (\exp' (id'', cbind) -> IFunExp iJoin [pExpDefPidPos exp', mkPLClaferId id'' (fromMaybe False $ isTopLevel <$> cbind) $ _uid <$> cbind]) (IClaferId "" thisIdent True (_uid <$> context env)) - specIExp = if id' /= thisIdent && id' /= rootIdent - then toNav [(id', Just $ head path)] - else if id' == thisIdent - then IClaferId "" thisIdent True (_uid <$> context env) - else IClaferId "" rootIdent True (Just rootIdent) + tuplePath + specIExp "this" = IClaferId "" thisIdent True (_uid <$> context env) + specIExp "parent" = toNav [("parent", Just $ head path)] + specIExp "ref" = toNav [("ref", Just $ head path)] + specIExp "root" = IClaferId "" rootIdent True (Just rootIdent) + specIExp "children" = toNav [(id', Just $ head path)] + specIExp i = error $ "[BUG] ResolverName.specIExp: Unknown special id: " ++ i toTuple :: IClafer->(String, Maybe IClafer) toTuple c = (_uid c, Just c) toNav' :: [(String, Maybe IClafer)] -> IExp -toNav' p = (mkIFunExp iJoin $ map (\(id', cbind) -> IClaferId "" id' False (_uid <$> cbind)) p) :: IExp +toNav' tuplePath = (mkIFunExp iJoin $ map (\(id', cbind) -> IClaferId "" id' (fromMaybe False $ isTopLevel <$> cbind) (_uid <$> cbind)) tuplePath) :: IExp adjustAncestor :: IClafer -> [(String, Maybe IClafer)] -> [(String, Maybe IClafer)] -> [(String, Maybe IClafer)] adjustAncestor ctx cPath rPath = (thisIdent, Just ctx) : parents ++ (fromJust $ stripPrefix prefix rPath)
src/Language/Clafer/Intermediate/ResolverType.hs view
@@ -26,10 +26,12 @@ import Language.Clafer.Common import Language.Clafer.Intermediate.Intclafer hiding (uid) import Language.Clafer.Intermediate.Desugarer +import Language.Clafer.Intermediate.TypeSystem import Language.Clafer.Front.PrintClafer import Control.Applicative import Control.Exception (assert) +import Control.Lens ((&), (%~), traversed) import Control.Monad.Except import Control.Monad.List import Control.Monad.Reader @@ -38,6 +40,7 @@ import Data.Maybe import Prelude hiding (exp) + type TypeDecls = [(String, IType)] data TypeInfo = TypeInfo {iTypeDecls::TypeDecls, iUIDIClaferMap::UIDIClaferMap, iCurThis::IClafer, iCurPath::Maybe IType} @@ -99,27 +102,6 @@ runTypeAnalysis :: TypeAnalysis a -> IModule -> Either ClaferSErr a runTypeAnalysis (TypeAnalysis tc) imodule = runReaderT tc $ TypeInfo [] (createUidIClaferMap imodule) undefined Nothing -unionType :: IType -> [String] -unionType TString = [stringType] -unionType TReal = [realType] -unionType TInteger = [integerType] -unionType TBoolean = [booleanType] -unionType (TClafer u) = u - -(+++) :: IType -> IType -> IType -t1 +++ t2 = fromJust $ fromUnionType $ unionType t1 ++ unionType t2 - -fromUnionType :: [String] -> Maybe IType -fromUnionType u = - case sort $ nub $ u of - ["string"] -> return TString - ["real"] -> return TReal - ["integer"] -> return TInteger - ["int"] -> return TInteger - ["boolean"] -> return TBoolean - [] -> Nothing - u' -> return $ TClafer u' - claferWithUid :: (Monad m) => UIDIClaferMap -> String -> m IClafer claferWithUid uidIClaferMap' u = case findIClafer uidIClaferMap' u of Just c -> return c @@ -130,22 +112,6 @@ Just u -> return u Nothing -> fail $ "Analysis.parentOf: " ++ c ++ " not found!" -refOf :: (Monad m) => UIDIClaferMap -> UID -> m UID -refOf uidIClaferMap' c = do - case getReference <$> findIClafer uidIClaferMap' c of - Just [r] -> return r - _ -> fail $ "Analysis.refOf: No ref uid for " ++ show c - -hierarchy :: (Monad m) => UIDIClaferMap -> UID -> m [IClafer] -hierarchy uidIClaferMap' c = (case findIClafer uidIClaferMap' c of - Nothing -> fail $ "Analysis.hierarchy: clafer " ++ c ++ "not found!" - Just clafer -> return $ findHierarchy getSuper uidIClaferMap' clafer) - -hierarchyMap :: (Monad m) => UIDIClaferMap -> (IClafer -> a) -> UID -> m [a] -hierarchyMap uidIClaferMap' f c = (case findIClafer uidIClaferMap' c of - Nothing -> fail $ "Analysis.hierarchyMap: clafer " ++ c ++ "not found!" - Just clafer -> return $ mapHierarchy f getSuper uidIClaferMap' clafer) - {- - C is an direct child of B. - @@ -169,30 +135,6 @@ return $ directChild || indirectChild ) - -closure :: Monad m => UIDIClaferMap -> [String] -> m [String] -closure uidIClaferMap' ut = concat `liftM` mapM (hierarchyMap uidIClaferMap' _uid) ut - -intersection :: Monad m => UIDIClaferMap -> IType -> IType -> m (Maybe IType) -intersection uidIClaferMap' t1 t2 = do - h1 <- (mapM (hierarchyMap uidIClaferMap' _uid) $ unionType t1) - h2 <- (mapM (hierarchyMap uidIClaferMap' _uid) $ unionType t2) - return $ fromUnionType $ catMaybes [contains (head u1) u2 `mplus` contains (head u2) u1 | u1 <- h1, u2 <- h2 ] - where - contains i is = if i `elem` is then Just i else Nothing - -numeric :: IType -> Bool -numeric TReal = True -numeric TInteger = True -numeric _ = False - -coerce :: IType -> IType -> IType -coerce TReal TReal = TReal -coerce TReal TInteger = TReal -coerce TInteger TReal = TReal -coerce TInteger TInteger = TInteger -coerce x y = error $ "Not numeric: " ++ show x ++ ", " ++ show y - str :: IType -> String str t = case unionType t of @@ -215,7 +157,8 @@ let ut = catMaybes [commonHierarchy u1 u2 | u1 <- h1, u2 <- h2] return $ fromUnionType ut where - commonHierarchy h1 h2 = filterClafer $ commonHierarchy' (reverse h1) (reverse h2) Nothing + commonHierarchy :: [UID] -> [UID] -> Maybe UID + commonHierarchy h1 h2 = commonHierarchy' (reverse h1) (reverse h2) Nothing commonHierarchy' (x:xs) (y:ys) accumulator = if (x == y) then @@ -224,23 +167,46 @@ else commonHierarchy' xs ys $ Just x else accumulator commonHierarchy' _ _ _ = error "ResolverType.commonHierarchy' expects two non empty lists but was given at least one empty list!" -- Should never happen - filterClafer value = - if (value == Just "clafer") then Nothing else value +data TAMode + = TAReferences -- | Phase one: only process references + | TAExpressions -- | Phase two: only process constraints and goals + resolveTModule :: (IModule, GEnv) -> Either ClaferSErr IModule resolveTModule (imodule, _) = - case runTypeAnalysis (analysis $ _mDecls imodule) imodule of - Right mDecls' -> return imodule{_mDecls = mDecls'} + case runTypeAnalysis (analysisReferences $ _mDecls imodule) imodule of + Right mDecls' -> case runTypeAnalysis (analysisExpressions $ mDecls') imodule{_mDecls = mDecls'} of + Right mDecls'' -> return imodule{_mDecls = mDecls''} + Left err -> throwError err Left err -> throwError err where - analysis decls1 = mapM (resolveTElement rootIdent) decls1 + analysisReferences = mapM (resolveTElement TAReferences rootIdent) + analysisExpressions = mapM (resolveTElement TAExpressions rootIdent) -resolveTElement :: String -> IElement -> TypeAnalysis IElement -resolveTElement _ (IEClafer iclafer) = +-- Phase one: only process references +resolveTElement :: TAMode -> String -> IElement -> TypeAnalysis IElement +resolveTElement TAReferences _ (IEClafer iclafer) = do - elements' <- mapM (resolveTElement $ _uid iclafer) (_elements iclafer) + uidIClaferMap' <- asks iUIDIClaferMap + reference' <- case _reference iclafer of + Nothing -> return Nothing + Just originalReference -> do + refs' <- resolveTPExp $ _ref originalReference + case refs' of + [] -> return Nothing + [ref'] -> return $ Just $ originalReference{_ref=(ref' & iType.traversed %~ (addHierarchy uidIClaferMap'))} + (ref':_) -> return $ Just $ originalReference{_ref=(ref' & iType.traversed %~ (addHierarchy uidIClaferMap'))} + elements' <- mapM (resolveTElement TAReferences (_uid iclafer)) (_elements iclafer) + return $ IEClafer iclafer{_elements = elements', _reference=reference'} +resolveTElement TAReferences _ iec@(IEConstraint{}) = return iec +resolveTElement TAReferences _ ieg@(IEGoal{}) = return ieg + +-- Phase two: only process constraints and goals +resolveTElement TAExpressions _ (IEClafer iclafer) = + do + elements' <- mapM (resolveTElement TAExpressions (_uid iclafer)) (_elements iclafer) return $ IEClafer iclafer{_elements = elements'} -resolveTElement parent' (IEConstraint _isHard _pexp) = +resolveTElement TAExpressions parent' (IEConstraint _isHard _pexp) = IEConstraint _isHard <$> (testBoolean =<< resolveTConstraint parent' _pexp) where testBoolean pexp' = @@ -248,7 +214,7 @@ unless (typeOf pexp' == TBoolean) $ throwError $ SemanticErr (_inPos pexp') ("Cannot construct constraint on type '" ++ str (typeOf pexp') ++ "'") return pexp' -resolveTElement parent' (IEGoal isMaximize' pexp') = +resolveTElement TAExpressions parent' (IEGoal isMaximize' pexp') = IEGoal isMaximize' <$> resolveTConstraint parent' pexp' resolveTConstraint :: String -> PExp -> TypeAnalysis PExp @@ -275,12 +241,11 @@ curPath' <- curPath case curPath' of Just curPath'' -> do - ut <- closure uidIClaferMap' $ unionType curPath'' - t <- runListT $ refOf uidIClaferMap' =<< foreachM ut - case fromUnionType t of - Just t' -> return $ p `withType` t' - Nothing -> throwError $ SemanticErr _inPos ("Cannot ref from type '" ++ str curPath'' ++ "'") - Nothing -> throwError $ SemanticErr _inPos ("Cannot ref at the start of a path") + case concatMap (getTMaps uidIClaferMap') $ getTClafers uidIClaferMap' curPath'' of + [t'] -> return $ p `withType` t' + (t':_) -> return $ p `withType` t' + [] -> throwError $ SemanticErr _inPos ("Cannot deref from type '" ++ str curPath'' ++ "'") + Nothing -> throwError $ SemanticErr _inPos ("Cannot deref at the start of a path") resolveTPExp' p@PExp{_inPos, _exp = IClaferId{_sident = "parent"}} = do uidIClaferMap' <- asks iUIDIClaferMap runListT $ runExceptT $ do @@ -296,6 +261,10 @@ addRef result -- Case 2: Dereference the sident 1..* times Nothing -> throwError $ SemanticErr _inPos "Cannot parent at the start of a path" resolveTPExp' p@PExp{_exp = IClaferId{_sident = "integer"}} = runListT $ runExceptT $ return $ p `withType` TInteger +resolveTPExp' p@PExp{_exp = IClaferId{_sident = "int"}} = runListT $ runExceptT $ return $ p `withType` TInteger +resolveTPExp' p@PExp{_exp = IClaferId{_sident = "string"}} = runListT $ runExceptT $ return $ p `withType` TString +resolveTPExp' p@PExp{_exp = IClaferId{_sident = "double"}} = runListT $ runExceptT $ return $ p `withType` TDouble +resolveTPExp' p@PExp{_exp = IClaferId{_sident = "real"}} = runListT $ runExceptT $ return $ p `withType` TReal resolveTPExp' p@PExp{_inPos, _exp = IClaferId{_sident}} = do uidIClaferMap' <- asks iUIDIClaferMap runListT $ runExceptT $ do @@ -317,7 +286,8 @@ where resolveTExp :: IExp -> TypeAnalysis [Either ClaferSErr (IType, IExp)] resolveTExp e@(IInt _) = runListT $ runExceptT $ return (TInteger, e) - resolveTExp e@(IDouble _) = runListT $ runExceptT $ return (TReal, e) + resolveTExp e@(IDouble _) = runListT $ runExceptT $ return (TDouble, e) + resolveTExp e@(IReal _) = runListT $ runExceptT $ return (TReal, e) resolveTExp e@(IStr _) = runListT $ runExceptT $ return (TString, e) resolveTExp e@IFunExp {_op, _exps = [arg]} = @@ -331,8 +301,8 @@ let result | _op == iNot = test (t == TBoolean) >> return TBoolean | _op == iCSet = return TInteger - | _op == iSumSet = test (t == TInteger) >> return TInteger - | _op == iProdSet = test (t == TInteger) >> return TInteger + | _op == iSumSet = test (isTInteger t) >> return TInteger + | _op == iProdSet = test (isTInteger t) >> return TInteger | _op `elem` [iMin, iGMin, iGMax] = test (numeric t) >> return t | otherwise = assert False $ error $ "Unknown op '" ++ _op ++ "'" result' <- result @@ -381,7 +351,7 @@ | _op `elem` relSetBinOps = testIntersect t1 t2 >> return TBoolean | _op `elem` [iSub, iMul, iDiv, iRem] = test (numeric t1 && numeric t2) >> return (coerce t1 t2) | _op == iPlus = - (test (t1 == TString && t2 == TString) >> return TString) -- Case 1: String concatenation + (test (isTString t1 && isTString t2) >> return TString) -- Case 1: String concatenation `catchError` const (test (numeric t1 && numeric t2) >> return (coerce t1 t2)) -- Case 2: Addition | otherwise = error $ "ResolverType: Unknown op: " ++ show e @@ -401,12 +371,12 @@ -- throwError $ SemanticErr inPos ("The types are: '" ++ str t2 ++ "' and '" ++ str t3 ++ "'") unless (t1 == TBoolean) $ - throwError $ SemanticErr _inPos ("Function 'if/else' cannot be performed on 'if' " ++ str t1 ++ " 'then' " ++ str t2 ++ " 'else' " ++ str t3) + throwError $ SemanticErr _inPos ("The type of condition in 'if/then/else' must be 'TBoolean', insted it is " ++ str t1) it <- getIfThenElseType uidIClaferMap' t2 t3 t <- case it of Just it' -> return it' - Nothing -> throwError $ SemanticErr _inPos ("Function 'if/else' cannot be performed on if '" ++ str t1 ++ "' then '" ++ str t2 ++ "' else '" ++ str t3 ++ "'") + Nothing -> throwError $ SemanticErr _inPos ("Function 'if/then/else' cannot be performed on if '" ++ str t1 ++ "' then '" ++ str t2 ++ "' else '" ++ str t3 ++ "'") return (t, e{_exps = [arg1', arg2', arg3']}) @@ -459,9 +429,6 @@ liftList :: Monad m => [a] -> ListT m a liftList = ListT . return - -foreachM :: Monad m => [a] -> ListT m a -foreachM = ListT . return comparing :: Ord b => (a -> b) -> a -> a -> Ordering comparing f a b = f a `compare` f b
src/Language/Clafer/Intermediate/SimpleScopeAnalyzer.hs view
@@ -1,5 +1,5 @@ {- - Copyright (C) 2012-2014 Jimmy Liang, Kacper Bak, Michał Antkiewicz <http://gsd.uwaterloo.ca> + Copyright (C) 2012-2015 Jimmy Liang, Kacper Bak, Michał Antkiewicz <http://gsd.uwaterloo.ca> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in
src/Language/Clafer/Intermediate/StringAnalyzer.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE RankNTypes, KindSignatures ,FlexibleContexts #-} {- - Copyright (C) 2012-2014 Kacper Bak, Jimmy Liang, Luke Brown <http://gsd.uwaterloo.ca> + Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang, Luke Brown <http://gsd.uwaterloo.ca> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in @@ -41,9 +41,14 @@ astrClafer :: MonadState (Map.Map String Int) m => IClafer -> m IClafer -astrClafer (IClafer s isAbs gcrd' ident' uid' puid' super' reference' crd' gCard es) = - IClafer s isAbs gcrd' ident' uid' puid' super' reference' crd' gCard `liftM` mapM astrElement es +astrClafer (IClafer s isAbstract' gcrd' ident' uid' puid' super' reference' crd' gCard elements') = do + reference'' <- astrReference reference' + elements'' <- astrElement `mapM` elements' + return $ IClafer s isAbstract' gcrd' ident' uid' puid' super' reference'' crd' gCard elements'' +astrReference :: MonadState (Map.Map String Int) m => Maybe IReference -> m (Maybe IReference) +astrReference Nothing = return Nothing +astrReference (Just (IReference isSet' ref')) = Just <$> IReference isSet' `liftM` astrPExp ref' -- astrs single subclafer astrElement :: MonadState (Map.Map String Int) m => IElement -> m IElement
src/Language/Clafer/Intermediate/Tracing.hs view
@@ -19,11 +19,12 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -} -module Language.Clafer.Intermediate.Tracing (traceIrModule, traceAstModule, Ast(..)) where +module Language.Clafer.Intermediate.Tracing (traceIrModule, traceAstModule, Ast(..), printAstNode) where import Data.Map (Map) import qualified Data.Map as Map import Language.Clafer.Front.AbsClafer +import Language.Clafer.Front.PrintClafer (printTree) import Language.Clafer.Intermediate.Intclafer traceIrModule :: IModule -> Map Span [Ir] --Map Span [Union (IRClafer IClafer) (IRPExp PExp)] @@ -48,7 +49,7 @@ i (AstDeclaration a) = getSpan a i (AstClafer a) = getSpan a i (AstConstraint a) = getSpan a - i (AstSoftConstraint a) = getSpan a + i (AstAssertion a) = getSpan a i (AstGoal a) = getSpan a i (AstAbstract a) = getSpan a i (AstElements a) = getSpan a @@ -63,7 +64,6 @@ i (AstExInteger a) = getSpan a i (AstName a) = getSpan a i (AstExp a) = getSpan a - i (AstSetExp a) = getSpan a i (AstDecl a) = getSpan a i (AstQuant a) = getSpan a i (AstEnumId a) = getSpan a @@ -86,8 +86,8 @@ traverseConstraint :: Constraint -> [Ast] traverseConstraint x@(Constraint _ e) = AstConstraint x : concatMap traverseExp e -traverseSoftConstraint :: SoftConstraint -> [Ast] -traverseSoftConstraint x@(SoftConstraint _ e) = AstSoftConstraint x : concatMap traverseExp e +traverseAssertion :: Assertion -> [Ast] +traverseAssertion x@(Assertion _ e) = AstAssertion x : concatMap traverseExp e traverseGoal :: Goal -> [Ast] traverseGoal x@(Goal _ e) = AstGoal x : concatMap traverseExp e @@ -111,22 +111,22 @@ ClaferUse _ n c e -> traverseName n ++ traverseCard c ++ traverseElements e Subconstraint _ c -> traverseConstraint c Subgoal _ g -> traverseGoal g - Subsoftconstraint _ c -> traverseSoftConstraint c + SubAssertion _ c -> traverseAssertion c traverseSuper :: Super -> [Ast] traverseSuper x = AstSuper x : case x of SuperEmpty _ -> [] - SuperSome _ se -> traverseSetExp se + SuperSome _ se -> traverseExp se traverseReference :: Reference -> [Ast] traverseReference x = AstReference x : case x of ReferenceEmpty _ -> [] - ReferenceSet _ se -> traverseSetExp se - ReferenceBag _ se -> traverseSetExp se + ReferenceSet _ se -> traverseExp se + ReferenceBag _ se -> traverseExp se traverseInit :: Init -> [Ast] traverseInit x = @@ -175,10 +175,10 @@ traverseExp x = AstExp x : case x of - DeclAllDisj _ d e -> traverseDecl d ++ traverseExp e - DeclAll _ d e -> traverseDecl d ++ traverseExp e - DeclQuantDisj _ q d e -> traverseQuant q ++ traverseDecl d ++ traverseExp e - DeclQuant _ q d e -> traverseQuant q ++ traverseDecl d ++ traverseExp e + EDeclAllDisj _ d e -> traverseDecl d ++ traverseExp e + EDeclAll _ d e -> traverseDecl d ++ traverseExp e + EDeclQuantDisj _ q d e -> traverseQuant q ++ traverseDecl d ++ traverseExp e + EDeclQuant _ q d e -> traverseQuant q ++ traverseDecl d ++ traverseExp e EGMax _ e -> traverseExp e EGMin _ e -> traverseExp e EIff _ e1 e2 -> traverseExp e1 ++ traverseExp e2 @@ -195,36 +195,33 @@ ENeq _ e1 e2 -> traverseExp e1 ++ traverseExp e2 EIn _ e1 e2 -> traverseExp e1 ++ traverseExp e2 ENin _ e1 e2 -> traverseExp e1 ++ traverseExp e2 - QuantExp _ q e -> traverseQuant q ++ traverseExp e + EQuantExp _ q e -> traverseQuant q ++ traverseExp e EAdd _ e1 e2 -> traverseExp e1 ++ traverseExp e2 ESub _ e1 e2 -> traverseExp e1 ++ traverseExp e2 EMul _ e1 e2 -> traverseExp e1 ++ traverseExp e2 EDiv _ e1 e2 -> traverseExp e1 ++ traverseExp e2 - ECSetExp _ e -> traverseExp e + ERem _ e1 e2 -> traverseExp e1 ++ traverseExp e2 + ESum _ e -> traverseExp e + EProd _ e -> traverseExp e + ECard _ e -> traverseExp e EMinExp _ e -> traverseExp e EImpliesElse _ e1 e2 e3 -> traverseExp e1 ++ traverseExp e2 ++ traverseExp e3 EInt _ _ -> [] EDouble _ _ -> [] + EReal _ _ -> [] EStr _ _ -> [] - ESetExp _ s -> traverseSetExp s - _ -> error "Invalid argument given to function traverseExp from Tracing" - -traverseSetExp :: SetExp -> [Ast] -traverseSetExp x = - AstSetExp x : - case x of - Union _ s1 s2 -> traverseSetExp s1 ++ traverseSetExp s2 - UnionCom _ s1 s2 -> traverseSetExp s1 ++ traverseSetExp s2 - Difference _ s1 s2 -> traverseSetExp s1 ++ traverseSetExp s2 - Intersection _ s1 s2 -> traverseSetExp s1 ++ traverseSetExp s2 - Domain _ s1 s2 -> traverseSetExp s1 ++ traverseSetExp s2 - Range _ s1 s2 -> traverseSetExp s1 ++ traverseSetExp s2 - Join _ s1 s2 -> traverseSetExp s1 ++ traverseSetExp s2 + EUnion _ s1 s2 -> traverseExp s1 ++ traverseExp s2 + EUnionCom _ s1 s2 -> traverseExp s1 ++ traverseExp s2 + EDifference _ s1 s2 -> traverseExp s1 ++ traverseExp s2 + EIntersection _ s1 s2 -> traverseExp s1 ++ traverseExp s2 + EDomain _ s1 s2 -> traverseExp s1 ++ traverseExp s2 + ERange _ s1 s2 -> traverseExp s1 ++ traverseExp s2 + EJoin _ s1 s2 -> traverseExp s1 ++ traverseExp s2 ClaferId _ n -> traverseName n traverseDecl :: Decl -> [Ast] traverseDecl x@(Decl _ l s) = - AstDecl x : (concatMap traverseLocId l ++ traverseSetExp s) + AstDecl x : (concatMap traverseLocId l ++ traverseExp s) traverseQuant :: Quant -> [Ast] traverseQuant x = @@ -244,7 +241,7 @@ AstDeclaration Declaration | AstClafer Clafer | AstConstraint Constraint | - AstSoftConstraint SoftConstraint | + AstAssertion Assertion | AstGoal Goal | AstAbstract Abstract | AstElements Elements | @@ -259,10 +256,35 @@ AstExInteger ExInteger | AstName Name | AstExp Exp | - AstSetExp SetExp | AstDecl Decl | AstQuant Quant | AstEnumId EnumId | AstModId ModId | AstLocId LocId deriving (Eq, Show) + +printAstNode :: Ast -> String +printAstNode (AstModule x) = printTree x +printAstNode (AstDeclaration x) = printTree x +printAstNode (AstClafer x) = printTree x +printAstNode (AstConstraint x) = printTree x +printAstNode (AstAssertion x) = printTree x +printAstNode (AstGoal x) = printTree x +printAstNode (AstAbstract x) = printTree x +printAstNode (AstElements x) = printTree x +printAstNode (AstElement x) = printTree x +printAstNode (AstSuper x) = printTree x +printAstNode (AstReference x) = printTree x +printAstNode (AstInit x) = printTree x +printAstNode (AstInitHow x) = printTree x +printAstNode (AstGCard x) = printTree x +printAstNode (AstCard x) = printTree x +printAstNode (AstNCard x) = printTree x +printAstNode (AstExInteger x) = printTree x +printAstNode (AstName x) = printTree x +printAstNode (AstExp x) = printTree x +printAstNode (AstDecl x) = printTree x +printAstNode (AstQuant x) = printTree x +printAstNode (AstEnumId x) = printTree x +printAstNode (AstModId x) = printTree x +printAstNode (AstLocId x) = printTree x
+ src/Language/Clafer/Intermediate/TypeSystem.hs view
@@ -0,0 +1,484 @@+{-# LANGUAGE NamedFieldPuns #-} +{- + Copyright (C) 2015 Michal Antkiewicz <http://gsd.uwaterloo.ca> + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is furnished to do + so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +-} +module Language.Clafer.Intermediate.TypeSystem where + +import Language.Clafer.Common +import Language.Clafer.Intermediate.Intclafer hiding (uid) + +import Control.Lens ((&), (<&>), (%~)) +import Control.Monad (mplus, liftM) +import Data.List (nub) +import Data.Maybe +import Prelude hiding (exp) + +{- | Example Clafer model used in the various test cases. + +abstract Person + DOB -> integer + +abstract Student : Person + StudentID -> string + +abstract Employee : Person + EmplID -> integer + +Alice : Student + [ this.DOB.ref = 1990 ] + [ this.StudentID.ref = "123Alice" ] + +Bob : Employee + [ this.EmplID.ref = 345 ] + +AliceAndBob -> Person +[ root.AliceAndBob.ref = Alice, Bob ] + +AliceAndBob2 -> Alice ++ Bob +-} + +{- $setup +>>> :m + Control.Monad.List + +TClafer +>>> let tClaferPerson = TClafer [ "Person" ] +>>> let tClaferDOB = TClafer [ "DOB" ] +>>> let tClaferStudent = TClafer [ "Student", "Person" ] +>>> let tClaferStudentID = TClafer [ "StudentID" ] +>>> let tClaferEmployee = TClafer [ "Employee", "Person" ] +>>> let tClaferEmplID = TClafer [ "EmplID" ] +>>> let tClaferAlice = TClafer [ "Alice", "Student", "Person" ] +>>> let tClaferBob = TClafer [ "Bob", "Employee", "Person" ] +>>> let tClaferAliceAndBob = TClafer [ "AliceAndBob" ] +>>> let tClaferAliceAndBob2 = TClafer [ "AliceAndBob2" ] + +TUnion +>>> let tUnionAliceBob = TUnion [ tClaferAlice, tClaferBob ] + +TMap +>>> let tMapDOB = TMap tClaferPerson tClaferDOB +>>> let tDrefMapDOB = TMap tClaferDOB TInteger +>>> let tMapStudentID = TMap tClaferStudent tClaferStudentID +>>> let tDrefMapStudentID = TMap tClaferStudentID TString +>>> let tMapEmplID = TMap tClaferEmplID tClaferEmplID +>>> let tDrefMapEmplID = TMap tClaferEmplID TInteger +>>> let tDrefMapAliceAndBob = TMap tClaferAliceAndBob tClaferPerson +>>> let tDrefMapAliceAndBob2 = TMap tClaferAliceAndBob tUnionAliceBob + +constants +>>> let t1990 = TInteger +>>> let t123Alice = TString +>>> let t345 = TInteger +-} + +-- | Sing +rootTClafer :: IType +rootTClafer = TClafer ["root"] + +-- | Obj +claferTClafer :: IType +claferTClafer = TClafer ["clafer"] + +numeric :: IType -> Bool +numeric TInteger = True +numeric TReal = True +numeric TDouble = True +numeric (TMap _ ta') = numeric ta' +numeric (TUnion un') = any numeric un' +numeric _ = False + +isTInteger :: IType -> Bool +isTInteger TInteger = True +isTInteger (TMap _ ta') = isTInteger ta' +isTInteger (TUnion un') = any isTInteger un' +isTInteger _ = False + +isTString :: IType -> Bool +isTString TString = True +isTString (TMap _ ta') = isTString ta' +isTString (TUnion un') = any isTString un' +isTString _ = False + + +-- | Get TClafer for a given Clafer +-- can only be called after inheritance resolver +getTClafer :: IClafer -> IType +getTClafer iClafer' = case _uid iClafer' of + "root" -> rootTClafer + "clafer" -> claferTClafer + _ -> case _super iClafer' of + Nothing -> TClafer [ _uid iClafer'] + Just super' -> (fromJust $ _iType super') & hi %~ ((:) (_uid iClafer')) + +-- | Get TClafer for a given Clafer by its UID +-- can only be called after inheritance resolver +getTClaferByUID :: UIDIClaferMap -> UID -> Maybe IType +getTClaferByUID uidIClaferMap' uid' = case uid' of + "root" -> Just $ rootTClafer + "clafer" -> Just $ claferTClafer + _ -> findIClafer uidIClaferMap' uid' <&> getTClafer + +-- | Get TClafer for a given Clafer by its UID +-- can only be called after inheritance resolver +getTClaferFromIExp :: UIDIClaferMap -> IExp -> Maybe IType +getTClaferFromIExp uidIClaferMap' (IClaferId _ uid' _ _) = getTClaferByUID uidIClaferMap' uid' +getTClaferFromIExp _ (IInt _) = Just TInteger +getTClaferFromIExp _ (IReal _) = Just TReal +getTClaferFromIExp _ (IDouble _) = Just TDouble +getTClaferFromIExp _ (IStr _) = Just TString +getTClaferFromIExp _ _ = Nothing + +-- | Get TMap for a given reference Clafer. Nothing for non-reference clafers. +-- can only be called after inheritance resolver +getDrefTMap :: IClafer -> Maybe IType +getDrefTMap iClafer' = case _uid iClafer' of + "root" -> Nothing + "clafer" -> Nothing + _ -> TMap <$> (Just $ getTClafer iClafer') <*> (iClafer' & _reference <&> _ref >>= _iType) + +-- | Get TMap for a given Clafer by its UID. Nothing for non-reference clafers. +-- can only be called after inheritance resolver +getDrefTMapByUID :: UIDIClaferMap -> UID -> Maybe IType +getDrefTMapByUID uidIClaferMap' uid' = case uid' of + "root" -> Nothing + "clafer" -> Nothing + _ -> findIClafer uidIClaferMap' uid' >>= getDrefTMap + + +hierarchy :: (Monad m) => UIDIClaferMap -> UID -> m [IClafer] +hierarchy uidIClaferMap' uid' = (case findIClafer uidIClaferMap' uid' of + Nothing -> fail $ "TypeSystem.hierarchy: clafer " ++ uid' ++ "not found!" + Just clafer -> return $ findHierarchy getSuper uidIClaferMap' clafer) + +hierarchyMap :: (Monad m) => UIDIClaferMap -> (IClafer -> a) -> UID -> m [a] +hierarchyMap uidIClaferMap' f c = (case findIClafer uidIClaferMap' c of + Nothing -> fail $ "TypeSystem.hierarchyMap: clafer " ++ c ++ "not found!" + Just clafer -> return $ mapHierarchy f getSuper uidIClaferMap' clafer) + + +{- --------------------------------------- + - Sums, Intersections, and Compositions - + --------------------------------------- -} + +unionType :: IType -> [String] +unionType TString = [stringType] +unionType TReal = [realType] +unionType TDouble = [doubleType] +unionType TInteger = [integerType] +unionType TBoolean = [booleanType] +unionType (TClafer u) = u +unionType (TUnion types) = concatMap unionType types +unionType (TMap _ ta') = unionType ta' + +fromUnionType :: [String] -> Maybe IType +fromUnionType u = + case nub $ u of + ["string"] -> Just TString + ["integer"] -> Just TInteger + ["int"] -> Just TInteger + ["double"] -> Just TDouble + ["real"] -> Just TReal + [] -> Nothing + u' -> Just $ TClafer u' + +{- | Union the two given types +>>> TString +++ TString +TString + +Unions with only one type should be collapsed. +>>> TUnion [TString] +++ TString +TString + +>>> TString +++ TInteger +TUnion {_un = [TString,TInteger]} + +>>> TString +++ TUnion [TInteger] +TUnion {_un = [TString,TInteger]} + +>>> TUnion [TString] +++ TInteger +TUnion {_un = [TString,TInteger]} + +>>> TUnion [TString] +++ TUnion[TInteger] +TUnion {_un = [TString,TInteger]} + +>>> TUnion [TString] +++ TUnion[TInteger] +++ TInteger +++ TString +TUnion {_un = [TString,TInteger]} + +Should return TUnion {_un = [TClafer {_hi = ["Alice","Student","Person"]},TClafer {_hi = ["Bob","Employee","Person"]}]} +>>> tClaferAlice +++ tClaferBob +TClafer {_hi = ["Alice","Student","Person","Bob","Employee"]} + +>>> tClaferAlice +++ tClaferAlice +TClafer {_hi = ["Alice","Student","Person"]} +-} +(+++) :: IType -> IType -> IType +TString +++ TString = TString +TReal +++ TReal = TReal +TDouble +++ TDouble = TDouble +TInteger +++ TInteger = TInteger +t1@(TClafer u1) +++ t2@(TClafer u2) = if t1 == t2 + then t1 + else (TClafer $ nub $ u1 ++ u2) -- should be TUnion [t1,t2] +(TMap so1 ta1) +++ (TMap so2 ta2) = (TMap (so1 +++ so2) (ta1 +++ ta2)) +(TUnion un1) +++ (TUnion un2) = collapseUnion (TUnion $ nub $ un1 ++ un2) +(TUnion un1) +++ t2 = collapseUnion (TUnion $ nub $ un1 ++ [t2]) +t1 +++ (TUnion un2) = collapseUnion (TUnion $ nub $ t1:un2) +t1 +++ t2 = if t1 == t2 + then t1 + else TUnion [t1, t2] + +collapseUnion :: IType -> IType +collapseUnion (TUnion [t]) = t +collapseUnion t = t + +-- original version +-- (+++) :: IType -> IType -> IType +-- t1 +++ t2 = fromJust $ fromUnionType $ unionType t1 ++ unionType t2 + +{- | Intersection of two types. +>>> runListT $ intersection undefined TString TString +[Just TString] + +>>> runListT $ intersection undefined TInteger TString +[Nothing] + +>>> runListT $ intersection undefined TInteger TReal +[Just TReal] + +>>> runListT $ intersection undefined tDrefMapDOB TInteger +[Just TInteger] + +Cannot assign a TReal to a map to TInteger +>>> runListT $ intersection undefined tDrefMapDOB TReal +[Nothing] + +Cannot assign a TReal to a map to TInteger +>>> runListT $ intersection undefined TReal tDrefMapDOB +[Nothing] + +-} + +intersection :: Monad m => UIDIClaferMap -> IType -> IType -> m (Maybe IType) +intersection _ TBoolean TBoolean = return $ Just TBoolean +intersection _ TString TString = return $ Just TString +intersection _ TReal TReal = return $ Just TReal +intersection _ TReal TDouble = return $ Just TReal +intersection _ TDouble TReal = return $ Just TReal +intersection _ TReal TInteger = return $ Just TReal +intersection _ TInteger TReal = return $ Just TReal +intersection _ TDouble TDouble = return $ Just TDouble +intersection _ TDouble TInteger = return $ Just TDouble +intersection _ TInteger TDouble = return $ Just TDouble +intersection _ TInteger TInteger = return $ Just TInteger +intersection uidIClaferMap' (TUnion t1s) t2@(TClafer _) = do + t1s' <- mapM (intersection uidIClaferMap' t2) t1s + return $ case catMaybes t1s' of + [] -> Nothing + [t] -> Just t + t1s'' -> Just $ TUnion t1s'' +intersection uidIClaferMap' t1@(TClafer _) (TUnion t2s) = do + t2s' <- mapM (intersection uidIClaferMap' t1) t2s + return $ case catMaybes t2s' of + [] -> Nothing + [t] -> Just t + t2s'' -> Just $ TUnion t2s'' +intersection uidIClaferMap' t@(TClafer ut1) (TClafer ut2) = if ut1 == ut2 + then return $ Just t + else do + h1 <- (mapM (hierarchyMap uidIClaferMap' _uid) ut1) + h2 <- (mapM (hierarchyMap uidIClaferMap' _uid) ut2) + return $ fromUnionType $ catMaybes [contains (head u1) u2 `mplus` contains (head u2) u1 | u1 <- h1, u2 <- h2 ] + where + contains i is = if i `elem` is then Just i else Nothing +intersection uidIClaferMap' (TMap _ ta1) (TMap _ ta2) = intersection uidIClaferMap' ta1 ta2 +intersection uidIClaferMap' (TMap _ ta1) ot2 = do + coercedType <- intersection uidIClaferMap' ta1 ot2 + -- that means ot2 was coerced to ta1, so it's safe + return $ if (Just ta1) == coercedType then coercedType else Nothing +intersection uidIClaferMap' ot1 (TMap _ ta2) = do + coercedType <- intersection uidIClaferMap' ot1 ta2 + -- that means ot2 was coerced to ta1, so it's safe + return $ if (Just ta2) == coercedType then coercedType else Nothing +intersection _ _ _ = do + -- traceM $ "(DEBUG) TypeSystem.intersection: cannot intersect incompatible types: '" + -- ++ show t1 + -- ++ "'' and '" + -- ++ show t2 + -- ++ "'" + return Nothing + +-- old version +-- intersection :: Monad m => UIDIClaferMap -> IType -> IType -> m (Maybe IType) +-- intersection uidIClaferMap' t1 t2 = do +-- h1 <- (mapM (hierarchyMap uidIClaferMap' _uid) $ unionType t1) +-- h2 <- (mapM (hierarchyMap uidIClaferMap' _uid) $ unionType t2) +-- return $ fromUnionType $ catMaybes [contains (head u1) u2 `mplus` contains (head u2) u1 | u1 <- h1, u2 <- h2 ] +-- where +-- contains i is = if i `elem` is then Just i else Nothing + + + +{- | Compute the type of sequential composition of two types +>>> runListT $ composition undefined TString TString +[Nothing] + +>>> runListT $ composition undefined TInteger TString +[Nothing] + +>>> runListT $ composition undefined TInteger TReal +[Nothing] + +>>> runListT $ composition undefined tDrefMapDOB TInteger +[Just (TMap {_so = TClafer {_hi = ["DOB"]}, _ta = TInteger})] + +Cannot assign a TReal to a map to TInteger, should return [Nothing] +>>> runListT $ composition undefined tDrefMapDOB TReal +[Just (TMap {_so = TClafer {_hi = ["DOB"]}, _ta = TReal})] + +Cannot assign a TInteger to a map to TInteger +>>> runListT $ composition undefined TInteger tDrefMapDOB +[Nothing] + +Cannot assign a TReal to a map to TInteger +>>> runListT $ composition undefined TReal tDrefMapDOB +[Nothing] + +>>> runListT $ composition undefined tDrefMapDOB (TMap TReal TString) +[Just (TMap {_so = TClafer {_hi = ["DOB"]}, _ta = TString})] + +The following should return [Nothing] +>>> runListT $ composition undefined (TMap TString TReal) (TMap TInteger TString) +[Just (TMap {_so = TString, _ta = TString})] +-} +composition :: Monad m => UIDIClaferMap -> IType -> IType -> m (Maybe IType) +composition uidIClaferMap' (TMap so1 ta1) (TMap so2 ta2) = do + -- check whether we can compose? + _ <- intersection uidIClaferMap' ta1 so2 + return $ Just $ TMap so1 ta2 +composition uidIClaferMap' ot1 (TMap so2 ta2) = do + ot1' <- intersection uidIClaferMap' ot1 so2 + return $ TMap <$> ot1' <*> Just ta2 +composition uidIClaferMap' (TMap so1 ta1) ot2 = do + ot2' <- intersection uidIClaferMap' ta1 ot2 + return $ TMap so1 <$> ot2' +composition _ _ _ = do + -- traceM $ "(DEBUG) ResolverType.composition: cannot compose incompatible types: '" + -- ++ show t1 + -- ++ "'' and '" + -- ++ show t2 + -- ++ "'" + return Nothing + +addHierarchy :: UIDIClaferMap -> IType -> IType +addHierarchy uidIClaferMap' (TClafer [uid']) = TClafer $ mapHierarchy _uid getSuper uidIClaferMap' $ fromJust $ findIClafer uidIClaferMap' uid' +addHierarchy uidIClaferMap' (TMap so' ta') = TMap (addHierarchy uidIClaferMap' so') (addHierarchy uidIClaferMap' ta') +addHierarchy uidIClaferMap' (TUnion un') = TUnion $ map (addHierarchy uidIClaferMap') un' +addHierarchy _ x = x + +closure :: Monad m => UIDIClaferMap -> [String] -> m [String] +closure uidIClaferMap' ut = concat `liftM` mapM (hierarchyMap uidIClaferMap' _uid) ut + +getTMaps :: UIDIClaferMap -> IType -> [IType] +getTMaps uidIClaferMap' (TClafer hi') = catMaybes $ map (getDrefTMapByUID uidIClaferMap') hi' +getTMaps uidIClaferMap' (TMap _ ta') = getTMaps uidIClaferMap' ta' +getTMaps uidIClaferMap' (TUnion un') = concatMap (getTMaps uidIClaferMap') un' +getTMaps _ _ = [] + +getTClafers :: UIDIClaferMap -> IType -> [IType] +getTClafers uidIClaferMap' (TClafer hi') = catMaybes $ map (getTClaferByUID uidIClaferMap') hi' +getTClafers uidIClaferMap' (TMap _ ta') = getTClafers uidIClaferMap' ta' +getTClafers uidIClaferMap' (TUnion un') = concatMap (getTClafers uidIClaferMap') un' +getTClafers _ _ = [] + + +{- Coersions -} + +coerce :: IType -> IType -> IType +-- basic coersions +coerce TReal TReal = TReal +coerce TReal TInteger = TReal +coerce TInteger TReal = TReal +coerce TReal TDouble = TReal +coerce TDouble TReal = TReal +coerce TDouble TDouble = TDouble +coerce TDouble TInteger = TDouble +coerce TInteger TDouble = TDouble +coerce TInteger TInteger = TInteger +-- reduce complex types to simple ones +coerce (TMap s1 t1) t2 = TMap s1 $ coerce t1 t2 +coerce t1 (TMap s2 t2) = TMap s2 $ coerce t1 t2 +coerce x y = error $ "TypeSystem.coerce: Cannot coerce not numeric: " ++ show x ++ " and " ++ show y + + +{- | Return the type if it's possible to coerce the right type + +coerceRight TString TInteger +Nothing + +>>> coerceRight TInteger TInteger +Just TInteger + +>>> coerceRight TDouble TInteger +Just TDouble + +>>> coerceRight TReal TDouble +Just TReal + +>>> coerceRight TInteger TDouble +Nothing + +>>> coerceRight TDouble TReal +Nothing +-} +coerceRight :: IType -> IType -> Maybe IType +coerceRight lt rt = let + coercedRType = coerce lt rt + in + if lt == coercedRType then Just lt else Nothing + +{- Note about intersections and unions + +Refinement Intersections +======================== + +http://cstheory.stackexchange.com/questions/20536/what-are-the-practical-issues-with-intersection-and-union-types +"the intersection/union of two types can be formed only if they refine the same archetype" + +In Clafer, that means that for +abstract Person +abstract Student : Person +Alice : Student -- AT = TClafer [ Alice, Student, Person ] +Bob : Person -- BT = TClafer [ Bob, Person ] + +then + +AT +++ BT = TClafer [ Person ] +AT *** BT = TClafer [ Person ] + + +Unrestricted Intersections +========================== + +http://www.cs.cmu.edu/~joshuad/papers/intcomp/Dunfield12_elaboration.pdf + +Subtyping Union Types +http://www.pps.univ-paris-diderot.fr/~vouillon/publi/subtyping-csl.pdf +-}
src/Language/ClaferT.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE RankNTypes #-} {- - Copyright (C) 2012-2014 Kacper Bak, Jimmy Liang, Michal Antkiewicz <http://gsd.uwaterloo.ca> + Copyright (C) 2012-2015 Kacper Bak, Jimmy Liang, Michal Antkiewicz <http://gsd.uwaterloo.ca> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in
test/Functions.hs view
@@ -1,5 +1,5 @@ {- - Copyright (C) 2013 Luke Brown <http://gsd.uwaterloo.ca> + Copyright (C) 2013-2015 Luke Brown, Michal Antkiewicz <http://gsd.uwaterloo.ca> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in @@ -48,6 +48,13 @@ iModule <- desugar Nothing compile iModule generate + +getCompilerResult :: InputModel -> CompilerResult +getCompilerResult model = case compileOneFragment defaultClaferArgs{keep_unused=True} model of + Left errors -> error $ show errors + Right compilerResultMap -> case Map.lookup Alloy compilerResultMap of + Nothing -> error "No Alloy result in the result map" + Just compilerResult -> compilerResult compiledCheck :: Either a b -> Bool compiledCheck (Left _) = False
test/Suite/Positive.hs view
@@ -70,7 +70,7 @@ @? "nonempty card test failed. Files contain empty cardinalities after fully compiling") where getIR (file', (Right (resultMap))) = - case Map.lookup Alloy42 resultMap of + case Map.lookup Alloy resultMap of Just CompilerResult{claferEnv = ClaferEnv{cIr = Just (iMod, _, _)}} -> [(file', iMod)] _ -> [] getIR (_, _) = [] @@ -79,5 +79,5 @@ case_stringEqual :: Assertion case_stringEqual = do - let strMap = stringMap $ fromJust $ Map.lookup Alloy42 $ fromRight $ compileOneFragment defaultClaferArgs "A\n text1 -> string = \"some text\"\n text2 -> string = \"some text\"" + let strMap = stringMap $ fromJust $ Map.lookup Alloy $ fromRight $ compileOneFragment defaultClaferArgs "A\n text1 -> string = \"some text\"\n text2 -> string = \"some text\"" (Map.size strMap) == 1 @? "Error: same string assigned to differnet numbers!"
test/Suite/Redefinition.hs view
@@ -60,8 +60,8 @@ case_NestedInheritanceMatchTest :: Assertion case_NestedInheritanceMatchTest = case compileOneFragment defaultClaferArgs model of Left errors -> assertFailure $ show errors - Right compilerResultMap -> case M.lookup Alloy42 compilerResultMap of - Nothing -> assertFailure "No Alloy42 result in the result map" + Right compilerResultMap -> case M.lookup Alloy compilerResultMap of + Nothing -> assertFailure "No Alloy result in the result map" Just compilerResult -> let uidIClaferMap' :: StringMap IClafer uidIClaferMap' = uidIClaferMap $ claferEnv compilerResult
test/Suite/SimpleScopeAnalyser.hs view
@@ -131,7 +131,7 @@ let -- use simple scope inference (Right compilerResultMap) = compileOneFragment defaultClaferArgs model - (Just compilerResult) = M.lookup Alloy42 compilerResultMap + (Just compilerResult) = M.lookup Alloy compilerResultMap computedScopesSet :: M.Map UID Integer computedScopesSet = M.fromList $ scopesList compilerResult @@ -146,7 +146,7 @@ let -- use simple scope inference (Right compilerResultMap) = compileOneFragment defaultClaferArgs model - (Just compilerResult) = M.lookup Alloy42 compilerResultMap + (Just compilerResult) = M.lookup Alloy compilerResultMap Just (iModule, _, _) = cIr $ claferEnv compilerResult qNameMaps = deriveQNameMaps iModule
+ test/Suite/TypeSystem.hs view
@@ -0,0 +1,89 @@+{-# LANGUAGE TemplateHaskell #-} +{- + Copyright (C) 2015 Michal Antkiewicz <http://gsd.uwaterloo.ca> + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is furnished to do + so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +-} +module Suite.TypeSystem (tg_Test_Suite_TypeSystem) where + +import Language.Clafer +import Language.ClaferT +import Language.Clafer.Common +import Language.Clafer.Intermediate.Intclafer +import Language.Clafer.Intermediate.TypeSystem + +import Functions + +import qualified Data.Map as M +import Data.Maybe (isJust) +import Data.StringMap +import Test.Tasty +import Test.Tasty.HUnit +import Test.Tasty.TH + +tg_Test_Suite_TypeSystem :: TestTree +tg_Test_Suite_TypeSystem = $(testGroupGenerator) + +model :: String +model = unlines + [ "abstract A" -- c0_A + , " abstract as -> A *" -- c0_as + , "abstract B : A" -- c0_B + , " as : as -> B *" -- c1_as + , "b : B" -- c0_b + , " [ as = b ]" + , " [ as.ref = b ]" + ] + +case_TypeSystemTest :: Assertion +case_TypeSystemTest = case compileOneFragment defaultClaferArgs{keep_unused=True} model of + Left errors -> assertFailure $ show errors + Right compilerResultMap -> case M.lookup Alloy compilerResultMap of + Nothing -> assertFailure "No Alloy result in the result map" + Just compilerResult -> + let + um' :: StringMap IClafer + um' = uidIClaferMap $ claferEnv compilerResult + + root_TClafer = getTClaferByUID um' "root" + clafer_TClafer = getTClaferByUID um' "clafer" + c0_A_TClafer = getTClaferByUID um' "c0_A" + c0_A_TClaferR = Just $ TClafer [ "c0_A" ] + c0_A_TMap = getDrefTMapByUID um' "c0_A" + c0_as_TMap = getDrefTMapByUID um' "c0_as" + c0_as_TMapR = Just (TMap {_so = TClafer {_hi = ["c0_as"]}, _ta = TClafer {_hi = ["c0_A"]}}) + c0_B_TClafer = getTClaferByUID um' "c0_B" + c0_B_TClaferR = Just $ TClafer [ "c0_B", "c0_A" ] + c1_as_TClafer = getTClaferByUID um' "c1_as" + c1_as_TClaferR = Just $ TClafer [ "c1_as", "c0_as" ] + c1_as_TMap = getDrefTMapByUID um' "c1_as" + c1_as_TMapR = Just (TMap {_so = TClafer {_hi = ["c1_as","c0_as"]}, _ta = TClafer {_hi = [ "c0_B", "c0_A" ]}}) + c0_b_TClafer = getTClaferByUID um' "c0_b" + c0_b_TClaferR = Just $ TClafer [ "c0_b", "c0_B", "c0_A" ] + in do + (isJust $ findIClafer um' "c0_A") @? ("Clafer c0_A not found" ++ show um') + root_TClafer == Just rootTClafer @? ("Incorrect class type for 'root':\ngot '" ++ show root_TClafer ++ "'\ninstead of '" ++ show rootTClafer ++ "'") + clafer_TClafer == Just claferTClafer @? ("Incorrect class type for 'clafer':\ngot '" ++ show clafer_TClafer ++ "'\ninstead of '" ++ show claferTClafer ++ "'") + c0_A_TClafer == c0_A_TClaferR @? ("Incorrect class type for 'c0_A':\ngot '" ++ show c0_A_TClafer ++ "'\ninstead of '" ++ show c0_A_TClaferR ++ "'") + c0_A_TMap == Nothing @? ("Incorrect map type for 'c0_A':\ngot '" ++ show c0_A_TMap ++ "'\nbut it is \nt a reference.") + c0_as_TMap == c0_as_TMapR @? ("Incorrect map type for 'c0_as':\ngot '" ++ show c0_as_TMap ++ "'\ninstead of '" ++ show c0_as_TMapR ++ "'") + c0_B_TClafer == c0_B_TClaferR @? ("Incorrect class type for 'c0_B':\ngot '" ++ show c0_B_TClafer ++ "'\ninstead of '" ++ show c0_B_TClaferR ++ "'") + c1_as_TClafer == c1_as_TClaferR @? ("Incorrect class type for 'c1_as':\ngot '" ++ show c1_as_TClafer ++ "'\ninstead of '" ++ show c1_as_TClaferR ++ "'") + c1_as_TMap == c1_as_TMapR @? ("Incorrect map type for 'c1_as':\ngot '" ++ show c1_as_TMap ++ "'\ninstead of '" ++ show c1_as_TMapR ++ "'") + c0_b_TClafer == c0_b_TClaferR @? ("Incorrect class type for 'c0_b':\ngot '" ++ show c0_b_TClafer ++ "'\ninstead of '" ++ show c0_b_TClaferR ++ "'")
+ test/doctests.hs view
@@ -0,0 +1,4 @@+import Test.DocTest + +main :: IO () +main = doctest ["-isrc", "src/Language/Clafer/Intermediate/TypeSystem.hs"]
test/test-suite.hs view
@@ -33,6 +33,7 @@ import Suite.Negative import Suite.SimpleScopeAnalyser import Suite.Redefinition +import Suite.TypeSystem import Functions import Test.Tasty import Test.Tasty.HUnit @@ -43,7 +44,8 @@ main :: IO () main = defaultMain $ testGroup "Tests" - [ tg_Test_Suite_Redefinition + [ tg_Test_Suite_TypeSystem + , tg_Test_Suite_Redefinition , tg_Main_Test_Suite , tg_Test_Suite_Positive , tg_Test_Suite_Negative @@ -74,7 +76,7 @@ case_FQMapLookup :: Assertion case_FQMapLookup = do let - (Just (iModule, _, _)) = cIr $ claferEnv $ fromJust $ Map.lookup Alloy42 $ fromRight $ compileOneFragment defaultClaferArgs model + (Just (iModule, _, _)) = cIr $ claferEnv $ fromJust $ Map.lookup Alloy $ fromRight $ compileOneFragment defaultClaferArgs model qNameMaps = deriveQNameMaps iModule [ "c0_a" ] == getUIDs qNameMaps "::a" @? "UID for `::a` different from `c0_a`" [ "c0_b" ] == getUIDs qNameMaps "::a::b" @? "UID for `::a::b` different from `c0_b`" @@ -94,7 +96,7 @@ case_AllClafersGenerics :: Assertion case_AllClafersGenerics = do let - (Just (iModule, _, _)) = cIr $ claferEnv $ fromJust $ Map.lookup Alloy42 $ fromRight $ compileOneFragment defaultClaferArgs model + (Just (iModule, _, _)) = cIr $ claferEnv $ fromJust $ Map.lookup Alloy $ fromRight $ compileOneFragment defaultClaferArgs model allClafers :: [ IClafer ] allClafers = universeOn biplate iModule allClafersUids = map _uid allClafers
tools/Makefile view
@@ -17,6 +17,5 @@ mv alloy4.2_2015-02-22.jar alloy4.2.jar; \ fi - javac XsdCheck.java clean: find . -type f -name '*.class' -print0 | xargs -0 rm -f
− tools/XsdCheck.class
binary file changed (1787 → absent bytes)
− tools/XsdCheck.java
@@ -1,47 +0,0 @@-import java.io.File; -import java.io.IOException; -import javax.xml.transform.Source; -import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Validator; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; - -/** - * Reads in a XSD schema and a XML file and validates the document - * against the schema. - * - * @author Jimmy Liang - */ -public class XsdCheck { - - public static void main(String[] args) throws IOException { - if (args.length < 2) { - System.out.println("Requires two arguments: <xsd-file> <xml-file>"); - System.exit(1); - } - - File xsd = new File(args[0]); - File xml = new File(args[1]); - - SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); - - try { - Schema schema = factory.newSchema(xsd); - - Validator validator = schema.newValidator(); - - Source source = new StreamSource(xml); - - validator.validate(source); - } catch (SAXParseException e) { - System.out.println("XML Validation error on line " + e.getLineNumber() + ", column " + e.getColumnNumber()); - System.out.println(e.getMessage()); - } catch (SAXException e) { - System.out.println("XML Validation error."); - System.out.println(e.getMessage()); - } - } -} -