summaryrefslogtreecommitdiff
path: root/src/GF/Canon/GFCC/GFCC.cf
blob: b7298cdd9af07e12fa8821e71e6e91735022b5d9 (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
Grm. Grammar  ::= Header ";" Abstract ";" [Concrete] ";" ;

Hdr. Header   ::= "grammar" CId "(" [CId] ")" ;

Abs. Abstract ::= "abstract" "{" [AbsDef] "}" ";" ;

Cnc. Concrete ::= "concrete" CId "{" [CncDef] "}" ;

Fun. AbsDef   ::= CId ":" Type "=" Exp ;
Lin. CncDef   ::= CId "=" Term ;

Typ. Type     ::= [CId] "->" CId ;
Tr.  Exp      ::= "(" Atom [Exp] ")" ;
AC.  Atom     ::= CId ;
AS.  Atom     ::= String ;
AI.  Atom     ::= Integer ;
trA. Exp      ::= Atom ;
define trA a = Tr a [] ;

R.   Term     ::= "[" [Term] "]" ;          -- record/table
P.   Term     ::= Term "[" Term "]" ;       -- projection/selection
S.   Term     ::= "(" [Term] ")" ;          -- sequence with ++
K.   Term     ::= Tokn ;                    -- token
V.   Term     ::= "$" Integer ;             -- argument
C.   Term     ::= Integer ;                 -- parameter value/label
F.   Term     ::= CId ;                     -- global constant
L.   Term     ::= "$" CId ;                 -- local (bound) variable
A.   Term     ::= "(" CId "->" Term ")" ;   -- lambda abstraction (compressed table)
FV.  Term     ::= "[|" [Term] "|]" ;        -- free variation
W.   Term     ::= "(" String "+" Term ")" ; -- prefix + suffix table

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


terminator Concrete ";" ;
terminator AbsDef ";" ;
terminator CncDef ";" ;
terminator CId "" ;
separator  Term "," ;
terminator Exp "" ;
terminator String "" ;
separator  Variant "," ;

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