]> matita.cs.unibo.it Git - helm.git/blob - matita/matita/contribs/lambdadelta/bin/recomm/recommParser.mly
5e71743a9a087a817fb4b232a7d0f98dd6a4509b
[helm.git] / matita / matita / contribs / lambdadelta / bin / recomm / recommParser.mly
1 %{
2
3   module ET = RecommTypes
4
5   let lc = String.lowercase_ascii
6
7 %}
8
9 %token <string> SP NL OP CP PP SR KW CW HW SW OT
10 %token EF
11
12 %start srcs
13 %type <RecommTypes.srcs> srcs
14
15 %%
16
17 sp:
18   |    { "" }
19   | SP { $1 }
20
21 inn_r:
22   | NL { $1 }
23   | SW { $1 }
24   | OT { $1 }
25
26 inn:
27   | inn_r { $1 }
28   | SP    { $1 }
29   | KW    { $1 }
30   | CW    { $1 }
31   | HW    { $1 }
32
33 inn_w:
34   | inn   { $1 }
35   | SR    { $1 }
36
37 inns_r:
38   | inn_r      { $1      }
39   | inn_r inns { $1 ^ $2 }
40
41 inns:
42   | inn      { $1      }
43   | inn inns { $1 ^ $2 }
44
45 inns_w:
46   | inn_w        { $1      }
47   | inn_w inns_w { $1 ^ $2 }
48
49 out:
50   | SP { $1 }
51   | SR { $1 }
52   | KW { $1 }
53   | CW { $1 }
54   | HW { $1 }
55   | SW { $1 }
56   | OT { $1 }
57
58 outs:
59   | out      { $1      }
60   | out outs { $1 ^ $2 } 
61
62 cc:
63   | CW { $1 }
64   | OT { $1 }
65
66 cw:
67   | cc    { $1      }
68   | cc cw { $1 ^ $2 }
69
70 cws:
71   |           { []       }
72   | SP        { []       }
73   | SP cw cws { $2 :: $3 }
74
75 sc:
76   | HW { lc $1 }
77   | SW { lc $1 }
78   | OT { $1    }
79
80 sw:
81   | sc    { $1      }
82   | sc sw { $1 ^ $2 }
83
84 sws:
85   |           { []       }
86   | SP        { []       }
87   | SP sw sws { $2 :: $3 }
88
89 src_l:
90   | NL                 { ET.Line  $1                        }
91   | OP sp PP inns CP   { ET.Mark  $4                        }
92   | OP sp KW inns_w CP { ET.Key   ($3, $4)                  }
93   | OP sp CW cws CP    { ET.Title ($3 :: $4)                }
94   | OP sp HW sws CP    { ET.Slice (lc $3 :: $4)             }
95   | OP sp CP           { ET.Other (0, $1, $2, $3)           }
96   | OP sp inns_r CP    { ET.Other (0, $1, $2 ^ $3, $4)      }
97   | OP SR inns CP      { ET.Other (1, $1, $2 ^ $3, $4)      }
98   | OP SR SR inns CP   { ET.Other (2, $1, $2 ^ $3 ^ $4, $5) }
99   | OP SP SR inns CP   { ET.Mark  $4                        }
100
101 src:
102   | outs { ET.Text $1 }
103
104 srcs_l:
105   | EF         { []       }
106   | src_l srcs { $1 :: $2 }
107
108 srcs:
109   | srcs_l     { $1       }
110   | src srcs_l { $1 :: $2 }