summaryrefslogtreecommitdiff
path: root/next-lib/src/api/Symbolic.gf
blob: 2a621cf9cdabb5afffe6dd51875fb940be0c5ae8 (plain)
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
--1 Symbolic: Noun Phrases with mathematical symbols

incomplete resource Symbolic = open 
    Symbol, Syntax, PredefCnc in {

  oper
    symb : overload {
      symb : Str -> NP ;                       -- x
      symb : Int -> NP ;                       -- 23
      symb : Float -> NP ;                     -- 0.99
      symb : N  -> Digits -> NP ;              -- level 4
      symb : N  -> Card -> NP ;                -- level four
      symb : CN -> Card -> NP ;                -- advanced level four
      symb : Det -> N  -> Card -> NP ;         -- the number four
      symb : Det -> CN -> Card -> NP ;         -- the even number four
      symb : Det -> N  -> Str -> Str -> NP ;   -- the levels i and j
      symb : Det -> CN -> [Symb] -> NP ;       -- the basic levels i, j, and k
      symb : Symb -> S ;                       -- A
      symb : Symb -> Card ;                    -- n
      symb : Symb -> Ord                       -- n'th
      } ;

    mkSymb  : Str -> Symb ;
    mkInt   : Str -> PredefCnc.Int ;
    mkFloat : Str -> PredefCnc.Float ;

--.

    symb = overload {
      symb : Str -> NP 
                          = \s -> mkNP (SymbPN (mkSymb s)) ;
      symb : Int -> NP 
                          = \i -> mkNP (IntPN i) ;
      symb : Float -> NP 
                          = \i -> mkNP (FloatPN i) ;
      symb : N -> Digits -> NP 
                          = \c,i -> CNNumNP (mkCN c) (mkCard i) ;
      symb : N -> Card -> NP 
                          = \c,n -> CNNumNP (mkCN c) n ;
      symb : CN -> Card -> NP 
                          = \c,n -> CNNumNP c n ;
      symb : Det -> N  -> Card -> NP
                          = \d,n,x -> mkNP d (mkCN (mkCN n) (mkNP (NumPN x))) ;
      symb : Det -> CN -> Card -> NP
                          = \d,n,x -> mkNP d (mkCN n (mkNP (NumPN x))) ;
      symb : Det -> N  -> Str -> Str -> NP 
                          = \c,n,x,y -> CNSymbNP c (mkCN n) (BaseSymb (mkSymb x) (mkSymb y)) ;
      symb : Det -> CN -> [Symb] -> NP 
                          = CNSymbNP ;
      symb : Symb -> S = SymbS ;
      symb : Symb -> Card = SymbNum ;
      symb : Symb -> Ord = SymbOrd

      } ;

    mkSymb : Str -> Symb = \s -> {s = s ; lock_Symb = <>} ;

    mkInt i = {s = i ; lock_Int = <>} ;
    mkFloat f = {s = f ; lock_Float = <>} ;


}