Readme for beautifHOL-0.10

# README for beautifHOL, a HOL prettyprinter # Based on the paper found at http://www.cs.indiana.edu/~lepike/pub_pages/pphol.html # Lee Pike <lee-pike-@-gma-il-.com> (remove dashes) # Jan 5, 2009 # Copyright 2008 # This file is part of beautifHOL. # BSD3. This README contains the following sections: * Program Description * License information * Installation information * Usage information * How to modify the program * Todos (including known bugs) ==DESCRIPTION== This is a pretty-printer for higher-order logic (HOL). It reads in a formula and outputs it to standard out. More information about the pretty-printer can be found in the paper, "How to Pretty-Print a Long Formula" <http://www.cs.indiana.edu/~lepike/pubs/pike-holpp.pdf>. ==LICENSE== BSD3 license. ==INSTALLATION== This program is distributed as a Cabal package, a packaging system for Haskell programs. For information on how to install a Cabal package, see <http://www.haskell.org/haskellwiki/Cabal/How_to_install_a_Cabal_package>. The easiest way to install a Cabal package is to use cabal-install: <http://hackage.haskell.org/trac/hackage/wiki/CabalInstall>. Instructions for getting cabal-install are located there. ==USAGE== If you install this program using Cabal (describe above), then the executable, beautifulHOL, should be in your path. Then issue > beautifHOL to interact with the program in a read-eval-print loop. From there, you can enter HOL formulas. Examples of the syntax can be found in the file formulas.txt. Be sure to terminate a formula with a semicolon. After entering a formula, its pretty-printed rendering will be sent to standard out. The available options to the program can be seen by issuing > beautifHOL --help Among others, there is an option to suppress labels (--nolabel) and an option to read in a set of formulas from a file and print their renderings to standard-out. For example, issuing > beautifHOL --f formulas.txt will render all the example formulas. ==MODIFYING THE PROGRAM== The syntax of the current input language is documented in <http://www.cs.indiana.edu/~lepike/pub_pages/docHOL.pdf>. To modify the input language to use with other variants of HOL, you will need the BNF Converter (BNFC). BNFC is an GPL-licensed that generates a compiler-front end from a labeled Bakus Normal Form language specification. It also generates docs, etc. BNFC is available at <http://www.cs.chalmers.se/Cs/Research/Language-technology/BNFC/>. The latest version can be obtained by issuing darcs get --partial http://www.cs.chalmers.se/Cs/Research/Language-technology/darcs/BNFC/ There are only three files you need to modify: * HOL.cf, the BNF specification of the input grammar, read in by BNFC. * PrintHOL.hs, the guts of the pretty-printer. * ConfigHOL.hs, ==TODOs== ==Code Cleanups== * Remove dead code. * Run HPC and HLint over this. * How spaces are handled needs to be reimplemented. * Should be reimplemented to use SPJ/John Hughes pretty-printing library: pretty on Hackage <http://hackage.haskell.org/cgi-bin/hackage-scripts/package/pretty>. ==New Functionality== * Desired new functionality is described in the accompanying paper, "How to Pretty-Print a Long Formula" (pphol.pdf). * Better parse-error messages. ==Bugs/Issues== * Can't have a breakline char -- it'll break things if it's really a string (e.g., Latex). * There are known issues with using different widths for spcStr, argSepStr, etc. * Parsing doesn't work if there is whitespace between relation or function identifiers and parentheses. * In ConfigHOL.hs, "in" is defined "in " to fix a pretty-printing bug.