1 #@ MODIF tables Parsers DATE 15/02/2001 AUTEUR YESSAYAN A.YESSAYAN
3 Ce fichier définit une table de tags à utiliser avec le package
4 mxTextTools pour décoder un fichier au format Asterv5.
6 XXX Ce fichier doit etre corrigé pour incorporer deux modifications
7 réalisées dans la version V1_1p1 d'EFICAS
9 from TextTools import *
12 __version__="$Name: $"
13 __Id__="$Id: tables.tag,v 1.11.18.1 2001/06/15 17:20:24 iliade Exp $"
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 : '
28 ERRORS=(err0,err1,err2,err3,err4,err5,err6,err7,err8,err9,
31 white_set=set(whitespace)
33 delim=" ();:=,!&*/%\n"
39 whitespace + (MatchOk,)
45 (None,AllIn,' \t\n\r',+1)
48 (None,AllNotIn,';',+1),
55 (None,IsInSet,white_set,+1,+4),
56 (None,Is,'%',MatchFail),
58 (None,AllNotIn,'\n\r',+1),
59 (None,AllIn,'\n\r',+1),
61 (None,AllInSet,white_set,+1),
62 (None,Is,'%',MatchOk,-3),
66 (None,IsInSet,white_set,+1,+4),
67 (None,Is,'%',MatchFail),
69 (None,AllNotIn,'\n\r',+1),
70 (None,AllIn,'\n\r',+1),
72 (None,AllInSet,white_set,+1),
73 (None,Is,'%',MatchOk,-3),
80 (None,AllNotIn,'\n\r',+1),
81 (None,AllIn,'\n\r',+1,-2),
82 (None,AllInSet,white_set,+1,-3),
87 (None,IsIn,alpha+'_'),
88 (None,AllIn,alpha+'_'+number,MatchOk),
92 (None,IsIn,alpha+'_'),
93 (None,AllIn,alpha+'_'+number,MatchOk),
97 (None,IsIn,alpha+'_'),
98 (None,AllIn,alpha+'_'+number,+1),
99 (None,Table,t_commespaces,+1),
100 (None,Is,':',MatchFail),
105 (None,IsIn,alpha+'_'),
106 (None,AllIn,alpha+'_'+number,MatchOk),
113 (None,AllNotIn,"'",+1),
114 (None,Word,"''",+1,-1),
115 (None,Is,"'",MatchFail,MatchOk),
122 (None,IsIn,number,MatchFail,+4),
124 (None,IsIn,number,MatchFail),
125 (None,AllIn,number,+1),
128 (None,AllIn,number,+1),
129 # <exposant> # si pas exposant termine number trouve
130 (None,IsIn,'deDE',MatchOk),
132 (None,AllIn,number,MatchFail,MatchOk),
139 (None,IsIn,number,MatchFail,+4),
141 (None,IsIn,number,MatchFail),
142 (None,AllIn,number,+1),
145 (None,AllIn,number,+1),
146 # <exposant> # si pas exposant termine number trouve
147 (None,IsIn,'deDE',MatchOk),
149 (None,AllIn,number,MatchFail,MatchOk),
156 t_number + (MatchFail,), # ce n est pas un complexe
157 commespaces + (+1,), # a partir d ici c est un complexe => produire erreurs
160 t_number + (MatchFail,MatchOk),
162 ("MP",Word,'MP',MatchFail),
164 t_number + (MatchFail,), # ce n est pas un complexe
165 commespaces + (+1,), # a partir d ici c est un complexe => produire erreurs
168 t_number + (MatchFail,MatchOk),
170 (err7,Table,t_err,MatchFail,MatchOk),
174 ('par',Is,'(',+5,+1),
176 ('vexpr',Table,ThisTable,+26),
178 ('par2',Is,')',+25,+15),
180 t_complexe + (+1,+13),
181 ('sign',IsIn,'+-',+3,+1),
183 ('vexpr',Table,ThisTable,+19,+10),
184 ("PI",Word,'PI',+1,+9),
185 t_ident + (MatchFail,),
187 ('listpar',Is,'(',+6,+1), # on peut avoir une liste de parametres
190 ('param',Table,ThisTable,+13),
193 ('finlist',Is,')',+11),
196 ('exp',Word,'**',+3,+1),
198 ('vexpr',Table,ThisTable,+6,MatchOk),
199 ('op',IsIn,'+-*/',+3,+1),
201 ('vexpr',Table,ThisTable,+3,MatchOk),
202 (None,Jump,To,MatchOk),
204 (err0,Table,t_err,MatchFail,MatchOk),
206 (err10,Table,t_err,MatchFail,MatchOk),
208 (err9,Table,t_err,MatchFail,MatchOk),
217 t_vexpr + (MatchFail,),
225 (None,Is,')',+1,MatchOk),
227 (err7,Table,t_err,MatchFail,MatchOk),
236 ('vexpr',Table,t_vexpr,+3),
238 (None,Is,')',+1,MatchOk),
240 (err7,Table,t_err,MatchFail,MatchOk),
246 (None,AllIn,number,+1),
247 (None,IsIn,delim,MatchFail,+1),
254 (None,AllNotIn,'\n\r',+1),
255 (None,AllIn,'\n\r',MatchOk),
259 ('Null',AllIn,' ;\t\n\r')
263 (None,AllNotIn,newline,+1),
269 (None,AllNotIn,';',+1),
274 (None,AllNotIn,';',+1),
276 (None,AllNotIn,'\n',+1),
277 (None,Is,'\n',MatchOk,MatchOk),
283 (None,Word,'!FORMULE'),
287 ('type',Table,t_identificateur,+29),
293 ('id',Table,t_identificateur,+23),
298 ('typ',Table,t_identmc,+1),
300 ('id',Table,t_identificateur,+17),
308 ('vexpr',Table,t_vexpr,+9),
315 (None,AllNotIn,'\n',+1),
316 (None,Is,'\n',MatchOk,MatchOk),
318 (err0,Table,t_err,MatchFail,MatchOk),
320 (err9,Table,t_err,MatchFail,MatchOk),
325 (None,Word,'EVAL',+1,MatchFail), # EVAL n est pas un nom d operateur, il est reserve
326 (None,IsIn,alpha+'_'),
327 (None,AllIn,alpha+'_'+number,+1),
329 (None,Is,'(',MatchFail),
335 n_string + (+1,MatchOk),
341 (None,Is,'(',MatchFail),
344 t_complexe + (+1,+4),
346 t_eval_expr + (+1,+2),
347 t_arg + (MatchFail,+1),
351 (None,Is,')',-7,MatchOk),
356 (None,Is,'(',MatchFail),
357 ("comments",Table,t_commespaces,+1),
358 (None,Is,')',+1,MatchOk),
359 t_ident + (MatchFail,),
360 ("comments",Table,t_commespaces,+1),
361 (None,Is,':',MatchFail), # a partir d ici on est dans un mot cle facteur (erreurs eventuelles)
363 ("comments",Table,t_commespaces,+1),
365 t_complexe + (+1,+4),
367 t_eval_expr + (+1,+2),
370 ("comments",Table,t_commespaces,+1),
372 ("comments",Table,t_commespaces,+1),
373 (None,Is,')',+1,MatchOk),
375 ("comments",Table,t_commespaces,+1),
376 (None,Is,':',+1,-12),
378 (err7,Table,t_err,MatchFail,MatchOk),
382 ('comm',Table,( # on attend les arguments entre () sinon erreur
385 (None,Is,')',+1,MatchOk),
399 t_complexe + (+1,+4),
401 t_eval_expr + (+1,+2),
408 (None,Is,')',-17,MatchOk),
410 (err1,Table,t_err,MatchFail,MatchOk),
417 t_complexe + (+1,+5),
419 t_eval_expr + (+1,+3),
423 (None,Jump,To,MatchOk),
425 (err0,Table,t_err,MatchFail,MatchOk),
437 t_comm + (MatchFail,MatchOk),
439 t_affe + (MatchFail,MatchOk),
441 (err8,Table,t_err,MatchFail,MatchOk),
449 (None,Is,'=',+3,+1), # on a affaire a un operateur ou une affectation
455 t_comm + (+2,MatchOk),
457 t_affe + (+1,MatchOk),
459 (err0,Table,t_err,MatchFail,MatchOk),
461 (err8,Table,t_err,MatchFail,MatchOk),
468 ('ident',Word,"FIN"),
470 (None,Is,'(',MatchFail), # On est vraiment sur d avoir la commande FIN apres avoir identifie (
471 # On recule d un caractere pour identifier les arguments entre parenthèses
473 t_comm + (+1,MatchOk),
474 (err0,Table,t_err,MatchFail,MatchOk),
477 (None,Is,';',+1,MatchOk),
479 (err0,Table,t_err,MatchFail,MatchOk),
486 t_reuse + (MatchFail,+2),
487 t_noreuse + (MatchFail,),
490 (None,Is,';',+1,MatchOk),
492 (err0,Table,t_err,MatchFail,MatchOk),
497 t_nullline + (+1,+0),
501 t_commande + (+1,-4),
502 t_passline + (+1,-5),
505 t_nullline + (+1,+0),
506 t_passline + (+1,-1),