File: Future.lhs

package info (click to toggle)
frown 0.6.2.3-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 8,440 kB
  • ctags: 247
  • sloc: haskell: 35,175; makefile: 173; yacc: 23
file content (73 lines) | stat: -rw-r--r-- 3,941 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                             %
%   Frown --- An LALR(k) parser generator for Haskell 98                      %
%   Copyright (C) 2001-2005 Ralf Hinze                                        %
%                                                                             %
%   This program is free software; you can redistribute it and/or modify      %
%   it under the terms of the GNU General Public License (version 2) as       %
%   published by the Free Software Foundation.                                %
%                                                                             %
%   This program is distributed in the hope that it will be useful,           %
%   but WITHOUT ANY WARRANTY; without even the implied warranty of            %
%   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             %
%   GNU General Public License for more details.                              %
%                                                                             %
%   You should have received a copy of the GNU General Public License         %
%   along with this program; see the file COPYING.  If not, write to          %
%   the Free Software Foundation, Inc., 59 Temple Place - Suite 330,          %
%   Boston, MA 02111-1307, USA.                                               %
%                                                                             %
%   Contact information                                                       %
%   Email:      Ralf Hinze <ralf@cs.uni-bonn.de>                              %
%   Homepage:   http://www.informatik.uni-bonn.de/~ralf/                      %
%   Paper mail: Dr. Ralf Hinze                                                %
%               Institut für Informatik III                                   %
%               Universität Bonn                                              %
%               Römerstraße 164                                               %
%               53117 Bonn, Germany                                           %
%                                                                             %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

> module Future			(  module Future
>				)
> where
> import Grammar
> import qualified OrdUniqListSet as Set
> import OrdUniqListSet         (  Set  )
> import qualified OrdUniqListFM as FM
> import OrdUniqListFM          (  FM  )
> -- import Base
> import Prettier

%-------------------------------=  --------------------------------------------
\section{Lookahead information}
%-------------------------------=  --------------------------------------------

> newtype Future                =  Future { unFuture :: FM Symbol Future }
>                                  deriving (Eq, Ord, Show)
>
> fromList                      :: [(Symbol, Future)] -> Future
> fromList ts                   =  Future (FM.fromList ts)
>
> instance Pretty Future where
>     prettyPrec d (Future s)   =  prettyPrec d s
>
> union                         :: Future -> Future -> Future
> union (Future a) (Future b)   =  Future (FM.union_C union a b)
>
> unionMany                     :: [Future] -> Future
> unionMany                     =  Future . FM.unionMany_C union . map unFuture

> prune                         :: Int -> Future -> Future
> prune 0 (Future _ts)          =  fromList []
> prune n (Future ts)           =  fromList [ (a, prune (n - 1) us) | (a, us) <- FM.toList ts ]

> domain                        :: Future -> Set Symbol
> domain (Future f)             =  Set.fromList (map fst (FM.toList f))
>
> lookup                        :: Future -> Symbol -> Maybe Future
> lookup (Future f) a           =  FM.lookup f a
>
> empty                         :: Future -> Bool
> empty (Future f)              =  FM.null f