real: remove ebnf2ps
authorMichal Terepeta <michal.terepeta@gmail.com>
Tue, 14 Feb 2017 22:01:52 +0000 (17:01 -0500)
committerBen Gamari <ben@smart-cactus.org>
Tue, 14 Feb 2017 22:01:52 +0000 (17:01 -0500)
Summary:
The benchmark doesn't compile and even after fixing, it runs in about
0.006s. The compile time is super fast as well (tiny modules).  So it
seems like another candidate for removal.

Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com>
Test Plan: run nofib

Reviewers: goldfire, bgamari

Reviewed By: bgamari

Differential Revision: https://phabricator.haskell.org/D3087

28 files changed:
real/Makefile
real/ebnf2ps/AbstractSyntax.hs [deleted file]
real/ebnf2ps/Color.hs [deleted file]
real/ebnf2ps/CommandLine.hs [deleted file]
real/ebnf2ps/CommandLineFlags [deleted file]
real/ebnf2ps/EbnfGrammar.hs [deleted file]
real/ebnf2ps/EbnfLayout.hs [deleted file]
real/ebnf2ps/FigOutput.hs [deleted file]
real/ebnf2ps/Fonts.hs [deleted file]
real/ebnf2ps/GrammarTransform.hs [deleted file]
real/ebnf2ps/HappyParser.ly [deleted file]
real/ebnf2ps/IOSupplement.hs [deleted file]
real/ebnf2ps/Info.hs [deleted file]
real/ebnf2ps/Lexer.hs [deleted file]
real/ebnf2ps/Main.hs [deleted file]
real/ebnf2ps/Makefile [deleted file]
real/ebnf2ps/Parsers.hs [deleted file]
real/ebnf2ps/PsOutput.hs [deleted file]
real/ebnf2ps/README [deleted file]
real/ebnf2ps/StringMatch.hs [deleted file]
real/ebnf2ps/Times-Roman.afm [deleted file]
real/ebnf2ps/doc.ps [deleted file]
real/ebnf2ps/doc.tex [deleted file]
real/ebnf2ps/ebnf.BNF [deleted file]
real/ebnf2ps/ebnf2ps.stdin [deleted file]
real/ebnf2ps/ebnf2ps.stdout [deleted file]
real/ebnf2ps/gofer.BNF [deleted file]
real/ebnf2ps/regular.BNF [deleted file]

index e1a158d..b109b91 100644 (file)
@@ -7,7 +7,7 @@ SUBDIRS = anna bspt cacheprof compress compress2 fem fluid fulsom gamteb gg \
 
 # Omitted: 
 #      HMMS    binary file endian-ness problems
-OTHER_SUBDIRS = HMMS PolyGP ebnf2ps linear rx
+OTHER_SUBDIRS = HMMS PolyGP linear rx
 
 include $(TOP)/mk/target.mk
 
diff --git a/real/ebnf2ps/AbstractSyntax.hs b/real/ebnf2ps/AbstractSyntax.hs
deleted file mode 100644 (file)
index ca63b24..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-module AbstractSyntax (Production (..)) where
--- Copyright 1994 by Peter Thiemann
-
-data Production
-       = ProdFile [Production]
-       | ProdProduction String [String] Production         -- optional print name
-       | ProdTerm [Production]                             -- an alternative of terms
-       | ProdFactor [Production]                           -- a sequence of factors
-       | ProdNonterminal String
-       | ProdTerminal String
-       | ProdOption Production
-       | ProdRepeat Production
-       | ProdRepeatWithAtom Production Production
-       | ProdRepeat1 Production
-       | ProdPlus                                          -- a helper
-       | ProdSlash Production                              -- another helper
-       deriving Eq
-
diff --git a/real/ebnf2ps/Color.hs b/real/ebnf2ps/Color.hs
deleted file mode 100644 (file)
index b632b57..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
---                            -*- Mode: Haskell -*- 
--- Copyright 1994 by Peter Thiemann
--- Color.hs --- string converter for colors
--- Author          : Peter Thiemann
--- Created On      : Thu Dec  2 16:58:33 1993
--- Last Modified By: Peter Thiemann
--- Last Modified On: Fri Dec  3 14:13:34 1993
--- Update Count    : 3
--- Status          : Unknown, Use with caution!
--- 
--- $Locker:  $
--- $Log: Color.hs,v $
--- Revision 1.3  1999/01/18 19:38:46  sof
--- Misc (backward compatible) changes to make srcs acceptable
--- to a Haskell 98 compiler.
---
--- Revision 1.2  1996/07/25 21:23:51  partain
--- Bulk of final changes for 2.01
---
--- Revision 1.1  1996/01/08 20:02:35  partain
--- Initial revision
---
--- Revision 1.1  1994/03/15  15:34:53  thiemann
--- Initial revision
---
--- 
-
-module Color where
--- (Color (..), lookupColor, showsColor, prepareColors)
-
-import Data.Char -- 1.3
-import Data.List ((\\)) -- 1.3
-
-type Color = (Int, Int, Int)
-
-noColor :: Color
-noColor = (-1, -1, -1)
-
-{-
-readColor :: String -> Color
-readColor =  readColor1 . map toLower
-
-readColor1 :: String -> Color
-readColor1 ('b':'l':'a':_) = 0
-readColor1 ('b':'l':'u':_) = 1
-readColor1 ('g':_)         = 2
-readColor1 ('c':_)        = 3
-readColor1 ('r':_)         = 4
-readColor1 ('m':_)         = 5
-readColor1 ('y':_)        = 6
-readColor1 ('w':_)        = 7
-readColor1 _              = -1
--}
-
-lookupColor :: String -> [(String, (a, b, c))] -> (a, b, c)
-lookupColor colorName colorTable =
-       head [(r,g,b) | (c,(r,g,b)) <- colorTable, c == map toLower colorName]
-
-showsColor :: Color -> ShowS
-showsColor    (r,g,b) =  showString " (" . shows r . showChar ',' .
-                                           shows g . showChar ',' .
-                                          shows b . showChar ')'
-
-prepareColors rgbFile colors = 
-       decodeColors (map (map toLower) colors) (fallBackRgb++parsedRgbFile) []
-  where parsedRgbFile =  (map parseLine (lines rgbFile))
-
-decodeColors [] parsedRgbFile decoded = decoded
-decodeColors clrs [] decoded = [(name,(128,128,128)) | name <- clrs ]++decoded
-decodeColors clrs ((r,g,b,name):parsedRgbFile) decoded
-       = decodeColors (clrs \\ found) parsedRgbFile (foundDecoded++decoded)
-       where found = [ c | c <- clrs, name == c ]
-             foundDecoded = [ (c,(r,g,b)) | c <- found ]
-
-parseLine str = let (r,restr):_ = reads{-was:readDec-} (skipWhite str)
-                   (g,restg):_ = reads{-was:readDec-} (skipWhite restr)
-                   (b,restb):_ = reads{-was:readDec-} (skipWhite restg)
-                   name = skipWhite restb
-               in  (r,g,b,name)
-  where skipWhite = dropWhile isSpace
-
-fallBackRgb :: [(Int,Int,Int,String)]
-fallBackRgb  = [
-       (  0,  0,  0,"black"),
-       (  0,  0,255,"blue"),
-       (  0,255,  0,"green"),
-       (  0,255,255,"cyan"),
-       (255,  0,  0,"red"),
-       (255,  0,255,"magenta"),
-       (255,255,  0,"yellow"),
-       (255,255,255,"white")]
-
-showsPsColor (r,g,b) = showChar ' ' . shows r .
-                       showChar ' ' . shows g .
-                       showChar ' ' . shows b .
-                       showString " scol"
-
-showsFigColor (r,g,b) = showChar ' ' . shows (minPosition 0 (-1,32768*32768)
-       [ (x-r)*(x-r) + (y-g)*(y-g) + (z-b)*(z-b) | (x,y,z,_) <- fallBackRgb ])
-
---
--- find position of minimal element in list
---
-minPosition i (pos,min) []       = pos
-minPosition i (pos,min) (x:rest) | x < min   = minPosition (i+1) (i,x)     rest
-                                | otherwise = minPosition (i+1) (pos,min) rest
diff --git a/real/ebnf2ps/CommandLine.hs b/real/ebnf2ps/CommandLine.hs
deleted file mode 100644 (file)
index f7face3..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-module CommandLine (parse_cmds) where
--- Copyright 1994 by Peter Thiemann
-
-import System.Environment
-import System.IO
-
-defaultArgs :: Args
-defaultArgs  =  MkArgs "Times-Roman" 10 "black" "Times-Roman" 10 "black" "black" "black" 500 500 30 100 200 "rgb.txt" False False True False False False
-
-usage :: IO ()
-usage  =  hPutStr stderr "Usage: prog [-ntFont String] [-ntScale Int] [-ntColor String] [-tFont String] [-tScale Int] [-tColor String] [-lineColor String] [-fatLineColor String] [-borderDistX Int] [-borderDistY Int] [-lineWidth Int] [-fatLineWidth Int] [-arrowSize Int] [-rgbFileName String] [-happy] [(+|-)simplify] [(+|-)ps] [(+|-)fig] [-help] [-verbose]"
-
-data Args  =  MkArgs String Int String String Int String String String Int Int Int Int Int String Bool Bool Bool Bool Bool Bool deriving ()
-type ProgType = String -> Int -> String -> String -> Int -> String -> String -> String -> Int -> Int -> Int -> Int -> Int -> String -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> [String] -> IO ()
-
-parse_args :: ProgType -> Args -> [String] -> IO ()
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-ntFont":rest)
-    =  readstring (\str -> parse_args prog (MkArgs str x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-ntScale":rest)
-    =  readval reads (\val -> parse_args prog (MkArgs x1 val x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-ntColor":rest)
-    =  readstring (\str -> parse_args prog (MkArgs x1 x2 str x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-tFont":rest)
-    =  readstring (\str -> parse_args prog (MkArgs x1 x2 x3 str x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-tScale":rest)
-    =  readval reads (\val -> parse_args prog (MkArgs x1 x2 x3 x4 val x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-tColor":rest)
-    =  readstring (\str -> parse_args prog (MkArgs x1 x2 x3 x4 x5 str x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-lineColor":rest)
-    =  readstring (\str -> parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 str x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-fatLineColor":rest)
-    =  readstring (\str -> parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 str x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-borderDistX":rest)
-    =  readval reads (\val -> parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 val x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-borderDistY":rest)
-    =  readval reads (\val -> parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 val x11 x12 x13 x14 x15 x16 x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-lineWidth":rest)
-    =  readval reads (\val -> parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 val x12 x13 x14 x15 x16 x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-fatLineWidth":rest)
-    =  readval reads (\val -> parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 val x13 x14 x15 x16 x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-arrowSize":rest)
-    =  readval reads (\val -> parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 val x14 x15 x16 x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-rgbFileName":rest)
-    =  readstring (\str -> parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 str x15 x16 x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-happy":rest)
-    =  readbool (parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 True x16 x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-simplify":rest)
-    =  readbool (parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 False x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("+simplify":rest)
-    =  readbool (parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 True x17 x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-ps":rest)
-    =  readbool (parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 False x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("+ps":rest)
-    =  readbool (parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 True x18 x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-fig":rest)
-    =  readbool (parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 False x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("+fig":rest)
-    =  readbool (parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 True x19 x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-help":rest)
-    =  readbool (parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 True x20)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) ("-verbose":rest)
-    =  readbool (parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 True)) rest
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20) (('-': _) :rest)
-    =  usage
-parse_args prog (MkArgs x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20)  rest  =  prog x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 rest
-
-parse_cmds :: ProgType -> IO ()
-parse_cmds prog =  getArgs >>= parse_args prog defaultArgs
-
-readbool :: ([String] -> IO ()) -> [String] -> IO ()
-readbool f = f
-
-readstring :: (String -> [String] -> IO ()) -> [String] -> IO ()
-readstring f (str: rest) = f str rest
-readstring f []          = usage
-
-readval :: (Read a) => ReadS a -> (a -> [String] -> IO ()) -> [String] -> IO ()
-readval readsfn f (str: rest)
-    =  case readsfn str of
-           ((val, ""):_) -> f val rest
-           _             -> usage
diff --git a/real/ebnf2ps/CommandLineFlags b/real/ebnf2ps/CommandLineFlags
deleted file mode 100644 (file)
index c453200..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
--ntFont        String          "Times-Roman"
--ntScale       Int             10
--ntColor       String          "black"
--tFont         String          "Times-Roman"
--tScale        Int             10
--tColor                String          "black"
--lineColor     String          "black"
--fatLineColor  String          "black"
--borderDistX   Int             500
--borderDistY   Int             500
--lineWidth     Int             30
--fatLineWidth  Int             100
--arrowSize     Int             200
--rgbFileName   String          "rgb.txt"
--happy         Bool            False
-+simplify      Bool            False
-+ps            Bool            True
-+fig           Bool            False
--help          Bool            False
--verbose       Bool            False
diff --git a/real/ebnf2ps/EbnfGrammar.hs b/real/ebnf2ps/EbnfGrammar.hs
deleted file mode 100644 (file)
index bb8beca..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
---                            -*- Mode: Haskell -*- 
--- Copyright 1994 by Peter Thiemann
--- EbnfGrammar.hs --- a simple combinator parser for a grammar in EBNF 
--- Author          : Peter Thiemann
--- Created On      : Tue Aug  3 10:30:03 1993
--- Last Modified By: Peter Thiemann
--- Last Modified On: Mon Dec 27 17:41:17 1993
--- Update Count    : 13
--- Status          : Unknown, Use with caution!
--- 
---------------------------------------------------
--- $Log: EbnfGrammar.hs,v $
--- Revision 1.1  1996/01/08 20:02:34  partain
--- Initial revision
---
--- Revision 1.3  1994/03/15  15:34:53  thiemann
--- added full color support, XColorDB based
---
---Revision 1.2  1993/08/31  12:31:32  thiemann
---reflect changes in type FONT
---
---Revision 1.1  1993/08/17  12:34:29  thiemann
---Initial revision
---
--- $Locker:  $
---------------------------------------------------
-
-module EbnfGrammar (parseAll) where
-
-import Parsers
-import Lexer
-import AbstractSyntax
-
-parseAll s = [ prod | (prod, []) <- parseFile (lexer (uncomment s)) ]
-
--- This is the grammar for EBNF
---     File            = {Production}.
---     Production      = Nonterminal [ String ] "=" Term "." .
---     Term            = Factor / "|" .                # alternative
---     Factor          = ExtAtom + .                   # sequence
---     ExtAtom         = Atom
---                     | Atom "/" Atom                 # repetion through Atom
---                     | Atom "+".                     # at least one repetion
---     Atom            = Nonterminal
---                     | String                        # terminal string
---                     | "(" Term ")"
---                     | "[" Term "]"                  # an optional Term
---                     | "{" Term "}"                  # zero or more repetions
---                     .
---     String          = "\"" { character } "\"" .
---     Nonterminal     = letter { letter | digit | "_" } .
---     character       = "\\" charesc.
-
-parseFile =            rpt parseProduction                 -- no longer `using` ProdFile
-
-parseProduction =      (satisfy isIdent `thn`
-                       opt (satisfy isString) `thn`
-                       expectSymbol "=" `xthn`
-                       parseTerm `thnx`
-                       expectSymbol ".") `using`
-                       \(nt, (ntNames, term)) -> ProdProduction (getIdent nt) (map getString ntNames) term 
-
-parseTerm =            (parseFactor `thn`
-                       rpt (expectSymbol "|" `xthn` parseFactor))
-                       `using2` (:) `using` ProdTerm
-
-parseFactor =          (parseExtendedAtom `thn` rpt parseExtendedAtom)
-                       `using2` (:) `using` ProdFactor
-
-parseExtendedAtom =     parseAtom `thn`
-                       opt ((expectSymbol "+" `using` \ _ -> ProdPlus)
-                            `alt`
-                            (expectSymbol "/" `xthn` parseAtom `using` ProdSlash))
-                               `using2` helper
-                       where
-                       helper term [] = term
-                       helper term [ProdPlus] = ProdRepeat1 term
-                       helper term [ProdSlash atom] = ProdRepeatWithAtom term atom
-
-parseAtom =            (expectSymbol "(" `xthn`
-                       parseTerm `thnx`
-                       expectSymbol ")")
-                       `alt`
-                       ((expectSymbol "[" `xthn` parseTerm `thnx` expectSymbol "]")
-                               `using` ProdOption)
-                       `alt`
-                       ((expectSymbol "{" `xthn` parseTerm `thnx` expectSymbol "}")
-                               `using` ProdRepeat)
-                       `alt`
-                       (satisfy isIdent `using` (ProdNonterminal . getIdent))
-                       `alt`
-                       (satisfy isString `using` (ProdTerminal . getString))
-
-expectSymbol c = satisfy test
-       where test (Symbol x) = c == x
-             test _ = False
diff --git a/real/ebnf2ps/EbnfLayout.hs b/real/ebnf2ps/EbnfLayout.hs
deleted file mode 100644 (file)
index 83e7c43..0000000
+++ /dev/null
@@ -1,398 +0,0 @@
---------------------------------------------------
--- Copyright 1994 by Peter Thiemann
--- $Log: EbnfLayout.hs,v $
--- Revision 1.2  1996/07/26 21:21:58  partain
--- Final changes for 2.01
---
--- Revision 1.1  1996/01/08 20:02:34  partain
--- Initial revision
---
--- Revision 1.4  1994/03/15  15:34:53  thiemann
--- added full color support, XColorDB based
---
--- Revision 1.3  1994/02/18  11:59:29  thiemann
--- save state before adding "withTentacle"
---
---Revision 1.2  1993/08/31  12:31:32  thiemann
---reflect changes in type FONT
---
---Revision 1.1  1993/08/17  12:34:29  thiemann
---Initial revision
---
--- $Locker:  $
---------------------------------------------------
-module EbnfLayout where
-
-import AbstractSyntax
-import Color
-import Fonts (FONT, stringWidth, stringHeight, fontDescender)
-import Info
-import Data.List--1.3
-
--- all arithmetic is done in 1/100 pt
-
--- tFont, ntFont :: Font
--- arrowSize, lineWidth, fatLineWidth, borderDistY, borderDistX :: Int
-
--- borderDistX = 500
--- borderDistY = 500
--- lineWidth   = 20
--- fatLineWidth = 200
--- arrowSize   = 300
--- ntFont          = ("Times-Roman", 10)
--- tFont       = ("Times-Roman", 10)
-
-makePictureLayout :: INFO -> Production -> Container
-makePictureLayout
-    (borderDistX, borderDistY, lineWidth, fatLineWidth, arrowSize, ntFont, tFont,
-       (ntColor, tColor, lineColor, fatLineColor))
-    prod
-    = makePicture 0 0 1 prod
-       where
-
-  mkNonTerminal :: String -> Int -> Int -> Container
-  mkNonTerminal str rx ry = (rx, ry, width, height, 0, AString ntColor ntFont str)
-       where 
-             width  = stringWidth  ntFont str
-             height = stringHeight ntFont str
-
-  mkTerminal :: String -> Int -> Int -> Container
-  mkTerminal str rx ry = (rx, ry, width, height, 0, AString tColor tFont str)
-       where 
-             width  = stringWidth  tFont str
-             height = stringHeight tFont str
-
-  mkBox :: Int -> Int -> Int -> Int -> Int -> Container -> Container
-  mkBox rx ry width height inOutY content
-    = (rx, ry, width, height, inOutY, ABox fatLineColor False content)
-
-  mkRoundBox :: Int -> Int -> Int -> Int -> Int -> Container -> Container
-  mkRoundBox rx ry width height inOutY content
-    = (rx, ry, width, height, inOutY, ABox fatLineColor True content)
-
-  mkLine ::  Int -> Int -> Int -> Int -> Container
-  mkLine rx ry w h = (rx, ry, w, h, 0, Aline lineColor)
-
-  mkArrow :: Int -> Int -> Int -> Container
-  mkArrow rx ry dir = (rx, ry, 0, 0, 0, Arrow lineColor (dir*arrowSize))
-
-  mkTurn :: Int -> Int -> Int -> Int -> TDirection -> Container
-  mkTurn rx ry w h t = (rx, ry, w, h, 0, ATurn lineColor t)
-
-  ------------------------------------------------------------------------
-
-  withTentacle :: Int -> Int -> Int -> Production -> Container
-  withTentacle rx ry direction prod = 
-       (rx, ry, width, height, inOutY, AComposite [contents, theLine, theArrow])
-       where (_, _, width1, height, inOutY, _) = contents
-             contents = makePicture rx1 0 direction prod
-             width = width1 + borderDistX
-             rx1      | direction > 0 = 0
-                       | otherwise     = borderDistX
-             theLine  | direction > 0 = mkLine  width1 inOutY borderDistX 0
-                      | otherwise     = mkLine  0      inOutY borderDistX 0
-             theArrow | direction > 0 = mkArrow width  inOutY direction
-                       | otherwise     = mkArrow 0      inOutY direction
-
-  makePicture :: Int -> Int -> Int -> Production -> Container
-
-  makePicture rx ry direction (ProdProduction ntName ntAliases prod) =
-       (rx, ry, width, height, 0, AComposite ([content1, content2]++glue))
-       where (_, _, width1, height1, inOutY1, _) = content1
-             content1 = withTentacle rx1 ry1 direction prod
-             content2@(_,_, width2, height2,_,_) = mkNonTerminal str rx2 ry2
-             rx1 = 2*borderDistX
-             ry1 = fatLineWidth `div` 2
-             rx2 = 0
-             ry2 = ry1 + height1 + distance - fontDescender ntFont
-             distance = 2*borderDistY
-             width = 2*borderDistX + max width1 width2
-             height = height1 +fatLineWidth + height2 + distance
-             glue = [
-               mkLine 0 (ry1 + inOutY1) (2*borderDistX) 0,
-               mkArrow rx1 (ry1 + inOutY1) direction]
-             str = case ntAliases of
-                       [] -> ntName
-                       newName:_ -> newName
-
-  makePicture rx ry direction (ProdTerm [prod]) =
-       makePicture rx ry direction prod
-  makePicture rx ry direction (ProdTerm prods) =
-       (rx, ry, width, height, inOutY, AComposite (newcontents ++ glue))
-       where newcontents = zip6 rxs rys widths heights inOutYs gobjs
-             (_, _, widths, heights, inOutYs, gobjs) = unzip6 contents
-             ncontents = length prods
-             -- sadly enough it's not possible to take rxs and rys in place of the fakes!
-             fakes = take ncontents (repeat 0)
-             contents = zipWith4 makePicture fakes fakes directions prods
-             height = sum heights + (ncontents-1) * borderDistY
-             maxwidth = maximum widths
-             width = maxwidth + 4 * borderDistX
-             rxs | direction > 0 = take ncontents (repeat (2 * borderDistX))
-                 | otherwise     = map ((+ 2*borderDistX) . (maxwidth -)) widths
-             rys = tail (scanr f 0 heights) where f h q = h + q + borderDistY
-              directions = take ncontents (repeat direction)
-             entries = zipWith (+) rys inOutYs             -- frame relative Y positions of entries
-             firstEntry = entries!!0
-             lastEntry = entries!!(ncontents-1)
-             middleEntries = init (tail entries)
-             inOutY = (firstEntry + lastEntry) `div` 2
-             inOutDiff = firstEntry - lastEntry - 2*borderDistY
-             glue = fixedglue ++ variableglue
-             fixedglue = [
-               mkLine 0 inOutY borderDistX 0,
-               mkLine (width-borderDistX) inOutY borderDistX 0,
-               mkTurn borderDistX (firstEntry - borderDistY) borderDistX borderDistY SE,
-               mkTurn borderDistX lastEntry   borderDistX borderDistY NE,
-               mkLine borderDistX (lastEntry + borderDistY) 0 inOutDiff,
-               mkTurn (width-2*borderDistX) (firstEntry - borderDistY) borderDistX borderDistY SW,
-               mkTurn (width-2*borderDistX) lastEntry borderDistX borderDistY WN,
-               mkLine (width-borderDistX) (lastEntry + borderDistY) 0 inOutDiff] ++
-               map f middleEntries ++
-               map g middleEntries
-                       where f y = mkLine borderDistX           y borderDistX 0
-                             g y = mkLine (width-2*borderDistX) y borderDistX 0
-             variableglue | direction > 0 = zipWith g widths entries
-                          | otherwise     = zipWith h widths entries
-                       where g w y = mkLine (2*borderDistX + w) y (maxwidth - w) 0
-                             h w y = mkLine (2*borderDistX)     y (maxwidth - w) 0
-             obsoleteglue =
-                       map (f (2*borderDistX)) entries
-                       where f x y = mkArrow x y direction
-
-{- the following works for two terms, both directions
-  makePicture rx ry direction (ProdTerm [prod1, prod2])
-    | direction > 0 =
-       let   (_, _, width1, height1, inOutY1, _) = content1
-             content1 = makePicture rx1 ry1 direction prod1
-             (_, _, width2, height2, inOutY2, _) = content2
-             content2 = makePicture rx2 ry2 direction prod2
-             rx1 = 2*borderDistX
-             rx2 = 2*borderDistX
-             ry2 = 0
-             ry1 = height2 + borderDistY
-             maxwidth = max width1 width2
-             width = 4*borderDistX + maxwidth
-             height = height2 + borderDistY + height1
-             inOutY = (inOutY2 + ry1 + inOutY1) `div` 2
-             inOutDiff = ry1 + inOutY1 - inOutY2 - 2*borderDistY
-             glue = [
-               mkLine 0 inOutY borderDistX 0,
-               mkLine (width - borderDistX) inOutY borderDistX 0,
-               mkLine borderDistX (ry2 + inOutY2 + borderDistY) 0 inOutDiff,
-               mkLine (width - borderDistX) (ry2 + inOutY2 + borderDistY) 0 inOutDiff,
-               mkTurn borderDistX (ry1 + inOutY1 - borderDistX) borderDistX borderDistY SE,
-               mkTurn borderDistX inOutY2 borderDistX borderDistY NE,
-               mkTurn (width - 2*borderDistX) (ry1 + inOutY1 - borderDistX) borderDistX borderDistY SW,
-               mkTurn (width - 2*borderDistX) inOutY2 borderDistX borderDistY WN,
-               mkLine (rx1 + width1) (ry1 + inOutY1) (maxwidth - width1) 0,
-               mkLine (rx2 + width2) (ry2 + inOutY2) (maxwidth - width2) 0]
-       in      (rx, ry, width, height, inOutY, AComposite ([content1,content2]++glue))
-    | otherwise =
-       let   (_, _, width1, height1, inOutY1, _) = content1
-             content1 = makePicture rx1 ry1 direction prod1
-             (_, _, width2, height2, inOutY2, _) = content2
-             content2 = makePicture rx2 ry2 direction prod2
-             maxwidth = max width1 width2
-             width = 4*borderDistX + maxwidth
-             height = height2 + borderDistY + height1
-             inOutY = (inOutY2 + ry1 + inOutY1) `div` 2
-             inOutDiff = ry1 + inOutY1 - inOutY2 - 2*borderDistY
-             rx1 = 2*borderDistX + (maxwidth - width1)
-             rx2 = 2*borderDistX + (maxwidth - width2)
-             ry2 = 0
-             ry1 = height2 + borderDistY
-             glue = [
-               mkLine 0 inOutY borderDistX 0,
-               mkLine (width - borderDistX) inOutY borderDistX 0,
-               mkLine borderDistX (ry2 + inOutY2 + borderDistY) 0 inOutDiff,
-               mkLine (width - borderDistX) (ry2 + inOutY2 + borderDistY) 0 inOutDiff,
-               mkTurn borderDistX (ry1 + inOutY1 - borderDistX) borderDistX borderDistY SE,
-               mkTurn borderDistX inOutY2 borderDistX borderDistY NE,
-               mkTurn (width - 2*borderDistX) (ry1 + inOutY1 - borderDistX) borderDistX borderDistY SW,
-               mkTurn (width - 2*borderDistX) inOutY2 borderDistX borderDistY WN,
-               mkLine (2*borderDistX) (ry1 + inOutY1) (maxwidth - width1) 0,
-               mkLine (2*borderDistX) (ry2 + inOutY2) (maxwidth - width2) 0]
-       in      (rx, ry, width, height, inOutY, AComposite ([content1,content2]++glue))
--}
-
-  makePicture rx ry direction (ProdFactor [prod]) =
-       makePicture rx ry direction prod
-{-
-  makePicture rx ry direction (ProdFactor prods) =
-       (rx, ry, width, height, inOutY, AComposite (glue++contents))
-       where (_, _, widths, heights, inOutYs, gobjs) = unzip6 contents
-             contents = zipWith4 makePicture rxs rys directions prods
-             ncontents = length prods
-             aboves = zipWith (-) heights inOutYs
-             maxIO = maximum inOutYs
-             height = maxIO + maximum aboves
-             width = sum widths + (ncontents-1)*borderDistX
-             inOutY = maxIO
-             rxs
-                 -- = take ncontents [0, 20*borderDistX .. ]
-                 | direction > 0 = init (scanl f 0 widths)
-                 | otherwise     = tail (scanr f 0 widths)
-                      where f q w = q + w + borderDistX
-
-             rys =
-                       take ncontents (repeat 0)
-                       -- map (inOutY -) inOutYs
-             directions = take ncontents (repeat direction)
-             glue | direction > 0 = map f (tail rxs)
-                  | otherwise     = map f (init rxs)
-                       where  f x = mkLine (x-borderDistX) inOutY borderDistX 0
--}
-
-  makePicture rx ry direction (ProdFactor [prod1,prod2]) 
-    | direction > 0 =
-       let   (_, _, width1, height1, inOutY1, _) = content1
-             content1 = withTentacle rx1 ry1 direction prod1
-             (_, _, width2, height2, inOutY2, _) = content2
-             content2 = makePicture rx2 ry2 direction prod2
-             rx1 = 0
-             rx2 = width1
-             width = width1 + width2
-             inOutY = max inOutY1 inOutY2
-             ry1 = inOutY - inOutY1
-             ry2 = inOutY - inOutY2
-             height = inOutY + max (height1 - inOutY1) (height2 - inOutY2)
-       in    (rx, ry, width, height, inOutY, AComposite ([content1,content2]))
-    | otherwise =
-       let   (_, _, width1, height1, inOutY1, _) = content1
-             content1 = withTentacle rx1 ry1 direction prod1
-             (_, _, width2, height2, inOutY2, _) = content2
-             content2 = makePicture rx2 ry2 direction prod2
-             rx2 = 0
-             rx1 = width2
-             width = width1 + width2
-             inOutY = max inOutY1 inOutY2
-             ry1 = inOutY - inOutY1
-             ry2 = inOutY - inOutY2
-             height = inOutY + max (height1 - inOutY1) (height2 - inOutY2)
-       in    (rx, ry, width, height, inOutY, AComposite ([content1,content2]))
-
-  makePicture rx ry direction (ProdFactor (prod:prods)) =
-       makePicture rx ry direction (ProdFactor [prod, ProdFactor prods])
--- this is a ghastly hack!
-
-  makePicture rx ry direction (ProdNonterminal str) =
-       mkBox rx ry width height inOutY content
-       where content@(_,_,width', height',_,_) = mkNonTerminal str rx' ry'
-             width   = width' + 2*borderDistX + 2*fatLineWidth
-             height  = height' + borderDistY + 2*fatLineWidth
-             rx'     = fatLineWidth + borderDistX
-             ry'     = fatLineWidth + borderDistY `div` 2 - fontDescender ntFont
-             inOutY  = height `div` 2
-
-  makePicture rx ry direction (ProdTerminal str) =
-       mkRoundBox rx ry width height inOutY content
-       where content@(_,_,width', height',_,_) = mkTerminal str rx' ry'
-             width   = width' + 2*borderDistX + 2*fatLineWidth
-             height  = height' + borderDistY + 2*fatLineWidth
-             rx'     = fatLineWidth + borderDistX
-             ry'     = fatLineWidth + borderDistY `div` 2 - fontDescender tFont
-             inOutY  = height `div` 2
-
-  makePicture rx ry direction (ProdOption prod) =
-       (rx, ry, width, height, inOutY, AComposite (content:glue))
-       where (_, _, width', height', inOutY', gobj) = content
-             content = makePicture rx' ry' direction prod
-             width = width' + 6*borderDistX
-             height = height' + borderDistY
-             rx' = 3*borderDistX
-             ry' = borderDistY
-             inOutY = 0
-             glue = variableglue ++ fixedglue
-             fixedglue = [
-               mkLine 0 0 width 0,
-               mkTurn 0 0 borderDistX bby WN,
-               mkTurn borderDistX (inOutY'+borderDistY-bby) borderDistX bby SE,
-               mkLine (2*borderDistX) (ry'+inOutY') borderDistX 0,
-               mkTurn (width-borderDistX) 0 borderDistX bby NE,
-               mkTurn (width-2*borderDistX) (inOutY'+borderDistY-bby) borderDistX bby SW,
-               mkLine (width-3*borderDistX) (ry'+inOutY') borderDistX 0,
-               mkLine borderDistX         bby 0 (inOutY'+borderDistY-2*bby),
-               mkLine (width-borderDistX) bby 0 (inOutY'+borderDistY-2*bby)]
-               where bby = min borderDistY ((inOutY'+borderDistY) `div` 2)
-             variableglue
-               | direction > 0 = [mkArrow (3*borderDistX) (ry'+inOutY') direction]
-               | otherwise     = [mkArrow (width-3*borderDistX) (ry'+inOutY'+borderDistY) direction]
-
-  makePicture rx ry direction (ProdRepeat prod) =
-       (rx, ry, width, height, inOutY, AComposite (content:glue))
-       where (_, _, width', height', inOutY', gobj) = content
-             content = makePicture rx' ry' (-direction) prod
-             width = width' + 4*borderDistX
-             height = height' + borderDistY
-             rx' = 2*borderDistX
-             ry' = borderDistY
-             inOutY = 0
-             glue = variableglue ++ fixedglue
-             fixedglue = [
-               mkLine 0 0 width 0,
-               mkTurn borderDistX 0 borderDistX bby NE,
-               mkTurn borderDistX (inOutY'+borderDistY-bby) borderDistX bby SE,
-               mkTurn (width-2*borderDistX) 0 borderDistX bby WN,
-               mkTurn (width-2*borderDistX) (inOutY'+borderDistY-bby) borderDistX bby SW,
-               mkLine borderDistX     bby 0 (inOutY'+borderDistY-2*bby),
-               mkLine (width-borderDistX) bby 0 (inOutY'+borderDistY-2*bby)]
-               where bby = min borderDistY ((inOutY'+borderDistY) `div` 2)
-             variableglue
-               | direction < 0 = [mkArrow (2*borderDistX) (inOutY'+borderDistY) (-direction)]
-               | otherwise     = [mkArrow (width-2*borderDistX) (inOutY'+borderDistY) (-direction)]
-             
-  makePicture rx ry direction (ProdRepeat1 prod) =
-       (rx, ry, width, height, inOutY, AComposite (content:glue))
-       where (_, _, width', height', inOutY', gobj) = content
-             content = makePicture rx' ry' (direction) prod
-             width = width' + 4*borderDistX
-             height = height' + borderDistY
-             rx' = 2*borderDistX
-             ry' = 0
-             inOutY = inOutY'
-             glue = [
-               mkLine 0 inOutY rx' 0,
-               mkLine (rx'+width') inOutY rx' 0,
-               mkTurn borderDistX inOutY borderDistX borderDistY NE,
-               mkTurn borderDistX (height-borderDistY) borderDistX borderDistY SE,
-               mkTurn (width-rx') inOutY borderDistX borderDistY WN,
-               mkTurn (width-rx') (height-borderDistY) borderDistX borderDistY SW,
-               mkLine borderDistX (inOutY+borderDistY) 0 (height'-inOutY'-borderDistY),
-               mkLine (width-borderDistX) (inOutY+borderDistY) 0 (height'-inOutY'-borderDistY),
-               mkLine rx' height width' 0,
-               mkArrow (rx'+width' `div` 2) height (-direction)]
-             
-  makePicture rx ry direction (ProdRepeatWithAtom prod1 prod2) =
-       (rx, ry, width, height, inOutY, AComposite (content1:content2:glue))
-       where (_, _, width1, height1, inOutY1, _) = content1
-             (_, _, width2, height2, inOutY2, _) = content2
-             content1 = makePicture rx1 ry1 direction prod1
-             content2 = makePicture rx2 ry2 (-direction) prod2
-             maxwidth = max width1 width2
-             width = maxwidth + 4*borderDistX
-             height = height1 + height2 + borderDistY
-             adjx1 = (maxwidth - width1) `div` 2
-             rx1 = 2*borderDistX + adjx1
-             ry1 = 0
-             adjx2 = (maxwidth - width2) `div` 2
-             rx2 = 2*borderDistX + adjx2
-             ry2 = height1 + borderDistY
-             inOutY = inOutY1
-             glue = variableglue ++ fixedglue
-             fixedglue = [
-               mkLine 0 inOutY rx1 0,
-               mkLine (rx1 + width1) inOutY rx1 0,
-               mkLine (2*borderDistX) (ry2+inOutY2) adjx2 0,
-               mkLine (2*borderDistX + adjx2 + width2) (ry2+inOutY2) adjx2 0,
-               mkTurn borderDistX inOutY borderDistX borderDistY NE,
-               mkTurn borderDistX (ry2+inOutY2-borderDistY) borderDistX borderDistY SE,
-               mkTurn (rx1+width1+adjx1) inOutY borderDistX borderDistY WN,
-               mkTurn (rx1+width1+adjx1) (ry2+inOutY2-borderDistY) borderDistX borderDistY SW,
-               mkLine borderDistX (inOutY+borderDistY) 0 (height1-inOutY1 + inOutY2 - borderDistY),
-               mkLine (rx1+width1+adjx1+borderDistX) (inOutY+borderDistY) 0 (height1-inOutY1 + inOutY2 - borderDistY)]
-             variableglue
-               | direction > 0 = [mkArrow (2*borderDistX + adjx2 + width2) (ry2+inOutY2) (-direction)]
-               | otherwise     = [mkArrow (2*borderDistX + adjx2) (ry2+inOutY2) (-direction)]
-
-
diff --git a/real/ebnf2ps/FigOutput.hs b/real/ebnf2ps/FigOutput.hs
deleted file mode 100644 (file)
index be8bbfe..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
---------------------------------------------------------------------------------
--- Copyright 1994 by Peter Thiemann
--- $Log: FigOutput.hs,v $
--- Revision 1.1  1996/01/08 20:02:34  partain
--- Initial revision
---
--- Revision 1.2  1994/03/15  15:34:53  thiemann
--- added full color support, XColorDB based
---
--- Revision 1.1  1993/08/31  12:31:32  thiemann
--- Initial revision
---
--- $Locker:  $
---------------------------------------------------------------------------------
-
-module FigOutput (figShowsWrapper) where
-
-import Fonts (FONT, fontName, fontScale)
-import Color
-import Info
-
---------------------------------------------------------------------------------
-figShowsWrapper :: WrapperType
-figShowsWrapper title
-        (borderDistX, borderDistY, lineWidth, fatLineWidth, arrowSize, ntFont, tFont, _)
-               container@(rx, ry, width, height, inOutY, gobj) =
-       showString "#FIG 2.1\n" .
-       showString "2 80\n" .
-{-     showString "1 80\n" . (origin in lower left) is ignored -}
-       figShowsContainer rx height container
-  where
-  figShowsContainer ax ay (rx, ry, width, height, inOutY, gobj) =
-       case gobj of
-       AString color font theString ->
-               showString "4 0" .                          -- object type, sub_type (left just)
-               showsTrueNum (figFont (fontName font)) .    -- font (enumeration type)
-               showsTrueNum (fontScale font) .             -- font_size (points)
-               showString " 0" .                           -- pen
-               showsFigColor color .                       -- color
-                showString " 0 0.00000 4" .                -- depth, angle, font_flags
-               showsFigNum height .                        -- height
-               showsFigNum width .                         -- length
-               showsFigNum ax' .                           -- x
-               showsFigNum ay' .                           -- y
-               showString (' ':theString++"\1\n")          -- string
-       ABox color rounded content ->
-               figShowsContainer ax' ay' content .
-               showString "2" .
-               showString (if rounded then " 4" else " 2") .
-               showString " 0 " .                          -- object, subobject (box), line style
-               showsFigNum fatLineWidth .                  -- thickness (pixels)
-               showsFigColor color .                       -- color
-               showString " 0 0 0" .                       -- depth, pen, area_fill
-               showString " 0.000" .                       -- style_val
-               (if rounded then showsFigNum (min width height `div` 2)
-               else showString " 0") .
-               showString " 0 0\n" .                       -- forward_arrow, backward_arrow
-               showsFigPoint ax' ay' .
-               showsFigPoint (ax'+width) ay' .
-               showsFigPoint (ax'+width) (ay'-height) .
-               showsFigPoint ax' (ay'-height) .
-               showsFigPoint ax' ay' .
-               showsFigLastPoint
-       Arrow color size ->
-               showString "2 1 0" .                        -- a polyline
-               showsFigNum lineWidth .
-                showsFigColor color .
-               showString " 0 0 0 0.000 -1 1 0\n" .
-               showString "        0 0" .                  -- arrow_type, arrow_style
-               showsFigNum lineWidth . showString ".000" . -- arrow_thickness
-               showsFigNum (abs size * 2) . showString ".000" . -- arrow_width
-               showsFigNum (abs size * 2) .showString ".000\n" . -- arrow_height
-               showString "        " .
-               showsFigPoint (ax'-size) ay' .
-               showsFigPoint ax' ay' .
-               showsFigLastPoint
-       Aline color ->
-               showString "2 1 0" .
-               showsFigNum lineWidth .
-               showsFigColor color .
-               showString " 0 0 0 0.000 -1 0 0\n" .
-               showString "        " .
-               showsFigPoint ax' ay' .
-               showsFigPoint (ax'+width) (ay'-height) .
-               showsFigLastPoint
-       ATurn color dir ->
-               showString "3 0 0" .                        -- a spline object
-               showsFigNum lineWidth .
-               showsFigColor color .
-               showString " 0 -1 0 0.0 0 0\n" .
-               showsIt dir .
-               showsFigLastPoint
-               where   showsIt SE =    showsFigPoint ax' ay' .
-                                       showsFigPoint ax' (ay'-height) .
-                                       showsFigPoint (ax'+width) (ay'-height)
-                       showsIt WN =    showsFigPoint ax' ay' .
-                                       showsFigPoint (ax'+width) ay' .
-                                       showsFigPoint (ax'+width) (ay'-height)
-                       showsIt SW =    showsFigPoint (ax'+width) ay' .
-                                       showsFigPoint (ax'+width) (ay'-height) .
-                                       showsFigPoint ax' (ay'-height)
-                       showsIt NE =    showsFigPoint ax' (ay'-height) .
-                                       showsFigPoint ax' ay' .
-                                       showsFigPoint (ax'+width) ay'
-       AComposite contents ->
-               showString "6" .
-               showsFigPoint (ax'+width) (ay'-height) .
-               showsFigPoint ax' ay' .
-               showChar '\n' .
-               foldr (.) (showString "-6\n") (map (figShowsContainer ax' ay') contents)
-    where      ax' = ax + rx
-               ay' = ay - ry
-
-figFont name = lookup figFontList 0
-    where
-        lookup [] _ = -1
-       lookup (font: fonts) n | font == name = n
-                              | otherwise    = lookup fonts (n+1)
-
-figFontList = [                                                    -- stolen from u_fonts.c
-       "Times-Roman",
-       "Times-Italic",
-       "Times-Bold",
-       "Times-BoldItalic",
-       "AvantGarde-Book",
-       "AvantGarde-BookOblique",
-       "AvantGarde-Demi",
-       "AvantGarde-DemiOblique",
-       "Bookman-Light",
-       "Bookman-LightItalic",
-       "Bookman-Demi",
-       "Bookman-DemiItalic",
-       "Courier",
-       "Courier-Oblique",
-       "Courier-Bold",
-       "Courier-BoldOblique",
-       "Helvetica",
-       "Helvetica-Oblique",
-       "Helvetica-Bold",
-       "Helvetica-BoldOblique",
-       "Helvetica-Narrow",
-       "Helvetica-Narrow-Oblique",
-       "Helvetica-Narrow-Bold",
-       "Helvetica-Narrow-BoldOblique",
-       "NewCenturySchlbk-Roman",
-       "NewCenturySchlbk-Italic",
-       "NewCenturySchlbk-Bold",
-       "NewCenturySchlbk-BoldItalic",
-       "Palatino-Roman",
-       "Palatino-Italic",
-       "Palatino-Bold",
-       "Palatino-BoldItalic",
-       "Symbol",
-       "ZapfChancery-MediumItalic",
-       "ZapfDingbats"]
-
-showsTrueNum :: Int -> ShowS
-showsTrueNum x = showChar ' ' . shows x
-
-showsFigNum :: Int -> ShowS
-showsFigNum x = showChar ' ' . shows ((x*9 + 999) `div` 1000)      -- sorry about that
-
-showsFigPoint :: Int -> Int -> ShowS
-showsFigPoint x y = showsFigNum x . showsFigNum y
-
-showsFigLastPoint :: ShowS
-showsFigLastPoint = showString " 9999 9999\n"
-
--- showsFigColor :: Int -> ShowS
--- showsFigColor c = showChar ' ' . showsColor c
diff --git a/real/ebnf2ps/Fonts.hs b/real/ebnf2ps/Fonts.hs
deleted file mode 100644 (file)
index 3f6a648..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
---------------------------------------------------------------------------------
--- Copyright 1994 by Peter Thiemann
--- $Log: Fonts.hs,v $
--- Revision 1.7  2000/01/24 17:14:26  simonmar
--- Undo fromInt changes: already converted to fromIntegral.
---
--- Revision 1.6  1999/12/08 09:56:37  simonmar
--- -syslib updates for new libraries.
---
--- Revision 1.5  1999/11/26 10:29:54  simonpj
--- fromInt wibble
---
--- Revision 1.4  1999/09/14 10:18:24  simonmar
--- Replace all instances of fromInt in nofib with fromIntegral.
---
--- We generate the same code in most cases :-)
---
--- Revision 1.3  1997/03/14 08:08:05  simonpj
--- Major update to more-or-less 2.02
---
--- Revision 1.2  1996/07/25 21:23:54  partain
--- Bulk of final changes for 2.01
---
--- Revision 1.1  1996/01/08 20:02:33  partain
--- Initial revision
---
--- Revision 1.1  1993/08/31  12:31:32  thiemann
--- Initial revision
---
--- Revision 1.1  1993/08/31  12:31:32  thiemann
--- Initial revision
---
--- $Locker:  $
---------------------------------------------------------------------------------
-
-module Fonts (FONT, makeFont, fontDescender, stringWidth, stringHeight, fontName, fontScale, noFont)
-where
-
-import Data.Char
-
--- not in 1.3
-readDec :: (Integral a) => ReadS a
-readDec = readInt 10 isDigit (\d -> ord d - ord_0)
-
-readInt :: (Integral a) => a -> (Char -> Bool) -> (Char -> Int) -> ReadS a
-readInt radix isDig digToInt s =
-    [(foldl1 (\n d -> n * radix + d) (map (fromIntegral . digToInt) ds), r)
-       | (ds,r) <- nonnull isDig s ]
-
-ord_0 :: Num a => a
-ord_0 = fromIntegral (ord '0')
-
-nonnull                 :: (Char -> Bool) -> ReadS String
-nonnull p s             =  [(cs,t) | (cs@(_:_),t) <- [span p s]]
-
-readSigned :: (Real a) => ReadS a -> ReadS a
-readSigned readPos = readParen False read'
-                    where read' r  = read'' r ++
-                                     [(-x,t) | ("-",s) <- lex r,
-                                               (x,t)   <- read'' s]
-                          read'' r = [(n,s)  | (str,s) <- lex r,
-                                               (n,"")  <- readPos str]
-
-
-
-data FONT = FONT String Int Int (String -> Int)
-
-instance Eq FONT where
-  FONT s1 m1 n1 f1 == FONT s2 m2 n2 f2 = s1 == s2 && m1 == m2 && n1 == n2
-
-noFont = FONT "" 0 0 (const 0)
-
-data Afm = Descender Int
-        | CharMetric Int    Int    String   Int Int Int Int
---        CharMetric charNo charWX charName llx lly urx ury
---      deriving Text
-
-fontName :: FONT -> String
-fontName (FONT name _ _ _) = name
-
-fontScale :: FONT -> Int
-fontScale (FONT _ scale _ _) = scale
-
-fontDescender :: FONT -> Int
-fontDescender (FONT _ _ theDescender _) = theDescender
-
-stringWidth :: FONT -> String -> Int
-stringWidth (FONT _ _ _ theStringWidth) = theStringWidth
-
-stringHeight :: FONT -> String -> Int
-stringHeight (FONT _ scale _ _) _ = scale * 100
-
-makeFont :: String -> Int -> String -> FONT
-makeFont fontName fontScale fontAfm =
-       FONT fontName fontScale theDescender
-       ((`div` 10). (* fontScale). getStringWidth parsedAfm)
-    where
-       parsedAfm = parseAfmFile (lines fontAfm)
-       theDescender = getDescender parsedAfm
-
-getStringWidth :: [Afm] -> String -> Int
-getStringWidth afms str = sum (map (getCharWidth afms . fromEnum) str)
-
-getCharWidth :: [Afm] -> Int -> Int
-getCharWidth (CharMetric charNo charWX charName llx lly urx ury: afms) chNo
-       | charNo == chNo = charWX
-       | otherwise      = getCharWidth afms chNo
-getCharWidth (_:afms) chNo = getCharWidth afms chNo
-getCharWidth [] chNo = 0
-
-getDescender :: [Afm] -> Int
-getDescender (Descender d: _) = d
-getDescender (_:rest) = getDescender rest
-getDescender [] = 0
-
---------------------------------------------------------------------------------
-
-parseAfmFile :: [String] -> [Afm]
-parseAfmFile [] = []
-parseAfmFile (('D':'e':'s':'c':'e':'n':'d':'e':'r':line):lines) =
-       Descender descender: parseAfmFile lines
-       where (descender,_):_ = readSigned readDec (skipWhite line)
-parseAfmFile (('E':'n':'d':'C':'h':'a':'r':'M':'e':'t':'r':'i':'c':'s':_):_) = []
-parseAfmFile (('C':' ':line):lines) = CharMetric charNo charWX charName llx lly urx ury:
-                                 parseAfmFile lines
-       where   (charNo, rest1):_ = readSigned readDec (skipWhite line)
-               'W':'X':rest2     = skipWhiteOrSemi rest1
-               (charWX, rest3):_ = readDec (skipWhite rest2)
-               'N':rest4         = skipWhiteOrSemi rest3
-               (charName, rest5) = span isAlpha (skipWhite rest4)
-               'B':rest6         = skipWhiteOrSemi rest5
-               (llx, rest7):_    = readSigned readDec (skipWhite rest6)
-               (lly, rest8):_    = readSigned readDec (skipWhite rest7)
-               (urx, rest9):_    = readSigned readDec (skipWhite rest8)
-               (ury, _):_        = readSigned readDec (skipWhite rest9)
-parseAfmFile (_:lines) = parseAfmFile lines
-
-skipWhite = dropWhile isSpace
-skipWhiteOrSemi = dropWhile isSkipChar
-isSkipChar c = isSpace c || c == ';'
-
-               
diff --git a/real/ebnf2ps/GrammarTransform.hs b/real/ebnf2ps/GrammarTransform.hs
deleted file mode 100644 (file)
index 3239bb3..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
---                            -*- Mode: Haskell -*- 
--- Copyright 1994 by Peter Thiemann
--- GrammarTransform.hs --- some transformations on parse trees
--- Author          : Peter Thiemann
--- Created On      : Thu Oct 21 16:44:17 1993
--- Last Modified By: Peter Thiemann
--- Last Modified On: Mon Dec 27 17:41:16 1993
--- Update Count    : 14
--- Status          : Unknown, Use with caution!
--- 
--- $Locker:  $
--- $Log: GrammarTransform.hs,v $
--- Revision 1.2  1997/03/14 08:08:06  simonpj
--- Major update to more-or-less 2.02
---
--- Revision 1.1  1996/01/08 20:02:35  partain
--- Initial revision
---
--- Revision 1.1  1994/03/15  15:34:53  thiemann
--- Initial revision
---
--- 
-
-module GrammarTransform (simplify) where
-
-import AbstractSyntax
-
-simplify :: [Production] -> [Production]
-simplify = map simplify' . simp3
-
--- simp1 gets the body of a ProdFactor as an argument
--- and provides the transformations
---     beta { X } X gamma      --->    beta (X)+ gamma
---     beta X { X } gamma      --->    beta (X)+ gamma
---     beta { X Y } X gamma    --->    beta (X)/ (Y) gamma
---     beta X { Y X } gamma    --->    beta (X)/ (Y) gamma
-
-simp1 [] = []
-simp1 [p] = [p]
-simp1 (ProdRepeat p:p':prods)
-       | p `eqProduction` p' = ProdRepeat1 p: simp1 prods
-simp1 (p:ProdRepeat p':prods)
-       | p `eqProduction` p' = ProdRepeat1 p: simp1 prods
-simp1 (ProdRepeat (ProdFactor [p1, p2]):p:prods)
-       | p1 `eqProduction` p = ProdRepeatWithAtom p p2: simp1 prods
-simp1 (p:ProdRepeat (ProdFactor [p1, p2]):prods)
-       | p `eqProduction` p2 = ProdRepeatWithAtom p p1: simp1 prods
-simp1 (p:prods) = p: simp1 prods
-
--- simp2 gets the body of a ProdTerm as an argument
--- and provides the transformations
---     X gamma | X delta  ---> X (gamma | delta)
---     X gamma | X        ---> X [ gamma ]
-
-simp2 (ProdFactor (p:rest): ProdFactor (p':rest'): more)
-       | p `eqProduction` p' = case (rest, rest') of
-               ([], []) -> simp2 (ProdFactor [p]: more)
-               ([], _)  -> simp2 (ProdFactor [p, ProdOption (ProdFactor rest')]: more)
-               (_,  []) -> simp2 (ProdFactor [p, ProdOption (ProdFactor rest)]: more)
-               (_,  _)  -> simp2 (ProdFactor [p, ProdTerm (simp2 [ProdFactor rest, ProdFactor rest'])]: more)
-       | otherwise = ProdFactor (p:rest): simp2 (ProdFactor (p':rest'):more)
-simp2 [p] = [p]
-simp2 [] = []
-
--- simp3 gets a list of ProdProductions and looks for left and right recursive productions
--- it executes the transformations
---     A -> A gamma_1 | ... | A gamma_k | delta
---     --->
---     A -> delta { gamma_1 | ... | gamma_k }
--- and
---     A -> gamma_1 A | ... | gamma_k A | delta
---     --->
---     A -> { gamma_1 | ... | gamma_k } delta
-
-leftParty nt (ProdTerm ps) = foldr f ([], []) ps
-  where f (ProdFactor (ProdNonterminal nt':rest)) (yes, no)
-         | nt == nt' = (ProdFactor rest:yes, no)
-        f p (yes, no) = (yes, p:no)
-
-simp3'l prod@(ProdProduction nt nts p@(ProdTerm _))
-  = case leftParty nt p of
-       (lefties@(_:_), others@(_:_)) ->
-               ProdProduction nt nts
-                 (ProdFactor [ProdTerm others, ProdRepeat (ProdTerm lefties)])
-       _ -> prod
-simp3'l prod = prod
-
-rightParty nt (ProdTerm ps) = foldr f ([], []) ps
-  where f (ProdFactor ps) (yes, no)
-         | length ps > 1 && rightmost nt ps = (ProdFactor (init ps):yes, no)
-       f p (yes, no) = (yes, p:no)
-
-rightmost nt [ProdNonterminal nt'] = nt == nt'
-rightmost nt [p] = False
-rightmost nt (p:ps) = rightmost nt ps
-
-simp3'r prod@(ProdProduction nt nts p@(ProdTerm _))
-  = case rightParty nt p of
-       (righties@(_:_), others@(_:_)) ->
-               ProdProduction nt nts
-                 (ProdFactor [ProdRepeat (ProdTerm righties), ProdTerm others])
-       _ -> prod
-simp3'r prod = prod
-
-simp3 = map (simp3'r . simp3'l)
-
--- compute the set of all nonterminals in a Production
-freents :: Production -> [String]
-freents (ProdTerm prods)           = concat (map freents prods)
-freents (ProdFactor prods)         = concat (map freents prods)
-freents (ProdNonterminal s)        = [s]
-freents (ProdTerminal s)           = []
-freents (ProdOption p)             = freents p
-freents (ProdRepeat p)             = freents p
-freents (ProdRepeat1 p)            = freents p
-freents (ProdRepeatWithAtom p1 p2) = freents p1 ++ freents p2
-freents (ProdPlus)                 = []
-freents (ProdSlash p)              = freents p
---
-
-simplify' (ProdProduction s1 s2 prod)  = ProdProduction s1 s2 (simplify' prod)
-simplify' (ProdTerm prods)             = ProdTerm ((simp2 . map simplify') prods)
-simplify' (ProdFactor prods)           = ProdFactor (simp1 (map simplify' prods))
-simplify' (ProdNonterminal s)          = ProdNonterminal s
-simplify' (ProdTerminal s)             = ProdTerminal s
-simplify' (ProdOption prod)            = ProdOption (simplify' prod)
-simplify' (ProdRepeat prod)            = ProdRepeat (simplify' prod)
-simplify' (ProdRepeat1 prod)           = ProdRepeat1 (simplify' prod)
-simplify' (ProdRepeatWithAtom prod1 prod2) = ProdRepeatWithAtom (simplify' prod1) (simplify' prod2)
-simplify' (ProdPlus)                   = ProdPlus
-simplify' (ProdSlash prod)             = ProdSlash (simplify' prod)
-
--- Goferisms:
-
-eqList [] [] = True
-eqList (x:xs) (y:ys) = eqProduction x y && eqList xs ys
-eqList _ _ = False
-
-eqProduction (ProdFile ps) (ProdFile ps') = eqList ps ps'
-eqProduction (ProdProduction str ostr p) (ProdProduction str' ostr' p') = str == str' && ostr == ostr' && eqProduction p p'
-eqProduction (ProdTerm ps) (ProdTerm ps') = eqList ps ps'
-eqProduction (ProdFactor ps) (ProdFactor ps') = eqList ps ps'
-eqProduction (ProdNonterminal str) (ProdNonterminal str') = str == str'
-eqProduction (ProdTerminal str) (ProdTerminal str') = str == str'
-eqProduction (ProdOption p) (ProdOption p') = eqProduction p p'
-eqProduction (ProdRepeat p) (ProdRepeat p') = eqProduction p p'
-eqProduction (ProdRepeatWithAtom p1 p2) (ProdRepeatWithAtom p1' p2') = eqProduction p1 p1' && eqProduction p2 p2'
-eqProduction (ProdRepeat1 p) (ProdRepeat1 p') = eqProduction p p'
-eqProduction (ProdPlus) (ProdPlus) = True
-eqProduction (ProdSlash p) (ProdSlash p') = eqProduction p p'
-eqProduction _ _ = False
diff --git a/real/ebnf2ps/HappyParser.ly b/real/ebnf2ps/HappyParser.ly
deleted file mode 100644 (file)
index b0ee99f..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-                       -*- Mode: Haskell -*-
-
-$Locker:  $
-$Log: HappyParser.ly,v $
-Revision 1.5  1997/11/25 11:26:56  simonm
-quick fix for new version of Happy.
-
-Revision 1.4  1997/03/17 20:35:25  simonpj
-More small changes towards 2.02
-
-Revision 1.3  1997/03/14 08:08:08  simonpj
-Major update to more-or-less 2.02
-
-Revision 1.2  1996/07/25 21:23:57  partain
-Bulk of final changes for 2.01
-
-Revision 1.1  1996/01/08 20:02:36  partain
-Initial revision
-
-
-A happy specification for the happy input language.
-
-> {
-> module HappyParser (theHappyParser) where
-> import AbstractSyntax
-> import Lexer
-> import PrelBase
-> }
-
-> %name localHappyParser
-> %tokentype { Token' }
-> %token
->      id_tok          { Ident' _ }
->      ":"             { Colon }
->      ";"             { Semicolon }
->      "::"            { DoubleColon }
->      "%%"            { DoublePercent }
->      "%"             { Percent }
->      "|"             { Bar }
->      "{"             { OpenBrace }
->      "}"             { ClosingBrace }
->      any_symbol      { Symbol' _ }
->      any_string      { String' _ }
-
-> %%
-
-> parser :: { [Production] }
-> parser
->      : optCode tokInfos "%%" rules optCode
->                              { reverse $4 }
-
-> rules :: { [Production] }
-> rules : rules rule   { $2 : $1 }
->      | rule          { [$1] }
-
-
-> rule :: { Production }
-> rule         : id_tok "::" code id_tok ":" prods     { ProdProduction (getIdent' $4) [] (ProdTerm $6) }
->      | id_tok ":" prods                      { ProdProduction (getIdent' $1) [] (ProdTerm $3) }
-
-
-> prods :: { [Production] }
-> prods : prod "|" prods                       { $1 : $3 }
->      | prod                                  { [$1] }
-
-> prod :: { Production }
-> prod : prodItems code ";"                    { ProdFactor $1 }
->      | prodItems code                        { ProdFactor $1 }
-
-> prodItems :: { [Production] }
-> prodItems
->      : prodItem prodItems                    { $1 : $2 }
->      |                                       { [] }
-
-> prodItem :: { Production }
-> prodItem
->      : any_string                            { ProdTerminal (getString' $1) }
->      | id_tok                                { ProdNonterminal (getIdent' $1) }
-
-> tokInfos :: { () } 
-> tokInfos 
->      : tokInfo tokInfos              { () }
->      | tokInfo                       { () }
-
-> tokInfo :: { () }
-> tokInfo
->      : "%" id_tok tokInfoRest        { () }
-
-> tokInfoRest :: { () }
-> tokInfoRest
->      : code                          { () }
->      | id_tok                        { () }
->      | tokenList                     { () }
-
-> tokenList :: { () }
-> tokenList
->      : id_tok code tokenList         { () }
->      | any_string code tokenList             { () }
->      |                       { () }
-
-here goes optCode:
-
-> optCode :: { () }
-> optCode 
->      : code                  { () }
->      |                                       { () }
-
-> code :: { () }
-> code         : "{" codeBody "}"      { () }
-
-> codeBody :: { () }
-> codeBody
->      : codeItem codeBody     { () }
->       | codeItem             { () }
-
-> codeItem :: { () }
-> codeItem
->      : any_string            { () }
->      | id_tok                { () }
->      | code                  { () }
->      | any_symbol            { () }
->      | ":"    { () }
->      | ";"    { () }
->      | "::"   { () }
->      | "|"    { () }
->      | "%%"   { () }
->      | "%"    { () }
-
-> {
-
-> happyError :: [Token'] -> a
-> happyError ts = error ("Parse error in line " ++ show 0 ++
->                          case ts of
->                          [] -> " (at EOF)\n"
->                          _  ->  "\n" ++ show (take 20 ts) ++ "\n")
-
-A preprocessor for literal scripts (slow)
-
-> unlit :: String -> String
-> unlit = unlines . map (tail.tail) . filter p . lines
->     where p ('>':' ':_)  = True
->           p ('>':'\t':_) = True
->           p _            = False
-
-A postprocessor to make happy happy.
-
-> data Token' = Ident' String | Symbol' String | String' String
->             | Percent | DoublePercent | OpenBrace | ClosingBrace
->             | Colon | Semicolon | DoubleColon | Bar
-
-> instance Show Token' where
->   showsPrec n (Ident' s) = showChar '[' . showString s . showString "] "
->   showsPrec n (Symbol' s) = showChar '<' . showString s . showString "> "
->   showsPrec n (String' s) = showChar '"' . showString s . showString "\" "
->   showsPrec n Percent = showString "% "
->   showsPrec n DoublePercent = showString "%% "
->   showsPrec n OpenBrace  = showString "{ "
->   showsPrec n ClosingBrace = showString "} "
->   showsPrec n Colon = showString ": "
->   showsPrec n Semicolon = showString "; "
->   showsPrec n DoubleColon = showString ":: "
-
-
-> postlexer = map f
->   where f (Symbol "%%") = DoublePercent
->         f (Symbol "%")  = Percent
->         f (Symbol "{")  = OpenBrace
->         f (Symbol "}")  = ClosingBrace
->         f (Symbol "::") = DoubleColon
->         f (Symbol ":")  = Colon
->         f (Symbol ";")  = Semicolon
->         f (Symbol "|")  = Bar
->         f (Symbol s)    = Symbol' s
->         f (Ident  s)    = Ident' s
->         f (String s)    = String' s
-
-> getIdent' (Ident' x) = x
-> getString' (String' x) = x
-
-> theHappyParser = localHappyParser . postlexer . lexer . unlit
-
-> }
diff --git a/real/ebnf2ps/IOSupplement.hs b/real/ebnf2ps/IOSupplement.hs
deleted file mode 100644 (file)
index 5211db9..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-{-# OPTIONS -cpp #-}
---                            -*- Mode: Haskell -*- 
--- Copyright 1994 by Peter Thiemann
--- IOSupplement.hs --- some enhancements to the IO operations
--- Author          : Peter Thiemann
--- Created On      : Mon Aug 30 09:41:30 1993
--- Last Modified By: Peter Thiemann
--- Last Modified On: Thu Dec  2 10:37:39 1993
--- Update Count    : 13
--- Status          : Unknown, Use with caution!
--- 
--- $Log: IOSupplement.hs,v $
--- Revision 1.7  2002/01/29 11:03:21  simonmar
--- Tweaks to make the real suite run with GHCi.
---
--- Revision 1.6  1999/01/18 19:38:46  sof
--- Misc (backward compatible) changes to make srcs acceptable
--- to a Haskell 98 compiler.
---
--- Revision 1.5  1998/02/19 17:02:22  simonm
--- updates for library re-organisation in GHC 3.01.
---
--- Revision 1.4  1997/03/17 20:35:25  simonpj
--- More small changes towards 2.02
---
--- Revision 1.3  1997/03/14 08:08:09  simonpj
--- Major update to more-or-less 2.02
---
--- Revision 1.2  1996/07/25 21:23:58  partain
--- Bulk of final changes for 2.01
---
--- Revision 1.1  1996/01/08 20:02:33  partain
--- Initial revision
---
--- Revision 1.2  1994/03/15  15:34:53  thiemann
--- generalized readPathFile
---
--- Revision 1.1  1993/08/31  12:31:32  thiemann
--- Initial revision
---
--- $Locker:  $
---
-
-module IOSupplement (
-       getPath, readPathFile
-   ) where
-
-import System.Environment
-import System.IO
-
-#define fail ioError
-
---------------------------------------------------------------------------------
-
-
-getPath :: String -> [String] ->  IO [String]
-
--- Accepts the name of an environment variable and a [String] of default paths
--- and calls the continuation (::PathCont) with the resulting search path
-
-getPath envVar dflt =
-  (do {path <- getEnv envVar; return (manglePath path dflt)})
-    `catch` 
-       (\ _ -> return dflt)
-   
-
--- mangle a colon separated pathstring with a default path
-
-manglePath :: String -> [String] -> [String]
-manglePath "" dflt = dflt
-manglePath cs dflt = case span (/= ':') cs of
-                              ("",':':cs') -> dflt ++ manglePath cs' []
-                              ("", "") -> dflt
-                              (path,':':cs') -> path: manglePath cs' dflt
-                              (path,"") -> [path]
-
---------------------------------------------------------------------------------
-
-readPathFile :: [String] -> String -> IO String
-
--- readPathFile searchPath fileName fc sc
--- scan searchPath for fileName and read it
--- unless fileName starts with '.' or is absolute (starts with '/')
-
-readPathFile _  fileName@('/':_) = readFile fileName
-readPathFile _  fileName@('.':_) = readFile fileName
-
-readPathFile [] fileName 
-  = fail (userError ("readPathFile failed on :" ++ fileName))
-
-readPathFile (path: paths) fileName
-  = readFile fullName `catch` 
-    (\ _ -> readPathFile paths fileName)
-  where
-       fullName   = path ++ '/': fileName
-
diff --git a/real/ebnf2ps/Info.hs b/real/ebnf2ps/Info.hs
deleted file mode 100644 (file)
index ed56eed..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
---                            -*- Mode: Haskell -*- 
--- Copyright 1994 by Peter Thiemann
---
--- just a provider of type declarations
--- 
--- $Locker:  $
--- $Log: Info.hs,v $
--- Revision 1.1  1996/01/08 20:02:33  partain
--- Initial revision
---
--- Revision 1.1  1994/03/15  15:34:53  thiemann
--- Initial revision
---
--- 
-
-
-module Info where
-
-import Color   (Color (..))
-import Fonts   (FONT)
-
-type ColorInfo = (Color, Color, Color, Color)
-type INFO =  (Int, Int, Int, Int, Int, FONT, FONT, ColorInfo)
-type WrapperType = String -> INFO -> Container -> ShowS
-
-type Container = (
---      rx, ry         origin relative to bounding box
-       Int, Int,
---     widht height    of content's bounding box
-       Int, Int,
---     inOutY          relative position of entry/exit point
-       Int,
-        GObject)
-
-data GObject
-       = AString Color FONT String                         -- AString font theString
-       | ABox Color Bool Container                         -- round edges toggle
-       | Arrow Color Int                                   -- Arrow size
-       | Aline Color                                       -- width height rlineto
-       | ATurn Color TDirection                            -- a turn
-       | AComposite [Container]
-
-
-data TDirection = SE | SW | WN | NE
-
diff --git a/real/ebnf2ps/Lexer.hs b/real/ebnf2ps/Lexer.hs
deleted file mode 100644 (file)
index 5d8653c..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-module Lexer where
--- Copyright 1994 by Peter Thiemann
-import Data.Char
-
-------------------------------------------------------------------------------
---NOW the lexer
-------------------------------------------------------------------------------
-
-data Token
-       = Ident String | Symbol String | String String
-
-instance Show Token where
-  showsPrec n (Ident s)  = showChar '[' . showString s . showString "] "
-  showsPrec n (Symbol s) = showChar '<' . showString s . showString "> "
-  showsPrec n (String s) = showChar '"' . showString s . showString "\" "
-  showList [] = id
-  showList (x:xs) = shows x . showList xs
-
-isIdChar c = isAlpha c || isDigit c || c == '_'
-
-theSymbols = "!@#$%^&*+./<=>?\\|:"
-isSymbolChar c = c `elem` theSymbols
-
-lexer :: String -> [Token]
-lexer "" = []
-lexer ('"':cs) = String (stchars): lexer srest
-       where (stchars, srest) = lexString cs
-lexer ('\'':cs) = String (oneChar): lexer srest
-       where (oneChar, srest) = lexChar cs
-lexer (c:cs) | isSpace c = lexer cs
-          | isAlpha c = Ident (c:idchars): lexer irest
-          | isSymbolChar c = Symbol(c:sychars): lexer srest
-          | otherwise = Symbol([c]): lexer cs
-       where (idchars, irest) = span isIdChar cs
-             (sychars, srest) = span isSymbolChar cs
-
--- preprocessor for EBNF style comments
-uncomment :: String -> String
-uncomment ""        = ""
-uncomment ('#':cs)  = uncomment (dropWhile (/= '\n') cs)
-uncomment ('"':cs)  = '"':uncommentString cs
-uncomment ('\'':cs) = '\'':uncommentChar cs
-uncomment (c:cs)    = c:uncomment cs
-
-uncommentString "" = ""
-uncommentString ('\\':c:cs) = '\\':c:uncommentString cs
-uncommentString ('"':cs) = '"':uncomment cs
-uncommentString (c:cs) = c:uncommentString cs
-
-uncommentChar "" = ""
-uncommentChar ('\\':c:cs) = '\\':c:uncommentChar cs
-uncommentChar ('\'':cs) = '"':uncomment cs
-uncommentChar (c:cs) = c:uncommentChar cs
-
--- generic lexers
-lexChar ('\\':c:'\'':cs) = ([c], cs)
-lexChar (c:'\'':cs) = ([c], cs)
-lexChar cs = ([], cs)
-
-lexString ('\\':c:cs) = (c:stchars, srest) where (stchars, srest) = lexString cs
-lexString ('"':cs) = ("", cs)
-lexString ("") = ("","")
-lexString (c:cs) = (c:stchars, srest) where (stchars, srest) = lexString cs
-
-isIdent (Ident _ ) = True
-isIdent _ = False
-
-getIdent (Ident s) = s
-
-isString (String _) = True
-isString _ = False
-
-getString (String s) = s
-
diff --git a/real/ebnf2ps/Main.hs b/real/ebnf2ps/Main.hs
deleted file mode 100644 (file)
index ec7bcb4..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
---                            -*- Mode: Haskell -*- 
--- Copyright 1994 by Peter Thiemann
--- Ebnf2ps.hs --- the driver module for the syntax diagram generator
--- Author          : Peter Thiemann
--- Created On      : Fri Aug 27 09:09:15 1993
--- Last Modified By: Peter Thiemann
--- Last Modified On: Mon Dec 27 17:41:11 1993
--- Update Count    : 28
--- Status          : Unknown, Use with caution!
--- 
--- $Log: Main.hs,v $
--- Revision 1.5  1997/03/19 01:03:38  simonpj
--- Fix nofib/real/ebnf2
---
--- Revision 1.4  1997/03/17 20:35:26  simonpj
--- More small changes towards 2.02
---
--- Revision 1.3  1997/03/14 08:08:10  simonpj
--- Major update to more-or-less 2.02
---
--- Revision 1.2  1996/07/25 21:24:02  partain
--- Bulk of final changes for 2.01
---
--- Revision 1.1  1996/01/08 20:02:39  partain
--- Initial revision
---
--- Revision 1.3  1994/03/15  15:34:53  thiemann
--- added full color support, XColorDB based
---
--- Revision 1.2  1993/09/13  10:37:39  thiemann
--- Fixed a space leak
---
--- Revision 1.1  1993/08/31  12:31:32  thiemann
--- Initial revision
---
--- $Locker:  $
---
-
-module Main (main)
-where
-
-import System.IO
-import IOSupplement
-import CommandLine     (parse_cmds)
-import StringMatch     (stringMatch)
-import Fonts           (FONT, makeFont)
-import EbnfGrammar
-import HappyParser     (theHappyParser)
-import AbstractSyntax
-import GrammarTransform (simplify)
-import EbnfLayout
-import FigOutput       (figShowsWrapper)
-import PsOutput                (psShowsWrapper)
-import Color
-import Info
-
---------------------------------------------------------------------------------
-main =  parse_cmds program
---------------------------------------------------------------------------------
-program   
-         :: String -> Int -> String
-         -> String -> Int -> String
-         -> String -> String
-         -> Int -> Int
-         -> Int -> Int
-         -> Int                                            -- arrowSize
-         -> String                                         -- rgbFileName
-         -> Bool
-         -> Bool
-         -> Bool -> Bool
-         -> Bool -> Bool
-         -> [String] -> IO ()
-program
-         ntFontName ntFontScale ntColor
-         tFontName  tFontScale  tColor
-         lineColor fatLineColor
-         borderDistX borderDistY
-         lineWidth fatLineWidth
-         arrowSize 
-         rgbFileName
-         happyInput
-         doSimplify
-         psOutput figOutput
-         helpFlag verbose strs
-         | length strs < 2 || helpFlag =
-             hPutStr stderr
-                       ("Usage: ebnf2ps [options] BNFfile Nonterminal ...\n"
-                       ++unlines usageBlurb)
-         | otherwise =
-           do
-             afmPath <- getPath "AFMPATH" afmPathDefault
-             ntAFM <- readPathFile afmPath (ntFontName++".afm")
-             tAFM <- readPathFile afmPath (tFontName++".afm")
-             rgbPath <- getPath "RGBPATH" rgbPathDefault
-             rgbFileContents <- readPathFile rgbPath rgbFileName
-                                `catch`
-                                (\ _ -> 
-                                 do
-                                   message "Color database not found, using fall back data\n"
-                                   return "")
-
-             let 
-                 colorTable = prepareColors rgbFileContents
-                                    [ntColor, tColor, lineColor, fatLineColor]
-                 colorInfo@(c1,c2,c3,c4) = (lookupColor ntColor colorTable,
-                                  lookupColor tColor colorTable,
-                                   lookupColor lineColor colorTable,
-                                  lookupColor fatLineColor colorTable)
-                 info = (borderDistX, borderDistY, lineWidth, fatLineWidth, arrowSize,
-                         makeFont ntFontName ntFontScale ntAFM,
-                         makeFont tFontName tFontScale tAFM,
-                         colorInfo)
-
-             message ("using colors: "++(showsColor c1 . showsColor c2 .
-                                         showsColor c3 . showsColor c4)
-                     "\nfrom rgbPathDefault: "++show rgbPathDefault)
-
-             inputPath <- getPath "EBNFINPUTS" ebnfInputDefault
-
-             message ("generating nonterminals: "++show nonterminals++
-                     "\nfrom "++bnfName++
-                     "\nusing input path "++show inputPath)
-
-             bnfContent <- readPathFile inputPath bnfName
-
-             if happyInput then
-               let rawInput = theHappyParser bnfContent
-                   prods | doSimplify = simplify rawInput
-                         | otherwise  = rawInput
-               in do
-                       message "using happyInput"
-                       writeAll outExtension (layoutAll outWrapper info prods nonterminals)
-               else
-               case map (if doSimplify then simplify else id) (parseAll bnfContent) of
-                   prods:_ -> do 
-                                 message "using ebnfInput"
-                                 writeAll outExtension (layoutAll outWrapper info prods nonterminals)
-                   _ -> hPutStr stderr ("Could not parse "++bnfName++"\n")
-               
-    where
-       afmPathDefault      = ["/usr/local/tex/Adobe", "/usr/local/tex/lib/TeXPS/afm", "."]
-       ebnfInputDefault    = ["."]
-       rgbPathDefault      = ["/usr/lib/X11", "/usr/local/X11R5/lib/X11"]
-       (bnfName: nonterminals) = strs
-       (outWrapper, outExtension)
-               | figOutput = (figShowsWrapper, ".fig")
-               | otherwise = (psShowsWrapper,  ".eps")
-       message what | verbose   = hPutStr stderr (what++"\n")
-                    | otherwise = return ()
-
---------------------------------------------------------------------------------
-layoutAll :: WrapperType -> INFO -> [Production] -> [String] -> [(String, String)]
-layoutAll wrapper info prods nonterminals =
-       [ (ntName, wrapper ntName info (makePictureLayout info prod) "")
-       | prod@(ProdProduction ntName ntAliases _) <- prods,
---       ntName `elem` nonterminals ]
-         any (flip stringMatch ntName) nonterminals ]
-
---------------------------------------------------------------------------------
-usageBlurb =
-       [ "",
-         "where options may be chosen from the following list:",
-         "",
-          "  -ntFont        <font>\tPostScript font used for nonterminals",
-         "  -ntScale        <int>\tpointsize of typeface for nonterminals",
-         "  -ntColor      <color>\tcolor of typeface for nonterminals",
-         "  -tFont         <font>\tPostScript font used for terminal strings",
-         "  -tScale         <int>\tpointsize of typeface for terminals",
-         "  -tColor       <color>\tcolor of typeface for terminals",
-         "  -borderDistX    <int>\thorizontal distance of objects from their container",
-         "  -borderDistY    <int>\tvertical distance of objects from their container",
-         "  -lineWidth      <int>\tused for connecting lines",
-         "  -fatLineWidth   <int>\tused for boxes",
-         "  -lineColor    <color>\tcolor used for connecting lines",
-         "  -fatLineColor <color>\tused for boxes",
-         "  -arrowSize      <int>\tsize of (invisible) box containing an arrow",
-         "  -rgbFileName    <int>\tfile name for color definitions (default \"rgb.txt\")",
-         "  -happy               \taccept happy input format",
-         "  +ps                  \tproduce encapulated PostScript output (default)",
-         "  +fig                 \tproduce fig output (FORMAT 2.1)",
-         "  +simplify            \tsimplify productions (experimental)",
-         "  -verbose             \tprint some progress messages",
-         "  -help                \tproduces this list",
-         "",
-         "Only the first occurrence of an option is recognized.",
-         "Environment variables:",
-         "",
-         "  AFMPATH\tsearch path for Adobe Font Metric files",
-         "  EBNFINPUTS\tsearch path for BNFfiles",
-         "  RGBPATH\tsearch path for color definitions"
-       ]
-
---------------------------------------------------------------------------------
-
-writeAll ext [] = return ()
-writeAll ext ((ntName, content): more) 
-  = do
-       hPutStr stdout content
-       writeAll ext more
-
---------------------------------------------------------------------------------
-
-str2int :: String -> Int
-str2int s = case reads s of
-           []    -> 0
-           ((x,_):_) -> x
diff --git a/real/ebnf2ps/Makefile b/real/ebnf2ps/Makefile
deleted file mode 100644 (file)
index 0e213d5..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-TOP = ../..
-include $(TOP)/mk/boilerplate.mk
-
-SRC_HC_OPTS += -fglasgow-exts -package lang
-
-PROG_ARGS = ebnf2ps.stdin apat
-STDIN_FILE = /dev/null
-
-# the default HS_SRCS doesn't include .ly files...
-HS_SRCS += HappyParser.hs
-GHC_HAPPY_OPTS = -g
-
-include $(TOP)/mk/target.mk
-
diff --git a/real/ebnf2ps/Parsers.hs b/real/ebnf2ps/Parsers.hs
deleted file mode 100644 (file)
index 2cfc5f5..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
---------------------------------------------------
--- Copyright 1994 by Peter Thiemann
--- $Log: Parsers.hs,v $
--- Revision 1.1  1996/01/08 20:02:32  partain
--- Initial revision
---
--- Revision 1.3  1994/03/15  15:34:53  thiemann
--- minor revisions
---
---Revision 1.2  1993/08/31  12:31:32  thiemann
---reflect changes in type FONT
---
---Revision 1.1  1993/08/17  12:34:29  thiemann
---Initial revision
---
--- $Locker:  $
---------------------------------------------------
-module Parsers where
-
-infixl 6 `using`, `using2`
-infixr 7 `alt`
-infixr 8 `thn`, `xthn`, `thnx` 
-
-type Parser a b = [a] -> [(b, [a])]
-
-succeed :: beta -> Parser alpha beta
-succeed value tokens = [(value, tokens)]
-
--- the parser
---     satisfy p
--- accepts the language { token | p(token) }
-
-satisfy :: (alpha -> Bool) -> Parser alpha alpha
-satisfy p [] = []
-satisfy p (token:tokens) | p token = succeed token tokens
-                        | otherwise = []
-
--- the parser
---     literal word
--- accepts { word }
-
-literal :: Eq alpha => alpha -> Parser alpha alpha
-literal token = satisfy (== token)
-
--- if p1 and p2 are parsers accepting L1 and L2 then
---     then p1 p2
--- accepts L1.L2
-
-thn :: Parser alpha beta -> Parser alpha gamma -> Parser alpha (beta, gamma)
-thn p1 p2 =
-       concat
-       . map (\ (v1, tokens1) -> map (\ (v2, tokens2) -> ((v1,v2), tokens2)) (p2 tokens1))
-       . p1
-
-thnx :: Parser alpha beta -> Parser alpha gamma -> Parser alpha beta
-thnx p1 p2 = 
-       concat
-       . map (\ (v1, tokens1) -> map (\ (v2, tokens2) -> (v1, tokens2)) (p2 tokens1))
-       . p1
-
-xthn :: Parser alpha beta -> Parser alpha gamma -> Parser alpha gamma
-xthn p1 p2 =
-       concat
-       . map (\ (v1, tokens1) -> map (\ (v2, tokens2) -> (v2, tokens2)) (p2 tokens1))
-       . p1
-
-
--- if p1 and p2 are parsers accepting L1 and L2 then
---     alt p1 p2
--- accepts L1 \cup L2
-
-alt :: Parser alpha beta -> Parser alpha beta -> Parser alpha beta
-alt p1 p2 tokens = p1 tokens ++ p2 tokens
-
--- if p1 is a parser then
---     using p1 f
--- is a parser that accepts the same language as p1
--- but mangles the semantic value with f
-
-using :: Parser alpha beta -> (beta -> gamma) -> Parser alpha gamma
-using p1 f = map (\ (v, tokens) -> (f v, tokens)) . p1
-
-using2 :: Parser a (b,c) -> (b -> c -> d) -> Parser a d
-using2 p f = map ( \((v,w), tokens) -> (f v w, tokens)) . p
-
--- if p accepts L then plus p accepts L+
-
-plus :: Parser alpha beta -> Parser alpha [beta]
-plus p = (p `thn` rpt p) `using2` (:)
-
--- if p accepts L then rpt p accepts L*
-
-rpt :: Parser alpha beta -> Parser alpha [beta]
-rpt p = plus p `alt` succeed []
-
--- if p accepts L then opt p accepts L?
-
-opt :: Parser alpha beta -> Parser alpha [beta]
-opt p = (p `using` \x -> [x]) `alt` succeed []
-
--- followedBy p1 p2 recognizes L(p1) if followed by a word in L (p2)
-
-followedBy :: Parser a b -> Parser a c -> Parser a b
-followedBy p q tks = [(v, rest) | (v, rest) <- p tks, x <- q rest]
diff --git a/real/ebnf2ps/PsOutput.hs b/real/ebnf2ps/PsOutput.hs
deleted file mode 100644 (file)
index f2bbd15..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
---------------------------------------------------
--- Copyright 1994 by Peter Thiemann
--- $Log: PsOutput.hs,v $
--- Revision 1.2  1999/01/18 19:38:47  sof
--- Misc (backward compatible) changes to make srcs acceptable
--- to a Haskell 98 compiler.
---
--- Revision 1.1  1996/01/08 20:02:34  partain
--- Initial revision
---
--- Revision 1.4  1994/03/15  15:34:53  thiemann
--- added full color support, XColorDB based
---
---Revision 1.3  1993/08/31  12:31:32  thiemann
---Reflect changes in type FONT
---
---Revision 1.2  1993/08/25  15:11:11  thiemann
---added PostScript prolog to use shorter command names
---fixed backslash bug in psString
---
---Revision 1.1  1993/08/17  12:34:29  thiemann
---Initial revision
---
--- $Locker:  $
---------------------------------------------------
-module PsOutput (psShowsWrapper) where
-
--- import EbnfLayout
-import Fonts (FONT, fontName, fontScale, noFont)
-import Color (Color (..), showsPsColor, noColor)
-import Info (Container (..), GObject (..), TDirection (..), WrapperType (..), INFO(..), ColorInfo(..))
-
--- psState = (currentColor, currentFont, currentLinewidth)
-type PsState = (Color, FONT, Int, ShowS)
-type PsTrafo = PsState -> PsState
-
-initialState :: PsState
-initialState = (noColor, noFont, -1, id)
-
-setColor :: Color -> PsTrafo
-setColor clr st@(clr0, fnt0, lw0, shower)
-  | clr == clr0 = st
-  | otherwise   = (clr, fnt0, lw0, shower . showsPsColor clr)
-
-setFont :: FONT -> PsTrafo
-setFont font st@(clr0, fnt0, lw0, shower)
-  | font == fnt0 = st
-  | otherwise    = (clr0, font, lw0,
-                   shower .
-                    showString ('/':fontName font) . showString " findfont " .
-                    shows (fontScale font) . showString " scalefont" .
-                   showString " setfont\n")
-                  
-
-setLineWidth :: Int -> PsTrafo
-setLineWidth lw st@(clr0, fnt0, lw0, shower)
-  | lw == lw0 = st
-  | otherwise = (clr0, fnt0, lw, shower . showsPsNum lw . showString " slw\n")
-
-drawBox :: Bool -> Int -> Int -> Int -> Int -> Int -> PsTrafo
-drawBox rounded ax ay width height lw (clr0, fnt0, lw0, shower) = 
-        (clr0, fnt0, lw,
-         shower . showsPsNum ax . showsPsNum ay .
-         showsPsNum width . showsPsNum height . showsPsNum lw .
-         showString (if rounded then " RBox\n" else " Box\n"))
-
-drawString :: Int -> Int -> String -> PsTrafo
-drawString ax ay str (clr0, fnt0, lw0, shower) = 
-       (clr0, fnt0, lw0, 
-        shower .
-        showsMoveto ax ay .
-        showChar '(' . showString (psString str) . showChar ')' .
-        showString " show\n")
-
-drawRLine :: Int -> Int -> [(Int, Int)] -> PsTrafo
-drawRLine ax ay rels (clr0, fnt0, lw0, shower) =
-       (clr0, fnt0, lw0,
-        shower .
-        showString "n" .
-        showsMoveto ax ay .
-        foldr (.) (showString " s\n") [ showsRLineto rx ry | (rx, ry) <- rels ])
-
-insertShowS :: ShowS -> PsTrafo
-insertShowS shower1 (clr0, fnt0, lw0, shower) = (clr0, fnt0, lw0, shower . shower1)
-
-runTrafo :: PsTrafo -> ShowS
-runTrafo f = shower where
-                     (_, _, _, shower) = f initialState
-
-psShowsWrapper :: WrapperType
-psShowsWrapper title
-        (borderDistX, borderDistY, lineWidth, fatLineWidth, arrowSize, ntFont, tFont,
-         (ntColor, tColor, lineColor, fatLineColor))
-               container@(rx, ry, width, height, inOutY, gobj) =
-       showString "%!PS-Adobe-1.0\n" .
-       showString "%%DocumentFonts: " .
-       showString ntFontName . 
-       (if ntFontName == tFontName then id else (showChar ' ' . showString tFontName)) .
-       showString "\n%%Title: " . showString title .
-       showString "\n%%Creator: ebnf2ps (Copyright 1994 by Peter Thiemann)\n" .
-       showString "%%Pages: 0\n" .
-       showString "%%BoundingBox:" . 
-       showsPsNum (psFloor rx) . showsPsNum (psFloor ry) .
-       showsPsNum (psCeil (rx+width)) . showsPsNum (psCeil (ry+height)) .
-       showString "\n%%EndComments\n" .
-       showString psProlog .
-       showString "%%EndProlog\n" .
-       showString "\n$Ebnf2psBegin\n" .
-       runTrafo (psShowsContainer rx ry container) .
-       showString "\n$Ebnf2psEnd\n"
-       where
-  ntFontName = fontName ntFont
-  tFontName  = fontName tFont
-
-  psShowsContainer :: Int -> Int -> Container -> PsTrafo
-  psShowsContainer ax ay (rx, ry, width, height, inOutY, gobj) =
-       case gobj of
-       AString color font theString ->
-               drawString ax1 ay1 theString .
-               setColor color .
-               setFont font
-       ABox color rounded content ->
-               psShowsContainer ax1 ay1 content .
-               drawBox rounded ax1 ay1 width height fatLineWidth .
-               setColor color
-        Arrow color size ->
-           drawRLine  (ax1-size) (ay1+abs size) [(size, -abs size), (-size, -abs size)] .
-           setLineWidth lineWidth .
-           setColor color
-       Aline color ->
-           drawRLine ax1 ay1 [(width, height)] .
-           setLineWidth lineWidth .
-           setColor color
-       ATurn color dir ->
-           insertShowS(
-               showString "n" .
-               showsIt dir .
-               showString " s\n") .
-           setLineWidth lineWidth .
-           setColor color
-               where
-                 showsIt SE = showsMoveto ax1 ay1 .
-                              showsArcto ax1 (ay1+height) (ax1+width) (ay1+height) radius .
-                              showsLineto (ax1+width) (ay1+height)
-                 showsIt WN = showsMoveto ax1 ay1 .
-                              showsArcto (ax1+width) ay1 (ax1+width) (ay1+height) radius .
-                              showsLineto (ax1+width) (ay1+height)
-                 showsIt SW = showsMoveto (ax1+width) ay1 .
-                              showsArcto (ax1+width) (ay1+height) ax1 (ay1+height) radius .
-                              showsLineto ax1 (ay1+height)
-                 showsIt NE = showsMoveto (ax1+width) ay1 .
-                              showsArcto ax1 ay1 ax1 (ay1+height) radius .
-                              showsLineto ax1 (ay1+height)
-                 radius = min height width
-       AComposite contents ->
-               foldr (.) id (map (psShowsContainer ax1 ay1) contents)
-    where
-      ax1 = ax + rx
-      ay1 = ay + ry
-
--- showsPsColor color =        showString " col" . showsColor color
-
-showsSetlinewidth lineWidth = showsPsNum lineWidth . showString " slw"
-
-showsMoveto x y        =       showsPsXY x y . showString " m"
-
-showsLineto x y =      showsPsXY x y . showString " l"
-
-showsArcto x1 y1 x2 y2 r = showsPsXY x1 y1 . showsPsXY x2 y2 . showsPsNum r .
-                          showString " apr\n"
-
-showsRMoveto x y =     showsPsXY x y . showString " rm"
-
-showsRLineto x y =     showsPsXY x y . showString " rl"
-
-showsPsXY x y =                showsPsNum x . showsPsNum y
-
-showsPsNum :: Int -> ShowS
-showsPsNum x =         showChar ' ' . shows x100 .
-                       if x99 == 0 then id
-                       else showChar '.' . shows x1 . shows x2
-                       where (x100,x99) = x `divMod` 100
-                             (x1,x2) = x99 `divMod` 10
-
-psFloor, psCeil :: Int -> Int
-psFloor x = 100 * (x `div` 100)
-psCeil  x = 100 * ((x + 99) `div` 100)
-
--- showsPsInt :: Int -> showS
--- showsPsInt x = showChar ' ' . showInt (x `div` 100)
-       
-psString "" = ""
-psString ('(':cs) = "\\("   ++ psString cs
-psString (')':cs) = "\\)"   ++ psString cs
-psString ('\\':cs)= "\\\\"  ++ psString cs
-psString ('-':cs) = "\\261" ++ psString cs                 -- endash looks much nicer
-psString (c:cs)   = c:psString cs
-
--- Box:                width height linewidth Box -> -
--- draw box at current point
-
-psProlog :: String
-psProlog = "\
-\/$Ebnf2psDict 100 dict def\n\
-\$Ebnf2psDict begin\n\
-\/l {lineto} bind def\n\
-\/m {moveto} bind def\n\
-\/rl {rlineto} bind def\n\
-\/rm {rmoveto} bind def\n\
-\/s {stroke} bind def\n\
-\/n {newpath} bind def\n\
-\/gs {gsave} bind def\n\
-\/gr {grestore} bind def\n\
-\/clp {closepath} bind def\n\
-\/slw {setlinewidth} bind def\n\
-\/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul\n\
-\4 -2 roll mul setrgbcolor} bind def\n\
-\/scol {3 {255 div 3 1 roll} repeat setrgbcolor} bind def\n\
-\ \
-\/apr {arcto 4 {pop} repeat} def\n\
-\/Box {\n\
-\  /linewidth exch def\n\
-\  linewidth sub /height exch def\n\
-\  linewidth sub /width exch def\n\
-\ \
-\  n m\n\
-\  width 0 rl\n\
-\  0 height rl\n\
-\  width neg 0 rl\n\
-\  0 height neg rl\n\
-\  clp linewidth slw s\n\
-\} def\n\
-\ \
-\/RBox {\n\
-\  /linewidth exch def\n\
-\  /height exch def\n\
-\  /width exch def\n\
-\  /lly exch def\n\
-\  /llx exch def\n\
-\  linewidth 2 div dup llx add /llx exch def lly add /lly exch def\n\
-\  /height height linewidth sub def\n\
-\  /width  width  linewidth sub def\n\
-\  /height2 height 2 div def\n\
-\  /width2  width  2 div def\n\
-\  /urx llx width add def\n\
-\  /ury lly height add def\n\
-\  /mmx llx width2 add def\n\
-\  /mmy lly height2 add def\n\
-\  /radius width2 height2 ge {height2} {width2} ifelse def\n\
-\ \
-\  n mmx lly m\n\
-\  urx lly urx mmy radius apr\n\
-\  urx ury mmx ury radius apr\n\
-\  llx ury llx mmy radius apr\n\
-\  llx lly mmx lly radius apr\n\
-\  mmx lly l\n\
-\  clp linewidth slw s\n\
-\} def\n\
-\end\n\
-\/$Ebnf2psBegin {$Ebnf2psDict begin /$Ebnf2psEnteredState save def} def\n\
-\/$Ebnf2psEnd {$Ebnf2psEnteredState restore end} def\n\
-\\n"
diff --git a/real/ebnf2ps/README b/real/ebnf2ps/README
deleted file mode 100644 (file)
index fe8650a..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-What is Ebnf2ps?
-
-A context free grammar in EBNF is translated into syntax diagrams
-(also known as railroad diagrams). Output is in encapsulated
-Postscript, ready to use with LaTeX, or in Fig.
-The syntax of the input file is specified in ebnf.BNF.
-There is a sample file called gofer.BNF (guess what it is...).
-Ebnf2ps -help gives some first aid.
-
-[gofer's BNF is originally taken from Mark Jones's gofer distribution]
-
-Instructions to build Ebnf2ps, the ultimate EBNF illustrator.
-
-1. edit the Makefile to reflect your Haskell compiler, for example
-       HC= hbc
-2. find out where your TeX installation stores .afm-files (Adobe font
-   metric files) and change the variable "afmPathDefault" in
-   Ebnf2ps.hs accordingly. Alternatively, you can set the environment
-   variable AFMPATH when running the program.
-   These files are absolutely necessary. If you can't find them, get
-   them from ftp://ftp.adobe.com/pub/adobe/AFMFiles/
-3. change the variable "rgbPathDefault" to contain the directory where
-   your X installation stores its color data base (usually
-   /usr/lib/X11/rgb.txt). This can also be corrected later with the
-   environment variable "RGBPATH".
-   There are fallback color definitions for the 8 digital colors
-   (black, white, blue, green, cyan, reg, magenta, yellow, white), so 
-   nothing needs be done if that's enough for you.
-4. make
-
diff --git a/real/ebnf2ps/StringMatch.hs b/real/ebnf2ps/StringMatch.hs
deleted file mode 100644 (file)
index 70de0f0..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
---                            -*- Mode: Haskell -*- 
--- Copyright 1994 by Peter Thiemann
--- StringMatch.hs --- translate regular expression into a string match function
--- Author          : Peter Thiemann
--- Created On      : Thu Dec 23 11:16:26 1993
--- Last Modified By: Peter Thiemann
--- Last Modified On: Thu Dec 23 12:32:39 1993
--- Update Count    : 18
--- Status          : Unknown, Use with caution!
--- 
--- $Locker:  $
--- $Log: StringMatch.hs,v $
--- Revision 1.1  1996/01/08 20:02:33  partain
--- Initial revision
---
--- Revision 1.1  1994/03/15  15:34:53  thiemann
--- Initial revision
---
--- 
-
-module StringMatch {-(stringMatch)-} where
-
-import Parsers
-
-infixr 8 +.+ , +.. , ..+
-infixl 7 <<< , <<*
-infixr 6 |||
-
-(+.+) = thn
-(..+) = xthn
-(+..) = thnx
-(|||) = alt
-(<<<) = using
-(<<*) = using2
-lit   :: Eq a => a -> Parser a a
-lit   = literal
-star  = rpt
-anyC  = satisfy (const True)
-butC cs = satisfy (not.(`elem` cs))
-noC   "" = [("","")]
-noC   _  = []
-unitL = \x -> [x]
-
---
--- grammar for regular expressions:
---
-{-
-  Atom         = character | "\\" character | "." | "\\(" Regexp "\\) .
-  ExtAtom      = Atom ["*" | "+" | "?"] .
-  Factor       = ExtAtom + .
-  Regexp       = Factor / "\\|" ["$"].
--}
-
-type ParseRegexp = Parser Char String
-
-rrAtom :: Parser Char ParseRegexp
-rrAtom =
-     lit '\\' ..+ lit '(' ..+ rrRegexp +.. lit '\\' +.. lit ')'
- ||| 
-   ( lit '\\' ..+ butC "|()"   <<< lit
- ||| lit '.'                   <<< const anyC
- ||| butC "\\.$"               <<< lit
- ||| lit '$' `followedBy` anyC <<< lit
-   ) <<< (<<< unitL)
-
-rrExtAtom :: Parser Char ParseRegexp
-rrExtAtom =
-     rrAtom +.+ opt (lit '*' <<< const star
-               |||  lit '+' <<< const plus
-               |||  lit '?' <<< const opt)
-       <<< helper
-     where
-       helper (ea, []) = ea
-       helper (ea, [f]) = f ea <<< concat
-
-rrFactor :: Parser Char ParseRegexp
-rrFactor =
-     plus rrExtAtom    <<< foldr (\ p1 p2 -> p1 +.+ p2 <<* (++)) (succeed "")
-
-rrRegexp =
-     rrFactor +.+ star (lit '\\' ..+ lit '|' ..+ rrFactor) +.+ opt (lit '$')
-       <<< helper
-     where
-       helper (ef, (efs, [])) = foldl (|||) ef efs +.. star anyC
-       helper (ef, (efs, _ )) = foldl (|||) ef efs +.. noC
-
-regexp0 :: Parser Char (Parser Char String)
-regexp0 =
-     lit '^' ..+ rrRegexp
- ||| rrRegexp
-        <<< (\p -> let p' = p ||| anyC ..+ p' in p')
-
-stringMatch :: String -> String -> Bool
-stringMatch re subject = wellformed && not (null (filter (null . snd) (match subject)))
-    where matches      = regexp0 re
-         wellformed   = not (null matches) && null rest
-         (match,rest) = head matches 
diff --git a/real/ebnf2ps/Times-Roman.afm b/real/ebnf2ps/Times-Roman.afm
deleted file mode 100644 (file)
index 26c6882..0000000
+++ /dev/null
@@ -1,425 +0,0 @@
-StartFontMetrics 2.0
-Comment Copyright (c) 1984 Adobe Systems Incorporated.         All Rights Reserved.
-Comment Creation Date:Mon Mar 31 17:10:33 PST 1986
-FontName Times-Roman
-EncodingScheme AdobeStandardEncoding
-FullName Times Roman
-FamilyName Times
-Weight Roman
-ItalicAngle 0.0
-IsFixedPitch false
-UnderlinePosition -109
-UnderlineThickness 49
-Version 001.000
-Notice Times Roman is a trademark of Allied Corporation.
-FontBBox -170 -217 1024 896
-CapHeight 662
-XHeight 448
-Descender -217
-Ascender 682
-StartCharMetrics 210
-C 32 ; WX 250 ; N space ; B 0 0 0 0 ;
-C 33 ; WX 333 ; N exclam ; B 109 -14 224 676 ;
-C 34 ; WX 408 ; N quotedbl ; B 70 445 337 685 ;
-C 35 ; WX 500 ; N numbersign ; B 4 0 495 662 ;
-C 36 ; WX 500 ; N dollar ; B 44 -87 456 727 ;
-C 37 ; WX 833 ; N percent ; B 61 -14 772 676 ;
-C 38 ; WX 778 ; N ampersand ; B 42 -14 750 676 ;
-C 39 ; WX 333 ; N quoteright ; B 103 432 242 676 ;
-C 40 ; WX 333 ; N parenleft ; B 49 -177 304 676 ;
-C 41 ; WX 333 ; N parenright ; B 29 -177 284 676 ;
-C 42 ; WX 500 ; N asterisk ; B 64 265 437 683 ;
-C 43 ; WX 564 ; N plus ; B 30 7 534 512 ;
-C 44 ; WX 250 ; N comma ; B 63 -143 202 101 ;
-C 45 ; WX 333 ; N hyphen ; B 43 194 289 257 ;
-C 46 ; WX 250 ; N period ; B 68 -14 183 101 ;
-C 47 ; WX 278 ; N slash ; B -12 -108 302 682 ;
-C 48 ; WX 500 ; N zero ; B 24 -14 476 676 ;
-C 49 ; WX 500 ; N one ; B 111 0 394 676 ;
-C 50 ; WX 500 ; N two ; B 30 0 475 676 ;
-C 51 ; WX 500 ; N three ; B 44 -14 431 676 ;
-C 52 ; WX 500 ; N four ; B 12 0 472 676 ;
-C 53 ; WX 500 ; N five ; B 32 -14 438 688 ;
-C 54 ; WX 500 ; N six ; B 35 -14 468 682 ;
-C 55 ; WX 500 ; N seven ; B 20 -14 449 662 ;
-C 56 ; WX 500 ; N eight ; B 53 -14 442 676 ;
-C 57 ; WX 500 ; N nine ; B 30 -22 460 676 ;
-C 58 ; WX 278 ; N colon ; B 81 -14 196 458 ;
-C 59 ; WX 278 ; N semicolon ; B 63 -143 202 458 ;
-C 60 ; WX 564 ; N less ; B 27 0 536 522 ;
-C 61 ; WX 564 ; N equal ; B 30 132 534 390 ;
-C 62 ; WX 564 ; N greater ; B 27 0 536 522 ;
-C 63 ; WX 444 ; N question ; B 49 -14 395 676 ;
-C 64 ; WX 921 ; N at ; B 0 -155 819 675 ;
-C 65 ; WX 722 ; N A ; B 15 0 706 676 ;
-C 66 ; WX 667 ; N B ; B 20 0 596 662 ;
-C 67 ; WX 667 ; N C ; B 33 -14 637 676 ;
-C 68 ; WX 722 ; N D ; B 20 0 689 662 ;
-C 69 ; WX 611 ; N E ; B 12 0 597 662 ;
-C 70 ; WX 556 ; N F ; B 12 0 544 662 ;
-C 71 ; WX 722 ; N G ; B 27 -14 704 676 ;
-C 72 ; WX 722 ; N H ; B 20 0 703 662 ;
-C 73 ; WX 333 ; N I ; B 18 0 316 662 ;
-C 74 ; WX 389 ; N J ; B 10 -14 376 662 ;
-C 75 ; WX 722 ; N K ; B 20 0 709 662 ;
-C 76 ; WX 611 ; N L ; B 12 0 598 662 ;
-C 77 ; WX 889 ; N M ; B 19 0 871 662 ;
-C 78 ; WX 722 ; N N ; B 12 -14 709 662 ;
-C 79 ; WX 722 ; N O ; B 33 -14 688 676 ;
-C 80 ; WX 556 ; N P ; B 11 0 542 662 ;
-C 81 ; WX 722 ; N Q ; B 33 -177 701 676 ;
-C 82 ; WX 667 ; N R ; B 12 0 654 662 ;
-C 83 ; WX 556 ; N S ; B 42 -14 491 676 ;
-C 84 ; WX 611 ; N T ; B 18 0 594 662 ;
-C 85 ; WX 722 ; N U ; B 16 -14 705 662 ;
-C 86 ; WX 722 ; N V ; B 20 -14 701 662 ;
-C 87 ; WX 944 ; N W ; B 9 -14 936 662 ;
-C 88 ; WX 722 ; N X ; B 12 0 706 662 ;
-C 89 ; WX 722 ; N Y ; B 22 0 703 662 ;
-C 90 ; WX 611 ; N Z ; B 7 0 597 662 ;
-C 91 ; WX 333 ; N bracketleft ; B 88 -156 299 662 ;
-C 92 ; WX 278 ; N backslash ; B -83 0 361 682 ;
-C 93 ; WX 333 ; N bracketright ; B 34 -156 245 662 ;
-C 94 ; WX 469 ; N asciicircum ; B 13 256 456 662 ;
-C 95 ; WX 500 ; N underscore ; B 0 -133 500 -84 ;
-C 96 ; WX 333 ; N quoteleft ; B 91 432 230 676 ;
-C 97 ; WX 444 ; N a ; B 37 -10 442 458 ;
-C 98 ; WX 500 ; N b ; B 9 -10 474 682 ;
-C 99 ; WX 444 ; N c ; B 25 -10 412 458 ;
-C 100 ; WX 500 ; N d ; B 26 -13 491 682 ;
-C 101 ; WX 444 ; N e ; B 22 -10 421 458 ;
-C 102 ; WX 333 ; N f ; B 20 0 383 682 ; L i fi ; L l fl ;
-C 103 ; WX 500 ; N g ; B 27 -217 470 458 ;
-C 104 ; WX 500 ; N h ; B 9 0 490 682 ;
-C 105 ; WX 278 ; N i ; B 22 0 259 682 ;
-C 106 ; WX 278 ; N j ; B -54 -217 212 682 ;
-C 107 ; WX 500 ; N k ; B 1 0 500 682 ;
-C 108 ; WX 278 ; N l ; B 20 0 259 682 ;
-C 109 ; WX 778 ; N m ; B 13 0 764 458 ;
-C 110 ; WX 500 ; N n ; B 9 0 490 458 ;
-C 111 ; WX 500 ; N o ; B 30 -10 470 458 ;
-C 112 ; WX 500 ; N p ; B 2 -217 470 458 ;
-C 113 ; WX 500 ; N q ; B 24 -217 498 459 ;
-C 114 ; WX 333 ; N r ; B 4 0 335 458 ;
-C 115 ; WX 389 ; N s ; B 51 -10 348 458 ;
-C 116 ; WX 278 ; N t ; B 13 -10 279 580 ;
-C 117 ; WX 500 ; N u ; B 9 -10 479 448 ;
-C 118 ; WX 500 ; N v ; B 10 -10 468 448 ;
-C 119 ; WX 722 ; N w ; B 21 -10 694 448 ;
-C 120 ; WX 500 ; N x ; B 17 0 479 448 ;
-C 121 ; WX 500 ; N y ; B 15 -217 476 448 ;
-C 122 ; WX 444 ; N z ; B 25 0 418 448 ;
-C 123 ; WX 480 ; N braceleft ; B 110 -165 341 682 ;
-C 124 ; WX 200 ; N bar ; B 68 0 132 682 ;
-C 125 ; WX 480 ; N braceright ; B 139 -165 370 682 ;
-C 126 ; WX 541 ; N asciitilde ; B 18 176 522 347 ;
-C 161 ; WX 333 ; N exclamdown ; B 109 -217 224 458 ;
-C 162 ; WX 500 ; N cent ; B 53 -138 448 579 ;
-C 163 ; WX 500 ; N sterling ; B 11 -14 491 676 ;
-C 164 ; WX 167 ; N fraction ; B -170 -14 346 676 ;
-C 165 ; WX 500 ; N yen ; B -43 0 502 662 ;
-C 166 ; WX 500 ; N florin ; B 6 -185 490 676 ;
-C 167 ; WX 500 ; N section ; B 72 -148 426 676 ;
-C 168 ; WX 500 ; N currency ; B -2 99 503 600 ;
-C 169 ; WX 180 ; N quotesingle ; B 47 445 133 685 ;
-C 170 ; WX 444 ; N quotedblleft ; B 27 432 399 676 ;
-C 171 ; WX 500 ; N guillemotleft ; B 32 35 449 422 ;
-C 172 ; WX 333 ; N guilsinglleft ; B 45 35 271 422 ;
-C 173 ; WX 333 ; N guilsinglright ; B 62 36 288 423 ;
-C 174 ; WX 556 ; N fi ; B 33 0 521 678 ;
-C 175 ; WX 556 ; N fl ; B 29 0 521 682 ;
-C 177 ; WX 500 ; N endash ; B -7 201 507 250 ;
-C 178 ; WX 500 ; N dagger ; B 54 -149 440 676 ;
-C 179 ; WX 500 ; N daggerdbl ; B 54 -153 439 676 ;
-C 180 ; WX 250 ; N periodcentered ; B 68 204 183 319 ;
-C 182 ; WX 453 ; N paragraph ; B 0 -207 373 662 ;
-C 183 ; WX 350 ; N bullet ; B 50 175 300 425 ;
-C 184 ; WX 333 ; N quotesinglbase ; B 103 -143 242 101 ;
-C 185 ; WX 444 ; N quotedblbase ; B 45 -143 417 101 ;
-C 186 ; WX 444 ; N quotedblright ; B 45 432 417 676 ;
-C 187 ; WX 500 ; N guillemotright ; B 51 35 468 422 ;
-C 188 ; WX 1000 ; N ellipsis ; B 110 -14 891 101 ;
-C 189 ; WX 1000 ; N perthousand ; B 3 -14 1024 676 ;
-C 191 ; WX 444 ; N questiondown ; B 49 -217 395 458 ;
-C 193 ; WX 333 ; N grave ; B 16 507 243 678 ;
-C 194 ; WX 333 ; N acute ; B 93 507 317 678 ;
-C 195 ; WX 333 ; N circumflex ; B 11 507 323 674 ;
-C 196 ; WX 333 ; N tilde ; B 1 532 332 638 ;
-C 197 ; WX 333 ; N macron ; B 11 547 323 601 ;
-C 198 ; WX 333 ; N breve ; B 26 507 308 664 ;
-C 199 ; WX 333 ; N dotaccent ; B 116 523 216 623 ;
-C 200 ; WX 333 ; N dieresis ; B 18 523 316 623 ;
-C 202 ; WX 333 ; N ring ; B 67 483 266 682 ;
-C 203 ; WX 333 ; N cedilla ; B 53 -215 262 0 ;
-C 205 ; WX 333 ; N hungarumlaut ; B 8 528 372 700 ;
-C 206 ; WX 333 ; N ogonek ; B 68 -155 245 -10 ;
-C 207 ; WX 333 ; N caron ; B 11 507 323 674 ;
-C 208 ; WX 1000 ; N emdash ; B -8 201 1007 250 ;
-C 225 ; WX 889 ; N AE ; B 5 0 869 662 ;
-C 227 ; WX 276 ; N ordfeminine ; B 15 307 278 676 ;
-C 232 ; WX 611 ; N Lslash ; B 12 0 598 662 ;
-C 233 ; WX 722 ; N Oslash ; B 33 -80 688 734 ;
-C 234 ; WX 889 ; N OE ; B 21 -7 877 669 ;
-C 235 ; WX 310 ; N ordmasculine ; B 15 307 301 676 ;
-C 241 ; WX 667 ; N ae ; B 38 -10 634 458 ;
-C 245 ; WX 278 ; N dotlessi ; B 22 0 259 458 ;
-C 248 ; WX 278 ; N lslash ; B 20 0 259 682 ;
-C 249 ; WX 500 ; N oslash ; B 30 -108 470 549 ;
-C 250 ; WX 722 ; N oe ; B 30 -10 690 458 ;
-C 251 ; WX 500 ; N germandbls ; B 12 -10 468 682 ;
-C -1 ; WX 722 ; N Aacute ; B 15 0 706 892 ;
-C -1 ; WX 722 ; N Acircumflex ; B 15 0 706 888 ;
-C -1 ; WX 722 ; N Adieresis ; B 15 0 706 837 ;
-C -1 ; WX 722 ; N Agrave ; B 15 0 706 892 ;
-C -1 ; WX 722 ; N Aring ; B 15 0 706 896 ;
-C -1 ; WX 722 ; N Atilde ; B 15 0 706 852 ;
-C -1 ; WX 667 ; N Ccedilla ; B 33 -215 637 676 ;
-C -1 ; WX 611 ; N Eacute ; B 12 0 597 892 ;
-C -1 ; WX 611 ; N Ecircumflex ; B 12 0 597 888 ;
-C -1 ; WX 611 ; N Edieresis ; B 12 0 597 837 ;
-C -1 ; WX 611 ; N Egrave ; B 12 0 597 892 ;
-C -1 ; WX 333 ; N Iacute ; B 18 0 317 892 ;
-C -1 ; WX 333 ; N Icircumflex ; B 11 0 323 888 ;
-C -1 ; WX 333 ; N Idieresis ; B 18 0 316 837 ;
-C -1 ; WX 333 ; N Igrave ; B 16 0 316 892 ;
-C -1 ; WX 722 ; N Ntilde ; B 12 -14 709 852 ;
-C -1 ; WX 722 ; N Oacute ; B 33 -14 688 892 ;
-C -1 ; WX 722 ; N Ocircumflex ; B 33 -14 688 888 ;
-C -1 ; WX 722 ; N Odieresis ; B 33 -14 688 837 ;
-C -1 ; WX 722 ; N Ograve ; B 33 -14 688 892 ;
-C -1 ; WX 722 ; N Otilde ; B 33 -14 688 852 ;
-C -1 ; WX 556 ; N Scaron ; B 42 -14 491 888 ;
-C -1 ; WX 722 ; N Uacute ; B 16 -14 705 892 ;
-C -1 ; WX 722 ; N Ucircumflex ; B 16 -14 705 888 ;
-C -1 ; WX 722 ; N Udieresis ; B 16 -14 705 837 ;
-C -1 ; WX 722 ; N Ugrave ; B 16 -14 705 892 ;
-C -1 ; WX 722 ; N Ydieresis ; B 22 0 703 837 ;
-C -1 ; WX 611 ; N Zcaron ; B 7 0 597 888 ;
-C -1 ; WX 444 ; N aacute ; B 37 -10 442 678 ;
-C -1 ; WX 444 ; N acircumflex ; B 37 -10 442 674 ;
-C -1 ; WX 444 ; N adieresis ; B 37 -10 442 623 ;
-C -1 ; WX 444 ; N agrave ; B 37 -10 442 678 ;
-C -1 ; WX 444 ; N aring ; B 37 -10 442 682 ;
-C -1 ; WX 444 ; N atilde ; B 37 -10 442 638 ;
-C -1 ; WX 444 ; N ccedilla ; B 25 -215 412 458 ;
-C -1 ; WX 760 ; N copyright ; B 42 -14 717 676 ;
-C -1 ; WX 444 ; N eacute ; B 22 -10 421 678 ;
-C -1 ; WX 444 ; N ecircumflex ; B 22 -10 421 674 ;
-C -1 ; WX 444 ; N edieresis ; B 22 -10 421 623 ;
-C -1 ; WX 444 ; N egrave ; B 22 -10 421 678 ;
-C -1 ; WX 278 ; N iacute ; B 22 0 290 678 ;
-C -1 ; WX 278 ; N icircumflex ; B -16 0 296 674 ;
-C -1 ; WX 278 ; N idieresis ; B -9 0 289 623 ;
-C -1 ; WX 278 ; N igrave ; B -11 0 259 678 ;
-C -1 ; WX 564 ; N logicalnot ; B 30 120 534 390 ;
-C -1 ; WX 564 ; N minus ; B 30 229 534 293 ;
-C -1 ; WX 500 ; N ntilde ; B 9 0 490 638 ;
-C -1 ; WX 500 ; N oacute ; B 30 -10 470 678 ;
-C -1 ; WX 500 ; N ocircumflex ; B 30 -10 470 674 ;
-C -1 ; WX 500 ; N odieresis ; B 30 -10 470 623 ;
-C -1 ; WX 500 ; N ograve ; B 30 -10 470 678 ;
-C -1 ; WX 500 ; N otilde ; B 30 -10 470 638 ;
-C -1 ; WX 760 ; N registered ; B 43 -14 718 676 ;
-C -1 ; WX 389 ; N scaron ; B 39 -10 351 674 ;
-C -1 ; WX 980 ; N trademark ; B 35 258 945 662 ;
-C -1 ; WX 500 ; N uacute ; B 9 -10 479 678 ;
-C -1 ; WX 500 ; N ucircumflex ; B 9 -10 479 674 ;
-C -1 ; WX 500 ; N udieresis ; B 9 -10 479 623 ;
-C -1 ; WX 500 ; N ugrave ; B 9 -10 479 678 ;
-C -1 ; WX 500 ; N ydieresis ; B 15 -217 476 623 ;
-C -1 ; WX 444 ; N zcaron ; B 25 0 418 674 ;
-EndCharMetrics
-StartKernData
-StartKernPairs 113
-
-KPX A y -92
-KPX A w -92
-KPX A v -74
-KPX A space -55
-KPX A quoteright -111
-KPX A Y -92
-KPX A W -80
-KPX A V -129
-KPX A T -111
-
-KPX F period -80
-KPX F comma -80
-KPX F A -74
-
-KPX L y -55
-KPX L space -37
-KPX L quoteright -92
-KPX L Y -100
-KPX L W -74
-KPX L V -92
-KPX L T -92
-
-KPX P space -37
-KPX P period -111
-KPX P comma -111
-KPX P A -92
-
-KPX R y -40
-KPX R Y -55
-KPX R W -55
-KPX R V -80
-KPX R T -60
-
-KPX T y -70
-KPX T w -70
-KPX T u -35
-KPX T space -18
-KPX T semicolon -55
-KPX T s -70
-KPX T r -35
-KPX T period -74
-KPX T o -70
-KPX T i -35
-KPX T hyphen -92
-KPX T e -70
-KPX T comma -74
-KPX T colon -50
-KPX T c -70
-KPX T a -70
-KPX T O -18
-KPX T A -80
-
-KPX V y -111
-KPX V u -60
-KPX V space -18
-KPX V semicolon -74
-KPX V r -60
-KPX V period -129
-KPX V o -129
-KPX V i -60
-KPX V hyphen -92
-KPX V e -111
-KPX V comma -129
-KPX V colon -74
-KPX V a -111
-KPX V A -129
-
-KPX W y -60
-KPX W u -40
-KPX W space -18
-KPX W semicolon -37
-KPX W r -40
-KPX W period -92
-KPX W o -80
-KPX W i -40
-KPX W hyphen -55
-KPX W e -80
-KPX W comma -92
-KPX W colon -37
-KPX W a -80
-KPX W A -111
-
-KPX Y v -100
-KPX Y u -111
-KPX Y space -37
-KPX Y semicolon -92
-KPX Y q -111
-KPX Y period -129
-KPX Y p -92
-KPX Y o -100
-KPX Y i -55
-KPX Y hyphen -111
-KPX Y e -100
-KPX Y comma -129
-KPX Y colon -92
-KPX Y a -100
-KPX Y A -111
-
-KPX f quoteright 55
-KPX f f -18
-
-KPX one one -37
-
-KPX quoteleft quoteleft -74
-
-KPX quoteright t -18
-KPX quoteright space -74
-KPX quoteright s -55
-KPX quoteright quoteright -74
-
-KPX r quoteright 37
-KPX r period -55
-KPX r hyphen -20
-KPX r g -18
-KPX r comma -40
-
-KPX space Y -37
-KPX space W -18
-KPX space V -18
-KPX space T -18
-KPX space A -55
-
-KPX v period -65
-KPX v comma -65
-
-KPX w period -65
-KPX w comma -65
-
-KPX y period -65
-KPX y comma -65
-EndKernPairs
-EndKernData
-StartComposites 56
-CC Zcaron 2 ; PCC Z 0 0 ; PCC caron 139 214 ;
-CC zcaron 2 ; PCC z 0 0 ; PCC caron 55 0 ;
-CC Scaron 2 ; PCC S 0 0 ; PCC caron 111 214 ;
-CC scaron 2 ; PCC s 0 0 ; PCC caron 28 0 ;
-CC Ccedilla 2 ; PCC C 0 0 ; PCC cedilla 167 0 ;
-CC ccedilla 2 ; PCC c 0 0 ; PCC cedilla 55 0 ;
-CC Ydieresis 2 ; PCC Y 0 0 ; PCC dieresis 194 214 ;
-CC ydieresis 2 ; PCC y 0 0 ; PCC dieresis 83 0 ;
-CC Uacute 2 ; PCC U 0 0 ; PCC acute 194 214 ;
-CC Ucircumflex 2 ; PCC U 0 0 ; PCC circumflex 194 214 ;
-CC Udieresis 2 ; PCC U 0 0 ; PCC dieresis 194 214 ;
-CC Ugrave 2 ; PCC U 0 0 ; PCC grave 194 214 ;
-CC uacute 2 ; PCC u 0 0 ; PCC acute 83 0 ;
-CC ucircumflex 2 ; PCC u 0 0 ; PCC circumflex 83 0 ;
-CC udieresis 2 ; PCC u 0 0 ; PCC dieresis 83 0 ;
-CC ugrave 2 ; PCC u 0 0 ; PCC grave 83 0 ;
-CC Iacute 2 ; PCC I 0 0 ; PCC acute 0 214 ;
-CC Icircumflex 2 ; PCC I 0 0 ; PCC circumflex 0 214 ;
-CC Idieresis 2 ; PCC I 0 0 ; PCC dieresis 0 214 ;
-CC Igrave 2 ; PCC I 0 0 ; PCC grave 0 214 ;
-CC iacute 2 ; PCC dotlessi 0 0 ; PCC acute -27 0 ;
-CC icircumflex 2 ; PCC dotlessi 0 0 ; PCC circumflex -27 0 ;
-CC idieresis 2 ; PCC dotlessi 0 0 ; PCC dieresis -27 0 ;
-CC igrave 2 ; PCC dotlessi 0 0 ; PCC grave -27 0 ;
-CC Eacute 2 ; PCC E 0 0 ; PCC acute 139 214 ;
-CC Ecircumflex 2 ; PCC E 0 0 ; PCC circumflex 139 214 ;
-CC Edieresis 2 ; PCC E 0 0 ; PCC dieresis 139 214 ;
-CC Egrave 2 ; PCC E 0 0 ; PCC grave 139 214 ;
-CC eacute 2 ; PCC e 0 0 ; PCC acute 55 0 ;
-CC ecircumflex 2 ; PCC e 0 0 ; PCC circumflex 55 0 ;
-CC edieresis 2 ; PCC e 0 0 ; PCC dieresis 55 0 ;
-CC egrave 2 ; PCC e 0 0 ; PCC grave 55 0 ;
-CC Aacute 2 ; PCC A 0 0 ; PCC acute 194 214 ;
-CC Acircumflex 2 ; PCC A 0 0 ; PCC circumflex 194 214 ;
-CC Adieresis 2 ; PCC A 0 0 ; PCC dieresis 194 214 ;
-CC Agrave 2 ; PCC A 0 0 ; PCC grave 194 214 ;
-CC aacute 2 ; PCC a 0 0 ; PCC acute 55 0 ;
-CC acircumflex 2 ; PCC a 0 0 ; PCC circumflex 55 0 ;
-CC adieresis 2 ; PCC a 0 0 ; PCC dieresis 55 0 ;
-CC agrave 2 ; PCC a 0 0 ; PCC grave 55 0 ;
-CC Oacute 2 ; PCC O 0 0 ; PCC acute 194 214 ;
-CC Ocircumflex 2 ; PCC O 0 0 ; PCC circumflex 194 214 ;
-CC Odieresis 2 ; PCC O 0 0 ; PCC dieresis 194 214 ;
-CC Ograve 2 ; PCC O 0 0 ; PCC grave 194 214 ;
-CC oacute 2 ; PCC o 0 0 ; PCC acute 83 0 ;
-CC ocircumflex 2 ; PCC o 0 0 ; PCC circumflex 83 0 ;
-CC odieresis 2 ; PCC o 0 0 ; PCC dieresis 83 0 ;
-CC ograve 2 ; PCC o 0 0 ; PCC grave 83 0 ;
-CC Atilde 2 ; PCC A 0 0 ; PCC tilde 194 214 ;
-CC atilde 2 ; PCC a 0 0 ; PCC tilde 55 0 ;
-CC Ntilde 2 ; PCC N 0 0 ; PCC tilde 194 214 ;
-CC ntilde 2 ; PCC n 0 0 ; PCC tilde 83 0 ;
-CC Otilde 2 ; PCC O 0 0 ; PCC tilde 194 214 ;
-CC otilde 2 ; PCC o 0 0 ; PCC tilde 83 0 ;
-CC Aring 2 ; PCC A 0 0 ; PCC ring 194 214 ;
-CC aring 2 ; PCC a 0 0 ; PCC ring 55 0 ;
-EndComposites
-EndFontMetrics
diff --git a/real/ebnf2ps/doc.ps b/real/ebnf2ps/doc.ps
deleted file mode 100644 (file)
index 03c4103..0000000
+++ /dev/null
@@ -1,1924 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips 5.528 Copyright 1986, 1994 Radical Eye Software
-%%Title: doc.dvi
-%%CreationDate: Thu Sep  1 14:58:32 1994
-%%Pages: 4
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 612 792
-%%EndComments
-%DVIPSCommandLine: dvips doc.dvi -o doc.ps
-%DVIPSParameters: dpi=300, compressed, comments removed
-%DVIPSSource:  TeX output 1994.09.01:1453
-%%BeginProcSet: texc.pro
-/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
-/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
-mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
-ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
-isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
-hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
-TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get
-round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{
-statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0
-0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn
-begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X
-array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo
-setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx
-FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{
-pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}
-B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup
-length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B
-/ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type
-/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp
-0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2
-index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff
-ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
-ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]/id
-ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N /cp 0 N{
-rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id gp get
-/gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp add /cp
-X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add /gp X
-adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{dup
-255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1 adv}
-B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2 idiv
-S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
-putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
-adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
-{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
-adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
-chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
-}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
-length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
-cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
-0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
-add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage
-userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
-known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
-/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
-65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
-0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
-{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
-getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
-ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley
-false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley
-scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave
-transform round exch round exch itransform moveto rulex 0 rlineto 0
-ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta
-0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}
-B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{
-3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p
--1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{
-3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end
-%%EndProcSet
-%%BeginProcSet: special.pro
-TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
-/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
-false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
-/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
-div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
-/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
-10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
-/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
-true def end /@MacSetUp{userdict /md known{userdict /md get type
-/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
-length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
-N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
-clippath mark{transform{itransform moveto}}{transform{itransform lineto}
-}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
-itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
-closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
-0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
-/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
-scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
-ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
-not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
-TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
-pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
--1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
-TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
-sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
-0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
-2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
-{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
-div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
-N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
-maxlength dict begin /magscale false def normalscale currentpoint TR
-/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
-/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
-psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
-scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
-/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
-psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
-roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
-moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
-begin /SpecialSave save N gsave normalscale currentpoint TR
-@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
-{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
-closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
-sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
-}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
-CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
-lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
-}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
-end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
-N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
-/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
-SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
-/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
-yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
-%%EndProcSet
-TeXDict begin 40258431 52099146 1000 300 300
-(/u/thiemann/src/haskell/ebnf.ghc/doc.dvi) @start /Fa
-8 117 df<13FCEA03FFEA0F87381F0F80383E1F00EA3C0FEA7C0490C7FC5AA51302EA78
-0FEA7C3EEA3FFCEA0FF011127C9116>99 D<EB01F0EB03FCEB07BCEB0F7C131F14381400
-A2133EA33807FFF8A238003E005BA55BA6485AA4485AA21273EAFBC0A2485AB4C7FC123C
-1625819C11>102 D<13E0EA01F0A213E0EA00C01300A7120FEA3F80EA37C0127712E7A2
-EA0F80A2EA1F00A3EA3E6013E0A2127CEA7DC0EA3F80EA0F000C1E7D9D0F>105
-D<EA1FE0A21203EA07C0A4EA0F80A4EA1F00A4123EA45AA3127F5A12FBA3127E121E0B1D
-7D9C0C>108 D<380F0FC0383F9FE03833F9F0EA73E1EAE7C1A21207A2380F83E0A3EB87
-C6381F07CEA2EB0F8C149C381E07F8381C01E017127D911B>110
-D<13FE3803FF80380783C0381F01E0121E123C007C13F0A238F803E0A314C01307148038
-780F00EA7C3EEA3FFCEA0FE014127C9119>I<EA0F1F383FBF803833F1C0EA73E1EAE7C3
-13C71207EBC380380F8000A448C7FCA4121E121C12127D9115>114
-D<EA01C0EA03E0A3EA07C0A4EAFFF0A2EA0F80A2EA1F00A4123EA31330EA7C70A2136013
-E0EA3FC0EA0F000C1A7D9910>116 D E /Fb 7 117 df<EA03CCEA07FCEA0E7CEA183CEA
-383812301270A2EAE070A3137113E3A212E1EA63E6EA7E7CEA3C3810127B9115>97
-D<EA01E0EA07F8EA0E18121C123812701370EA7FE0EAFF80EAE000A41310EA6038EA70F0
-EA3FC0EA1F000D127B9113>101 D<391E1F07C0393F3F8FE0396761D8703863C1F038C7
-81E0A2380701C0A2390E0380E0A3EC81C2391C0701C6A2EC038CA239380E01F839180600
-F01F127D9122>109 D<EA0787380FDF803819F9C0EA18E0003113E013C01201A2380381
-C0A31480EA070314001387138EEA0EFC137090C7FCA25AA4B47EA2131A7F9115>112
-D<EA1E3CEA3F7EEA67C6EA6386EAC78E1306EA0700A2120EA45AA45A12180F127D9111>
-114 D<EA01F0EA07F8EA0E18131CEA1C181300121EEA1FC0EA0FE0EA07F012001378EA60
-7012E012C0EAE0E0EA7FC0EA1F000E127D9111>I<13C01201A3EA0380A4EAFFE0A2EA07
-00A2120EA45AA31320EA3860A213C0A2EA1F80EA0F000B1A7D990E>I
-E /Fc 44 123 df<EB1FE0EBFFF03803F0383807C07CEB80FC120FA2147891C7FCA3B512
-FCA2380F807CAE397FE1FF80A2191D809C1B>28 D<1303AE007FB512F8B612FCD80003C7
-FCAF1E1F7D9925>43 D<EAFFE0A40B047F8A10>45 D<EB0380A2497EA3497EA2497E131B
-A2EB31F8A2EB61FC1360EBE0FEEBC07EA248487E90B5FC481480EB001FA20006EB0FC0A2
-000E14E0000C130739FFC07FFEA21F1C7E9B24>65 D<B512F814FF390FC01F80EC0FC014
-0715E0A5EC0FC0EC1F8090B512005C9038C03F80EC0FC0EC07E0140315F0A5EC07E0A2EC
-1FC0B61280ECFC001C1C7E9B22>I<90381FE0209038FFF8603903F81EE03807C007380F
-8003381F0001003E1300A2007E1460127C12FC1500A7007C1460127E123E15C07E390F80
-01803907C003003803F80E3800FFFCEB1FE01B1C7D9B22>I<B512F814FF390FC01FC0EC
-07E0EC01F015F8140015FC157CA2157EA8157CA315F8A2EC01F0EC07E0EC1FC0B6120014
-F81F1C7E9B25>I<B6FCA2380FC01F1407801580A2EBC181A3EC800013C313FFA213C313
-C1A21560A29038C000E015C0A21401A21403EC0F80B6FCA21B1C7E9B1F>I<B6FCA2380F
-C01F1407801580A21401EBC181A2EC8000A213C313FFA213C313C1A401C0C7FCA6B5FCA2
-191C7E9B1E>I<90380FF00890387FFE183901FC07383907E001F8380F800048C7127848
-1438123E007E1418127C12FC1500A5EC7FFFA2007CEB01F8127E123E123F7EEA0F80EA07
-E03801FC0739007FFE7890380FF818201C7D9B26>I<39FFFC3FFFA2390FC003F0AA90B5
-FCA2EBC003AC39FFFC3FFFA2201C7E9B25>I<B5FCA2EA07E0B3A6B5FCA2101C7F9B12>I<
-B5FCA2EA0FC0AF1403A31407A21406140E141E147EB512FEA2181C7E9B1D>76
-D<D8FFC0EB03FF6D5B000F15F0D80DF0130DA3D80CF81319A2017C1331A26D1361A26D13
-C1A390380F8181A2903807C301A2EB03E6A2EB01FCA3EB00F8A23AFFC0701FFFA2281C7E
-9B2D>I<39FFE003FFA2390FF000307FEA0DFCEA0CFE137E7FEB1F8014C0EB0FE0EB07F0
-1303EB01F814FCEB00FE147F143FEC1FB015F0140F1407140314011400A2D8FFC0137015
-30201C7E9B25>I<B512F814FE390FC03F80140FEC07C015E0A615C0EC0F80143F9038FF
-FE0014F801C0C7FCAAEAFFFCA21B1C7E9B21>80 D<B512F014FE380FC03FEC0F806E7E81
-A55D4A5A023FC7FCEBFFFE5CEBC07E806E7EA7ED8180EC0FC33AFFFC07FF00EC01FE211C
-7E9B24>82 D<3807F820381FFEE0EA3C07EA7801EA700012F01460A26C130012FEEAFFE0
-EA7FFE6C7E1480000F13C06C13E0EA007FEB03F01301130012C0A214E07E38F001C0EAFC
-0338EFFF00EA83FC141C7D9B1B>I<007FB512E0A238781F81007013800060146000E014
-7000C01430A400001400B03807FFFEA21C1C7E9B21>I<39FFFC03FFA2390FC00030B312
-0715606C6C13E03901F001C03900FC078090387FFE00EB0FF8201C7E9B25>I<3BFFFC7F
-FE0FFCA23B0FC007E000C081D9E003130100071680EC07F8D803F0EC0300A29039F80CFC
-0700011506EC1CFE9039FC187E0E0000150CEC387F90397E303F18A290397F601FB8013F
-14B002E013F0ECC00F011F5CA26D486C5AA2EC00036D5CA22E1C7F9B31>87
-D<397FFE1FFEA23907F001803803F8036C6C48C7FC000013066D5AEB7F1C6D5A14B0EB1F
-E0130FA26D7E6D7E1307497EEB0CFEEB187EEB387F496C7EEB601F01C07F00016D7E496C
-7EEA03003AFFF03FFF80A2211C7F9B24>I<3AFFFC01FF80A23A0FE00038006C6C13306C
-6C137015606C6C5B3800FE015DD97F03C7FCEB3F871486EB1FCEEB0FFC5C13076D5AAAEB
-3FFFA2211C7F9B24>I<EA0FF8EA1FFE383E1F80130714C0121C1200EA03FF121FEA3F07
-127C12F8A3130FEA7C1F383FFBF8EA0FE115127F9117>97 D<B4FCA2121FA9EB1FC0EBFF
-E0EBC0F8EB0078143CA2143EA6143C147CEB8078EBC1F0381C7FE038181F80171D7F9C1B
->I<EA03FCEA0FFEEA1E1F123C127CEA780E00F8C7FCA61278127C383C0180381F0300EA
-0FFEEA03F811127E9115>I<EB0FF0A21301A9EA03F1EA0FFFEA1F07EA3C01127C127812
-F8A61278A2EA3C03EA1E0F380FFDFEEA03F1171D7E9C1B>I<EA01FCEA0FFF381F078038
-3C03C0EA7C01007813E012F8B5FCA200F8C7FCA31278127C6C1360381F80C0380FFF8038
-01FE0013127F9116>I<133F3801FF803803E7C0EA07C7EA0F87EB8380EB8000A5EAFFF8
-A2EA0F80AEEA7FF8A2121D809C0F>I<3803F8F0380FFFF8381E0F38381C0730003C1380
-A4001C1300EA1E0FEA1FFEEA1BF80038C7FCA3EA3FFF6C13C06C13E0003F13F0387801F8
-38F00078A3007813F0383E03E0381FFFC03803FE00151B7F9118>I<B4FCA2121FA9EB1F
-C0EB7FE0EBE1F0EB80F8A21300AB38FFE7FFA2181D7F9C1B>I<121E123FA25A7EA2121E
-C7FCA5B4FCA2121FAEEAFFE0A20B1E7F9D0E>I<B4FCA2121FB3A7EAFFE0A20B1D7F9C0E>
-108 D<39FF1FC0FE90387FE3FF3A1FE1F70F80903980FC07C0A2EB00F8AB3AFFE7FF3FF8
-A225127F9128>I<38FF1FC0EB7FE0381FE1F0EB80F8A21300AB38FFE7FFA218127F911B>
-I<EA01FC380FFF80381F07C0383C01E0007C13F0EA780000F813F8A6007813F0EA7C0100
-3C13E0381F07C0380FFF803801FC0015127F9118>I<38FF1FC0EBFFE0381FC1F8EB0078
-147C143C143EA6147CA2EB80F8EBC1F0EB7FE0EB1F8090C7FCA6EAFFE0A2171A7F911B>
-I<EAFE3E137F381ECF80EA1F8FA2EB070090C7FCAAEAFFF0A211127F9114>114
-D<EA1FD8EA3FF8EA7038EAE018A2EAF000EAFF80EA7FE013F0EA1FF8EA07FCEA007CEAC0
-1CA212E0EAF038EAFFF0EACFC00E127E9113>I<1203A35AA25AA2123FEAFFFCA2EA1F00
-A9130CA4EA0F98EA07F0EA03E00E1A7F9913>I<38FFC1FCA2381F0060EB80E0000F13C0
-13C03807C180A23803E300A2EA01F6A213FE6C5AA21378A2133016127F9119>118
-D<39FF8FF8FEA2391F03E030A201831370000FEBF0601386D807C613C0EBCEF8EBEC7900
-03EB7D80EBF83D0001EB3F00A2497E0000131EEBE00EA21F127F9122>I<38FFC1FCA238
-1F0060EB80E0000F13C013C03807C180A23803E300A2EA01F6A213FE6C5AA21378A21330
-A25B1270EAF8E0EAC0C0EAE380007FC7FC123E161A7F9119>121
-D<383FFF80A2383C1F00EA303EEA707EEA60FC5BEA61F012033807E18013C1EA0F81EA1F
-83383F0300EA3E07485AB5FCA211127F9115>I E /Fd 28 122 df<EB0FF0EB7FFC3801
-FC0E3803F01F48485AEA0FC0A2141E140C91C7FCA4B6FCA2380FC03FB2397FF0FFE0A21B
-237FA21F>28 D<1238127C12FEA3127C123807077C8610>46 D<13181378EA01F812FFA2
-1201B3A7387FFFE0A213207C9F1C>49 D<EA03FCEA0FFF383C1FC0387007E0007C13F0EA
-FE0314F8A21301127CEA3803120014F0A2EB07E014C0EB0F80EB1F00133E13385BEBE018
-EA01C0EA0380EA0700000E1338380FFFF05A5A5AB5FCA215207D9F1C>I<EA01FE3807FF
-C0380F07E0381E03F0123FEB01F813811301EA1F03000C13F0120014E0EB07C0EB1F8038
-01FE007F380007C0EB01F014F8EB00FCA214FE127CA212FEA214FCEA7C01007813F8383C
-07F0380FFFC03803FE0017207E9F1C>I<14E013011303A21307130F131FA21337137713
-E7EA01C71387EA03071207120E120C12181238127012E0B512FEA2380007E0A7EBFFFEA2
-17207E9F1C>I<B612FCA23807F000153C151C150C150EA215061418A3150014381478EB
-FFF8A2EBF07814381418A21503A214001506A3150EA2151E153EEC01FCB6FCA220227EA1
-25>69 D<EB07FC90383FFF809038FC07E03903F001F848486C7E4848137E48487FA248C7
-EA1F80A24815C0007E140FA200FE15E0A9007E15C0007F141FA26C15806D133F001F1500
-6C6C137E6C6C5B6C6C485A3900FC07E090383FFF80D907FCC7FC23227DA12A>79
-D<3801FC043807FF8C381F03FC383C007C007C133C0078131CA200F8130CA27E1400B4FC
-13E06CB4FC14C06C13F06C13F86C13FC000313FEEA003FEB03FFEB007F143FA200C0131F
-A36C131EA26C133C12FCB413F838C7FFE00080138018227DA11F>83
-D<EA07FC381FFF80383F0FC0EB07E0130314F0121E1200A213FF1207EA1FC3EA3F03127E
-12FCA4EA7E07EB1DF8381FF8FF3807E07F18167E951B>97 D<B47EA2121FABEB8FE0EBBF
-F8EBF07CEBC01EEB801FEC0F80A215C0A81580141F1500EBC03EEB607C381E3FF8381C0F
-C01A237EA21F>I<13FE3807FF80380F87C0381E01E0003E13F0EA7C0014F812FCA2B5FC
-A200FCC7FCA3127CA2127E003E13186C1330380FC0703803FFC0C6130015167E951A>
-101 D<EB3F80EBFFC03801F3E0EA03E7EA07C7120FEBC3C0EBC000A6EAFFFCA2EA0FC0B2
-EA7FFCA213237FA211>I<3801FE1F0007B51280380F87E7EA1F03391E01E000003E7FA5
-001E5BEA1F03380F87C0EBFF80D819FEC7FC0018C8FC121CA2381FFFE014F86C13FE8012
-3F397C003F8048131F140FA3007CEB1F00007E5B381F80FC6CB45A000113C019217F951C
->I<B47EA2121FABEB87E0EB9FF8EBB8FCEBE07CEBC07EA21380AE39FFF1FFC0A21A237E
-A21F>I<120E121FEA3F80A3EA1F00120EC7FCA7EAFF80A2121FB2EAFFF0A20C247FA30F>
-I<EAFF80A2121FB3ADEAFFF0A20C237FA20F>108 D<3AFF87F00FE090399FFC3FF83A1F
-B87E70FC9039E03EC07C9039C03F807EA201801300AE3BFFF1FFE3FFC0A22A167E952F>
-I<38FF87E0EB9FF8381FB8FCEBE07CEBC07EA21380AE39FFF1FFC0A21A167E951F>I<13
-FE3807FFC0380F83E0381E00F0003E13F848137CA300FC137EA7007C137CA26C13F8381F
-01F0380F83E03807FFC03800FE0017167E951C>I<38FF8FE0EBBFF8381FF07CEBC03E49
-7E1580A2EC0FC0A8EC1F80A2EC3F00EBC03EEBE0FCEBBFF8EB8FC00180C7FCA8EAFFF0A2
-1A207E951F>I<EAFF1FEB3FC0381F67E013C7A3EB83C0EB8000ADEAFFF8A213167E9517>
-114 D<EA07F3EA1FFFEA780FEA7007EAF003A26CC7FCB4FC13F0EA7FFC6C7E6C7E120738
-003F80EAC00F130712E0A200F01300EAFC1EEAEFFCEAC7F011167E9516>I<13C0A41201
-A212031207120F121FB5FCA2EA0FC0ABEBC180A51207EBE300EA03FEC65A11207F9F16>
-I<38FF83FEA2381F807EAF14FEA2EA0F833907FF7FC0EA01FC1A167E951F>I<39FFF01F
-E0A2390FC00600A2EBE00E0007130CEBF01C0003131813F800015BA26C6C5AA2EB7EC0A2
-137F6D5AA26DC7FCA2130EA21B167F951E>I<39FFF07FC0A2390FC01C006C6C5A6D5A6C
-6C5A00015B3800FD80017FC7FCA27F6D7E497E80EB67F013E33801C1F8380381FC48C67E
-000E137E39FF81FFE0A21B167F951E>120 D<39FFF01FE0A2390FC00600A2EBE00E0007
-130CEBF01C0003131813F800015BA26C6C5AA2EB7EC0A2137F6D5AA26DC7FCA2130EA213
-0CA25B1278EAFC3813305BEA69C0EA7F80001FC8FC1B207F951E>I
-E /Fe 64 127 df<EA6030EAF078A8EAE038A30D0C7C9916>34 D<EA0387A6387FFFC0B5
-12E0A238070E00A3EA0F1EEA0E1CA3B512E0A26C13C0381C3800A613197F9816>I<13C0
-1201A3EA07F0EA1FFC48B4FCEA7DCF38F1C78012E1A338F1C300EA79C0127FEA1FF0EA07
-FCEA01FE13CFEBC780EAF1C3A3EAE1C712F13879DF00EA3FFE6C5AEA07E0EA01C0A21200
-11207E9C16>I<1218123C123E121E120EA6121E121CA2123C1278A212F0126007127998
-16>39 D<13E01201EA07C013005A121E5A123812781270A312F05AA77E1270A312781238
-123C7E7E7E13C0EA01E012000B217A9C16>I<12E07E127C121C121E7EEA0780120313C0
-1201A313E01200A7120113C0A3120313801207EA0F00121E121C127C12F05A0B217C9C16
->I<EA01C0A4EA71C738F9CF80387FFF00EA1FFCEA07F0A2EA1FFCEA7FFF38F9CF803871
-C700EA01C0A411127E9516>I<EA01C0A8B51280A33801C000A811137E9516>I<EAFFF8A3
-0D037C8A16>45 D<127012F8A312700505788416>I<EB01801303130714005B130E131E
-131C133C13381378137013F05B12015BA212035B120790C7FC5A120E121E121C123C1238
-1278127012F05AA211207E9C16>I<EA018012031207A2121F127F12FF12731203AEEA7F
-F813FC13F80E197C9816>49 D<EA07E0EA1FF8EA7FFEEA783FEAF00FEB07801303A21200
-A2130714005B131E5B5B5BEA03E0EA078048C7FC381E0380123CEA7FFFB5FC7E11197E98
-16>I<127012F8A312701200A8127012F8A312700512789116>58
-D<EA7FFFB51280A2C8FCA5B51280A26C1300110B7E9116>61 D<EA0FE0EA3FF8EA7FFCEA
-F01E130EA2EA601EEA007C13F8EA01F0EA03E013C01380A41300C7FCA41203EA0780A2EA
-03000F197D9816>63 D<13F8EA03FEEA0FFF381F0F80EA3E3FEA3C7F3878FFC0EA71E7EA
-F1C312E31381A513C300F11380EA71E73878FF00EA3C7EEA3E3C381F03C0EA0FFF000313
-00EA00FC12197E9816>I<13E0487EA213B0A2EA03B8A31318EA071CA5EA0E0EA2EA0FFE
-A2487EEA1C07A3387F1FC000FF13E0007F13C013197F9816>I<EA7FF8EAFFFE6C7EEA1C
-0FEB07801303A313071400EA1FFF5BA2EA1C1FEB038014C01301A41303EB0780EA7FFFB5
-1200EA7FFC12197F9816>I<3801F180EA07FF5AEA1F0FEA3C0712781303127000F0C7FC
-5AA77E387003801278A2EA3C07381F0F00EA0FFE6C5AEA01F011197E9816>I<EA7FF8EA
-FFFE6C7EEA1C0FEB0780EB03C01301A214E01300A8EB01C0A21303EB0780130F387FFF00
-485AEA7FF81319809816>I<387FFFC0B5FC7EEA1C01A490C7FCA2131CA2EA1FFCA3EA1C
-1CA290C7FC14E0A5EA7FFFB5FC7E13197F9816>I<B512E0A3EA1C00A41400A2131CA2EA
-1FFCA3EA1C1CA290C7FCA6B47E7F5B13197F9816>I<EA03E348B4FC121FEA3E1FEA3C0F
-12787F127000F0C7FC5AA4EB3F80EB7FC0EB3F8038F007001270EA780FA2123CEA3E1F6C
-B4FC1207EA03E712197E9816>I<387F1FC038FFBFE0387F1FC0381C0700A7EA1FFFA3EA
-1C07A9387F1FC038FFBFE0387F1FC013197F9816>I<38FC07E0EAFE0FA2383A0B80EA3B
-1BA513BBEA39B3A413F3EA38E3A21303A538FE0FE0A313197F9816>77
-D<387E1FC038FF3FE0387F1FC0381D07001387A313C7A2121CA213E7A31367A21377A213
-37A31317EA7F1FEAFF9FEA7F0F13197F9816>I<EA7FF8EAFFFE6C7E381C0F80130314C0
-1301A313031480130F381FFF005B13F8001CC7FCA7127F487E6CC7FC12197F9816>80
-D<EA7FE0EAFFF86C7EEA1C1E7F7FA45B131EEA1FFC5B7FEA1C3E130EA414201470A2387F
-0FF038FF87E0387F03C014197F9816>82 D<EA07E3EA1FFF127FEA781F487E487EA290C7
-FC7E1278EA7F80EA1FF0EA07FCC67E130FEB07801303A212E0A2EAF00738F80F00EAFFFE
-5BEAC7F011197E9816>I<387FFFE0B5FCA2EAE0E0A400001300AFEA07FC487E6C5A1319
-7F9816>I<387F1F80133F131F380E1E00131CEA073C1338EA03B813F012015B12001201
-7F120313B81207131CA2EA0E0EA2487E387F1FC000FF13E0007F13C013197F9816>88
-D<EAFFF0A3EAE000B3A8EAFFF0A30C20789C16>91 D<12E0A27E127012781238123C121C
-121E120E120F7E7F12037F1201A27F12007F137013781338133C131C131E130E130F7F14
-801303130111207E9C16>I<EAFFF0A3EA0070B3A8EAFFF0A30C207F9C16>I<B51280A311
-037E7E16>95 D<EA1FE0EA7FF87FEA783CEA301EEA000E133EEA07FE123FEA7FCEEAF80E
-12E0A2EAF01EEAF83E387FFFE0EA3FF7EA0FC313127E9116>97 D<127E12FE127E120EA4
-133EEBFF80000F13C0EB83E01301EB00F0120E1470A4000F13F014E01381EB83C013FF00
-0E1300EA067C1419809816>I<EA03F8EA0FFE121FEA3C1EEA780CEA700012F05AA47EEA
-70071278EA3E0FEA1FFEEA0FFCEA03F010127D9116>I<133F5B7F1307A4EA03E7EA0FFF
-123FEA3C1F487E1270EAF00712E0A46C5AA2EA781FEA7C3F383FFFE0381FF7F03807C7E0
-14197F9816>I<EA07E0EA0FF8EA1FFCEA3C3EEA780EEA700FEAF007B5FCA3EAE0007EEA
-70071278EA3E1FEA1FFEEA0FFCEA03F010127D9116>I<131FEB7F8013FFEA01E7EBC300
-13C0A2EA7FFFB5FCA2EA01C0ACEA3FFE487E6C5A11197F9816>I<3803E3C0380FFFE05A
-381E3CC0383C1E00EA380EA3EA3C1E6C5AEA1FFC485AEA3BE00038C7FC123CEA1FFC48B4
-FC4813C0EA780338F001E0EAE000A3EAF001387C07C0383FFF80380FFE00EA03F8131C7F
-9116>I<127E12FE127E120EA4137CEA0FFF148013871303A2120EA9387FC7F038FFE7F8
-387FC7F01519809816>I<EA0180EA03C0A2EA0180C7FCA4EA7FC0A31201ACEA7FFFB5FC
-7E101A7D9916>I<127E12FE127E120EA4EB7FE0A3EB0F00131E5B5B5BEA0FF8A213BC13
-1EEA0E0E130FEB0780387F87F0EAFFCFEA7F871419809816>107
-D<EAFFC0A31201B3B51280A311197E9816>I<38FBC78038FFEFC0EBFFE0EA3E7CEA3C78
-EA3870AA38FE7CF8A31512809116>I<EA7E7CB5FC6C1380EA0F871303A2120EA9387FC7
-F038FFE7F8387FC7F01512809116>I<EA03E0EA0FF8487EEA3C1E487EEA700738E00380
-A5EAF00700701300EA780FEA3C1EEA1FFC6C5AEA03E011127E9116>I<EA7E3E38FEFF80
-007F13C0380F83E01301EB00F0120E1470A4000F13F014E01381EB83C013FF000E130013
-7C90C7FCA6EA7FC0487E6C5A141B809116>I<EA07C7EA1FF748B4FCEA7C3FEA781F487E
-A2487EA46C5AA2EA781FEA7C3FEA3FFFEA1FF7EA07C7EA0007A6EB3FE0EB7FF0EB3FE014
-1B7E9116>I<38FF0F80EB3FE013FFEA07F1EBE0C0EBC0005BA290C7FCA7EAFFFCA31312
-7F9116>I<EA0FECEA3FFC127FEAF03CEAE01CA2EAF000EA7F80EA1FF0EA07FCEA003EEA
-E00EA212F0EAF81EEAFFFC13F8EAC7E00F127D9116>I<12035AA4EA7FFFB5FCA20007C7
-FCA75BEB0380A2130713873803FF005BEA00F811177F9616>I<387E1F80EAFE3FEA7E1F
-EA0E03AA1307EA0F0FEBFFF06C13F83803F3F01512809116>I<387F1FC000FF13E0007F
-13C0381C0700EA1E0FEA0E0EA36C5AA4EA03B8A3EA01F0A26C5A13127F9116>I<38FF1F
-E013BF131F38380380A413E33819F300A213B3EA1DB7A4EA0F1EA313127F9116>I<387F
-1FC0133F131F380F1C00EA073CEA03B813F012016C5A12017FEA03B8EA073C131CEA0E0E
-387F1FC038FF3FE0387F1FC013127F9116>I<383FFFC05AA238700780EB0F00131EC65A
-13F8485A485A485A48C7FC381E01C0123C1278B5FCA312127F9116>122
-D<EB1F80137FEA01FFEBE0005BA91203EA7F8048C7FCA26C7EEA03C01201A97FEBFF80EA
-007F131F11207E9C16>I<12E0B3AE0320779C16>I<12FCB4FC13C012031201A97F6CB4FC
-EB7F80A2EBFF00EA01E05BA9120312FF90C7FC12FC11207E9C16>I<EA1E0CEA7F9EEAFF
-FEEAF3FCEA60F00F057D9816>I E /Ff 19 120 df<130E131E137EEA07FE12FFA212F8
-1200B3AC387FFFFEA317287BA722>49 D<EB7F803803FFF0000F13FC381F03FE383C00FF
-48EB7F80007CEB3FC012FE6CEB1FE0A4127E123CC7FC15C0143F1580EC7F00147E5C495A
-495A5CEB078049C7FC131E013813E05B5B3901C001C0EA0380EA0600000FB5FC5A5A5AB6
-1280A31B287DA722>I<EB7F803801FFF0000713FC380F81FE381E00FF001F7FD83F8013
-80A4121F1300C713005C5C495A5CEB07E0EBFF8080EB01F8EB00FE147F1580EC3FC0A215
-E0A2123C127EB4FCA215C0A248137F007C1480003CEBFF00381F01FE6CB45A6C13F0C613
-801B297DA722>I<B5D8F00FB5FCA3D803FCC7EA3FC0AF90B7FCA301FCC7123FB1B5D8F0
-0FB5FCA330297EA835>72 D<3803FF80000F13F0381F01FC383F80FE147F801580EA1F00
-C7FCA314FF137F3803FFBF380FF03FEA1F80EA3F00127E5AA46C137F007EEBDFC0393F83
-9FFC381FFF0F3803FC031E1B7E9A21>97 D<EAFFE0A3120FACEBE1FE9038E7FF809038FE
-07E09038F803F09038F001F89038E000FCA2157EA2157FA8157EA315FCA29038F001F890
-38F803F090389C0FE090380FFF80390E01FC00202A7EA925>I<EB3FF03801FFFC3803F0
-3E380FC07FEA1F80EA3F00A248133E007E90C7FCA212FEA7127EA2127F6CEB0380138000
-1FEB0700380FE00E3803F83C3801FFF838003FC0191B7E9A1E>I<EC7FF0A31407ACEB3F
-873801FFF73807F03F380FC00F381F8007EA3F00A2127EA312FEA8127EA27EA2381F800F
-380FC01F3907E07FFF3801FFE738007F87202A7EA925>I<EB3FC03801FFF03807E07C48
-487E48487ED83F001380140F5A007E14C012FE1407A2B6FCA248C8FCA4127E127F6CEB01
-C01380001F1303390FC007803903F01F003800FFFCEB3FE01A1B7E9A1F>I<15F090387F
-83F83901FFE73C3907C0FC7C380F807C381F003E151048EB3F00A66C133EA26C6C5A6C6C
-5A380DFFE0381C7F8090C8FCA3121E381FFFF814FF6C14C015E06C14F0121F383E000748
-EB01F8481300A4007CEB01F0A2003FEB07E0390FC01F806CB5120038007FF01E297E9B22
->103 D<EAFFE0A3120FAC14FE9038E3FF809038E70FC001EC13E0EBF80715F013F0A213
-E0B039FFFE3FFFA3202A7DA925>I<1207EA1FC013E0123FA3121F13C0EA0700C7FCA7EA
-FFE0A3120FB3A3EAFFFEA30F2B7EAA12>I<EAFFE0A3120FB3B2EAFFFEA30F2A7EA912>
-108 D<38FFC0FE9038C3FF809038C70FC0D80FCC13E0EBD80715F013F0A213E0B039FFFE
-3FFFA3201B7D9A25>110 D<EB3FE03801FFFC3807F07E390FC01F80391F800FC0393F00
-07E0A2007EEB03F0A300FE14F8A8007E14F0A26CEB07E0A2391F800FC0390FC01F803907
-F07F003801FFFC38003FE01D1B7E9A22>I<3803FE30380FFFF0EA3E03EA7800127000F0
-1370A27E00FE1300EAFFE06CB4FC14C06C13E06C13F0000713F8C6FCEB07FC130000E013
-7C143C7E14387E6C137038FF01E038F7FFC000C11300161B7E9A1B>115
-D<1370A413F0A312011203A21207381FFFE0B5FCA23807F000AD1470A7000313E03801F8
-C0EA00FFEB3F0014267FA51A>I<39FFE07FF0A3000F1307B2140FA20007131F3903F077
-FF3801FFE738007F87201B7D9A25>I<3BFFFC7FFC1FFCA33B0FE00FE001C02607F007EB
-0380A201F8EBF0070003160015F82601FC0F130EA29039FE1FFC1E0000011C131C15FE90
-39FF387E3C017F1438EC787F6D486C5AA29138E01FF0011F5CA26D486C5AA36D486C5AA2
-2E1B7F9A31>119 D E /Fg 64 123 df<133FEBFF803803C1C0EA0703A2380E018090C7
-FCA5B512C0A2EA0E01AE387F87F8A2151D809C17>28 D<EB3FC013FFEA03C3EA07031301
-120EA6B5FCA2EA0E01AE387FCFF8A2151D809C17>I<126012F012F812781218A31230A2
-126012E01240050C7C9C0C>39 D<13C0EA0180EA03001206120E120C121C121812381230
-A21270A21260A212E0AC1260A21270A21230A212381218121C120C120E12067EEA0180EA
-00C00A2A7D9E10>I<12C012607E7E121C120C120E120612077EA21380A21201A213C0AC
-1380A21203A21300A25A1206120E120C121C12185A5A5A0A2A7E9E10>I<126012F0A212
-701230A41260A212C01240040C7C830C>44 D<EAFFE0A30B0380890E>I<126012F0A212
-6004047C830C>I<1301A21302A31304A21308A31310A31320A21340A31380A2EA0100A3
-1202A35AA25AA35AA35AA25AA35AA210297E9E15>I<EA03C0EA0FF0EA1C38EA381CA2EA
-700EA3EAF00FADEA700EA3EA381CA2EA1C38EA0FF0EA07E0101D7E9B15>I<12035A123F
-B4FC12C71207B3A3EAFFF8A20D1C7C9B15>I<EA07C0EA1FF0EA3878EA603C131E12F0EA
-F80FA312701200130E131E131C133C1378137013E0EA01C0EA0380EA0700EA0E03120C12
-18EA3006EA7FFE12FFA2101C7E9B15>I<EA07E0EA1FF0EA3838EA301CEA781EA3123812
-00133C13381370EA07E0A2EA0038131C131E130E130FA2127012F8A2130EEAF01EEA601C
-EA3838EA1FF0EA07C0101D7E9B15>I<131CA2133C137CA213DC1201139C1203EA071C12
-06120E120C121812381230126012E0B512C0A238001C00A63801FFC0A2121C7F9B15>I<
-EA300CEA3FFC13F813E0EA3000A6EA33E0EA37F0EA3C38EA381CEA301E130EEA000FA412
-7012F0A2EAE00EEA601E131CEA3878EA1FF0EA07C0101D7E9B15>I<1260387FFF80A214
-00EA6003EAC0065BA2C65A5BA25BA25BA21201A2485AA41207A76CC7FC111D7E9B15>55
-D<EA03E0EA0FF0EA1838EA300CEA20061260A31270EA780CEA3E1CEA3FB8EA1FE0EA07F0
-EA0FF8EA1CFCEA387EEA701E130F12E01307A4EA700E130CEA3C3CEA1FF0EA07E0101D7E
-9B15>I<126012F0A212601200AA126012F0A2126004127C910C>58
-D<1306130FA3497EA4EB33C0A3EB61E0A3EBC0F0A338018078A2EBFFF8487FEB003CA200
-067FA3001F131F39FFC0FFF0A21C1D7F9C1F>65 D<B512C014F0380F00F8143C141C141E
-A4141C143C1478EBFFF014E0EB00F8143C141EA2140FA5141E143E147CB512F814C0181C
-7E9B1D>I<90381F8080EBFFE13803F0333807801B380F000F001E1307001C1303123C5A
-1401127012F091C7FCA70070EB01801278A27E001CEB0300121E6C13066C6C5A3803F038
-3800FFF0EB1F80191E7E9C1E>I<B512C014F0380F007C141E8080EC038015C0A2140115
-E0A815C0A2140315801407EC0F00141E147CB512F014C01B1C7E9B20>I<B512FCA2380F
-007C141C140C140E14061303A314005B13FFA213077FA21403A213001406A3140E141E14
-7CB512FCA2181C7E9B1C>I<B512F8A2380F007814381418141C140CA21303A21400A25B
-13FFA213077FA490C7FCA6EAFFF8A2161C7E9B1B>I<39FFF3FFC0A2390F003C00AAEBFF
-FCA2EB003CAC39FFF3FFC0A21A1C7E9B1F>72 D<EAFFF0A2EA0F00B3A6EAFFF0A20C1C7F
-9B0F>I<EAFFF8A2000FC7FCAF1418A414381430147014F01301B5FCA2151C7E9B1A>76
-D<B46CEBFF806D5A000FECF800A2390DE00378A3380CF006A3EB780CA3EB3C18A3EB1E30
-A3EB0F60A3EB07C0A3381E03803AFFC387FF80A2211C7E9B26>I<B4EBFFC07F000FEB1E
-00EBC00CA2EA0DE0EA0CF0A21378A2133C131EA2130FA2EB078C14CC1303EB01ECA2EB00
-FCA2147C143CA2001E131CEAFFC0140C1A1C7E9B1F>I<EB3F80EBFFE03803E0F8380780
-3C380E000E001E130F48EB078000381303007814C0A20070130100F014E0A80078EB03C0
-A36CEB0780A26CEB0F006C131E6C6C5A3803E0F83800FFE0EB3F801B1E7E9C20>I<B512
-8014E0380F00F01438143C141EA6143C143814F0EBFFE0148090C7FCAAEAFFF0A2171C7E
-9B1C>I<B5FC14E0380F00F01438143C80A55C143814F0EBFFE05CEB01E06D7E1478A715
-30143839FFF03C60EC1FE0C7EA07C01C1D7E9B1F>82 D<3807E080EA1FF9EA3C1FEA7007
-130312E01301A36CC7FCA2127CEA7FC0EA3FF8EA1FFEEA07FFC61380130FEB03C0A21301
-12C0A300E01380130300F01300EAFC0EEACFFCEA83F8121E7E9C17>I<007FB512C0A238
-780F03007013010060130000E014E000C01460A400001400B03803FFFCA21B1C7F9B1E>
-I<39FFF0FFC0A2390F001E00140CB36C5B138000035BEA01C03800E0E0EB7FC0011FC7FC
-1A1D7E9B1F>I<39FFE01FF0A2390F000780EC0300A238078006A2EBC00E0003130CA2EB
-E01C00011318A26C6C5AA3EB7860A36D5AA3EB1F80A36DC7FCA313061C1D7F9B1F>I<3A
-FFE0FFE1FFA23A1F001E007C6C1530143FA20180147000079038678060A32603C0E713C0
-ECC3C0A2D801E0EBC1809038E181E1A3D800F3EBF3001400A2017B13F6017E137EA3013C
-133CA3011C133801181318281D7F9B2B>I<397FF0FFC0A23907C03E0000031338EBE030
-00011370EBF06000005B1379EB7D80013FC7FC7FA27F80131FEB3BC0EB33E01371EB61F0
-EBC0F800011378EB807C3803003C487F380F801F39FFE0FFF0A21C1C7F9B1F>I<EA0FE0
-EA1FF8EA3C3C7FEA180E1200A2EA07FE121FEA3E0E127812F01460A2131EEA783E383FFF
-C0381F878013127F9115>97 D<12FCA2121CA9137EEA1DFF381F8780381E01C0001C13E0
-130014F0A614E01301001E13C0381F07803819FF00EA187C141D7F9C17>I<EA03F0EA0F
-F8EA1E3C1238EA7818EA700012F0A612781306123CEA1E0CEA0FF8EA03E00F127F9112>
-I<EB1F80A21303A9EA03E3EA0FFBEA1E0FEA3807EA7803127012F0A612701278EA3807EA
-1E1F380FFBF0EA07E3141D7F9C17>I<EA03E0EA0FF0EA1C38EA381CEA781EEA700EEAFF
-FEA2EAF000A41270EA7806123CEA1E0CEA0FF8EA03E00F127F9112>I<1378EA01FCEA03
-9EEA071EEA0E0C1300A6EAFFE0A2EA0E00AEEA7FE0A20F1D809C0D>I<EB03803807E7C0
-EA0FFDEA3C3D38381C00EA781EA4EA381CEA3C3CEA3FF0EA37E00070C7FCA21230EA3FFC
-6CB4FC481380EA700738E001C0A438700380383C0F00EA1FFEEA07F8121C7F9215>I<12
-FCA2121CA9137CEA1DFFEA1F07381E0380A2121CAB38FF9FF0A2141D7F9C17>I<121812
-3CA21218C7FCA712FCA2121CAEEAFF80A2091D7F9C0C>I<13C0EA01E0A2EA00C01300A7
-EA0FE0A21200B31260EAF1C0A2EA7F80EA3E000B25839C0D>I<12FCA2121CA9EB7FC0A2
-EB3E0013185B5B5BEA1DE0121FEA1E70EA1C781338133C131C7F130F38FF9FE0A2131D7F
-9C16>I<12FCA2121CB3A7EAFF80A2091D7F9C0C>I<39FC7E07E039FDFF9FF8391F83B838
-391E01E01CA2001C13C0AB3AFF8FF8FF80A221127F9124>I<EAFC7CEAFDFFEA1F07381E
-0380A2121CAB38FF9FF0A214127F9117>I<EA03F0EA0FFCEA1E1EEA380700781380EA70
-0300F013C0A600701380EA780700381300EA1E1EEA0FFCEA03F012127F9115>I<EAFC7E
-EAFDFF381F8780381E03C0381C01E0A2EB00F0A6EB01E0A2381E03C0381F0780381DFF00
-EA1C7C90C7FCA6B47EA2141A7F9117>I<3803E180EA0FF9EA1E1FEA3C071278130312F0
-A612781307123CEA1E1FEA0FFBEA07E3EA0003A6EB1FF0A2141A7F9116>I<EAFDE0EAFF
-F0EA1F78121E1330EA1C00ABEAFFC0A20D127F9110>I<EA1F90EA3FF0EA7070EAE030A3
-EAF800EA7F80EA3FE0EA0FF0EA00F8EAC038A212E0A2EAF070EADFE0EA8FC00D127F9110
->I<120CA5121CA2123CEAFFE0A2EA1C00A81330A5EA1E60EA0FC0EA07800C1A7F9910>I<
-38FC1F80A2EA1C03AC1307EA0C0F380FFBF0EA03E314127F9117>I<38FF0FE0A2381C07
-80EB0300EA0E06A36C5AA2131CEA0398A213F86C5AA26C5AA313127F9116>I<39FF3FCF
-E0A2391C0F0780EC0300131F380E1B061486A2EB318E000713CCA213603803E0F8A33801
-C070A31B127F911E>I<387F8FF0A2380F078038070600EA038EEA01DC13D8EA00F01370
-137813F8EA01DCEA038E130EEA0607380F038038FF8FF8A21512809116>I<38FF0FE0A2
-381C0780EB0300EA0E06A36C5AA2131CEA0398A213F86C5AA26C5AA35BA3EAF180A200C7
-C7FC127E123C131A7F9116>I<EA7FFCA2EA7838EA7070EA60F013E0EA61C01263EA0380
-EA070C120F120EEA1C1CEA3C181238EA7078EAFFF8A20E127F9112>I
-E /Fh 1 14 df<EC7FC0903801FFF090380F803E90381E000F0178EB03C001E0EB00E048
-48147048488048C87E000E81000C1506001C15070018810038168000301501007016C000
-601500A200E016E0481660A96C16E0006016C0A200701501003016800038150300181600
-001C5D000C1506000E150E6C5D6C6C5C6C6C5C6C6C5C0178EB03C0011E010FC7FC90380F
-803E903801FFF09038007FC02B2F7DA332>13 D E /Fi 18 118
-df<B51280A311037C8B1A>45 D<127812FCA41278060676851A>I<137E3801FF804813C0
-3807C3E0EA0F00381E0FF0EA3C3FEA387F387879F8EA70F038F0E07812E1EBC038A6EBE0
-7800F013703870F0F0387879E0EA387F383C3FC0381E0F00380F00383807C1F8EA03FF6C
-13E038007F80151E7E9D1A>64 D<EA1FF0EA3FFC487EEA781F38300780EA0003A213FF12
-07121FEA3F83EA7C0312F012E0A3EAF007EA7C1F383FFFFCEA1FFDEA07F016157D941A>
-97 D<12FEA3120EA6133FEBFFC0000F13E0EBE1F0EB8070EB00781438000E133C141CA5
-000F133C14381478EB80F0EBC3E0EBFFC0000E138038067E00161E7F9D1A>I<EB1FC0A3
-1301A6EA01F9EA07FDEA0FFFEA1F0FEA3C07EA78031270EAF00112E0A5EAF0031270EA78
-071238EA3E1F381FFFFCEA0FFDEA03F1161E7E9D1A>100 D<EA01FCEA07FF481380381F
-07C0383C01E0EA7800007013F000F013705AB512F0A300E0C7FC7E1270007813707E381F
-01F0380FFFE06C13C00001130014157D941A>I<EB0FF0EB1FF8133FEB7878EBF030EBE0
-00A4387FFFF0B5FCA23800E000AF383FFF804813C06C1380151E7F9D1A>I<3801F8FC38
-07FFFE5A381F0F8C381C0380003C13C0EA3801A3EA3C03001C1380EA1F0FEBFF00485AEA
-39F80038C7FC123C121C381FFF8014F04813F8387C00FC0070131C00F0131E48130EA36C
-131E0078133C383F01F8381FFFF06C13E00001130017217F941A>I<12FEA3120EA6133F
-EBFF80000F13C0EBE1E013801300A2120EAB38FFE3FE13E713E3171E7F9D1A>I<EA01C0
-487EA36C5AC8FCA5EA7FE0A31200AF387FFF80B512C06C1380121F7C9E1A>I<12FEA312
-0EA6EB0FFCEB1FFEEB0FFCEB03C0EB0780EB0F00131E5B5B13FC120F13DE138F380E0780
-EB03C0A2EB01E0EB00F038FFE3FE14FF14FE181E7F9D1A>107 D<387DF1F038FFFBF86C
-B47E381F1F1CEA1E1EA2EA1C1CAC387F1F1F39FF9F9F80397F1F1F00191580941A>109
-D<EAFE3FEBFF80B512C0380FE1E013801300A2120EAB38FFE3FE13E713E317157F941A>
-I<EA01F0EA07FCEA1FFF383E0F80EA3C07387803C0EA700138E000E0A6EAF001007013C0
-EA7803383C0780EA3E0F381FFF00EA07FCEA01F013157D941A>I<387F87F038FF9FFCEA
-7FBF3803FC3CEBF018EBE000A25BA25BA9EA7FFFB5FC7E16157E941A>114
-D<13C01201A6387FFFE0B5FCA23801C000AA1470A314F0EBE1E0EA00FFEB7FC0EB3F0014
-1C7F9B1A>116 D<38FE0FE0A3EA0E00AC1301A2EA0F073807FFFE7EEA01FC17157F941A>
-I E /Fj 38 253 df<127012F812FCA2127C120CA41218A21230A212601240060F7C840E
->44 D<EAFFE0A30B037F8B10>I<EA01F0EA07FCEA0E0E487E38380380A2007813C0EA70
-01A300F013E0AE007013C0A3EA780300381380A2381C0700EA0E0EEA07FCEA01F013227E
-A018>48 D<EA01801203120F12FF12F31203B3A8EAFFFEA20F217CA018>I<EA03F0EA0F
-FCEA1C1F38300F80EA6007EB03C012C000F013E0EAF801A3EA2003120014C0A2EB0780A2
-EB0F00131E131C5B5B5B485A485A38070060120E120C4813E04813C0EA7FFFB5FCA21321
-7EA018>I<EA03F0EA0FFCEA1C1F383007801270007813C0A21303EA380712001480A2EB
-0F00130E133CEA03F8A2EA001E7FEB078014C0130314E01220127012F8A200F013C01260
-EB07801230381C1F00EA0FFCEA03F013227EA018>I<130EA2131EA2133EA2136E13EE13
-CE1201138EEA030E12071206120E120C1218A212301270126012E0B512F8A238000E00A7
-3801FFF0A215217FA018>I<137E48B4FC3803C180380701C0EA0E03121CEB018048C7FC
-A2127812701320EAF1FCEAF3FEEAF60738FC038000F813C0130112F014E0A51270A30038
-13C0130300181380381C0700EA0E0EEA07FCEA01F013227EA018>54
-D<12601270387FFFE0A214C0EA600038E0018038C00300A21306C65AA25BA25BA25BA213
-E0A3485AA51203A86C5A13237DA118>I<EA01F0EA07FCEA0E0E487E3838038012781270
-38F001C0A314E0A5127013031278EA3807EA1C0DEA0FF9EA07F1380081C0130113031480
-A2383007001278130EEA701C6C5AEA1FF0EA0FC013227EA018>57
-D<127012F8A312701200AB127012F8A3127005157C940E>I<B612C0A23807800F140314
-01140015E0A215601460A3150014E0138113FFA2138113801460A21518A214001530A415
-7015F01401EC07E0B6FCA21D227EA121>69 D<EAFFFCA2EA0780B3ACEAFFFCA20E227EA1
-12>73 D<B512F014FC3807803FEC0F801407EC03C0A215E0A515C0A2EC0780140FEC3F00
-EBFFFC14F00180C7FCADEAFFFCA21B227EA121>80 D<3803F020380FFC60381C0EE0EA38
-03EA700113005AA21460A36C1300A21278127FEA3FF0EA1FFE6C7E0003138038003FC0EB
-07E01301EB00F0A2147012C0A46C136014E06C13C0EAF80138EF038038C7FF00EA81FC14
-247DA21B>83 D<007FB512F8A2387C07800070143800601418A200E0141C00C0140CA500
-001400B3A20003B5FCA21E227EA123>I<39FFFC0FFFA239078001F8EC0060B3A5000314
-406D13C0A20001EB01803900E00300EB7007EB3C1EEB1FF8EB07E020237EA125>I<3BFF
-F03FFC07FEA23B0F0007C001F00203EB00E01760D807806D13C0A33B03C007F001801406
-A216032701E00C781300A33A00F0183C06A3903978383E0CEC301EA2161C90393C600F18
-A390391EC007B0A3010F14E0EC8003A36D486C5AA32F237FA132>87
-D<EA0FE0EA1FF8EA3C1C7FEA18071200A25BEA03FF120FEA3F07127C127812F01418A213
-0F1278387C3FB8383FF3F0380FC3C015157E9418>97 D<120E12FEA2121E120EAAEB1F80
-EB7FE0380FC0F0EB0078000E1338143C141C141EA7141C143C000F1338EB8070EBC1F038
-0C7FC0EB1F0017237FA21B>I<EA01FEEA07FF380F0780121C383803000078C7FC127012
-F0A7127814C07E381E0180380F0300EA07FEEA01F812157E9416>I<14E0130FA2130113
-00AAEA03F0EA07FEEA1F07EA3C01EA38001278127012F0A712701278EA3801EA3C03381E
-0EF0380FFCFEEA03F017237EA21B>I<EA01FCEA07FF380F0780381C03C0EA3801007813
-E0EA7000B5FCA200F0C7FCA5127814607E6C13C0380F83803807FF00EA00FC13157F9416
->I<14F03801F1F83807FFB8380F1F38381E0F00EA1C07003C1380A5001C1300EA1E0FEA
-0F1EEA1FFCEA19F00018C7FCA2121CEA1FFF6C13C04813E0383801F038700070481338A4
-00701370007813F0381E03C0380FFF803801FC0015217F9518>103
-D<120E12FEA2121E120EAAEB1F80EB7FC0380FC1E0EB80F0EB0070120EAE38FFE7FFA218
-237FA21B>I<121C121E123E121E121CC7FCA8120E12FEA2121E120EAFEAFFC0A20A227F
-A10E>I<120E12FEA2121E120EAAEB0FFCA2EB07E0EB0380EB0700130E13185B137813F8
-EA0F9C131EEA0E0E7F1480EB03C0130114E014F038FFE3FEA217237FA21A>107
-D<120E12FEA2121E120EB3ABEAFFE0A20B237FA20E>I<390E1F807E3AFE7FE1FF809039
-C0F303C03A1F807E01E0390F003C00000E1338AE3AFFE3FF8FFEA227157F942A>I<380E
-1F8038FE7FC038FFC1E0381F80F0380F0070120EAE38FFE7FFA218157F941B>I<380E1F
-8038FE7FE038FFC1F0380F0078120E143CA2141EA7143CA2000F1378EB8070EBC1F0380E
-7FC0EB1F0090C7FCA8EAFFE0A2171F7F941B>112 D<EA0E3CEAFEFEEAFFCFEA1F8FEA0F
-061300120EADEAFFF0A210157F9413>114 D<EA0F88EA3FF8EA7078EAE0381318A3EAF0
-00127FEA3FE0EA1FF0EA01F8EA003CEAC01CA212E0A2EAF018EAF878EADFF0EA8FC00E15
-7E9413>I<1206A5120EA3121E123EEAFFF8A2EA0E00AA130CA51308EA0718EA03F0EA01
-E00E1F7F9E13>I<000E137038FE07F0A2EA1E00000E1370AC14F01301380703783803FE
-7FEA01F818157F941B>I<38FFC3FEA2381E00F8000E1360A26C13C0A338038180A213C3
-00011300A2EA00E6A3137CA31338A217157F941A>I<EA1C07EA1E0F003E1380001E1300
-EA1C07C8FCA3EA0FE0EA1FF8EA3C1C7FEA18071200A25BEA03FF120FEA3F07127C127812
-F01418A2130F1278387C3FB8383FF3F0380FC3C0151D7E9C18>228
-D<380381C0000713E013C31381000313C0C8FCA3000E137038FE07F0A2EA1E00000E1370
-AC14F01301380703783803FE7FEA01F8181D7F9C1B>252 D E /Fk
-23 120 df<BB12C0A24202809343>22 D<EB7F803801FFE0380781F8380E007C00187F80
-48EB0F804814C01407A200F014E07E6C1303A300781307C7FC15C0A2140F1580A2EC1F00
-143E143C5C14F85C495A495A49C7FC130E5B13185B5B491360485A120348C712C0120E12
-0C481301003FB5FC481480B6FCA21B2F7DAE22>50 D<14034A7EA34A7EA3EC1BE0A3EC31
-F0A3EC60F8A3ECC07CA20101137EEC803EA20103133F4A7EA249800106130FA249801507
-A2496D7E011FB5FCA29039300001F0A3496D7EA201E08049147CA20001157E49143EA200
-03153F821207D81FC0EC3F80D8FFF8903803FFFCA22E327EB133>65
-D<B612C015F83907E000FE0003141FED07C06F7E6F7E150082167C163C163EA282A21780
-A2160FA217C0AB1780A3161F1700A3163EA25E167816F84B5A4B5A4B5AED1F800007027E
-C7FCB612F815C02A317CB033>68 D<B712E0A23907E0001F00031403ED01F015001670A2
-1630A41618A315C01600A41401A2140790B5FCA2EBE0071401A21400A31606A21500160C
-A4161CA216181638A2167816F815030007EC1FF0B7FCA227317CB02E>I<B6FC15F03907
-E001FC0003EB003FED0F806F7E82150382150182A55E15035E15075E4B5A033FC7FCEC01
-FC90B512F015C09038E003F0EC007C81818182150782A582A5171816F01503A2486C9038
-01F830B5D880001370EE7FE0C9EA0F802D327CB032>82 D<EA01FE380FFFC0381E03E048
-C67E003E137880141C0008131EC7FCA4EB01FE133F3801FF1EEA07F0EA0F80EA1F00123E
-5AA248140CA3143EA2007C137E6CEBDF1C391F038FB8390FFF07F03903F803C01E1F7D9E
-22>97 D<EA078012FFA2120F1207AFEB81FCEB87FF90389E0F809038B803C09038E001E0
-9038C000F015785B157C153CA2153EA9153C157CA215786D13F0A290386001E090383003
-C090381C0F80390607FE00EB01F81F327EB125>I<EB3FC0EBFFF83803E03C3807801E38
-0F003E121EA2481308007C1300A2127812F8A9127CA36C1303121E001F1306380F800E38
-07C01C3803F0383800FFE0EB3F80181F7D9E1E>I<EC03C0147FA214071403AF133FEBFF
-E33803E0733807801B380F000F001E1307003E1303123C127CA2127812F8A91278A2127C
-123C14076C130F7E3807803B3903E0F3E03901FFC3FE38007F031F327DB125>I<EB03E0
-EB1FF8EB3C38EB707C13F0EA01E014383803C000ACB512C0A23803C000B3A8487EEA7FFF
-A216327FB115>102 D<15F090387F03F83901FFCF1C3803C1FC390780F818390F007800
-48137C001E133C003E133EA7001E133C001F137C6C13786C6C5A380FC1E0380DFFC0D81C
-7FC7FC0018C8FCA2121CA2121E380FFFF814FF6C14804814C0391E0007E00038EB01F048
-EB00701578481438A500701470007814F06CEB01E06CEB03C03907C01F003801FFFC3800
-3FE01E2F7E9F22>I<1207EA0F80121FA2120FEA0700C7FCABEA078012FFA2120F1207B3
-A6EA0FC0EAFFF8A20D307EAF13>105 D<EA078012FFA2120F1207B3B3A7EA0FC0EAFFFC
-A20E327EB113>108 D<260781FEEB3FC03BFF87FF80FFF0903A8E07C1C0F83B0F9803E3
-007C2707B001E6133C9026E000FC7F495BA3495BB3486C486C133F3CFFFC1FFF83FFF0A2
-341F7E9E39>I<380781FC38FF87FF90389C0F80390FB803C0EA07B09038E001E013C0A2
-1380B3A2390FC003F039FFFC3FFFA2201F7E9E25>I<EB1FC0EBFFF83801E03C3807800F
-390F000780001EEB03C0A248EB01E0A248EB00F0A300F814F8A8007814F0007C1301003C
-14E0A26CEB03C0A26CEB07803907C01F003801F07C6CB45AEB1FC01D1F7E9E22>I<3807
-81FC38FF87FF90389E0F80390FB803C03907E001E001C013F0EC00F85B157CA3153EA915
-7CA315F86D13F014019038E003E09038B007C090389C0F80903887FE00EB81F80180C7FC
-AB487EEAFFFCA21F2D7E9E25>I<380783E038FF8FF8EB9C7CEA0FB0EA07F0EBE038EBC0
-00A35BB3487EEAFFFEA2161F7E9E1A>114 D<3801FC10380FFF30381E03F0EA38004813
-705A1430A37E6C1300127EEA3FF06CB4FC6C1380000313E038003FF0EB03F8EB007800C0
-133CA2141C7EA27E14186C13386C137038EF01E038C3FFC03880FE00161F7E9E1B>I<13
-C0A51201A31203A21207120F121FB512E0A23803C000B01430A83801E060A23800F0C0EB
-7F80EB1F00142C7FAB1A>I<39078001E000FF133FA2000F130300071301B31403A21407
-1203EBC00D3901E039F03900FFE1FFEB3F81201F7E9E25>I<3BFFF07FF81FFCA23B0F80
-07C007F00203EB03C00007ED0180A2D9C0071303000302E01300A2140CD801E0EBF006A2
-EC1870D800F0EB780CA2EC30380178EB3C18A2EC601C013CEB1E30A2ECC00E011EEB0F60
-A2131F6D486C5AA36D486C5AA32E1F7F9E31>119 D E end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 300dpi
-TeXDict begin
-
-%%EndSetup
-%%Page: 1 1
-1 0 bop 173 369 a Fk(Ebnf2ps)22 b(\026)h(Automatic)e(Railroad)g
-(Diagram)g(Dra)n(wing)742 490 y Fj(P)o(eter)15 b(Thiemann)384
-548 y(Wilhelm-Sc)o(hi)o(c)o(k)l(ard-Institut,)e(Univ)o(ersit\344t)i
-(T\374bingen)644 606 y(Sand)i(13,)g(72076)h(T\374bingen)365
-664 y(E-mail:)i Fi(thiemann@i)o(nfo)o(rm)o(ati)o(k.u)o(ni-)o(tu)o(ebi)o
-(nge)o(n.)o(de)667 720 y Fj(c)653 722 y Fh(\015)p Fj(1994,)e(P)o(eter)d
-(Thiemann)719 820 y(Septem)o(b)q(er)f(1,)i(1994)227 969
-y Fg(Ebnf2ps)j(w)o(as)f(written)h(to)f(\034ll)f(an)h(urgen)o(t)h(need)g
-(of)f(the)h(author:)27 b(to)18 b(pro)q(duce)i(lots)e(of)165
-1019 y(syn)o(tax)e(diagrams)f(\(railroad)g(diagrams\))g(from)g(a)h
-(grammar)d(in)j(EBNF)i(notation)d(in)h(short)165 1069
-y(time.)g(Ov)o(er)c(the)g(time)d(the)j(program)e(has)h(attracted)h(a)f
-(couple)h(of)f(features)h(in)f(order)h(to)f(ful\034ll)165
-1119 y(a)j(v)n(ariet)o(y)f(of)g(requiremen)o(ts.)227
-1169 y(The)h(program)e(ma)o(y)g(b)q(e)i(freely)g(used)h(and)e
-(distributed,)h(y)o(ou)f(are)h(ho)o(w)o(ev)o(er)g(required)h(not)165
-1218 y(to)g(remo)o(v)o(e)g(the)h(cop)o(yrigh)o(t)f(notices)i(from)d
-(the)i(source)h(\034les.)23 b(Please)17 b(send)f(an)o(y)f(commen)o(ts,)
-165 1268 y(bugs,)f(etc.)g(to)g(the)g(author.)165 1405
-y Ff(1)67 b(Ho)n(w)21 b(to)h(build)j(it)216 1496 y Fg(1.)20
-b(Edit)14 b(the)g(Mak)o(e\034le)g(to)g(re\035ect)h(y)o(our)f(Hask)o
-(ell)f(compiler,)f(for)i(example)443 1591 y Fe(HC=)21
-b(hbc)216 1687 y Fg(2.)f(Find)i(out)g(where)h(y)o(our)f(T)m(eX)h
-(installation)d(stores)k Fe(.afm)p Fg(-\034les)d(\(Adob)q(e)i(fon)o(t)f
-(met-)269 1737 y(ric)f(\034les\))g(and)f(c)o(hange)h(the)h(v)n(ariable)
-d Fe(afmPathDefault)f Fg(in)i Fe(Ebnf2ps.hs)e Fg(accord-)269
-1787 y(ingly)m(.)36 b(Alternativ)o(ely)m(,)21 b(y)o(ou)f(can)h(set)g
-(the)h(en)o(vironmen)o(t)d(v)n(ariable)g Fe(AFMPATH)g
-Fg(when)269 1837 y(running)i(the)h(program.)39 b(These)23
-b(\034les)f(are)g(absolutely)f(necessary)m(.)42 b(If)21
-b(y)o(ou)g(don't)269 1886 y(\034nd)16 b(them)f(complain)e(to)j(y)o(our)
-g(system)f(administrator)f(or)i(get)g(them)f(y)o(ourself)h(from)269
-1936 y Fe(ftp://ftp.adobe.)o(com/p)o(ub/a)o(dobe/)o(AFMFi)o(les/)p
-Fg(.)216 2018 y(3.)k(Change)15 b(the)g(v)n(ariable)f
-Fe(rgbPathDefault)d Fg(to)k(con)o(tain)f(the)i(directory)f(where)h(y)o
-(our)f(X)269 2068 y(installation)c(stores)j(its)f(color)g(data)f(base)i
-(\(usually)f Fe(/usr/lib/X11/rg)o(b.tx)o(t)p Fg(\).)i(This)269
-2117 y(can)e(also)f(b)q(e)i(corrected)h(later)e(with)f(the)i(en)o
-(vironmen)o(t)e(v)n(ariable)g Fe(RGBPATH)p Fg(.)e(There)15
-b(are)269 2167 y(fallbac)o(k)i(color)h(de\034nitions)g(for)g(the)h(8)f
-(digital)f(colors)h(\(blac)o(k,)h(white,)g(blue,)h(green,)269
-2217 y(cy)o(an,)13 b(reg,)g(magen)o(ta,)e(y)o(ello)o(w,)h(white\),)h
-(so)h(nothing)e(needs)j(b)q(e)f(done)f(if)g(that's)g(enough)269
-2267 y(for)g(y)o(ou.)216 2348 y(4.)20 b(T)o(yping)13
-b Fe(make)g Fg(should)h(pro)q(duce)h(an)f(executable)h(\034le)f(named)e
-Fe(Ebnf2ps)p Fg(.)165 2485 y Ff(2)67 b(Ho)n(w)21 b(to)h(use)g(it)165
-2576 y Fg(The)14 b(syn)o(tax)g(is)165 2656 y Fe(Ebnf2ps)20
-b([options])g(BNFfile)g(Nonterminal)g(...)165 2736 y
-Fg(where)d(the)f Fe(options)e Fg(are)i(describ)q(ed)h(in)e(Sec.)h(2.1,)
-f(the)h(syn)o(tax)f(of)g(the)i(input)e(\034le)g Fe(BNFfile)165
-2785 y Fg(in)h(Sec.)h(2.2,)f(and)g Fe(Nonterminal)e Fg(describ)q(es)19
-b(the)e(non)o(terminals,)e(for)h(whic)o(h)g(diagrams)f(are)165
-2835 y(to)f(b)q(e)g(generated,)h(as)f(regular)g(expressions)h(\(see)g
-(Sec.)g(2.3\).)905 2960 y(1)p eop
-%%Page: 2 2
-2 1 bop 165 195 a Fd(2.1)56 b(Options)165 272 y Fg(The)10
-b(follo)o(wing)d(list)i(sho)o(ws)g(all)g Fc(options)d
-Fg(with)j(their)h Fb(p)n(ar)n(ameters)k Fg(and)c(their)f(\(default)h(v)
-n(alues\).)165 322 y(All)j(distances)i(and)f(sizes)h(measured)e(in)h
-(1/100)e(p)q(oin)o(t)i(\(1)g(p)q(oin)o(t)f(is)h(ab)q(out)f(1/72)g(inc)o
-(h\).)165 405 y Fc(-n)o(tF)l(on)o(t)g Fa(font)24 b Fg(\(Times-Roman\))7
-b(P)o(ostScript)12 b(fon)o(t)e(used)h(for)f(non)o(terminals,)f(an)o(y)i
-(fon)o(t)f(go)q(es)269 454 y(here)15 b(that)f(y)o(our)f(prin)o(ter)i
-(kno)o(ws)f(and)f(for)h(whic)o(h)f(y)o(ou)h(ha)o(v)o(e)g(fetc)o(hed)g
-(the)h(AFM)f(\034les.)165 537 y Fc(-n)o(tScale)g Fa(int)24
-b Fg(\(10\))14 b(P)o(oin)o(tsize)g(of)f(t)o(yp)q(eface)i(for)e(non)o
-(terminals.)165 620 y Fc(-n)o(tColor)h Fa(c)n(olor)24
-b Fg(\(blac)o(k\))14 b(Color)f(of)g(t)o(yp)q(eface)i(for)e(non)o
-(terminals.)165 703 y Fc(-tF)l(on)o(t)h Fa(font)24 b
-Fg(\(Times-Roma)o(n\))11 b(P)o(ostScript)k(fon)o(t)e(used)i(for)f
-(terminal)e(strings.)165 786 y Fc(-tScale)i Fa(int)25
-b Fg(\(10\))14 b(P)o(oin)o(tsize)g(of)f(t)o(yp)q(eface)i(for)e
-(terminals.)165 869 y Fc(-tColor)h Fa(c)n(olor)25 b Fg(\(blac)o(k\))13
-b(Color)g(of)h(t)o(yp)q(eface)g(for)g(terminals.)165
-952 y Fc(-b)q(orderDistX)f Fa(int)24 b Fg(\(500\))13
-b(Horizon)o(tal)g(distance)i(of)e(ob)r(jects)i(from)d(their)j(con)o
-(tainer.)165 1036 y Fc(-b)q(orderDistY)e Fa(int)24 b
-Fg(\(500\))13 b(V)m(ertical)h(distance)h(of)e(ob)r(jects)i(from)d
-(their)i(con)o(tainer.)165 1119 y Fc(-lineWidt)o(h)f
-Fa(int)24 b Fg(\(30\))14 b(Width)f(of)h(lines)f(used)i(for)f
-(connecting)g(lines.)165 1202 y Fc(-fatLineWidt)o(h)f
-Fa(int)24 b Fg(\(100\))14 b(Width)f(of)g(lines)h(used)h(for)e(dra)o
-(wing)g(b)q(o)o(xes.)165 1285 y Fc(-lineColor)g Fa(c)n(olor)24
-b Fg(\(blac)o(k\))14 b(Color)f(used)i(for)e(connecting)i(lines.)165
-1368 y Fc(-fatLineColor)e Fa(c)n(olor)24 b Fg(\(blac)o(k\))13
-b(Color)h(used)g(for)g(outlines)g(of)f(b)q(o)o(xes.)165
-1451 y Fc(-arro)o(wSize)h Fa(int)25 b Fg(\(200\))13 b(Size)h(of)g(\(in)
-o(visible\))e(b)q(o)o(x)i(con)o(taining)f(an)g(arro)o(w.)165
-1534 y Fc(-rgbFileName)g Fa(int)25 b Fg(\(rgb.txt\))14
-b(File)f(name)g(for)g(color)h(de\034nitions.)165 1617
-y Fc(-happ)o(y)19 b Fg(Accept)i(happ)o(y)d(format)f(input)i(\034les.)34
-b(Default:)27 b(accept)20 b(EBNF)g(syn)o(tax)f(as)g(de-)269
-1666 y(scrib)q(ed)c(b)q(elo)o(w.)165 1750 y Fc(+ps)20
-b Fg(Pro)q(duce)15 b(encapulated)g(P)o(ostScript)g(output)f
-(\(default\).)165 1833 y Fc(+\034g)20 b Fg(Pro)q(duce)15
-b(\034g)f(output)g(\(F)o(ORMA)m(T)g(2.1\).)165 1916 y
-Fc(+simplify)k Fg(Simplif)o(y)11 b(pro)q(ductions)k(\(exp)q(erimen)o
-(tal,)d(default:)18 b(don't\).)165 1999 y Fc(-v)o(erb)q(ose)h
-Fg(Prin)o(ts)c(some)e(progress)i(messages.)165 2082 y
-Fc(-help)k Fg(Prin)o(ts)13 b(a)f(brief)g(description)h(of)e(the)i
-(command)d(line,)i(the)g(options,)g(and)g(the)h(en)o(viron-)269
-2131 y(men)o(t)g(v)n(ariables.)165 2248 y Fd(2.2)56 b(Syn)n(tax)18
-b(of)h(the)f(input)i(\034le)165 2324 y Fe(File)261 b(=)21
-b({Production}.)165 2374 y(Production)129 b(=)21 b(Nonterminal)f([)h
-(String)g(])g("=")g(Term)g(".")h(.)165 2424 y(Term)261
-b(=)21 b(Factor)g(/)g("|")g(.)349 b(#)21 b(alternative)165
-2474 y(Factor)217 b(=)21 b(ExtAtom)f(+)i(.)414 b(#)21
-b(sequence)165 2523 y(ExtAtom)195 b(=)21 b(Atom)514 2573
-y(|)g(Atom)g("/")g(Atom)370 b(#)21 b(repetion)f(through)h(Atom)514
-2623 y(|)g(Atom)g("+".)457 b(#)21 b(at)h(least)e(one)i(repetion)165
-2673 y(Atom)261 b(=)21 b(Nonterminal)514 2723 y(|)g(String)522
-b(#)21 b(terminal)f(string)514 2773 y(|)h("\(")g(Term)g("\)")514
-2822 y(|)g("[")g(Term)g("]")392 b(#)21 b(an)h(optional)e(Term)905
-2960 y Fg(2)p eop
-%%Page: 3 3
-3 2 bop 514 195 a Fe(|)21 b("{")g(Term)g("}")392 b(#)21
-b(zero)g(or)h(more)f(repetions)514 245 y(.)165 295 y(String)217
-b(=)21 b("\\"")g({)h(character)e(})h("\\"")g(.)165 345
-y(Nonterminal)107 b(=)21 b(letter)g({)g(letter)g(|)g(digit)g(|)h("_")f
-(})g(.)165 394 y(character)151 b(=)21 b("\\\\")g(charesc.)165
-474 y Fg(Or)14 b(in)g(terms)f(of)h(diagrams)e(\(what)h(w)o(ould)g(y)o
-(ou)h(exp)q(ect\):)725 692 y @beginspecial 0 @llx 0 @lly
-91 @urx 43 @ury 910 @rwi @setspecial
-%%BeginDocument: File.eps
-/$Ebnf2psDict 100 dict def
-$Ebnf2psDict begin
-/l {lineto} bind def
-/m {moveto} bind def
-/rl {rlineto} bind def
-/rm {rmoveto} bind def
-/s {stroke} bind def
-/n {newpath} bind def
-/gs {gsave} bind def
-/gr {grestore} bind def
-/clp {closepath} bind def
-/slw {setlinewidth} bind def
-/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-4 -2 roll mul setrgbcolor} bind def
-/scol {3 {255 div 3 1 roll} repeat setrgbcolor} bind def
- /apr {arcto 4 {pop} repeat} def
-/Box {
-  /linewidth exch def
-  linewidth sub /height exch def
-  linewidth sub /width exch def
-   n m
-  width 0 rl
-  0 height rl
-  width neg 0 rl
-  0 height neg rl
-  clp linewidth slw s
-} def
- /RBox {
-  /linewidth exch def
-  /height exch def
-  /width exch def
-  /lly exch def
-  /llx exch def
-  linewidth 2 div dup llx add /llx exch def lly add /lly exch def
-  /height height linewidth sub def
-  /width  width  linewidth sub def
-  /height2 height 2 div def
-  /width2  width  2 div def
-  /urx llx width add def
-  /ury lly height add def
-  /mmx llx width2 add def
-  /mmy lly height2 add def
-  /radius width2 height2 ge {height2} {width2} ifelse def
-   n mmx lly m
-  urx lly urx mmy radius apr
-  urx ury mmx ury radius apr
-  llx ury llx mmy radius apr
-  llx lly mmx lly radius apr
-  mmx lly l
-  clp linewidth slw s
-} def
-end
-/$Ebnf2psBegin {$Ebnf2psDict begin /$Ebnf2psEnteredState save def} def
-/$Ebnf2psEnd {$Ebnf2psEnteredState restore end} def
-
-
-$Ebnf2psBegin
- 0 0 0 scol 0.30 slw
-n 8 2.50 m 2 -2 rl -2 -2 rl s
-n 0 0.50 m 10 0 rl s
-/Times-Roman findfont 10 scalefont setfont
- 0 34.67 m(File) show
-n 88.89 2.50 m 2 -2 rl -2 -2 rl s
-n 85.89 0.50 m 5 0 rl s
-n 80.89 5.50 m 0 3.50 rl s
-n 15 5.50 m 0 3.50 rl s
-n 80.89 9 m 80.89 14 75.89 14 5 apr
- 75.89 14 l s
-n 75.89 0.50 m 80.89 0.50 80.89 5.50 5 apr
- 80.89 5.50 l s
-n 15 9 m 15 14 20 14 5 apr
- 20 14 l s
-n 20 0.50 m 15 0.50 15 5.50 5 apr
- 15 5.50 l s
-n 10 0.50 m 75.89 0 rl s
-n 77.89 16 m -2 -2 rl 2 -2 rl s
- 20 5.50 55.89 17 1 Box
- 26 11.17 m(Production) show
-
-$Ebnf2psEnd
-%%EndDocument
- @endspecial 428 913 a @beginspecial 0 @llx 0 @lly 234
-@urx 52 @ury 2340 @rwi @setspecial
-%%BeginDocument: Production.eps
-/$Ebnf2psDict 100 dict def
-$Ebnf2psDict begin
-/l {lineto} bind def
-/m {moveto} bind def
-/rl {rlineto} bind def
-/rm {rmoveto} bind def
-/s {stroke} bind def
-/n {newpath} bind def
-/gs {gsave} bind def
-/gr {grestore} bind def
-/clp {closepath} bind def
-/slw {setlinewidth} bind def
-/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-4 -2 roll mul setrgbcolor} bind def
-/scol {3 {255 div 3 1 roll} repeat setrgbcolor} bind def
- /apr {arcto 4 {pop} repeat} def
-/Box {
-  /linewidth exch def
-  linewidth sub /height exch def
-  linewidth sub /width exch def
-   n m
-  width 0 rl
-  0 height rl
-  width neg 0 rl
-  0 height neg rl
-  clp linewidth slw s
-} def
- /RBox {
-  /linewidth exch def
-  /height exch def
-  /width exch def
-  /lly exch def
-  /llx exch def
-  linewidth 2 div dup llx add /llx exch def lly add /lly exch def
-  /height height linewidth sub def
-  /width  width  linewidth sub def
-  /height2 height 2 div def
-  /width2  width  2 div def
-  /urx llx width add def
-  /ury lly height add def
-  /mmx llx width2 add def
-  /mmy lly height2 add def
-  /radius width2 height2 ge {height2} {width2} ifelse def
-   n mmx lly m
-  urx lly urx mmy radius apr
-  urx ury mmx ury radius apr
-  llx ury llx mmy radius apr
-  llx lly mmx lly radius apr
-  mmx lly l
-  clp linewidth slw s
-} def
-end
-/$Ebnf2psBegin {$Ebnf2psDict begin /$Ebnf2psEnteredState save def} def
-/$Ebnf2psEnd {$Ebnf2psEnteredState restore end} def
-
-
-$Ebnf2psBegin
- 0 0 0 scol 0.30 slw
-n 8 11 m 2 -2 rl -2 -2 rl s
-n 0 9 m 10 0 rl s
-/Times-Roman findfont 10 scalefont setfont
- 0 43.17 m(Production) show
-n 231.66 11 m 2 -2 rl -2 -2 rl s
-n 228.66 9 m 5 0 rl s
- 210.66 0.50 18 17 1 RBox
-/Courier-Bold findfont 10 scalefont setfont
- 216.66 6.57 m(.) show
- 0.30 slw
-n 208.66 11 m 2 -2 rl -2 -2 rl s
-n 205.66 9 m 5 0 rl s
- 172 0.50 33.66 17 1 Box
-/Times-Roman findfont 10 scalefont setfont
- 178 6.17 m(Term) show
- 0.30 slw
-n 170 11 m 2 -2 rl -2 -2 rl s
-n 167 9 m 5 0 rl s
- 149 0.50 18 17 1 RBox
-/Courier-Bold findfont 10 scalefont setfont
- 155 6.57 m(=) show
- 0.30 slw
-n 147 11 m 2 -2 rl -2 -2 rl s
-n 144 9 m 5 0 rl s
-n 139 14 m 0 3.50 rl s
-n 82.55 14 m 0 3.50 rl s
-n 129 22.50 m 5 0 rl s
-n 139 17.50 m 139 22.50 134 22.50 5 apr
- 134 22.50 l s
-n 144 9 m 139 9 139 14 5 apr
- 139 14 l s
-n 87.55 22.50 m 5 0 rl s
-n 82.55 17.50 m 82.55 22.50 87.55 22.50 5 apr
- 87.55 22.50 l s
-n 77.55 9 m 82.55 9 82.55 14 5 apr
- 82.55 14 l s
-n 77.55 9 m 66.45 0 rl s
-n 90.55 24.50 m 2 -2 rl -2 -2 rl s
- 92.55 14 36.45 17 1 Box
-/Times-Roman findfont 10 scalefont setfont
- 98.55 19.67 m(String) show
- 0.30 slw
-n 75.55 11 m 2 -2 rl -2 -2 rl s
-n 72.55 9 m 5 0 rl s
- 10 0.50 62.55 17 1 Box
- 16 6.17 m(Nonterminal) show
-
-$Ebnf2psEnd
-%%EndDocument
- @endspecial 763 1167 a @beginspecial 0 @llx 0 @lly 73
-@urx 60 @ury 730 @rwi @setspecial
-%%BeginDocument: Term.eps
-/$Ebnf2psDict 100 dict def
-$Ebnf2psDict begin
-/l {lineto} bind def
-/m {moveto} bind def
-/rl {rlineto} bind def
-/rm {rmoveto} bind def
-/s {stroke} bind def
-/n {newpath} bind def
-/gs {gsave} bind def
-/gr {grestore} bind def
-/clp {closepath} bind def
-/slw {setlinewidth} bind def
-/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-4 -2 roll mul setrgbcolor} bind def
-/scol {3 {255 div 3 1 roll} repeat setrgbcolor} bind def
- /apr {arcto 4 {pop} repeat} def
-/Box {
-  /linewidth exch def
-  linewidth sub /height exch def
-  linewidth sub /width exch def
-   n m
-  width 0 rl
-  0 height rl
-  width neg 0 rl
-  0 height neg rl
-  clp linewidth slw s
-} def
- /RBox {
-  /linewidth exch def
-  /height exch def
-  /width exch def
-  /lly exch def
-  /llx exch def
-  linewidth 2 div dup llx add /llx exch def lly add /lly exch def
-  /height height linewidth sub def
-  /width  width  linewidth sub def
-  /height2 height 2 div def
-  /width2  width  2 div def
-  /urx llx width add def
-  /ury lly height add def
-  /mmx llx width2 add def
-  /mmy lly height2 add def
-  /radius width2 height2 ge {height2} {width2} ifelse def
-   n mmx lly m
-  urx lly urx mmy radius apr
-  urx ury mmx ury radius apr
-  llx ury llx mmy radius apr
-  llx lly mmx lly radius apr
-  mmx lly l
-  clp linewidth slw s
-} def
-end
-/$Ebnf2psBegin {$Ebnf2psDict begin /$Ebnf2psEnteredState save def} def
-/$Ebnf2psEnd {$Ebnf2psEnteredState restore end} def
-
-
-$Ebnf2psBegin
- 0 0 0 scol 0.30 slw
-n 8 11 m 2 -2 rl -2 -2 rl s
-n 0 9 m 10 0 rl s
-/Times-Roman findfont 10 scalefont setfont
- 0 51.67 m(Term) show
-n 70.55 11 m 2 -2 rl -2 -2 rl s
-n 67.55 9 m 5 0 rl s
-n 62.55 14 m 0 12 rl s
-n 15 14 m 0 12 rl s
-n 62.55 26 m 62.55 31 57.55 31 5 apr
- 57.55 31 l s
-n 57.55 9 m 62.55 9 62.55 14 5 apr
- 62.55 14 l s
-n 15 26 m 15 31 20 31 5 apr
- 20 31 l s
-n 20 9 m 15 9 15 14 5 apr
- 15 14 l s
-n 47.77 31 m 9.77 0 rl s
-n 20 31 m 9.77 0 rl s
-n 57.55 9 m 10 0 rl s
-n 10 9 m 10 0 rl s
-n 49.77 33 m -2 -2 rl 2 -2 rl s
- 29.77 22.50 18 17 1 RBox
-/Courier-Bold findfont 10 scalefont setfont
- 35.77 28.57 m(|) show
- 20 0.50 37.55 17 1 Box
-/Times-Roman findfont 10 scalefont setfont
- 26 6.17 m(Factor) show
-
-$Ebnf2psEnd
-%%EndDocument
- @endspecial 740 1351 a @beginspecial 0 @llx 0 @lly 84
-@urx 43 @ury 840 @rwi @setspecial
-%%BeginDocument: Factor.eps
-/$Ebnf2psDict 100 dict def
-$Ebnf2psDict begin
-/l {lineto} bind def
-/m {moveto} bind def
-/rl {rlineto} bind def
-/rm {rmoveto} bind def
-/s {stroke} bind def
-/n {newpath} bind def
-/gs {gsave} bind def
-/gr {grestore} bind def
-/clp {closepath} bind def
-/slw {setlinewidth} bind def
-/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-4 -2 roll mul setrgbcolor} bind def
-/scol {3 {255 div 3 1 roll} repeat setrgbcolor} bind def
- /apr {arcto 4 {pop} repeat} def
-/Box {
-  /linewidth exch def
-  linewidth sub /height exch def
-  linewidth sub /width exch def
-   n m
-  width 0 rl
-  0 height rl
-  width neg 0 rl
-  0 height neg rl
-  clp linewidth slw s
-} def
- /RBox {
-  /linewidth exch def
-  /height exch def
-  /width exch def
-  /lly exch def
-  /llx exch def
-  linewidth 2 div dup llx add /llx exch def lly add /lly exch def
-  /height height linewidth sub def
-  /width  width  linewidth sub def
-  /height2 height 2 div def
-  /width2  width  2 div def
-  /urx llx width add def
-  /ury lly height add def
-  /mmx llx width2 add def
-  /mmy lly height2 add def
-  /radius width2 height2 ge {height2} {width2} ifelse def
-   n mmx lly m
-  urx lly urx mmy radius apr
-  urx ury mmx ury radius apr
-  llx ury llx mmy radius apr
-  llx lly mmx lly radius apr
-  mmx lly l
-  clp linewidth slw s
-} def
-end
-/$Ebnf2psBegin {$Ebnf2psDict begin /$Ebnf2psEnteredState save def} def
-/$Ebnf2psEnd {$Ebnf2psEnteredState restore end} def
-
-
-$Ebnf2psBegin
- 0 0 0 scol 0.30 slw
-n 8 11 m 2 -2 rl -2 -2 rl s
-n 0 9 m 10 0 rl s
-/Times-Roman findfont 10 scalefont setfont
- 0 34.67 m(Factor) show
-n 81.67 11 m 2 -2 rl -2 -2 rl s
-n 78.67 9 m 5 0 rl s
-n 46.33 24.50 m -2 -2 rl 2 -2 rl s
-n 20 22.50 m 48.67 0 rl s
-n 73.67 14 m 0 3.50 rl s
-n 15 14 m 0 3.50 rl s
-n 73.67 17.50 m 73.67 22.50 68.67 22.50 5 apr
- 68.67 22.50 l s
-n 68.67 9 m 73.67 9 73.67 14 5 apr
- 73.67 14 l s
-n 15 17.50 m 15 22.50 20 22.50 5 apr
- 20 22.50 l s
-n 20 9 m 15 9 15 14 5 apr
- 15 14 l s
-n 68.67 9 m 10 0 rl s
-n 10 9 m 10 0 rl s
- 20 0.50 48.67 17 1 Box
- 26 6.17 m(ExtAtom) show
-
-$Ebnf2psEnd
-%%EndDocument
- @endspecial 638 1696 a @beginspecial 0 @llx 0 @lly 133
-@urx 82 @ury 1330 @rwi @setspecial
-%%BeginDocument: ExtAtom.eps
-/$Ebnf2psDict 100 dict def
-$Ebnf2psDict begin
-/l {lineto} bind def
-/m {moveto} bind def
-/rl {rlineto} bind def
-/rm {rmoveto} bind def
-/s {stroke} bind def
-/n {newpath} bind def
-/gs {gsave} bind def
-/gr {grestore} bind def
-/clp {closepath} bind def
-/slw {setlinewidth} bind def
-/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-4 -2 roll mul setrgbcolor} bind def
-/scol {3 {255 div 3 1 roll} repeat setrgbcolor} bind def
- /apr {arcto 4 {pop} repeat} def
-/Box {
-  /linewidth exch def
-  linewidth sub /height exch def
-  linewidth sub /width exch def
-   n m
-  width 0 rl
-  0 height rl
-  width neg 0 rl
-  0 height neg rl
-  clp linewidth slw s
-} def
- /RBox {
-  /linewidth exch def
-  /height exch def
-  /width exch def
-  /lly exch def
-  /llx exch def
-  linewidth 2 div dup llx add /llx exch def lly add /lly exch def
-  /height height linewidth sub def
-  /width  width  linewidth sub def
-  /height2 height 2 div def
-  /width2  width  2 div def
-  /urx llx width add def
-  /ury lly height add def
-  /mmx llx width2 add def
-  /mmy lly height2 add def
-  /radius width2 height2 ge {height2} {width2} ifelse def
-   n mmx lly m
-  urx lly urx mmy radius apr
-  urx ury mmx ury radius apr
-  llx ury llx mmy radius apr
-  llx lly mmx lly radius apr
-  mmx lly l
-  clp linewidth slw s
-} def
-end
-/$Ebnf2psBegin {$Ebnf2psDict begin /$Ebnf2psEnteredState save def} def
-/$Ebnf2psEnd {$Ebnf2psEnteredState restore end} def
-
-
-$Ebnf2psBegin
- 0 0 0 scol 0.30 slw
-n 8 33 m 2 -2 rl -2 -2 rl s
-n 0 31 m 10 0 rl s
-/Times-Roman findfont 10 scalefont setfont
- 0 73.67 m(ExtAtom) show
-n 130.56 33 m 2 -2 rl -2 -2 rl s
-n 127.56 31 m 5 0 rl s
-n 77.78 9 m 39.78 0 rl s
-n 117.56 31 m 0 0 rl s
-n 54.78 53 m 62.78 0 rl s
-n 117.56 31 m 5 0 rl s
-n 15 31 m 5 0 rl s
-n 122.56 14 m 0 34 rl s
-n 117.56 9 m 122.56 9 122.56 14 5 apr
- 122.56 14 l s
-n 122.56 48 m 122.56 53 117.56 53 5 apr
- 117.56 53 l s
-n 15 14 m 0 34 rl s
-n 20 9 m 15 9 15 14 5 apr
- 15 14 l s
-n 15 48 m 15 53 20 53 5 apr
- 20 53 l s
-n 122.56 31 m 5 0 rl s
-n 10 31 m 5 0 rl s
- 59.78 0.50 18 17 1 RBox
-/Courier-Bold findfont 10 scalefont setfont
- 65.78 6.57 m(+) show
- 0.30 slw
-n 57.78 11 m 2 -2 rl -2 -2 rl s
-n 54.78 9 m 5 0 rl s
- 20 0.50 34.78 17 1 Box
-/Times-Roman findfont 10 scalefont setfont
- 26 6.17 m(Atom) show
- 82.78 22.50 34.78 17 1 Box
- 88.78 28.17 m(Atom) show
- 0.30 slw
-n 80.78 33 m 2 -2 rl -2 -2 rl s
-n 77.78 31 m 5 0 rl s
- 59.78 22.50 18 17 1 RBox
-/Courier-Bold findfont 10 scalefont setfont
- 65.78 28.57 m(/) show
- 0.30 slw
-n 57.78 33 m 2 -2 rl -2 -2 rl s
-n 54.78 31 m 5 0 rl s
- 20 22.50 34.78 17 1 Box
-/Times-Roman findfont 10 scalefont setfont
- 26 28.17 m(Atom) show
- 20 44.50 34.78 17 1 Box
- 26 50.17 m(Atom) show
-
-$Ebnf2psEnd
-%%EndDocument
- @endspecial 675 2226 a @beginspecial 0 @llx 0 @lly 115
-@urx 126 @ury 1150 @rwi @setspecial
-%%BeginDocument: Atom.eps
-/$Ebnf2psDict 100 dict def
-$Ebnf2psDict begin
-/l {lineto} bind def
-/m {moveto} bind def
-/rl {rlineto} bind def
-/rm {rmoveto} bind def
-/s {stroke} bind def
-/n {newpath} bind def
-/gs {gsave} bind def
-/gr {grestore} bind def
-/clp {closepath} bind def
-/slw {setlinewidth} bind def
-/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-4 -2 roll mul setrgbcolor} bind def
-/scol {3 {255 div 3 1 roll} repeat setrgbcolor} bind def
- /apr {arcto 4 {pop} repeat} def
-/Box {
-  /linewidth exch def
-  linewidth sub /height exch def
-  linewidth sub /width exch def
-   n m
-  width 0 rl
-  0 height rl
-  width neg 0 rl
-  0 height neg rl
-  clp linewidth slw s
-} def
- /RBox {
-  /linewidth exch def
-  /height exch def
-  /width exch def
-  /lly exch def
-  /llx exch def
-  linewidth 2 div dup llx add /llx exch def lly add /lly exch def
-  /height height linewidth sub def
-  /width  width  linewidth sub def
-  /height2 height 2 div def
-  /width2  width  2 div def
-  /urx llx width add def
-  /ury lly height add def
-  /mmx llx width2 add def
-  /mmy lly height2 add def
-  /radius width2 height2 ge {height2} {width2} ifelse def
-   n mmx lly m
-  urx lly urx mmy radius apr
-  urx ury mmx ury radius apr
-  llx ury llx mmy radius apr
-  llx lly mmx lly radius apr
-  mmx lly l
-  clp linewidth slw s
-} def
-end
-/$Ebnf2psBegin {$Ebnf2psDict begin /$Ebnf2psEnteredState save def} def
-/$Ebnf2psEnd {$Ebnf2psEnteredState restore end} def
-
-
-$Ebnf2psBegin
- 0 0 0 scol 0.30 slw
-n 8 55 m 2 -2 rl -2 -2 rl s
-n 0 53 m 10 0 rl s
-/Times-Roman findfont 10 scalefont setfont
- 0 117.67 m(Atom) show
-n 112.66 55 m 2 -2 rl -2 -2 rl s
-n 109.66 53 m 5 0 rl s
-n 99.66 9 m 0 0 rl s
-n 99.66 31 m 0 0 rl s
-n 99.66 53 m 0 0 rl s
-n 56.45 75 m 43.21 0 rl s
-n 82.55 97 m 17.11 0 rl s
-n 99.66 31 m 5 0 rl s
-n 99.66 53 m 5 0 rl s
-n 99.66 75 m 5 0 rl s
-n 15 31 m 5 0 rl s
-n 15 53 m 5 0 rl s
-n 15 75 m 5 0 rl s
-n 104.66 14 m 0 78 rl s
-n 99.66 9 m 104.66 9 104.66 14 5 apr
- 104.66 14 l s
-n 104.66 92 m 104.66 97 99.66 97 5 apr
- 99.66 97 l s
-n 15 14 m 0 78 rl s
-n 20 9 m 15 9 15 14 5 apr
- 15 14 l s
-n 15 92 m 15 97 20 97 5 apr
- 20 97 l s
-n 104.66 53 m 5 0 rl s
-n 10 53 m 5 0 rl s
- 81.66 0.50 18 17 1 RBox
-/Courier-Bold findfont 10 scalefont setfont
- 87.66 6.57 m(}) show
- 0.30 slw
-n 79.66 11 m 2 -2 rl -2 -2 rl s
-n 76.66 9 m 5 0 rl s
- 43 0.50 33.66 17 1 Box
-/Times-Roman findfont 10 scalefont setfont
- 49 6.17 m(Term) show
- 0.30 slw
-n 41 11 m 2 -2 rl -2 -2 rl s
-n 38 9 m 5 0 rl s
- 20 0.50 18 17 1 RBox
-/Courier-Bold findfont 10 scalefont setfont
- 26 6.57 m({) show
- 81.66 22.50 18 17 1 RBox
- 87.66 28.57 m(]) show
- 0.30 slw
-n 79.66 33 m 2 -2 rl -2 -2 rl s
-n 76.66 31 m 5 0 rl s
- 43 22.50 33.66 17 1 Box
-/Times-Roman findfont 10 scalefont setfont
- 49 28.17 m(Term) show
- 0.30 slw
-n 41 33 m 2 -2 rl -2 -2 rl s
-n 38 31 m 5 0 rl s
- 20 22.50 18 17 1 RBox
-/Courier-Bold findfont 10 scalefont setfont
- 26 28.57 m([) show
- 81.66 44.50 18 17 1 RBox
- 87.66 50.57 m(\)) show
- 0.30 slw
-n 79.66 55 m 2 -2 rl -2 -2 rl s
-n 76.66 53 m 5 0 rl s
- 43 44.50 33.66 17 1 Box
-/Times-Roman findfont 10 scalefont setfont
- 49 50.17 m(Term) show
- 0.30 slw
-n 41 55 m 2 -2 rl -2 -2 rl s
-n 38 53 m 5 0 rl s
- 20 44.50 18 17 1 RBox
-/Courier-Bold findfont 10 scalefont setfont
- 26 50.57 m(\() show
- 20 66.50 36.45 17 1 Box
-/Times-Roman findfont 10 scalefont setfont
- 26 72.17 m(String) show
- 20 88.50 62.55 17 1 Box
- 26 94.17 m(Nonterminal) show
-
-$Ebnf2psEnd
-%%EndDocument
- @endspecial 644 2446 a @beginspecial 0 @llx 0 @lly 130
-@urx 52 @ury 1300 @rwi @setspecial
-%%BeginDocument: String.eps
-/$Ebnf2psDict 100 dict def
-$Ebnf2psDict begin
-/l {lineto} bind def
-/m {moveto} bind def
-/rl {rlineto} bind def
-/rm {rmoveto} bind def
-/s {stroke} bind def
-/n {newpath} bind def
-/gs {gsave} bind def
-/gr {grestore} bind def
-/clp {closepath} bind def
-/slw {setlinewidth} bind def
-/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-4 -2 roll mul setrgbcolor} bind def
-/scol {3 {255 div 3 1 roll} repeat setrgbcolor} bind def
- /apr {arcto 4 {pop} repeat} def
-/Box {
-  /linewidth exch def
-  linewidth sub /height exch def
-  linewidth sub /width exch def
-   n m
-  width 0 rl
-  0 height rl
-  width neg 0 rl
-  0 height neg rl
-  clp linewidth slw s
-} def
- /RBox {
-  /linewidth exch def
-  /height exch def
-  /width exch def
-  /lly exch def
-  /llx exch def
-  linewidth 2 div dup llx add /llx exch def lly add /lly exch def
-  /height height linewidth sub def
-  /width  width  linewidth sub def
-  /height2 height 2 div def
-  /width2  width  2 div def
-  /urx llx width add def
-  /ury lly height add def
-  /mmx llx width2 add def
-  /mmy lly height2 add def
-  /radius width2 height2 ge {height2} {width2} ifelse def
-   n mmx lly m
-  urx lly urx mmy radius apr
-  urx ury mmx ury radius apr
-  llx ury llx mmy radius apr
-  llx lly mmx lly radius apr
-  mmx lly l
-  clp linewidth slw s
-} def
-end
-/$Ebnf2psBegin {$Ebnf2psDict begin /$Ebnf2psEnteredState save def} def
-/$Ebnf2psEnd {$Ebnf2psEnteredState restore end} def
-
-
-$Ebnf2psBegin
- 0 0 0 scol 0.30 slw
-n 8 11 m 2 -2 rl -2 -2 rl s
-n 0 9 m 10 0 rl s
-/Times-Roman findfont 10 scalefont setfont
- 0 43.17 m(String) show
-n 127.64 11 m 2 -2 rl -2 -2 rl s
-n 124.64 9 m 5 0 rl s
- 106.64 0.50 18 17 1 RBox
-/Courier-Bold findfont 10 scalefont setfont
- 112.64 6.57 m(") show
- 0.30 slw
-n 104.64 11 m 2 -2 rl -2 -2 rl s
-n 101.64 9 m 5 0 rl s
-n 96.64 14 m 0 3.50 rl s
-n 38 14 m 0 3.50 rl s
-n 96.64 17.50 m 96.64 22.50 91.64 22.50 5 apr
- 91.64 22.50 l s
-n 91.64 9 m 96.64 9 96.64 14 5 apr
- 96.64 14 l s
-n 38 17.50 m 38 22.50 43 22.50 5 apr
- 43 22.50 l s
-n 43 9 m 38 9 38 14 5 apr
- 38 14 l s
-n 33 9 m 68.64 0 rl s
-n 93.64 24.50 m -2 -2 rl 2 -2 rl s
- 43 14 48.64 17 1 Box
-/Times-Roman findfont 10 scalefont setfont
- 49 19.67 m(character) show
- 0.30 slw
-n 31 11 m 2 -2 rl -2 -2 rl s
-n 28 9 m 5 0 rl s
- 10 0.50 18 17 1 RBox
-/Courier-Bold findfont 10 scalefont setfont
- 16 6.57 m(") show
-
-$Ebnf2psEnd
-%%EndDocument
- @endspecial 165 2520 a(These)h(diagrams)d(ha)o(v)o(e)i(b)q(een)h(pro)q
-(duced)g(with:)165 2595 y Fe(Ebnf2ps)20 b(-tFont)h(Courier-Bold)e
-(ebnf.BNF)h('.*')165 2709 y Fd(2.3)56 b(Syn)n(tax)18
-b(of)h(regular)g(expressions)165 2785 y Fg(The)13 b(regular)h
-(expressions)g(used)g(to)f(select)h(non)o(terminal)d(sym)o(b)q(ols)h
-(ha)o(v)o(e)h(the)g(follo)o(wing)e(syn-)165 2835 y(tax.)905
-2960 y(3)p eop
-%%Page: 4 4
-4 3 bop 165 195 a Fe(RAtom)86 b(=)22 b(character)e(|)h("\\\\")g
-(character)f(|)i(".")f(|)g("\\\\\(")g(Regexp)f("\\\\\)")h(.)165
-245 y(RExtAtom)f(=)i(RAtom)e(["*")h(|)h("+")f(|)h("?"])f(.)165
-295 y(RFactor)42 b(=)22 b(RExtAtom)e(+)h(.)165 345 y(Regexp)64
-b(=)22 b(Factor)e(/)i("\\\\|")e(["$"].)165 428 y Fg(W)m(ell,)12
-b(graphically)m(,)g(that)h(is:)632 906 y @beginspecial
-0 @llx 0 @lly 136 @urx 104 @ury 1360 @rwi @setspecial
-%%BeginDocument: RAtom.eps
-/$Ebnf2psDict 100 dict def
-$Ebnf2psDict begin
-/l {lineto} bind def
-/m {moveto} bind def
-/rl {rlineto} bind def
-/rm {rmoveto} bind def
-/s {stroke} bind def
-/n {newpath} bind def
-/gs {gsave} bind def
-/gr {grestore} bind def
-/clp {closepath} bind def
-/slw {setlinewidth} bind def
-/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-4 -2 roll mul setrgbcolor} bind def
-/scol {3 {255 div 3 1 roll} repeat setrgbcolor} bind def
- /apr {arcto 4 {pop} repeat} def
-/Box {
-  /linewidth exch def
-  linewidth sub /height exch def
-  linewidth sub /width exch def
-   n m
-  width 0 rl
-  0 height rl
-  width neg 0 rl
-  0 height neg rl
-  clp linewidth slw s
-} def
- /RBox {
-  /linewidth exch def
-  /height exch def
-  /width exch def
-  /lly exch def
-  /llx exch def
-  linewidth 2 div dup llx add /llx exch def lly add /lly exch def
-  /height height linewidth sub def
-  /width  width  linewidth sub def
-  /height2 height 2 div def
-  /width2  width  2 div def
-  /urx llx width add def
-  /ury lly height add def
-  /mmx llx width2 add def
-  /mmy lly height2 add def
-  /radius width2 height2 ge {height2} {width2} ifelse def
-   n mmx lly m
-  urx lly urx mmy radius apr
-  urx ury mmx ury radius apr
-  llx ury llx mmy radius apr
-  llx lly mmx lly radius apr
-  mmx lly l
-  clp linewidth slw s
-} def
-end
-/$Ebnf2psBegin {$Ebnf2psDict begin /$Ebnf2psEnteredState save def} def
-/$Ebnf2psEnd {$Ebnf2psEnteredState restore end} def
-
-
-$Ebnf2psBegin
- 0 0 0 scol 0.30 slw
-n 8 44 m 2 -2 rl -2 -2 rl s
-n 0 42 m 10 0 rl s
-/Times-Roman findfont 10 scalefont setfont
- 0 95.67 m(RAtom) show
-n 133.55 44 m 2 -2 rl -2 -2 rl s
-n 130.55 42 m 5 0 rl s
-n 120.55 9 m 0 0 rl s
-n 38 31 m 82.55 0 rl s
-n 91.64 53 m 28.91 0 rl s
-n 68.64 75 m 51.91 0 rl s
-n 120.55 31 m 5 0 rl s
-n 120.55 53 m 5 0 rl s
-n 15 31 m 5 0 rl s
-n 15 53 m 5 0 rl s
-n 125.55 14 m 0 56 rl s
-n 120.55 9 m 125.55 9 125.55 14 5 apr
- 125.55 14 l s
-n 125.55 70 m 125.55 75 120.55 75 5 apr
- 120.55 75 l s
-n 15 14 m 0 56 rl s
-n 20 9 m 15 9 15 14 5 apr
- 15 14 l s
-n 15 70 m 15 75 20 75 5 apr
- 20 75 l s
-n 125.55 42 m 5 0 rl s
-n 10 42 m 5 0 rl s
- 96.55 0.50 24 17 1 RBox
-/Courier-Bold findfont 10 scalefont setfont
- 102.55 6.57 m(\\\)) show
- 0.30 slw
-n 94.55 11 m 2 -2 rl -2 -2 rl s
-n 91.55 9 m 5 0 rl s
- 49 0.50 42.55 17 1 Box
-/Times-Roman findfont 10 scalefont setfont
- 55 6.17 m(Regexp) show
- 0.30 slw
-n 47 11 m 2 -2 rl -2 -2 rl s
-n 44 9 m 5 0 rl s
- 20 0.50 24 17 1 RBox
-/Courier-Bold findfont 10 scalefont setfont
- 26 6.57 m(\\\() show
- 20 22.50 18 17 1 RBox
- 26 28.57 m(.) show
- 43 44.50 48.64 17 1 Box
-/Times-Roman findfont 10 scalefont setfont
- 49 50.17 m(character) show
- 0.30 slw
-n 41 55 m 2 -2 rl -2 -2 rl s
-n 38 53 m 5 0 rl s
- 20 44.50 18 17 1 RBox
-/Courier-Bold findfont 10 scalefont setfont
- 26 50.57 m(\\) show
- 20 66.50 48.64 17 1 Box
-/Times-Roman findfont 10 scalefont setfont
- 26 72.17 m(character) show
-
-$Ebnf2psEnd
-%%EndDocument
- @endspecial 644 1310 a @beginspecial 0 @llx 0 @lly 130
-@urx 96 @ury 1300 @rwi @setspecial
-%%BeginDocument: RExtAtom.eps
-/$Ebnf2psDict 100 dict def
-$Ebnf2psDict begin
-/l {lineto} bind def
-/m {moveto} bind def
-/rl {rlineto} bind def
-/rm {rmoveto} bind def
-/s {stroke} bind def
-/n {newpath} bind def
-/gs {gsave} bind def
-/gr {grestore} bind def
-/clp {closepath} bind def
-/slw {setlinewidth} bind def
-/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-4 -2 roll mul setrgbcolor} bind def
-/scol {3 {255 div 3 1 roll} repeat setrgbcolor} bind def
- /apr {arcto 4 {pop} repeat} def
-/Box {
-  /linewidth exch def
-  linewidth sub /height exch def
-  linewidth sub /width exch def
-   n m
-  width 0 rl
-  0 height rl
-  width neg 0 rl
-  0 height neg rl
-  clp linewidth slw s
-} def
- /RBox {
-  /linewidth exch def
-  /height exch def
-  /width exch def
-  /lly exch def
-  /llx exch def
-  linewidth 2 div dup llx add /llx exch def lly add /lly exch def
-  /height height linewidth sub def
-  /width  width  linewidth sub def
-  /height2 height 2 div def
-  /width2  width  2 div def
-  /urx llx width add def
-  /ury lly height add def
-  /mmx llx width2 add def
-  /mmy lly height2 add def
-  /radius width2 height2 ge {height2} {width2} ifelse def
-   n mmx lly m
-  urx lly urx mmy radius apr
-  urx ury mmx ury radius apr
-  llx ury llx mmy radius apr
-  llx lly mmx lly radius apr
-  mmx lly l
-  clp linewidth slw s
-} def
-end
-/$Ebnf2psBegin {$Ebnf2psDict begin /$Ebnf2psEnteredState save def} def
-/$Ebnf2psEnd {$Ebnf2psEnteredState restore end} def
-
-
-$Ebnf2psBegin
- 0 0 0 scol 0.30 slw
-n 8 11 m 2 -2 rl -2 -2 rl s
-n 0 9 m 10 0 rl s
-/Times-Roman findfont 10 scalefont setfont
- 0 87.17 m(RExtAtom) show
-n 127.45 11 m 2 -2 rl -2 -2 rl s
-n 124.45 9 m 5 0 rl s
-n 119.45 14 m 0 25.50 rl s
-n 61.45 14 m 0 25.50 rl s
-n 109.45 44.50 m 5 0 rl s
-n 119.45 39.50 m 119.45 44.50 114.45 44.50 5 apr
- 114.45 44.50 l s
-n 124.45 9 m 119.45 9 119.45 14 5 apr
- 119.45 14 l s
-n 66.45 44.50 m 5 0 rl s
-n 61.45 39.50 m 61.45 44.50 66.45 44.50 5 apr
- 66.45 44.50 l s
-n 56.45 9 m 61.45 9 61.45 14 5 apr
- 61.45 14 l s
-n 56.45 9 m 68 0 rl s
-n 69.45 46.50 m 2 -2 rl -2 -2 rl s
-n 99.45 22.50 m 0 0 rl s
-n 99.45 44.50 m 0 0 rl s
-n 99.45 66.50 m 0 0 rl s
-n 99.45 44.50 m 5 0 rl s
-n 76.45 44.50 m 5 0 rl s
-n 104.45 27.50 m 0 34 rl s
-n 99.45 22.50 m 104.45 22.50 104.45 27.50 5 apr
- 104.45 27.50 l s
-n 104.45 61.50 m 104.45 66.50 99.45 66.50 5 apr
- 99.45 66.50 l s
-n 76.45 27.50 m 0 34 rl s
-n 81.45 22.50 m 76.45 22.50 76.45 27.50 5 apr
- 76.45 27.50 l s
-n 76.45 61.50 m 76.45 66.50 81.45 66.50 5 apr
- 81.45 66.50 l s
-n 104.45 44.50 m 5 0 rl s
-n 71.45 44.50 m 5 0 rl s
- 81.45 14 18 17 1 RBox
-/Courier-Bold findfont 10 scalefont setfont
- 87.45 20.07 m(?) show
- 81.45 36 18 17 1 RBox
- 87.45 42.07 m(+) show
- 81.45 58 18 17 1 RBox
- 87.45 64.07 m(*) show
- 0.30 slw
-n 54.45 11 m 2 -2 rl -2 -2 rl s
-n 51.45 9 m 5 0 rl s
- 10 0.50 41.45 17 1 Box
-/Times-Roman findfont 10 scalefont setfont
- 16 6.17 m(RAtom) show
-
-$Ebnf2psEnd
-%%EndDocument
- @endspecial 725 1494 a @beginspecial 0 @llx 0 @lly 91
-@urx 43 @ury 910 @rwi @setspecial
-%%BeginDocument: RFactor.eps
-/$Ebnf2psDict 100 dict def
-$Ebnf2psDict begin
-/l {lineto} bind def
-/m {moveto} bind def
-/rl {rlineto} bind def
-/rm {rmoveto} bind def
-/s {stroke} bind def
-/n {newpath} bind def
-/gs {gsave} bind def
-/gr {grestore} bind def
-/clp {closepath} bind def
-/slw {setlinewidth} bind def
-/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-4 -2 roll mul setrgbcolor} bind def
-/scol {3 {255 div 3 1 roll} repeat setrgbcolor} bind def
- /apr {arcto 4 {pop} repeat} def
-/Box {
-  /linewidth exch def
-  linewidth sub /height exch def
-  linewidth sub /width exch def
-   n m
-  width 0 rl
-  0 height rl
-  width neg 0 rl
-  0 height neg rl
-  clp linewidth slw s
-} def
- /RBox {
-  /linewidth exch def
-  /height exch def
-  /width exch def
-  /lly exch def
-  /llx exch def
-  linewidth 2 div dup llx add /llx exch def lly add /lly exch def
-  /height height linewidth sub def
-  /width  width  linewidth sub def
-  /height2 height 2 div def
-  /width2  width  2 div def
-  /urx llx width add def
-  /ury lly height add def
-  /mmx llx width2 add def
-  /mmy lly height2 add def
-  /radius width2 height2 ge {height2} {width2} ifelse def
-   n mmx lly m
-  urx lly urx mmy radius apr
-  urx ury mmx ury radius apr
-  llx ury llx mmy radius apr
-  llx lly mmx lly radius apr
-  mmx lly l
-  clp linewidth slw s
-} def
-end
-/$Ebnf2psBegin {$Ebnf2psDict begin /$Ebnf2psEnteredState save def} def
-/$Ebnf2psEnd {$Ebnf2psEnteredState restore end} def
-
-
-$Ebnf2psBegin
- 0 0 0 scol 0.30 slw
-n 8 11 m 2 -2 rl -2 -2 rl s
-n 0 9 m 10 0 rl s
-/Times-Roman findfont 10 scalefont setfont
- 0 34.67 m(RFactor) show
-n 88.34 11 m 2 -2 rl -2 -2 rl s
-n 85.34 9 m 5 0 rl s
-n 49.67 24.50 m -2 -2 rl 2 -2 rl s
-n 20 22.50 m 55.34 0 rl s
-n 80.34 14 m 0 3.50 rl s
-n 15 14 m 0 3.50 rl s
-n 80.34 17.50 m 80.34 22.50 75.34 22.50 5 apr
- 75.34 22.50 l s
-n 75.34 9 m 80.34 9 80.34 14 5 apr
- 80.34 14 l s
-n 15 17.50 m 15 22.50 20 22.50 5 apr
- 20 22.50 l s
-n 20 9 m 15 9 15 14 5 apr
- 15 14 l s
-n 75.34 9 m 10 0 rl s
-n 10 9 m 10 0 rl s
- 20 0.50 55.34 17 1 Box
- 26 6.17 m(RExtAtom) show
-
-$Ebnf2psEnd
-%%EndDocument
- @endspecial 653 1748 a @beginspecial 0 @llx 0 @lly 126
-@urx 60 @ury 1260 @rwi @setspecial
-%%BeginDocument: Regexp.eps
-/$Ebnf2psDict 100 dict def
-$Ebnf2psDict begin
-/l {lineto} bind def
-/m {moveto} bind def
-/rl {rlineto} bind def
-/rm {rmoveto} bind def
-/s {stroke} bind def
-/n {newpath} bind def
-/gs {gsave} bind def
-/gr {grestore} bind def
-/clp {closepath} bind def
-/slw {setlinewidth} bind def
-/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-4 -2 roll mul setrgbcolor} bind def
-/scol {3 {255 div 3 1 roll} repeat setrgbcolor} bind def
- /apr {arcto 4 {pop} repeat} def
-/Box {
-  /linewidth exch def
-  linewidth sub /height exch def
-  linewidth sub /width exch def
-   n m
-  width 0 rl
-  0 height rl
-  width neg 0 rl
-  0 height neg rl
-  clp linewidth slw s
-} def
- /RBox {
-  /linewidth exch def
-  /height exch def
-  /width exch def
-  /lly exch def
-  /llx exch def
-  linewidth 2 div dup llx add /llx exch def lly add /lly exch def
-  /height height linewidth sub def
-  /width  width  linewidth sub def
-  /height2 height 2 div def
-  /width2  width  2 div def
-  /urx llx width add def
-  /ury lly height add def
-  /mmx llx width2 add def
-  /mmy lly height2 add def
-  /radius width2 height2 ge {height2} {width2} ifelse def
-   n mmx lly m
-  urx lly urx mmy radius apr
-  urx ury mmx ury radius apr
-  llx ury llx mmy radius apr
-  llx lly mmx lly radius apr
-  mmx lly l
-  clp linewidth slw s
-} def
-end
-/$Ebnf2psBegin {$Ebnf2psDict begin /$Ebnf2psEnteredState save def} def
-/$Ebnf2psEnd {$Ebnf2psEnteredState restore end} def
-
-
-$Ebnf2psBegin
- 0 0 0 scol 0.30 slw
-n 8 11 m 2 -2 rl -2 -2 rl s
-n 0 9 m 10 0 rl s
-/Times-Roman findfont 10 scalefont setfont
- 0 51.67 m(Regexp) show
-n 123.55 11 m 2 -2 rl -2 -2 rl s
-n 120.55 9 m 5 0 rl s
-n 115.55 14 m 0 3.50 rl s
-n 77.55 14 m 0 3.50 rl s
-n 105.55 22.50 m 5 0 rl s
-n 115.55 17.50 m 115.55 22.50 110.55 22.50 5 apr
- 110.55 22.50 l s
-n 120.55 9 m 115.55 9 115.55 14 5 apr
- 115.55 14 l s
-n 82.55 22.50 m 5 0 rl s
-n 77.55 17.50 m 77.55 22.50 82.55 22.50 5 apr
- 82.55 22.50 l s
-n 72.55 9 m 77.55 9 77.55 14 5 apr
- 77.55 14 l s
-n 72.55 9 m 48 0 rl s
-n 85.55 24.50 m 2 -2 rl -2 -2 rl s
- 87.55 14 18 17 1 RBox
-/Courier-Bold findfont 10 scalefont setfont
- 93.55 20.07 m($) show
- 0.30 slw
-n 70.55 11 m 2 -2 rl -2 -2 rl s
-n 67.55 9 m 5 0 rl s
-n 62.55 14 m 0 12 rl s
-n 15 14 m 0 12 rl s
-n 62.55 26 m 62.55 31 57.55 31 5 apr
- 57.55 31 l s
-n 57.55 9 m 62.55 9 62.55 14 5 apr
- 62.55 14 l s
-n 15 26 m 15 31 20 31 5 apr
- 20 31 l s
-n 20 9 m 15 9 15 14 5 apr
- 15 14 l s
-n 50.77 31 m 6.77 0 rl s
-n 20 31 m 6.77 0 rl s
-n 57.55 9 m 10 0 rl s
-n 10 9 m 10 0 rl s
-n 52.77 33 m -2 -2 rl 2 -2 rl s
- 26.77 22.50 24 17 1 RBox
- 32.77 28.57 m(\\|) show
- 20 0.50 37.55 17 1 Box
-/Times-Roman findfont 10 scalefont setfont
- 26 6.17 m(Factor) show
-
-$Ebnf2psEnd
-%%EndDocument
- @endspecial 165 1864 a Fd(2.4)56 b(En)n(vironmen)n(t)18
-b(v)m(ariables)165 1941 y Fg(The)g(format)e(of)h(searc)o(h)i(pathes)g
-(is)e(a)h(colon)f(separated)i(list)e(of)g(directories.)31
-b(The)18 b(default)165 1991 y(path)e(is)f(inserted)i(in)e(place)h(of)f
-(an)g(empt)o(y)f(directory)j(in)e(the)h(list.)23 b(An)o(y)15
-b(\034le)h(name)e(starting)165 2040 y(with)f(a)h Fe(/)f
-Fg(is)g(tak)o(en)h(as)g(an)f(absolute)h(name)e(and)i(an)o(y)f(\034le)h
-(name)e(starting)i(with)f(a)g Fe(.)18 b Fg(is)c(tak)o(en)165
-2090 y(relativ)o(e)g(to)f(the)i(curren)o(t)g(w)o(orking)e(directory)m
-(.)165 2181 y Fc(AFMP)l(A)l(TH)21 b Fg(P)o(ath)14 b(to)g(searc)o(h)h
-(for)f(Adob)q(e)g(fon)o(t)f(metric)h(\034les.)165 2265
-y Fc(EBNFINPUTS)21 b Fg(P)o(ath)14 b(to)g(searc)o(h)h(for)e(input)h
-(\034les.)165 2348 y Fc(R)o(GBP)l(A)l(TH)20 b Fg(P)o(ath)14
-b(to)g(searc)o(h)h(for)e(the)i(color)e(de\034nitions.)165
-2485 y Ff(3)67 b(Ho)n(w)21 b(to)h(c)n(hange)g(it)165
-2576 y Fg(In)16 b(order)g(to)g(add)f(new)h(options)g(to)f(the)i
-(program)d(y)o(ou)h(will)f(need)j(a)e(mo)q(di\034ed)g(cop)o(y)g(of)g
-(the)165 2626 y(program)f Fe(Mkhprog)g Fg(written)i(b)o(y)f(Nic)o(k)g
-(North)h(\()p Fe(ndn@seg.npl.co.u)o(k)p Fg(\))d(whic)o(h)i(is)g(a)o(v)n
-(ailable)165 2675 y(from)d(URL)165 2758 y Fe(http://www-pu.inf)o(ormat)
-o(ik.u)o(ni-tu)o(ebing)o(en.de)o(/~th)o(ieman)o(n/has)o(kell)o(/ebnf)o
-(2ps/)905 2960 y Fg(4)p eop
-%%Trailer
-end
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/real/ebnf2ps/doc.tex b/real/ebnf2ps/doc.tex
deleted file mode 100644 (file)
index 06b23f0..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-\documentclass[a4paper]{article}
-
-\usepackage{a4}
-\usepackage{iso8859-1}
-\usepackage{epsfig}
-
-\begin{document}
-\title{Ebnf2ps --- Automatic Railroad Diagram Drawing}
-\author{
-  Peter Thiemann\\
-  Wilhelm-Schickard-Institut, Universität Tübingen\\
-  Sand 13, 72076 Tübingen\\
-  E-mail: \texttt{thiemann@informatik.uni-tuebingen.de} \\
-  \copyright 1994, Peter Thiemann}
-\maketitle
-
-Ebnf2ps  was written to fill an urgent need of the author: to produce lots of
-syntax diagrams (railroad diagrams) from a grammar in EBNF notation in short
-time. Over the time the program has attracted a couple of features in order to
-fulfill a variety of requirements.
-
-The program may be freely used and distributed, you are however required not to
-remove the copyright notices from the source files. Please send any comments,
-bugs, etc.\ to the author.
-
-\section{How to build it}
-
-\begin{enumerate}
-\item  Edit the Makefile to reflect your Haskell compiler, for example
-\begin{verbatim}
-        HC= hbc
-\end{verbatim}
-\item Find out where your TeX installation stores \texttt{.afm}-files (Adobe font
-  metric files) and change the variable \texttt{afmPathDefault} in
-  \texttt{Ebnf2ps.hs} accordingly. Alternatively, you can set the environment
-  variable \texttt{AFMPATH} when running the program.
-  These files are absolutely necessary. If you don't find them complain to
-  your system administrator or get    them yourself from
-  \texttt{ftp://ftp.adobe.com/pub/adobe/AFMFiles/}.
-\item 
-  Change the variable \texttt{rgbPathDefault} to contain the directory where
-  your X installation stores its color data base (usually
-  \texttt{/usr/lib/X11/rgb.txt}). This can also be corrected later with the
-  environment variable \texttt{RGBPATH}.
-  There are fallback color definitions for the 8 digital colors
-  (black, white, blue, green, cyan, reg, magenta, yellow, white), so 
-  nothing needs be done if that's enough for you.
-\item 
-  Typing \texttt{make} should produce an executable file named \texttt{Ebnf2ps}.
-\end{enumerate}
-
-
-\section{How to use it}
-
-The syntax is
-\begin{verbatim}
-Ebnf2ps [options] BNFfile Nonterminal ...
-\end{verbatim}
-where the \texttt{options} are described in Sec.~\ref{sec:options}, the syntax
-of the input file \texttt{BNFfile} in Sec.~\ref{sec:syntax}, and
-\texttt{Nonterminal} describes the nonterminals, for which diagrams are to be
-generated, as regular expressions (see Sec.~\ref{sec:regular}).
-
-
-\subsection{Options}
-\label{sec:options}
-
-The following list shows all \textbf{options} with their \emph{parameters} and their
-(default values). All distances and sizes measured in 1/100 point (1 point is
-about 1/72 inch).
-\begin{description}
-\item[-ntFont \emph{font}] (Times-Roman) PostScript font used for nonterminals, any font goes
-  here that your printer knows and for which you have fetched the AFM
-  files. 
-\item[-ntScale        \emph{int}] (10) Pointsize of typeface for
-  nonterminals. 
-\item[-ntColor      \emph{color}] (black) Color of typeface for nonterminals. 
-\item[-tFont         \emph{font}] (Times-Roman) PostScript font used for
-  terminal strings. 
-\item[-tScale         \emph{int}] (10) Pointsize of typeface for terminals.
-\item[-tColor       \emph{color}] (black) Color of typeface for terminals.
-\item[-borderDistX    \emph{int}] (500) Horizontal distance of objects from
-  their container.
-\item[-borderDistY    \emph{int}] (500) Vertical distance of objects from their
-  container. 
-\item[-lineWidth      \emph{int}] (30) Width of lines used for connecting lines.
-\item[-fatLineWidth   \emph{int}] (100) Width of lines used for drawing boxes.
-\item[-lineColor    \emph{color}] (black) Color used for connecting lines.
-\item[-fatLineColor \emph{color}] (black) Color used for outlines of boxes.
-\item[-arrowSize      \emph{int}] (200) Size of (invisible) box containing an arrow.
-\item[-rgbFileName    \emph{int}] (rgb.txt) File name for color definitions.
-\item[-happy]                Accept happy format input files. Default: accept
-  EBNF syntax as described below. 
-\item[+ps]                   Produce encapulated PostScript output (default).
-\item[+fig]                  Produce fig output (FORMAT 2.1).
-\item[+simplify]             Simplify productions (experimental, default: don't).
-\item[-verbose]              Prints some progress messages.
-\item[-help]                 Prints a brief description of the command line,
-  the options, and the environment variables.
-\end{description}
-
-\subsection{Syntax of the input file}
-\label{sec:syntax}
-
-\begin{verbatim}
-File            = {Production}.
-Production      = Nonterminal [ String ] "=" Term "." .
-Term            = Factor / "|" .                # alternative
-Factor          = ExtAtom + .                   # sequence
-ExtAtom         = Atom
-                | Atom "/" Atom                 # repetion through Atom
-                | Atom "+".                     # at least one repetion
-Atom            = Nonterminal
-                | String                        # terminal string
-                | "(" Term ")"
-                | "[" Term "]"                  # an optional Term
-                | "{" Term "}"                  # zero or more repetions
-                .
-String          = "\"" { character } "\"" .
-Nonterminal     = letter { letter | digit | "_" } .
-character       = "\\" charesc.
-\end{verbatim}
-Or in terms of diagrams (what would you expect):
-\begin{center}
-  \leavevmode\epsfbox{File.eps}
-  \\
-  \leavevmode\epsfbox{Production.eps}
-  \\
-  \leavevmode\epsfbox{Term.eps}
-  \\
-  \leavevmode\epsfbox{Factor.eps}
-  \\
-  \leavevmode\epsfbox{ExtAtom.eps}
-  \\
-  \leavevmode\epsfbox{Atom.eps}
-  \\
-  \leavevmode\epsfbox{String.eps}
-\end{center}
-These diagrams have been produced with:
-\begin{verbatim}
-Ebnf2ps -tFont Courier-Bold ebnf.BNF '.*'
-\end{verbatim}
-
-\subsection{Syntax of regular expressions}
-\label{sec:regular}
-
-The regular expressions used to select nonterminal symbols have the following
-syntax.
-\begin{verbatim}
-RAtom    = character | "\\" character | "." | "\\(" Regexp "\\)" .
-RExtAtom = RAtom ["*" | "+" | "?"] .
-RFactor  = RExtAtom + .
-Regexp   = Factor / "\\|" ["$"].
-\end{verbatim}
-Well, graphically, that is:
-\begin{center}
-  \leavevmode\epsfbox{RAtom.eps}
-  \\
-  \leavevmode\epsfbox{RExtAtom.eps}
-  \\
-  \leavevmode\epsfbox{RFactor.eps}
-  \\
-  \leavevmode\epsfbox{Regexp.eps}
-\end{center}
-
-\subsection{Environment variables}
-
-The format of search pathes is a colon separated list of directories. The
-default path is inserted in place of an empty directory in the list. Any file
-name starting with a \texttt{/} is taken as an absolute name and any file name
-starting with a \texttt{.} is taken relative to the current working directory.
-
-\begin{description}
-\item[AFMPATH] Path to search for Adobe font metric files. 
-\item[EBNFINPUTS] Path to search for input files.
-\item[RGBPATH] Path to search for the color definitions.
-\end{description}
-
-
-
-\section{How to change it}
-
-In order to add new options to the program you will need a modified copy of the
-program \texttt{Mkhprog} written by Nick North (\texttt{ndn@seg.npl.co.uk})
-which is available from URL 
-\begin{verbatim}
-http://www-pu.informatik.uni-tuebingen.de/~thiemann/haskell/ebnf2ps/
-\end{verbatim}
-
-
-\end{document}
-
diff --git a/real/ebnf2ps/ebnf.BNF b/real/ebnf2ps/ebnf.BNF
deleted file mode 100644 (file)
index 3d81de0..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-File           = {Production}.
-Production     = Nonterminal [ String ] "=" Term "." .
-Term           = Factor / "|" .                # alternative
-Factor         = ExtAtom + .                   # sequence
-ExtAtom                = Atom
-               | Atom "/" Atom                 # repetion through Atom
-               | Atom "+".                     # at least one repetion
-Atom           = Nonterminal
-               | String                        # terminal string
-               | "(" Term ")"
-               | "[" Term "]"                  # an optional Term
-               | "{" Term "}"                  # zero or more repetions
-               .
-String         = "\"" { character } "\"" .
-Nonterminal    = letter { letter | digit | "_" } .
-character      = "\\" charesc.
diff --git a/real/ebnf2ps/ebnf2ps.stdin b/real/ebnf2ps/ebnf2ps.stdin
deleted file mode 100644 (file)
index 68ac8f0..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-#APPENDIX A: SUMMARY OF GRAMMAR
-#
-#This section gives a summary of the grammar for the  language  used  by
-#Gofer.  The non-terminals <interp> and <module> describe the syntax  of
-#expressions that can be entered into the Gofer interpreter and that  of
-#files of definitions that can be loaded into Gofer respectively.
-#
-#The following notational conventions are used in the Grammar  which  is
-#specified using a variant of BNF:
-#
-#  o <angle brackets> are used to distinguish names of nonterminals from
-#    keywords.
-#
-#  o vertical | bars  are used to separate alternatives.
-#
-#  o {braces} enclose items which may be repeated zero or more times.
-#
-#  o [brackets] are used for optional items.
-#
-#  o (parentheses) are used for grouping.
-#
-#  o "quotes" surround characters which might otherwise be confused with
-#    the notations introduced above.
-#
-#The following terminal symbols are used but not defined by the grammar:
-#
-#  varid    identifier beginning with lower case letter as described in
-#           section 6.
-#  conid    like varid, but beginning with upper case letter.
-#  varsym    operator symbol not beginning with a colon, as described in
-#           section 6.
-#  consym    constructor function operator, like varsym, but beginning
-#           with a colon character.
-#  integer  integer constant, as described in section 7.3.
-#  float    floating point constant, as described in section 7.4.
-#  char     character constant, as described in section 7.5.
-#  string   string constant, as described in section 7.7.
-#
-#
-#Top-level grammar
-#-----------------
-#
-    module   = ( "{" topdecls "}"             #  module
-#
-               ).
-    interp   = ( exp [whereClause]                #  top-level expression
-#
-               ).
-    topdecls = ( topdecls ";" topdecls         #  multiple declarations
-                |  dataDecl
-                |  typeDecl
-                |  infixDecl
-                |  primDecl
-                |  class                        #  class declaration
-                |  inst                         #  instance declaration
-                |  decls                        #  value declarations
-#
-               ).
-dataDecl       = ("data" conid {varid} "=" (constr)/"|"     #  datatype declaration
-               ).
-typeDecl       = ("type" conid {varid} "=" type        #  synonym declaration
-               ).
-infixDecl      = (( "infixl" | "infixr" | "infix")
-                        [digit] (op)/","  #  fixity declarations
-               ).
-#    simple  = ( conid {varid}                  #  type declaration lhs
-#              ).
-#
-    constrs  = ( constrs "|" constrs        #  multiple constructors
-                |  type consym type            #  infix constructor
-                |  conid {type}                 #  constructor, n>=0
-               ).
-     constr  =   type consym type            #  infix constructor
-                |  conid {type}                 #  constructor, n>=0
-               .
-#
-primDecl       = ("primitive" prims "::" type    #  primitive bindings
-               ).
-    prims    = 
-                 (var string)/","                 #  primitive binding
-               .
-#
-#Type expressions
-#----------------
-#
-    sigType  = ( [context "=>" ] type         #  [qualified] type
-#
-               ).
-    context  = ( "(" [(pred)/ "," ] ")"    #  general form
-                |  pred                         #  singleton context
-               ).
-    pred     = ( conid (type)+           #  predicate
-#
-               ).
-    type     = ( ctype [ "->" type ]          #  function type
-               ).
-    ctype    = ( conid {atype}                #  datatype or synonym
-                |  atype
-               ).
-    atype    = ( varid                          #  type variable
-                |  "(" ")"                        #  unit type
-                |  "(" type ")"                 #  parenthesised type
-                |  "(" type "," (type)/"," ")"#  tuple type
-                |  "[" type "]"                 #  list type
-#
-#Class and instance declarations
-#-------------------------------
-#
-               ).
-    class    = ( "class" [context "=>"] pred [cbody]
-               ).
-    cbody    = ( "where" "{" cdecls "}"         #  class body
-               ).
-    cdecls   = ( cdecls ";" cdecls             #  multiple declarations
-                |  (var)/ ","  "::" type      #  member functions
-                |  fun rhs [whereClause]          #  default bindings
-#
-               ).
-    inst     = ( "instance" [context "=>"] pred [ibody]
-               ).
-    ibody    = ( "where" "{" idecls "}"         #  instance body
-               ).
-    idecls   = ( idecls ";" idecls             #  multiple declarations
-                |  fun rhs [whereClause]          #  member definition
-#
-#Value declarations
-#------------------
-#
-               ).
-    decls  = ( decls ";" decls                 #multiple declarations
-              |  (var)/"," "::" sigType     #type declaration
-              |  fun rhs [whereClause]            #function binding
-              |  lhsPat rhs [whereClause]            #pattern binding, PJT: was pat
-#
-               ).
-    rhs    = ( "=" exp                          #simple right hand side
-              |  (gdRhs)+                #guarded right hand sides
-#
-               ).
-    gdRhs  = ( "|" exp "=" exp                #guarded right hand side
-#
-               ).
-    whereClause  = ( "where" "{" decls "}"            #local definitions
-#
-               ).
-    fun    = ( var                            #function of arity 0
-              |  pat varop pat              #infix operator
-              |  "(" pat varop ")"            #section-like notation
-              |  "(" varop pat ")"
-              |  fun apat                     #function with argument
-              |  "(" fun ")"                    #parenthesised lhs
-               ).
-#
-#Expressions
-#-----------
-#
-    exp    = ( "\\" (apat)+  "->" exp       #lambda expression
-              |  "let" "{" decls "}" "in" exp     #local definition
-              |  "if" exp "then" exp "else" exp   #conditional expression
-              |  "case" exp "of" "{" alts "}"     #case expression
-              |  opExp "::" sigType             #typed expression
-              |  opExp
-               ).
-    opExp  = ( opExp op opExp             #operator application
-              |  pfxExp
-               ).
-    pfxExp = ( "-" appExp                       #negation
-              |  appExp
-               ).
-    appExp = ( appExp atomic                #function application
-              |  atomic
-               ).
-    atomic = ( var                            #variable
-              |  con                          #constructor
-              |  integer                          #integer literal
-              |  float                            #floating point literal
-              |  char                             #character literal
-              |  string                           #string literal
-              |  "(" ")"                          #unit element
-              |  "(" exp ")"                    #parenthesised expr.
-              |  "(" exp op ")"                     #sections
-              |  "(" op exp ")"
-              |  "[" list "]"                   #list expression
-              |  "(" exp "," (exp)/","  ")"   #tuple
-               ).
-#
-    list   = ( [ (exp)/","  ]              #enumerated list
-              |  exp "|" quals                #list comprehension
-              |  exp ".."                         #arithmetic sequence
-              |  exp "," exp ".."
-              |  exp ".." exp
-              |  exp "," exp ".." exp
-               ).
-    quals  = ( quals "," quals                 #multiple qualifiers
-              |  pat "<-" exp                   #generator
-              |  "let" "{" decls "}"            #local definition
-              |  exp                            #boolean guard
-               ).
-#
-    alts   = ( alts ";" alts                   #multiple alternatives
-              |  pat   ( "->" exp                         #single alternative
-                       |  (gdAlt)+                #guarded alternatives
-                       )  [whereClause]         #alternative
-               ).
-#    altRhs = ( "->" exp                         #single alternative
-#              |  (gdAlt)+                #guarded alternatives
-#              ).
-    gdAlt  = ( "|" exp "->" exp               #guarded alternative
-               ).
-#
-#Patterns
-#--------
-#
-    pat    = ( pat conop pat              #operator application
-              |  (var | "_") "+" integer                #(n+k) pattern
-              |  (apat)+
-               ).
-    lhsPat =   ( lhsPat conop lhsPat           #PJT: left hand sides of pattern bindings
-               | apat
-               ).
-    apat   = ( var                            #variable
-              |  var "@" pat                    #as pattern
-              |  "~" pat                          #irrefutable pattern
-              |  "_"                                #wildcard
-              |  con                          #constructor
-              |  integer                          #integer literal
-              |  char                             #character literal
-              |  string                           #string literal
-              |  "(" ")"                          #unit element
-              |  "(" pat ")"                    #parenthesised expr.
-              |  "(" pat conop ")"                  #sections
-              |  "(" conop pat ")"
-              |  "[" [ (pat)/"," ] "]"      #list
-              |  "(" pat "," (pat)/","  ")"   #tuple
-               ).
-#
-#Variables and operators
-#-----------------------
-#
-    var    = ( varid  |  "(" "-" ")"          #variable
-               |  "(" varsym ")"        #variable identifier
-               ).
-    op     = ( varop  |  conop   | "-"      #operator
-               ).
-#
-    varop  = ( varsym    |  "`" varid "`"            #variable operator
-               ).
-#
-    con  = ( conid    |  "(" consym ")"        #constructor identifier
-               ).
-    conop  = ( consym    |  "`" conid "`"            #constructor operator
-               ).
-#
-#Finally, PJT's definitions for literals
-#---------------------------------------
-#
-integer= (digit)+ .
-float  = integer  "." integer [ ("e" | "E") [ "+"|"-" ] integer ].
-
-varsym         = ((symbol | preSymbol) { symbol | ":" }).
-consym         = (":" {symbol | ":"}).
-
-varid          = (small { letter | digit | "_" | "'" }).
-conid          = (large { letter | digit | "_" | "'" }).
-string         = "\"" { character } "\"" .
-char           = "'" character "'" .
-
-character      = (     letter |
-                       digit | 
-                       symbol | 
-                       preSymbol | 
-                       ":" | 
-                       "\\" ( integer | "n" | "t" | "b" | "\\" | "'" | "\"" ) ).
-
-# now this is really trivial...
-
-letter         = ( small | large).
-small          = ( "a"| "b"| "c"| "d"| "e"| "f"| "g"| "h"| "i"| "j"| "k"| "l"| "m"| "n"| "o"
-                 | "p"| "q"| "r"| "s"| "t"| "u"| "v"| "w"| "x"| "y"| "z").
-large          = ( "A"| "B"| "C"| "D"| "E"| "F"| "G"| "H"| "I"| "J"| "K"| "L"| "M"
-                 | "N"| "O"| "P"| "Q"| "R"| "S"| "T"| "U"| "V"| "W"| "X"| "Y"| "Z" ).
-digit          = ( "0"| "1"| "2"| "3"| "4"| "5"| "6"| "7"| "8"| "9" ).
-octit          = ( "0"| "1"| "2"| "3"| "4"| "5"| "6"| "7" ).
-hexit          = ( digit | "A"| "B"| "C"| "D"| "E"| "F"| "a"| "b"| "c"| "d"| "e"| "f" ).
-cntrl          = ( large | "@"| "["| "|"| "]"| "^"| "_" ).
-charesc                = ( "a"| "b"| "f"| "n"| "r"| "t"| "v"| "\\"| "\""| "'"| "&" ).
-
-symbol         =("!" | "@" | "#" | "$" | "%" | "^" | "&" | "*" | "+" | "." | "/"
-               | "<" | "=" | ">" | "?" | "\\" | "|").
-
-preSymbol      = ("-" | "~").
-
diff --git a/real/ebnf2ps/ebnf2ps.stdout b/real/ebnf2ps/ebnf2ps.stdout
deleted file mode 100644 (file)
index 0237f0c..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-%!PS-Adobe-1.0
-%%DocumentFonts: Times-Roman
-%%Title: apat
-%%Creator: ebnf2ps (Copyright 1994 by Peter Thiemann)
-%%Pages: 0
-%%BoundingBox: 0 0 169 382
-%%EndComments
-/$Ebnf2psDict 100 dict def
-$Ebnf2psDict begin
-/l {lineto} bind def
-/m {moveto} bind def
-/rl {rlineto} bind def
-/rm {rmoveto} bind def
-/s {stroke} bind def
-/n {newpath} bind def
-/gs {gsave} bind def
-/gr {grestore} bind def
-/clp {closepath} bind def
-/slw {setlinewidth} bind def
-/graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
-4 -2 roll mul setrgbcolor} bind def
-/scol {3 {255 div 3 1 roll} repeat setrgbcolor} bind def
- /apr {arcto 4 {pop} repeat} def
-/Box {
-  /linewidth exch def
-  linewidth sub /height exch def
-  linewidth sub /width exch def
-   n m
-  width 0 rl
-  0 height rl
-  width neg 0 rl
-  0 height neg rl
-  clp linewidth slw s
-} def
- /RBox {
-  /linewidth exch def
-  /height exch def
-  /width exch def
-  /lly exch def
-  /llx exch def
-  linewidth 2 div dup llx add /llx exch def lly add /lly exch def
-  /height height linewidth sub def
-  /width  width  linewidth sub def
-  /height2 height 2 div def
-  /width2  width  2 div def
-  /urx llx width add def
-  /ury lly height add def
-  /mmx llx width2 add def
-  /mmy lly height2 add def
-  /radius width2 height2 ge {height2} {width2} ifelse def
-   n mmx lly m
-  urx lly urx mmy radius apr
-  urx ury mmx ury radius apr
-  llx ury llx mmy radius apr
-  llx lly mmx lly radius apr
-  mmx lly l
-  clp linewidth slw s
-} def
-end
-/$Ebnf2psBegin {$Ebnf2psDict begin /$Ebnf2psEnteredState save def} def
-/$Ebnf2psEnd {$Ebnf2psEnteredState restore end} def
-
-%%EndProlog
-
-$Ebnf2psBegin
- 0 0 0 scol 0.30 slw
-n 8 182.75 m 2 -2 rl -2 -2 rl s
-n 0 180.75 m 10 0 rl s
-/Times-Roman findfont 10 scalefont setfont
- 0 373.17 m(apat) show
-n 166.60 182.75 m 2 -2 rl -2 -2 rl s
-n 163.60 180.75 m 5 0 rl s
-n 153.60 9 m 0 0 rl s
-n 134.88 53 m 18.72 0 rl s
-n 126.32 110.50 m 27.28 0 rl s
-n 126.32 132.50 m 27.28 0 rl s
-n 84.88 154.50 m 68.72 0 rl s
-n 55.66 176.50 m 97.94 0 rl s
-n 54.78 198.50 m 98.82 0 rl s
-n 49.21 220.50 m 104.39 0 rl s
-n 59.77 242.50 m 93.83 0 rl s
-n 46.44 264.50 m 107.16 0 rl s
-n 37 286.50 m 116.60 0 rl s
-n 66.63 308.50 m 86.97 0 rl s
-n 100.20 330.50 m 53.40 0 rl s
-n 44.77 352.50 m 108.83 0 rl s
-n 153.60 53 m 5 0 rl s
-n 153.60 110.50 m 5 0 rl s
-n 153.60 132.50 m 5 0 rl s
-n 153.60 154.50 m 5 0 rl s
-n 153.60 176.50 m 5 0 rl s
-n 153.60 198.50 m 5 0 rl s
-n 153.60 220.50 m 5 0 rl s
-n 153.60 242.50 m 5 0 rl s
-n 153.60 264.50 m 5 0 rl s
-n 153.60 286.50 m 5 0 rl s
-n 153.60 308.50 m 5 0 rl s
-n 153.60 330.50 m 5 0 rl s
-n 15 53 m 5 0 rl s
-n 15 110.50 m 5 0 rl s
-n 15 132.50 m 5 0 rl s
-n 15 154.50 m 5 0 rl s
-n 15 176.50 m 5 0 rl s
-n 15 198.50 m 5 0 rl s
-n 15 220.50 m 5 0 rl s
-n 15 242.50 m 5 0 rl s
-n 15 264.50 m 5 0 rl s
-n 15 286.50 m 5 0 rl s
-n 15 308.50 m 5 0 rl s
-n 15 330.50 m 5 0 rl s
-n 158.60 14 m 0 333.50 rl s
-n 153.60 9 m 158.60 9 158.60 14 5 apr
- 158.60 14 l s
-n 158.60 347.50 m 158.60 352.50 153.60 352.50 5 apr
- 153.60 352.50 l s
-n 15 14 m 0 333.50 rl s
-n 20 9 m 15 9 15 14 5 apr
- 15 14 l s
-n 15 347.50 m 15 352.50 20 352.50 5 apr
- 20 352.50 l s
-n 158.60 180.75 m 5 0 rl s
-n 10 180.75 m 5 0 rl s
- 138.27 0.50 15.33 17 1 RBox
- 144.27 6.17 m(\)) show
- 0.30 slw
-n 136.27 11 m 2 -2 rl -2 -2 rl s
-n 133.27 9 m 5 0 rl s
-n 128.27 14 m 0 12 rl s
-n 94.05 14 m 0 12 rl s
-n 128.27 26 m 128.27 31 123.27 31 5 apr
- 123.27 31 l s
-n 123.27 9 m 128.27 9 128.27 14 5 apr
- 128.27 14 l s
-n 94.05 26 m 94.05 31 99.05 31 5 apr
- 99.05 31 l s
-n 99.05 9 m 94.05 9 94.05 14 5 apr
- 94.05 14 l s
-n 118.41 31 m 4.86 0 rl s
-n 99.05 31 m 4.86 0 rl s
-n 123.27 9 m 10 0 rl s
-n 89.05 9 m 10 0 rl s
-n 120.41 33 m -2 -2 rl 2 -2 rl s
- 103.91 22.50 14.50 17 1 RBox
- 109.91 28.17 m(,) show
- 99.05 0.50 24.22 17 1 Box
- 105.05 6.17 m(pat) show
- 0.30 slw
-n 87.05 11 m 2 -2 rl -2 -2 rl s
-n 84.05 9 m 5 0 rl s
- 69.55 0.50 14.50 17 1 RBox
- 75.55 6.17 m(,) show
- 0.30 slw
-n 67.55 11 m 2 -2 rl -2 -2 rl s
-n 64.55 9 m 5 0 rl s
- 40.33 0.50 24.22 17 1 Box
- 46.33 6.17 m(pat) show
- 0.30 slw
-n 38.33 11 m 2 -2 rl -2 -2 rl s
-n 35.33 9 m 5 0 rl s
- 20 0.50 15.33 17 1 RBox
- 26 6.17 m(\() show
- 119.55 44.50 15.33 17 1 RBox
- 125.55 50.17 m(]) show
- 0.30 slw
-n 117.55 55 m 2 -2 rl -2 -2 rl s
-n 114.55 53 m 5 0 rl s
-n 109.55 58 m 0 3.50 rl s
-n 45.33 58 m 0 3.50 rl s
-n 99.55 66.50 m 5 0 rl s
-n 109.55 61.50 m 109.55 66.50 104.55 66.50 5 apr
- 104.55 66.50 l s
-n 114.55 53 m 109.55 53 109.55 58 5 apr
- 109.55 58 l s
-n 50.33 66.50 m 5 0 rl s
-n 45.33 61.50 m 45.33 66.50 50.33 66.50 5 apr
- 50.33 66.50 l s
-n 40.33 53 m 45.33 53 45.33 58 5 apr
- 45.33 58 l s
-n 40.33 53 m 74.22 0 rl s
-n 53.33 68.50 m 2 -2 rl -2 -2 rl s
-n 94.55 71.50 m 0 12 rl s
-n 60.33 71.50 m 0 12 rl s
-n 94.55 83.50 m 94.55 88.50 89.55 88.50 5 apr
- 89.55 88.50 l s
-n 89.55 66.50 m 94.55 66.50 94.55 71.50 5 apr
- 94.55 71.50 l s
-n 60.33 83.50 m 60.33 88.50 65.33 88.50 5 apr
- 65.33 88.50 l s
-n 65.33 66.50 m 60.33 66.50 60.33 71.50 5 apr
- 60.33 71.50 l s
-n 84.69 88.50 m 4.86 0 rl s
-n 65.33 88.50 m 4.86 0 rl s
-n 89.55 66.50 m 10 0 rl s
-n 55.33 66.50 m 10 0 rl s
-n 86.69 90.50 m -2 -2 rl 2 -2 rl s
- 70.19 80 14.50 17 1 RBox
- 76.19 85.67 m(,) show
- 65.33 58 24.22 17 1 Box
- 71.33 63.67 m(pat) show
- 0.30 slw
-n 38.33 55 m 2 -2 rl -2 -2 rl s
-n 35.33 53 m 5 0 rl s
- 20 44.50 15.33 17 1 RBox
- 26 50.17 m([) show
- 110.99 102 15.33 17 1 RBox
- 116.99 107.67 m(\)) show
- 0.30 slw
-n 108.99 112.50 m 2 -2 rl -2 -2 rl s
-n 105.99 110.50 m 5 0 rl s
- 81.77 102 24.22 17 1 Box
- 87.77 107.67 m(pat) show
- 0.30 slw
-n 79.77 112.50 m 2 -2 rl -2 -2 rl s
-n 76.77 110.50 m 5 0 rl s
- 40.33 102 36.44 17 1 Box
- 46.33 107.67 m(conop) show
- 0.30 slw
-n 38.33 112.50 m 2 -2 rl -2 -2 rl s
-n 35.33 110.50 m 5 0 rl s
- 20 102 15.33 17 1 RBox
- 26 107.67 m(\() show
- 110.99 124 15.33 17 1 RBox
- 116.99 129.67 m(\)) show
- 0.30 slw
-n 108.99 134.50 m 2 -2 rl -2 -2 rl s
-n 105.99 132.50 m 5 0 rl s
- 69.55 124 36.44 17 1 Box
- 75.55 129.67 m(conop) show
- 0.30 slw
-n 67.55 134.50 m 2 -2 rl -2 -2 rl s
-n 64.55 132.50 m 5 0 rl s
- 40.33 124 24.22 17 1 Box
- 46.33 129.67 m(pat) show
- 0.30 slw
-n 38.33 134.50 m 2 -2 rl -2 -2 rl s
-n 35.33 132.50 m 5 0 rl s
- 20 124 15.33 17 1 RBox
- 26 129.67 m(\() show
- 69.55 146 15.33 17 1 RBox
- 75.55 151.67 m(\)) show
- 0.30 slw
-n 67.55 156.50 m 2 -2 rl -2 -2 rl s
-n 64.55 154.50 m 5 0 rl s
- 40.33 146 24.22 17 1 Box
- 46.33 151.67 m(pat) show
- 0.30 slw
-n 38.33 156.50 m 2 -2 rl -2 -2 rl s
-n 35.33 154.50 m 5 0 rl s
- 20 146 15.33 17 1 RBox
- 26 151.67 m(\() show
- 40.33 168 15.33 17 1 RBox
- 46.33 173.67 m(\)) show
- 0.30 slw
-n 38.33 178.50 m 2 -2 rl -2 -2 rl s
-n 35.33 176.50 m 5 0 rl s
- 20 168 15.33 17 1 RBox
- 26 173.67 m(\() show
- 20 190 34.78 17 1 Box
- 26 195.67 m(string) show
- 20 212 29.21 17 1 Box
- 26 217.67 m(char) show
- 20 234 39.77 17 1 Box
- 26 239.67 m(integer) show
- 20 256 26.44 17 1 Box
- 26 261.67 m(con) show
- 20 278 17 17 1 RBox
- 26 283.67 m(_) show
- 42.41 300 24.22 17 1 Box
- 48.41 305.67 m(pat) show
- 0.30 slw
-n 40.41 310.50 m 2 -2 rl -2 -2 rl s
-n 37.41 308.50 m 5 0 rl s
- 20 300 17.41 17 1 RBox
- 26 305.67 m(~) show
- 75.98 322 24.22 17 1 Box
- 81.98 327.67 m(pat) show
- 0.30 slw
-n 73.98 332.50 m 2 -2 rl -2 -2 rl s
-n 70.98 330.50 m 5 0 rl s
- 49.77 322 21.21 17 1 RBox
- 55.77 327.67 m(@) show
- 0.30 slw
-n 47.77 332.50 m 2 -2 rl -2 -2 rl s
-n 44.77 330.50 m 5 0 rl s
- 20 322 24.77 17 1 Box
- 26 327.67 m(var) show
- 20 344 24.77 17 1 Box
- 26 349.67 m(var) show
-
-$Ebnf2psEnd
diff --git a/real/ebnf2ps/gofer.BNF b/real/ebnf2ps/gofer.BNF
deleted file mode 100644 (file)
index 68ac8f0..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-#APPENDIX A: SUMMARY OF GRAMMAR
-#
-#This section gives a summary of the grammar for the  language  used  by
-#Gofer.  The non-terminals <interp> and <module> describe the syntax  of
-#expressions that can be entered into the Gofer interpreter and that  of
-#files of definitions that can be loaded into Gofer respectively.
-#
-#The following notational conventions are used in the Grammar  which  is
-#specified using a variant of BNF:
-#
-#  o <angle brackets> are used to distinguish names of nonterminals from
-#    keywords.
-#
-#  o vertical | bars  are used to separate alternatives.
-#
-#  o {braces} enclose items which may be repeated zero or more times.
-#
-#  o [brackets] are used for optional items.
-#
-#  o (parentheses) are used for grouping.
-#
-#  o "quotes" surround characters which might otherwise be confused with
-#    the notations introduced above.
-#
-#The following terminal symbols are used but not defined by the grammar:
-#
-#  varid    identifier beginning with lower case letter as described in
-#           section 6.
-#  conid    like varid, but beginning with upper case letter.
-#  varsym    operator symbol not beginning with a colon, as described in
-#           section 6.
-#  consym    constructor function operator, like varsym, but beginning
-#           with a colon character.
-#  integer  integer constant, as described in section 7.3.
-#  float    floating point constant, as described in section 7.4.
-#  char     character constant, as described in section 7.5.
-#  string   string constant, as described in section 7.7.
-#
-#
-#Top-level grammar
-#-----------------
-#
-    module   = ( "{" topdecls "}"             #  module
-#
-               ).
-    interp   = ( exp [whereClause]                #  top-level expression
-#
-               ).
-    topdecls = ( topdecls ";" topdecls         #  multiple declarations
-                |  dataDecl
-                |  typeDecl
-                |  infixDecl
-                |  primDecl
-                |  class                        #  class declaration
-                |  inst                         #  instance declaration
-                |  decls                        #  value declarations
-#
-               ).
-dataDecl       = ("data" conid {varid} "=" (constr)/"|"     #  datatype declaration
-               ).
-typeDecl       = ("type" conid {varid} "=" type        #  synonym declaration
-               ).
-infixDecl      = (( "infixl" | "infixr" | "infix")
-                        [digit] (op)/","  #  fixity declarations
-               ).
-#    simple  = ( conid {varid}                  #  type declaration lhs
-#              ).
-#
-    constrs  = ( constrs "|" constrs        #  multiple constructors
-                |  type consym type            #  infix constructor
-                |  conid {type}                 #  constructor, n>=0
-               ).
-     constr  =   type consym type            #  infix constructor
-                |  conid {type}                 #  constructor, n>=0
-               .
-#
-primDecl       = ("primitive" prims "::" type    #  primitive bindings
-               ).
-    prims    = 
-                 (var string)/","                 #  primitive binding
-               .
-#
-#Type expressions
-#----------------
-#
-    sigType  = ( [context "=>" ] type         #  [qualified] type
-#
-               ).
-    context  = ( "(" [(pred)/ "," ] ")"    #  general form
-                |  pred                         #  singleton context
-               ).
-    pred     = ( conid (type)+           #  predicate
-#
-               ).
-    type     = ( ctype [ "->" type ]          #  function type
-               ).
-    ctype    = ( conid {atype}                #  datatype or synonym
-                |  atype
-               ).
-    atype    = ( varid                          #  type variable
-                |  "(" ")"                        #  unit type
-                |  "(" type ")"                 #  parenthesised type
-                |  "(" type "," (type)/"," ")"#  tuple type
-                |  "[" type "]"                 #  list type
-#
-#Class and instance declarations
-#-------------------------------
-#
-               ).
-    class    = ( "class" [context "=>"] pred [cbody]
-               ).
-    cbody    = ( "where" "{" cdecls "}"         #  class body
-               ).
-    cdecls   = ( cdecls ";" cdecls             #  multiple declarations
-                |  (var)/ ","  "::" type      #  member functions
-                |  fun rhs [whereClause]          #  default bindings
-#
-               ).
-    inst     = ( "instance" [context "=>"] pred [ibody]
-               ).
-    ibody    = ( "where" "{" idecls "}"         #  instance body
-               ).
-    idecls   = ( idecls ";" idecls             #  multiple declarations
-                |  fun rhs [whereClause]          #  member definition
-#
-#Value declarations
-#------------------
-#
-               ).
-    decls  = ( decls ";" decls                 #multiple declarations
-              |  (var)/"," "::" sigType     #type declaration
-              |  fun rhs [whereClause]            #function binding
-              |  lhsPat rhs [whereClause]            #pattern binding, PJT: was pat
-#
-               ).
-    rhs    = ( "=" exp                          #simple right hand side
-              |  (gdRhs)+                #guarded right hand sides
-#
-               ).
-    gdRhs  = ( "|" exp "=" exp                #guarded right hand side
-#
-               ).
-    whereClause  = ( "where" "{" decls "}"            #local definitions
-#
-               ).
-    fun    = ( var                            #function of arity 0
-              |  pat varop pat              #infix operator
-              |  "(" pat varop ")"            #section-like notation
-              |  "(" varop pat ")"
-              |  fun apat                     #function with argument
-              |  "(" fun ")"                    #parenthesised lhs
-               ).
-#
-#Expressions
-#-----------
-#
-    exp    = ( "\\" (apat)+  "->" exp       #lambda expression
-              |  "let" "{" decls "}" "in" exp     #local definition
-              |  "if" exp "then" exp "else" exp   #conditional expression
-              |  "case" exp "of" "{" alts "}"     #case expression
-              |  opExp "::" sigType             #typed expression
-              |  opExp
-               ).
-    opExp  = ( opExp op opExp             #operator application
-              |  pfxExp
-               ).
-    pfxExp = ( "-" appExp                       #negation
-              |  appExp
-               ).
-    appExp = ( appExp atomic                #function application
-              |  atomic
-               ).
-    atomic = ( var                            #variable
-              |  con                          #constructor
-              |  integer                          #integer literal
-              |  float                            #floating point literal
-              |  char                             #character literal
-              |  string                           #string literal
-              |  "(" ")"                          #unit element
-              |  "(" exp ")"                    #parenthesised expr.
-              |  "(" exp op ")"                     #sections
-              |  "(" op exp ")"
-              |  "[" list "]"                   #list expression
-              |  "(" exp "," (exp)/","  ")"   #tuple
-               ).
-#
-    list   = ( [ (exp)/","  ]              #enumerated list
-              |  exp "|" quals                #list comprehension
-              |  exp ".."                         #arithmetic sequence
-              |  exp "," exp ".."
-              |  exp ".." exp
-              |  exp "," exp ".." exp
-               ).
-    quals  = ( quals "," quals                 #multiple qualifiers
-              |  pat "<-" exp                   #generator
-              |  "let" "{" decls "}"            #local definition
-              |  exp                            #boolean guard
-               ).
-#
-    alts   = ( alts ";" alts                   #multiple alternatives
-              |  pat   ( "->" exp                         #single alternative
-                       |  (gdAlt)+                #guarded alternatives
-                       )  [whereClause]         #alternative
-               ).
-#    altRhs = ( "->" exp                         #single alternative
-#              |  (gdAlt)+                #guarded alternatives
-#              ).
-    gdAlt  = ( "|" exp "->" exp               #guarded alternative
-               ).
-#
-#Patterns
-#--------
-#
-    pat    = ( pat conop pat              #operator application
-              |  (var | "_") "+" integer                #(n+k) pattern
-              |  (apat)+
-               ).
-    lhsPat =   ( lhsPat conop lhsPat           #PJT: left hand sides of pattern bindings
-               | apat
-               ).
-    apat   = ( var                            #variable
-              |  var "@" pat                    #as pattern
-              |  "~" pat                          #irrefutable pattern
-              |  "_"                                #wildcard
-              |  con                          #constructor
-              |  integer                          #integer literal
-              |  char                             #character literal
-              |  string                           #string literal
-              |  "(" ")"                          #unit element
-              |  "(" pat ")"                    #parenthesised expr.
-              |  "(" pat conop ")"                  #sections
-              |  "(" conop pat ")"
-              |  "[" [ (pat)/"," ] "]"      #list
-              |  "(" pat "," (pat)/","  ")"   #tuple
-               ).
-#
-#Variables and operators
-#-----------------------
-#
-    var    = ( varid  |  "(" "-" ")"          #variable
-               |  "(" varsym ")"        #variable identifier
-               ).
-    op     = ( varop  |  conop   | "-"      #operator
-               ).
-#
-    varop  = ( varsym    |  "`" varid "`"            #variable operator
-               ).
-#
-    con  = ( conid    |  "(" consym ")"        #constructor identifier
-               ).
-    conop  = ( consym    |  "`" conid "`"            #constructor operator
-               ).
-#
-#Finally, PJT's definitions for literals
-#---------------------------------------
-#
-integer= (digit)+ .
-float  = integer  "." integer [ ("e" | "E") [ "+"|"-" ] integer ].
-
-varsym         = ((symbol | preSymbol) { symbol | ":" }).
-consym         = (":" {symbol | ":"}).
-
-varid          = (small { letter | digit | "_" | "'" }).
-conid          = (large { letter | digit | "_" | "'" }).
-string         = "\"" { character } "\"" .
-char           = "'" character "'" .
-
-character      = (     letter |
-                       digit | 
-                       symbol | 
-                       preSymbol | 
-                       ":" | 
-                       "\\" ( integer | "n" | "t" | "b" | "\\" | "'" | "\"" ) ).
-
-# now this is really trivial...
-
-letter         = ( small | large).
-small          = ( "a"| "b"| "c"| "d"| "e"| "f"| "g"| "h"| "i"| "j"| "k"| "l"| "m"| "n"| "o"
-                 | "p"| "q"| "r"| "s"| "t"| "u"| "v"| "w"| "x"| "y"| "z").
-large          = ( "A"| "B"| "C"| "D"| "E"| "F"| "G"| "H"| "I"| "J"| "K"| "L"| "M"
-                 | "N"| "O"| "P"| "Q"| "R"| "S"| "T"| "U"| "V"| "W"| "X"| "Y"| "Z" ).
-digit          = ( "0"| "1"| "2"| "3"| "4"| "5"| "6"| "7"| "8"| "9" ).
-octit          = ( "0"| "1"| "2"| "3"| "4"| "5"| "6"| "7" ).
-hexit          = ( digit | "A"| "B"| "C"| "D"| "E"| "F"| "a"| "b"| "c"| "d"| "e"| "f" ).
-cntrl          = ( large | "@"| "["| "|"| "]"| "^"| "_" ).
-charesc                = ( "a"| "b"| "f"| "n"| "r"| "t"| "v"| "\\"| "\""| "'"| "&" ).
-
-symbol         =("!" | "@" | "#" | "$" | "%" | "^" | "&" | "*" | "+" | "." | "/"
-               | "<" | "=" | ">" | "?" | "\\" | "|").
-
-preSymbol      = ("-" | "~").
-
diff --git a/real/ebnf2ps/regular.BNF b/real/ebnf2ps/regular.BNF
deleted file mode 100644 (file)
index 70d60e5..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-RAtom   = character | "\\" character | "." | "\\(" Regexp "\\)" .
-RExtAtom = RAtom ["*" | "+" | "?"] .
-RFactor         = RExtAtom + .
-Regexp  = Factor / "\\|" ["$"].