ottparse-pretty (empty) → 0.1
raw patch · 4 files changed
+106/−0 lines, 4 filesdep +basedep +containersdep +parsecsetup-changed
Dependencies added: base, containers, parsec, split, uniplate
Files
- LICENSE +30/−0
- Setup.hs +2/−0
- ottparse-pretty.cabal +37/−0
- src/ottparse-pretty.hs +37/−0
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c)2011, Brent Yorgey++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Brent Yorgey nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ ottparse-pretty.cabal view
@@ -0,0 +1,37 @@+Name: ottparse-pretty+Version: 0.1+Synopsis: Pretty-printer for Ott parse trees+Description: Ott (<http://www.cl.cam.ac.uk/~pes20/ott/>) is a tool for+ writing formal definitions of programming+ languages and calculi. Often the Ott grammars+ one defines end up being ambiguous, and Ott+ signals its displeasure by spewing forth several+ massive parse trees in a format requiring+ formidable patience to read. Finding the slight+ differences between two such parse trees is an+ exercise in seizure-inducing tedium.+ .+ To the rescue comes ottparse-pretty! Simply+ paste in each parse and it is shown to you in a+ nicely formatted tree form with all the extra+ meaningless cruft removed.+License: BSD3+License-file: LICENSE+Author: Brent Yorgey+Maintainer: byorgey@cis.upenn.edu+Category: Text+Build-type: Simple+Cabal-version: >=1.6++Source-repository head+ type: darcs+ location: http://code.haskell.org/~byorgey/code/ottparse-pretty++Executable ottparse-pretty+ hs-source-dirs: src+ Main-is: ottparse-pretty.hs+ Build-depends: base >= 4.0 && < 4.5,+ split >= 0.1 && < 0.2,+ parsec >= 3.0 && < 3.2,+ containers >= 0.3 && < 0.5,+ uniplate >= 1.6 && < 1.7
+ src/ottparse-pretty.hs view
@@ -0,0 +1,37 @@+-----------------------------------------------------------------------------+-- |+-- Module : Main+-- Copyright : (c) Brent Yorgey 2011+-- License : BSD-style (see LICENSE)+-- Maintainer : Brent Yorgey <byorgey@cis.upenn.edu>+-- Stability : experimental+--+-- Ott (<http://www.cl.cam.ac.uk/~pes20/ott/>) is a tool for writing+-- formal definitions of programming languages and calculi. Often the+-- Ott grammars one defines end up being ambiguous, and Ott signals --+its displeasure by spewing forth several massive parse trees in a --+format requiring formidable patience to read. Finding the slight --+differences between two such parse trees is an exercise in --+seizure-inducing tedium. -- -- To the rescue comes ottparse-pretty!+Simply paste in each parse -- and it is shown to you in a nicely+ formatted tree form with all the -- extra meaningless cruft removed.+-----------------------------------------------------------------------------+import Text.Ott.Pretty++import System.IO (hSetBuffering, BufferMode(..), stdout)+import Control.Monad (forever)+import Text.Parsec (runParser)+import Data.Tree (drawTree)++main :: IO ()+main = do+ hSetBuffering stdout NoBuffering+ forever interpTree++interpTree :: IO ()+interpTree = do+ putStr "> "+ tStr <- getLine+ case runParser parseTree () "" tStr of+ Left err -> print err+ Right t -> putStr $ drawTree (normalizeTree t)