File: stag.y

package info (click to toggle)
jbofihe 0.38-5.1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd, squeeze, wheezy
  • size: 1,576 kB
  • ctags: 2,421
  • sloc: ansic: 18,600; yacc: 1,865; perl: 1,190; makefile: 271; lex: 152; sh: 60
file content (333 lines) | stat: -rw-r--r-- 10,448 bytes parent folder | download | duplicates (4)
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
/***************************************
  $Header: /cvs/src/jbofihe/stag.y,v 1.3 1999/08/05 22:15:51 richard Exp $

  Small bison grammar used to recognize a <stag> followed by KE or BO.
  ***************************************/

/**********************************************************************
 * Copyright (C) Richard P. Curnow  1998-2001
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of version 2 of the GNU General Public License 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; if not, write to the Free Software Foundation, Inc.,
 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
 * 
 *********************************************************************/

%token JUST_STAG /* try to match <stag> (or an empty string then KE or BO) on its own */
%token JOIK_STAG /* try to match <joik> <stag> */
%token JJ_STAG /* try to match <stag> maybe with <jek> or <joik> before, or not */

%token STAG_BAI
%token STAG_BIhI
%token STAG_BU
%token STAG_BY
%token STAG_CAhA
%token STAG_CUhE
%token STAG_FAhA
%token STAG_FEhE
%token STAG_FOI
%token STAG_GAhO
%token STAG_JA
%token STAG_JOI
%token STAG_LAU
%token STAG_KI
%token STAG_MOhI
%token STAG_NA
%token STAG_NAhE
%token STAG_NAI
%token STAG_PA
%token STAG_PU
%token STAG_ROI
%token STAG_SE
%token STAG_TAhE
%token STAG_TEI
%token STAG_VA
%token STAG_VEhA
%token STAG_VIhA
%token STAG_ZAhO
%token STAG_ZEhA
%token STAG_ZI

%token STAG_KE
%token STAG_BO

/* This is the bogus token if we fall off the end of <stag> without
   finding BO or KE, i.e. find something else */
%token STAG_OTHER

%{
extern void stag_lookahead_bo(void);
extern void stag_lookahead_ke(void);
extern void stag_error(const char *);
extern int stag_lex(void);
%}

%%

all : JUST_STAG      just_stag
    | JUST_STAG      empty_stag
    | JOIK_STAG      joik_stag
    | JOIK_STAG joik empty_stag
    | JJ_STAG        jj_stag
    | JJ_STAG   jek  empty_stag
    | JJ_STAG   joik empty_stag
    | JJ_STAG        empty_stag
    ;

just_stag : stag_ke
          | stag_bo
          ;

empty_stag : STAG_KE
             { stag_lookahead_ke(); }
           | STAG_BO
             { stag_lookahead_bo(); }
           ;

joik_stag : joik stag_ke
          | joik stag_bo
          ;

jj_stag : joik stag_ke
        | joik stag_bo
        | jek  stag_ke
        | jek  stag_bo
        |      stag_ke
        |      stag_bo
        ;

stag_ke : stag STAG_KE
{ stag_lookahead_ke(); }
;

stag_bo : stag STAG_BO
{ stag_lookahead_bo(); }
;

stag :           simple_tense_modal
     | stag jek  simple_tense_modal
     | stag joik simple_tense_modal
     ;

joik :      STAG_SE STAG_JOI  STAG_NAI
     |      STAG_SE STAG_JOI
     |         STAG_JOI  STAG_NAI
     |         STAG_JOI
     |      STAG_SE STAG_BIhI STAG_NAI
     |      STAG_SE STAG_BIhI
     |         STAG_BIhI STAG_NAI
     |         STAG_BIhI
     | STAG_GAhO STAG_SE STAG_BIhI STAG_NAI STAG_GAhO
     | STAG_GAhO STAG_SE STAG_BIhI     STAG_GAhO
     | STAG_GAhO    STAG_BIhI STAG_NAI STAG_GAhO
     | STAG_GAhO    STAG_BIhI     STAG_GAhO
     ;

jek : STAG_NA STAG_SE STAG_JA STAG_NAI
    | STAG_NA STAG_SE STAG_JA
    | STAG_NA    STAG_JA STAG_NAI
    | STAG_NA    STAG_JA
    |    STAG_SE STAG_JA STAG_NAI
    |    STAG_SE STAG_JA
    |       STAG_JA STAG_NAI
    |       STAG_JA
    ;

simple_tense_modal : STAG_NAhE se_bai STAG_NAI STAG_KI
                   | STAG_NAhE se_bai STAG_NAI
                   | STAG_NAhE se_bai     STAG_KI
                   | STAG_NAhE se_bai
                   | STAG_NAhE    STAG_BAI STAG_NAI STAG_KI
                   | STAG_NAhE    STAG_BAI STAG_NAI
                   | STAG_NAhE    STAG_BAI     STAG_KI
                   | STAG_NAhE    STAG_BAI
                   |      se_bai STAG_NAI STAG_KI
                   |      se_bai STAG_NAI
                   |      se_bai     STAG_KI
                   |      se_bai
                   |         STAG_BAI STAG_NAI STAG_KI
                   |         STAG_BAI STAG_NAI
                   |         STAG_BAI     STAG_KI
                   |         STAG_BAI

                   | STAG_NAhE time  space STAG_CAhA STAG_KI
                   | STAG_NAhE time  space STAG_CAhA
                   | STAG_NAhE time  space      STAG_KI
                   | STAG_NAhE time  space
                   | STAG_NAhE time        STAG_CAhA STAG_KI
                   | STAG_NAhE time        STAG_CAhA
                   | STAG_NAhE time             STAG_KI
                   | STAG_NAhE time
                   |      time  space STAG_CAhA STAG_KI
                   |      time  space STAG_CAhA
                   |      time  space      STAG_KI
                   |      time  space
                   |      time        STAG_CAhA STAG_KI
                   |      time        STAG_CAhA
                   |      time             STAG_KI
                   |      time

                   | STAG_NAhE space time  STAG_CAhA STAG_KI
                   | STAG_NAhE space time  STAG_CAhA
                   | STAG_NAhE space time       STAG_KI
                   | STAG_NAhE space time 
                   | STAG_NAhE space       STAG_CAhA STAG_KI
                   | STAG_NAhE space       STAG_CAhA
                   | STAG_NAhE space            STAG_KI
                   | STAG_NAhE space
                   |      space time  STAG_CAhA STAG_KI
                   |      space time  STAG_CAhA
                   |      space time       STAG_KI
                   |      space time 
                   |      space       STAG_CAhA STAG_KI
                   |      space       STAG_CAhA
                   |      space            STAG_KI
                   |      space

                   |                             STAG_CAhA STAG_KI
                   |                             STAG_CAhA

                   | STAG_KI
                   | STAG_CUhE
                   ;

se_bai : STAG_SE STAG_BAI
       ;
time : STAG_ZI time_offset_seq zeha_pu_nai interval_property_seq
     | STAG_ZI time_offset_seq             interval_property_seq

     | STAG_ZI time_offset_seq zeha_pu_nai
     | STAG_ZI time_offset_seq

     | STAG_ZI                 zeha_pu_nai interval_property_seq
     | STAG_ZI                             interval_property_seq

     | STAG_ZI                 zeha_pu_nai
     | STAG_ZI                

     |    time_offset_seq zeha_pu_nai interval_property_seq
     |    time_offset_seq             interval_property_seq

     |    time_offset_seq zeha_pu_nai
     |    time_offset_seq

     |                    zeha_pu_nai interval_property_seq
     |                                interval_property_seq

     |                    zeha_pu_nai

     ;

zeha_pu_nai : STAG_ZEhA STAG_PU STAG_NAI
            | STAG_ZEhA STAG_PU
            | STAG_ZEhA
            ;


time_offset : STAG_PU STAG_NAI STAG_ZI
            | STAG_PU STAG_NAI
            | STAG_PU     STAG_ZI
            | STAG_PU
            ;

time_offset_seq : time_offset_seq time_offset
                |                 time_offset
                ;


space : STAG_VA space_offset_seq space_interval STAG_MOhI space_offset
      | STAG_VA space_offset_seq space_interval
      | STAG_VA space_offset_seq                STAG_MOhI space_offset
      | STAG_VA space_offset_seq

      | STAG_VA                  space_interval STAG_MOhI space_offset
      | STAG_VA                  space_interval
      | STAG_VA                                 STAG_MOhI space_offset
      | STAG_VA                 

      |    space_offset_seq space_interval STAG_MOhI space_offset
      |    space_offset_seq space_interval
      |    space_offset_seq                STAG_MOhI space_offset
      |    space_offset_seq

      |                     space_interval STAG_MOhI space_offset
      |                     space_interval
      |                                    STAG_MOhI space_offset
      ;

space_offset : STAG_FAhA STAG_NAI STAG_VA
             | STAG_FAhA STAG_NAI
             | STAG_FAhA     STAG_VA
             | STAG_FAhA
             ;

space_offset_seq : space_offset_seq space_offset
                 |                  space_offset
                 ;

space_interval : STAG_VEhA STAG_VIhA STAG_FAhA STAG_NAI space_int_props
               | STAG_VEhA STAG_VIhA STAG_FAhA     space_int_props
               | STAG_VEhA STAG_VIhA          space_int_props
               | STAG_VEhA      STAG_FAhA STAG_NAI space_int_props
               | STAG_VEhA      STAG_FAhA     space_int_props
               | STAG_VEhA               space_int_props
               |      STAG_VIhA STAG_FAhA STAG_NAI space_int_props
               |      STAG_VIhA STAG_FAhA     space_int_props
               |      STAG_VIhA          space_int_props

               | STAG_VEhA STAG_VIhA STAG_FAhA STAG_NAI
               | STAG_VEhA STAG_VIhA STAG_FAhA
               | STAG_VEhA STAG_VIhA
               | STAG_VEhA      STAG_FAhA STAG_NAI
               | STAG_VEhA      STAG_FAhA
               | STAG_VEhA
               |      STAG_VIhA STAG_FAhA STAG_NAI
               |      STAG_VIhA STAG_FAhA
               |      STAG_VIhA

               |                    space_int_props
               ;


space_int_props : space_int_props STAG_FEhE interval_property
                |                 STAG_FEhE interval_property
                ;

interval_property : number STAG_ROI STAG_NAI
                  | number STAG_ROI
                  | STAG_TAhE STAG_NAI
                  | STAG_TAhE
                  | STAG_ZAhO STAG_NAI
                  | STAG_ZAhO
                  ;

interval_property_seq : interval_property_seq interval_property
                      |                       interval_property
                      ;

number : STAG_PA
       | number STAG_PA
       | number lerfu_word
       ;


lerfu_string : lerfu_word
             | lerfu_string STAG_PA
             | lerfu_string lerfu_word
             ;

lerfu_word : STAG_BY
           | STAG_BU /* needs lexer tie-in */
           | STAG_LAU lerfu_word
           | STAG_TEI lerfu_string STAG_FOI
           ;