~ubuntu-branches/ubuntu/jaunty/bnfc/jaunty

« back to all changes in this revision

Viewing changes to formats/haskell2/CFtoAbstract.hs

  • Committer: Bazaar Package Importer
  • Author(s): Antti-Juhani Kaijanaho
  • Date: 2005-04-10 13:53:34 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20050410135334-sg1bq2mbqw41kbi8
Tags: 2.2-1
* New upstream release
  - incorporates our change
      Makefile (GHC_OPTS): Remove -Wall to avoid clutter at build time
* debian/copyright: Update.
* Makefile: clean should remove formats/{profile,xml}/*.{hi,o}

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
{-
 
2
    BNF Converter: Abstract syntax Generator
 
3
    Copyright (C) 2004  Author:  Markus Forberg
 
4
 
 
5
    This program is free software; you can redistribute it and/or modify
 
6
    it under the terms of the GNU General Public License as published by
 
7
    the Free Software Foundation; either version 2 of the License, or
 
8
    (at your option) any later version.
 
9
 
 
10
    This program is distributed in the hope that it will be useful,
 
11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
    GNU General Public License for more details.
 
14
 
 
15
    You should have received a copy of the GNU General Public License
 
16
    along with this program; if not, write to the Free Software
 
17
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
18
-}
 
19
 
 
20
module CFtoAbstract (cf2Abstract) where
 
21
 
 
22
import CF
 
23
import Utils((+++),(++++))
 
24
import List(intersperse)
 
25
 
 
26
-- to produce a Haskell module
 
27
cf2Abstract :: String -> CF -> String
 
28
cf2Abstract name cf = unlines $ 
 
29
  ("module "++name +++ "where\n") :
 
30
  "-- Haskell module generated by the BNF converter\n" :
 
31
  (map (prSpecialData cf) (specialCats cf) ++ map prData (cf2data cf))
 
32
 
 
33
prData :: Data -> String
 
34
prData (cat,rules) = 
 
35
  "data" +++ cat +++ "=\n   " ++
 
36
  concat (intersperse "\n | " (map prRule rules)) ++++
 
37
  "  deriving (Eq,Ord,Show)\n"
 
38
 where
 
39
   prRule (fun,cats) = unwords (fun:cats)
 
40
 
 
41
prSpecialData :: CF -> Cat -> String
 
42
prSpecialData cf cat = 
 
43
  unwords ["newtype",cat,"=",cat,contentSpec cf cat,"deriving (Eq,Ord,Show)"]
 
44
 
 
45
contentSpec :: CF -> Cat -> String
 
46
contentSpec cf cat = if isPositionCat cf cat then "((Int,Int),String)" else "String"
 
 
b'\\ No newline at end of file'