summaryrefslogtreecommitdiff
path: root/src/GF/GFCC/GFCC.cf
blob: 96d68649b6c1a8d7942b8baa02c83e8dfd9bbe65 (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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
Grm. Grammar  ::= 
  "grammar" CId "(" [CId] ")" "(" [Flag] ")" ";" 
  Abstract ";" 
  [Concrete] ;

Abs. Abstract ::= 
  "abstract" "{" 
     "flags" [Flag] 
     "fun"   [FunDef] 
     "cat"   [CatDef] 
  "}" ;

Cnc. Concrete ::= 
  "concrete" CId "{" 
     "flags"  [Flag] 
     "lin"    [LinDef] 
     "oper"   [LinDef] 
     "lincat" [LinDef] 
     "lindef" [LinDef] 
     "printname" [LinDef]
     "param"  [LinDef]     -- lincats with param value names
  "}" ;

Flg. Flag     ::= CId "=" String ;
Cat. CatDef   ::= CId "[" [Hypo] "]" ;

Fun. FunDef   ::= CId ":" Type "=" Exp ;
Lin. LinDef   ::= CId "=" Term ;

DTyp. Type    ::= "[" [Hypo] "]" CId [Exp] ;         -- dependent type
DTr.  Exp     ::= "[" "(" [CId] ")" Atom [Exp] "]" ; -- term with bindings

AC.   Atom     ::= CId ;
AS.   Atom     ::= String ;
AI.   Atom     ::= Integer ;
AF.   Atom     ::= Double ;
AM.   Atom     ::= "?" Integer ;

R.   Term     ::= "[" [Term] "]" ;          -- record/table
P.   Term     ::= "(" Term "!" Term ")" ;   -- projection/selection
S.   Term     ::= "(" [Term] ")" ;          -- concatenated sequence
K.   Term     ::= Tokn ;                    -- token
V.   Term     ::= "$" Integer ;             -- argument
C.   Term     ::= Integer ;                 -- parameter value/label
F.   Term     ::= CId ;                     -- global constant
FV.  Term     ::= "[|" [Term] "|]" ;        -- free variation
W.   Term     ::= "(" String "+" Term ")" ; -- prefix + suffix table
TM.  Term     ::= "?" ;                     -- lin of metavariable

KS.  Tokn     ::= String ;
KP.  Tokn     ::= "[" "pre" [String] "[" [Variant] "]" "]" ;
Var. Variant  ::= [String] "/" [String] ;


RP.  Term     ::= "(" Term "@" Term ")";    -- DEPRECATED: record parameter alias

terminator Concrete ";" ;
terminator Flag ";" ;
terminator CatDef ";" ;
terminator FunDef ";" ;
terminator LinDef ";" ;
separator  CId "," ;
separator  Term "," ;
terminator Exp "" ;
terminator String "" ;
separator  Variant "," ;

token CId (('_' | letter) (letter | digit | '\'' | '_')*) ;


-- the following are needed if dependent types or HOAS or defs are present

Hyp. Hypo     ::= CId ":" Type ;
AV.  Atom     ::= "$" CId ;

EEq. Exp      ::= "{" [Equation] "}" ;  -- list of pattern eqs; primitive: []
Equ. Equation ::= [Exp] "->" Exp ;      -- patterns are encoded as exps

separator  Hypo "," ;
terminator Equation ";" ;