Salome HOME
Version initiale de EFICAS 1.2
[tools/eficas.git] / convert / Parserv5 / tables.tag
1 #@ MODIF tables Parsers DATE 15/02/2001    AUTEUR YESSAYAN A.YESSAYAN
2 """
3     Ce fichier définit une table de tags à utiliser avec le package
4     mxTextTools pour décoder un fichier au format Asterv5.
5
6     XXX Ce fichier doit etre corrigé pour incorporer deux modifications
7     réalisées dans la version V1_1p1 d'EFICAS
8 """
9 from TextTools import *
10
11 #
12 __version__="$Name:  $"
13 __Id__="$Id: tables.tag,v 1.11.18.1 2001/06/15 17:20:24 iliade Exp $"
14 #
15
16 err0='ERR0 , erreur non identifiee : '
17 err1='ERR1 , arguments commande errones : '
18 err2='ERR2 , parenthese obligatoire : '
19 err3='ERR3 , point virgule obligatoire : '
20 err4='ERR4 , ":" obligatoire avant mot cle : '
21 err5='ERR5 , mot cle facteur ou arg obligatoire : '
22 err6='ERR6 , identificateur obligatoire : '
23 err7='ERR7 , mot cle facteur errone : '
24 err8='ERR8 , signe = ou ( attendu : '
25 err9='ERR9 , ( attendue : '
26 err10='ERR10 , vexpr attendue : '
27
28 ERRORS=(err0,err1,err2,err3,err4,err5,err6,err7,err8,err9,
29         err10)
30
31 white_set=set(whitespace)
32
33 delim=" ();:=,!&*/%\n"
34
35 whitespace is:
36     AllIn ' \t'
37
38 opt_whitespace is:
39     whitespace F:MatchOk
40
41 t_opt_whitespace is:
42     whitespace F:next
43
44 t_opt_whitenl is:
45   AllIn ' \t\n\r' F:next
46
47 t_err = Table is:
48     AllNotIn ';' F:next
49     Is ';'
50     Skip back
51
52 commespaces is:
53     'comments' = Table is:
54       IsInSet white_set F:next T:<blancs>
55       Is '%' F:MatchFail
56       <comment>
57       AllNotIn '\n\r' F:next
58       AllIn '\n\r' F:next
59       <blancs>
60       AllInSet white_set F:next
61       Is '%' F:MatchOk T:<comment>
62
63 t_commespaces = Table is:
64       IsInSet white_set F:next T:<blancs>
65       Is '%' F:MatchFail
66       <comment>
67       AllNotIn '\n\r' F:next
68       AllIn '\n\r' F:next
69       <blancs>
70       AllInSet white_set F:next
71       Is '%' F:MatchOk T:<comment>
72
73 x_commespaces is:
74     'comments' = Table is:
75          <debut>
76          Is '%':
77             AllNotIn '\n\r' F:next
78             AllIn '\n\r' F:next T:<debut>
79          AllInSet white_set F:next T:<debut>
80  
81 t_ident is:
82     'ident' = Table is:
83       IsIn alpha+'_'
84       AllIn alpha+'_'+number F:MatchOk
85
86 t_identificateur = Table is:
87       IsIn alpha+'_'
88       AllIn alpha+'_'+number F:MatchOk
89
90 t_identmc = Table is:
91       IsIn alpha+'_'
92       AllIn alpha+'_'+number F:next
93       None = Table t_commespaces F:next
94       Is ':' F:MatchFail
95
96 n_ident is:
97     None = Table is:
98       IsIn alpha+'_'
99       AllIn alpha+'_'+number F:MatchOk
100
101 n_string is:
102     None = Table is:
103       Is "'"
104       <loop>
105       AllNotIn "'" F:next
106       Word "''" F:next T:<loop>
107       Is "'" F:MatchFail T:MatchOk
108
109 t_number is:
110     'num' = Table is:
111       IsIn '-+' F:next
112       Is '.' F:<entiere>
113       IsIn number  F:MatchFail T:<decimal>
114       <entiere>
115       IsIn number F:MatchFail
116       AllIn number F:next
117       Is '.' F:<exposant>
118       <decimal>
119       AllIn number F:next
120       <exposant>   # si pas exposant termine number trouve
121       IsIn 'deDE' F:MatchOk
122       IsIn '-+' F:next
123       AllIn number F:MatchFail T:MatchOk
124
125 n_number is:
126     None = Table is:
127       IsIn '-+' F:next
128       Is '.' F:<entiere>
129       IsIn number  F:MatchFail T:<decimal>
130       <entiere>
131       IsIn number F:MatchFail
132       AllIn number F:next
133       Is '.' F:<exposant>
134       <decimal>
135       AllIn number F:next
136       <exposant>   # si pas exposant termine number trouve
137       IsIn 'deDE' F:MatchOk
138       IsIn '-+' F:next
139       AllIn number F:MatchFail T:MatchOk
140
141 t_complexe is:
142   'CPLX' = Table is:
143     "RI" = Word 'RI' F:<mp>
144     commespaces F:next
145     t_number F:MatchFail  # ce n est pas un complexe
146     commespaces F:next # a partir d ici c est un complexe => produire erreurs
147     Is ',' F:next
148     commespaces F:next
149     t_number F:MatchFail T:MatchOk
150     <mp>
151     "MP" = Word 'MP' F:MatchFail
152     commespaces F:next
153     t_number F:MatchFail  # ce n est pas un complexe
154     commespaces F:next # a partir d ici c est un complexe => produire erreurs
155     Is ',' F:next
156     commespaces F:next
157     t_number F:MatchFail T:MatchOk
158     <err>
159     err7 = Table t_err F:MatchFail T:MatchOk
160
161 t_vexpr = Table is:
162     'par' = Is '(':
163       commespaces F:next
164       'vexpr' = Table ThisTable F:<err10> 
165       commespaces F:next
166       'par2' = Is ')' F:<err9> T:<op>
167     t_number F:next T:<op>
168     t_complexe F:next T:<op>
169     'sign' = IsIn '+-':
170       commespaces F:next
171       'vexpr' = Table ThisTable F:<err10> T:<op>
172     "PI" = Word 'PI' F:next T:<op>
173     t_ident F:MatchFail
174     commespaces F:next
175     'listpar' = Is '(': # on peut avoir une liste de parametres
176       <params>
177       commespaces F:next
178       'param' = Table ThisTable F:<err10> 
179       commespaces F:next
180       Is ',' F:next T:<params>
181       'finlist' = Is ')' F:<err9>
182     <op>
183     commespaces F:next
184     'exp' = Word '**':
185       commespaces F:next
186       'vexpr' = Table ThisTable F:<err10> T:MatchOk
187     'op' = IsIn '+-*/':
188       commespaces F:next
189       'vexpr' = Table ThisTable F:<err10> T:MatchOk
190     Jump To MatchOk
191     <err>
192     err0 = Table t_err F:MatchFail T:MatchOk
193     <err10>
194     err10 = Table t_err F:MatchFail T:MatchOk
195     <err9>
196     err9 = Table t_err F:MatchFail T:MatchOk
197
198 t_liste_param is:
199   'liste' = Table is:
200     t_ident 
201     commespaces F:next
202     Is '('
203     commespaces F:next
204     t_vexpr F:MatchFail
205     <suite>
206     commespaces F:next
207     Is ',' F:<fin>
208     commespaces F:next
209     t_vexpr F:<err> T:<suite>
210     <fin>
211     commespaces F:next
212     Is ')' F:<err> T:MatchOk
213     <err>
214     err7 = Table t_err F:MatchFail T:MatchOk
215
216 t_eval_expr is:
217   'EVAL' = Table is:
218     Word 'EVAL' 
219     commespaces F:next
220     Is '(' F:<err>
221     commespaces F:next
222     'vexpr' = Table t_vexpr F:<err>
223     commespaces F:next
224     Is ')' F:<err> T:MatchOk
225     <err>
226     err7 = Table t_err F:MatchFail T:MatchOk
227
228 t_entier is:
229     'entier' = Table is:
230       IsIn number 
231       AllIn number F:next
232       IsIn delim T:next
233       Skip back
234
235 t_comment is:
236   'comment' = Table is:
237      Is '%'
238      AllNotIn '\n\r' F:next
239      AllIn '\n\r' F:MatchOk
240
241 t_nullline is:
242   'Null' = AllIn ' ;\t\n\r'
243
244 t_passline is:
245   'passline' = Table is:
246     AllNotIn newline F:next
247     IsIn newline
248
249 t_reste is:
250   'reste' = Table is:
251     AllNotIn ';' F:next
252
253 t_rest2 is:
254   'reste' = Table is:
255     AllNotIn ';' F:next
256     Is ';'
257     AllNotIn '\n' F:next
258     Is '\n' F:MatchOk T:MatchOk
259
260 t_formule is:
261   'formule' = Table is:
262     commespaces F:next
263     Word '!FORMULE' 
264     commespaces F:next
265     Is '(' F:<err9>
266     commespaces F:next
267     'type' = Table t_identificateur F:<err>
268     commespaces F:next
269     Is ':' F:<err>
270     commespaces F:next
271     Is '(' F:<err9>
272     commespaces F:next
273     'id' = Table t_identificateur F:<err>
274     commespaces F:next
275     Is '(' F:<err9>
276     <params>
277     commespaces F:next
278     'typ' = Table t_identmc F:next
279     commespaces F:next
280     'id' = Table t_identificateur F:<err>
281     commespaces F:next
282     Is ',' F:next T:<params>
283     commespaces F:next
284     Is ')' F:<params>
285     commespaces F:next
286     Is '=' F:<err>
287     commespaces F:next
288     'vexpr' = Table t_vexpr F:<err>
289     commespaces F:next
290     Is ')' F:<err9>
291     commespaces F:next
292     Is ')' F:<err9>
293     commespaces F:next
294     Is ';' F:<err>
295     AllNotIn '\n' F:next
296     Is '\n' F:MatchOk T:MatchOk
297     <err>
298     err0 = Table t_err F:MatchFail T:MatchOk
299     <err9>
300     err9 = Table t_err F:MatchFail T:MatchOk
301     
302 t_nom_ope is:
303     'nom_ope' = Table is:
304       Word 'EVAL' F:next T:MatchFail   # EVAL n est pas un nom d operateur, il est reserve
305       IsIn alpha+'_'
306       AllIn alpha+'_'+number F:next
307       commespaces F:next
308       Is '(' F:MatchFail
309       Skip back
310
311 t_arg is:
312   'arg' = Table is:
313     n_string F:next T:MatchOk
314     n_ident 
315
316 t_larg is:
317   'larg' = Table is:
318     Is '(' F:MatchFail
319     <arg>
320     commespaces F:next
321     t_complexe F:next T:<suite>
322     t_number F:next T:<suite>
323     t_eval_expr F:next T:<suite>
324     t_arg F:MatchFail T:<suite>
325     <suite>
326     commespaces F:next
327     Is ',' F:next
328     Is ')' F:<arg> T:MatchOk
329
330 t_mcf is:
331   'mcf' = Table is:
332     Is '(' F:MatchFail
333     "comments" = Table t_commespaces F:next
334     Is ')' F:next T:MatchOk
335     t_ident F:MatchFail
336     "comments" = Table t_commespaces F:next
337     Is ':' F:MatchFail # a partir d ici on est dans un mot cle facteur (erreurs eventuelles)
338     <args>
339     "comments" = Table t_commespaces F:next
340     t_larg F:next T:<suite>
341     t_complexe F:next T:<suite>
342     t_number F:next T:<suite>
343     t_eval_expr F:next T:<suite>
344     t_arg F:<err>
345     <suite>
346     "comments" = Table t_commespaces F:next
347     Is ',' F:next
348     "comments" = Table t_commespaces F:next
349     Is ')' F:next T:MatchOk
350     t_ident F:<err>
351     "comments" = Table t_commespaces F:next
352     Is ':' F:<err> T:<args>
353     <err>
354     err7 = Table t_err F:MatchFail T:MatchOk
355
356 t_comm is:
357   'comm' = Table is: # on attend les arguments entre () sinon erreur
358     Is '(' F:<err>
359     commespaces F:next
360     Is ')' F:<call> T:MatchOk
361     <call>
362     t_ident F:<err>
363     commespaces F:next
364     Is ':' F:<err>
365     commespaces F:next
366     t_mcf F:<args>
367     <mcfsuite>
368     commespaces F:next
369     Is ',' F:next
370     commespaces F:next
371     t_mcf F:<sep> T:<mcfsuite>
372     <args>
373     t_larg F:next T:<suite>
374     t_complexe F:next T:<suite>
375     t_number F:next T:<suite>
376     t_eval_expr F:next T:<suite>
377     t_arg F:<err>
378     <suite>
379     commespaces F:next
380     <sep>
381     Is ',' F:next
382     commespaces F:next
383     Is ')' F:<call> T:MatchOk
384     <err>
385     err1 = Table t_err F:MatchFail T:MatchOk
386
387 t_affe is:
388   'affe' = Table is:
389     commespaces F:next
390     t_larg F:next T:<suite>
391     t_complexe F:next T:<suite>
392     t_number F:next T:<suite>
393     t_eval_expr F:next T:<suite>
394     t_arg F:next T:<suite>
395     Jump To <err>
396     <suite>
397     Jump To MatchOk
398     <err>
399     err0 = Table t_err F:MatchFail T:MatchOk
400
401 t_reuse is:
402   'reuse' = Table is:
403     t_opt_whitespace
404     t_ident
405     t_opt_whitespace
406     Is '=' F:<err>
407     t_opt_whitespace
408     t_nom_ope F:<affe> T:<comm>
409     <comm>
410     t_comm F:MatchFail T:MatchOk
411     <affe>
412     t_affe F:MatchFail T:MatchOk
413     <err>
414     err8 = Table t_err F:MatchFail T:MatchOk
415
416 t_noreuse is:
417   'noreuse' = Table is:
418     t_opt_whitespace
419     t_ident
420     t_opt_whitenl
421     Is '=':    # on a affaire a un operateur ou une affectation
422       t_opt_whitespace
423       t_nom_ope F:<affe> T:<comm>
424     Is '(' F:<err8> T:next
425     Skip back
426     <comm>
427     t_comm F:<err> T:MatchOk
428     <affe>
429     t_affe F:<err> T:MatchOk
430     <err>
431     err0 = Table t_err F:MatchFail T:MatchOk
432     <err8>
433     err8 = Table t_err F:MatchFail T:MatchOk
434
435 t_fin is:
436   'commande' = Table is:
437     'noreuse' = Table is:
438       t_opt_whitespace
439       'ident' = Word "FIN"
440       t_opt_whitenl
441       Is '(' F:MatchFail  # On est vraiment sur d avoir la commande FIN apres avoir identifie (
442       # On recule d un caractere pour identifier les arguments entre parenthèses
443       Skip back
444       t_comm F:next T:MatchOk
445       err0 = Table t_err F:MatchFail T:MatchOk
446     commespaces F:next
447     Is ';' F:<err> T:MatchOk
448     <err>
449     err0 = Table t_err F:MatchFail T:MatchOk
450
451 t_commande is:
452   'commande' = Table is:
453     t_opt_whitespace
454     Is '&':
455       t_reuse F:MatchFail T:<fin>
456     t_noreuse F:MatchFail 
457     <fin>
458     commespaces F:next
459     Is ';' F:<err> T:MatchOk
460     <err>
461     err0 = Table t_err F:MatchFail T:MatchOk
462
463 aster_script = Table is:
464   <top>
465   t_nullline F:next T:<top>
466   t_comment F:next T:<top>
467   t_formule F:next T:<top>
468   t_fin     F:next T:<AfterFin>
469   t_commande F:next T:<top>
470   t_passline F:next T:<top>
471   EOF Here F:<top>
472   <AfterFin>
473   t_nullline F:next T:<AfterFin>
474   t_passline F:next T:<AfterFin>
475   EOF Here F:<AfterFin>
476
477
478