]> SALOME platform Git repositories - tools/eficas.git/blob - convert/autre_parseur.py
Salome HOME
0f35c27a3a8e92b94b9178e938b2bfb34176e5fb
[tools/eficas.git] / convert / autre_parseur.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013   EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 from __future__ import absolute_import
21 from __future__ import print_function
22 try : 
23   from future import standard_library
24   standard_library.install_aliases()
25 except :
26   pass
27 try : 
28   from builtins import str
29 except :
30   pass
31 from builtins import object
32 import sys,re,tokenize
33 import io
34
35
36 class ENTITE_JDC(object) :
37     def __init__(self):
38         self.texte = ''
39
40     def set_text(self,texte):
41         self.texte = texte
42
43     def append_text(self,texte):
44         """
45         """
46         self.texte = self.texte +texte
47
48 class COMMENTAIRE(ENTITE_JDC):
49
50     def __str__(self):
51         """
52         Retourne une chaine de caracteres representant self
53         sous une forme interpretable par EFICAS
54         """
55         t=repr(self.texte)
56         return "COMMENTAIRE(u"+t+")\n"
57
58     def append_text(self,texte):
59         """
60         Ajoute texte a self.texte en enlevant le # initial
61         """
62         if texte[0] == '#':
63             self.texte = self.texte+texte[1:]
64         else:
65             # le diese n'est pas sur le premier caractere
66             amont,aval = texte.split('#',1) # on decoupe suivant la premiere occurrence de #
67             self.texte = self.texte +amont + aval
68         
69 class AFFECTATION(ENTITE_JDC):
70
71     def append_text(self,texte):
72         """
73         Ajoute texte a self.texte en enlevant tout retour chariot et tout point virgule
74         """
75         self.texte = self.texte+texte
76         
77     def __str__(self):
78         """
79         Retourne une expression de l'affectation comprehensible par ACCAS
80         et exploitable par EFICAS
81         """
82         #t=repr(self.texte)
83         t=self.texte
84         return "PARAMETRE(nom='"+self.name+"',valeur="+t+")"
85
86 class COMMANDE_COMMENTARISEE(ENTITE_JDC):
87
88     def append_text(self,texte):
89         """
90         Ajoute texte a self.texte en enlevant les doubles commentaires
91         """
92         texte = texte.strip()
93         texte = texte[2:].strip()
94         self.texte = self.texte+(len(self.texte)>0)*'\n'+texte
95
96     def __str__(self):
97         """
98         Retourne une expression de la commande commentarisee comprehensible par ACCAS
99         et exploitable par EFICAS
100         """
101         return "COMMANDE_COMM(texte="+repr(self.texte)+")\n"
102
103         
104 next = {}
105 next['if'] = next['elif'] = 'elif', 'else', 'end'
106 next['while'] = next['for'] = 'else', 'end'
107 next['try'] = 'except', 'finally'
108 next['except'] = 'except', 'else', 'end'
109 next['else'] = next['finally'] = next['def'] = next['class'] = 'end'
110 next['end'] = ()
111 start = 'if', 'while', 'for', 'try', 'def', 'class'
112
113 class PARSEUR_PYTHON(object):
114     """
115     Cette classe sert a creer un objet PARSEUR_PYTHON qui realise l'analyse d'un texte 
116     representant un JDC Python en distinguant :
117       - les commentaires inter commandes
118       - les affectations
119       - les commandes
120     """
121     # au moins 1 caractere non blanc ou non tabulation
122     #pattern_ligne_non_blanche = re.compile(r'^[\w\t]+')
123     pattern_ligne_non_blanche = re.compile(r'[^ \t]+')
124     kwprog = re.compile(
125                 r'^\s*(?P<kw>[a-z]+)'
126                 r'(\s+(?P<id>[a-zA-Z_]\w*))?'
127                 r'[^\w]')
128     endprog = re.compile(
129                 r'^\s*#?\s*end\s+(?P<kw>[a-z]+)'
130                 r'(\s+(?P<id>[a-zA-Z_]\w*))?'
131                 r'[^\w]')
132     wsprog = re.compile(r'^[ \t]*')
133     optionprog=re.compile(r'#\s*parse:\s*([^\n\'"]*)$')
134
135     def __init__(self,texte):
136         # on verifie que le texte fourni se compile correctement
137         compile(texte,"<string>",'exec')
138         self.texte = io.StringIO(texte)
139         self.line=''
140         self.out=""
141         self.lastcol = 0
142         self.lastrow = 1
143         self.please_indent = 1
144         self.indent_list = []
145         self.indentation=0
146         self.paren_level=0
147         self.affectation=0
148         self.indent_list=[""]
149         self.objet_courant=None
150         self.affectation_flag=1
151         self.comment_flag=1
152         self.buffer=[]
153         self.buffer_indent=""
154
155     def getoptions(self):
156         m= self.optionprog.match(self.line)
157         if m:
158            option=m.group(1)
159            name=option[1:]
160            flag=(option[0] == '+')
161            if name == "affectation": self.affectation_flag=flag
162            if name == "comment": self.comment_flag=flag
163            if name == "all": 
164               self.comment_flag=flag
165               self.affectation_flag=flag
166
167     def readline(self):
168         self.line= self.texte.readline()
169         #print "line:",self.line
170         # option ?
171         self.getoptions()
172         return self.line
173
174     def get_texte(self,appli=None):
175         """
176            Retourne le texte issu de l'analyse
177         """
178         for tk in tokenize.generate_tokens(self.readline):
179             self.process_token(tk)
180         return self.out
181
182     def process_token(self, tk):
183         """
184         """
185         ttype, tstring, spos, epos, line = tk
186         thisrow, thiscol = spos
187         #print spos, epos,tokenize.tok_name[ttype],self.lastrow, self.lastcol
188
189         if thisrow > self.lastrow:
190             # si plusieurs lignes (>1)
191             self.out=self.out+"\n" * (thisrow - self.lastrow - 1)
192             self.lastcol = 0
193
194 #        if thiscol > self.lastcol :
195 #            self.out=self.out+ " " * (thiscol - self.lastcol)
196 #            self.please_indent = None
197
198         self.thiscol=thiscol
199         #self.nextrow, self.nextcol = epos
200
201         try:
202             fn = getattr(self, tokenize.tok_name[ttype])
203         except AttributeError:
204             print( "No match!", tokenize.tok_name[ttype], tstring)
205             return
206
207         if ttype != tokenize.DEDENT and ttype != tokenize.INDENT and self.please_indent:
208             self.do_indent()
209
210         fn(tstring)
211         self.lastrow, self.lastcol = epos
212
213     def output(self,tstring):
214         #print "output",tstring
215
216         if self.thiscol > self.lastcol :
217             #print self.thiscol,self.lastcol
218             self.out=self.out+ " " * (self.thiscol - self.lastcol)
219             self.lastcol=self.thiscol
220
221         self.out=self.out+tstring
222
223     def output_com(self,tstring):
224         self.out=self.out+tstring
225
226     def update_indent(self):
227         #print "update_indent",len(self.indent_list[-1]),len(self.buffer_indent)
228         if len(self.indent_list[-1]) > len(self.buffer_indent):
229            self.out=self.out+(len(self.indent_list[-1]) - len(self.buffer_indent))*" "
230            self.buffer_indent=self.indent_list[-1]
231
232     def do_indent(self):
233         #print "indentation dans do_indent",len(self.indent_list)
234
235         self.out=self.out+self.indent_list[-1]
236         self.buffer_indent=self.indent_list[-1]
237         if self.lastcol+len(self.indent_list[-1]) > self.thiscol:
238            self.lastcol=self.thiscol
239         else:
240            self.lastcol=self.lastcol+len(self.indent_list[-1])
241         self.please_indent = None
242
243     def flush_buffer(self):
244         #if self.buffer:
245         #   print len(self.indent_list),self.please_indent
246         for ob in self.buffer:
247            self.out= self.out+ str(ob)
248            self.do_indent()
249         self.buffer=[]
250         self.objet_courant=None
251
252     def NL(self, tstring):
253         if self.affectation:
254            if self.paren_level == 0:
255               # affectation en cours mais complete
256               self.out= self.out+ str(self.affectation_courante)
257               self.affectation_courante=None
258               self.please_indent=1
259               self.affectation=0
260            else:
261               # affectation en cours, on ajoute
262               if self.thiscol > self.lastcol :self.affectation_courante.append_text((self.thiscol - self.lastcol)*" ")
263               self.affectation_courante.append_text(tstring)
264               return
265            
266         if self.objet_courant:
267            self.objet_courant=None
268            self.buffer.append(tstring)
269         #   self.please_indent = None
270            return
271         self.output(tstring)
272         self.please_indent = 1
273
274     def COMMENT(self, tstring):
275         liste= string.split(self.line,"##",1)
276         if len(liste) > 1:
277            # On a trouve un double commentaire
278            before,after=liste
279            if self.affectation:
280               # affectation en cours, on ignore
281               pass
282            elif self.paren_level > 0:
283               self.output(tstring)
284            elif self.comment_flag and not self.pattern_ligne_non_blanche.search(before):
285               # il s'agit d'une commande commentarisee
286               if self.objet_courant == None:
287                  if not self.buffer:self.buffer_indent=self.indent_list[-1]
288                  self.objet_courant=COMMANDE_COMMENTARISEE()
289                  self.buffer.append(self.objet_courant)
290                  self.objet_courant.append_text(tstring)
291                  self.please_indent = None
292               elif isinstance(self.objet_courant,COMMENTAIRE):
293                  self.objet_courant=COMMANDE_COMMENTARISEE()
294                  self.buffer.append(self.objet_courant)
295                  self.objet_courant.append_text(tstring)
296                  self.please_indent = None
297               else:
298                  self.objet_courant.append_text(tstring)
299                  self.please_indent = None
300            else:
301               # commentaire inline
302               self.output(tstring)
303               self.please_indent = 1
304            return
305
306         else:
307            # On a un commentaire simple
308            new_line = self.line.split('#')[0]
309            if self.affectation:
310               # affectation en cours, on ignore
311               pass
312            elif self.paren_level > 0:
313               self.output(tstring)
314            elif self.comment_flag and not self.pattern_ligne_non_blanche.search(new_line):
315               # commentaire precede de blancs
316               if self.objet_courant == None:
317                  if not self.buffer:self.buffer_indent=self.indent_list[-1]
318                  self.objet_courant=COMMENTAIRE()
319                  self.buffer.append(self.objet_courant)
320                  self.objet_courant.append_text(tstring)
321                  self.please_indent = None
322               elif isinstance(self.objet_courant,COMMANDE_COMMENTARISEE):
323                  self.objet_courant=COMMENTAIRE()
324                  self.buffer.append(self.objet_courant)
325                  self.objet_courant.append_text(tstring)
326                  self.please_indent = None
327               else:
328                  self.objet_courant.append_text(tstring)
329                  self.please_indent = None
330            else:
331               # commentaire inline
332               self.output(tstring)
333               self.please_indent = 1
334            return
335
336     def ERRORTOKEN(self, tstring):
337         print("ERRORTOKEN", tstring)
338
339     def NAME(self, tstring):
340         if self.buffer:
341            self.update_indent()
342         self.flush_buffer()
343
344         if self.affectation ==1:
345            # on a une expression du type NAME=NAME
346            # on ne veut pas des expressions qui commencent par NAME=NAME(NAME=
347            # on en prend le chemin : on met affectation a 3 pour le signaler
348            # on attend d'en savoir plus
349            if self.thiscol > self.lastcol :self.affectation_courante.append_text((self.thiscol - self.lastcol)*" ")
350            self.affectation_courante.append_text(tstring)
351            self.affectation=3
352            return
353         elif self.affectation ==4:
354            # on a une expression qui commence par NAME=NAME(NAME
355            # il s'agit tres probablement d'une commande
356            # on annule l'affectation en cours
357            if self.thiscol > self.lastcol :self.affectation_courante.append_text((self.thiscol - self.lastcol)*" ")
358            self.affectation_courante.append_text(tstring)
359            self.affectation=5
360            return
361         elif self.affectation == 2:
362            # affectation en cours, on ajoute
363            if self.thiscol > self.lastcol :self.affectation_courante.append_text((self.thiscol - self.lastcol)*" ")
364            self.affectation_courante.append_text(tstring)
365            self.affectation=2
366            return
367         self.affectation=0
368         self.name=None
369         if self.paren_level == 0 and self.affectation_flag: 
370            # si on est en dehors de parentheses et en mode transformation d'affectation
371            # on initialise l'attribut name qui indique une affectation en cours
372            self.name=tstring
373         self.output(tstring)
374
375     def ident(self, tstring):
376         self.flush_buffer()
377         self.affectation=0
378         self.output(tstring)
379
380     def NUMBER(self, tstring):
381         self.flush_buffer()
382         if self.affectation>=1:
383            # affectation en cours, on ajoute
384            if self.thiscol > self.lastcol :self.affectation_courante.append_text((self.thiscol - self.lastcol)*" ")
385            self.affectation_courante.append_text(tstring)
386            self.affectation=2
387            return
388         self.output(tstring)
389
390     def OP(self,tstring):
391         self.flush_buffer()
392         if tstring in ('(','[','{'): self.paren_level=self.paren_level+1
393         if tstring in (')',']','}'): self.paren_level=self.paren_level-1
394
395         if tstring == '=' and self.affectation ==5:
396            # on a une expression qui commence par NAME=NAME(NAME=)
397            # il peut s'agir d'une commande
398            # on annule l'affectation en cours
399            self.out= self.out+ self.affectation_courante.texte
400            self.affectation_courante=None
401            self.name=None
402            self.affectation=0
403         elif tstring == ')' and self.affectation ==4:
404            # on a une expression qui commence par NAME=NAME()
405            # il peut s'agir d'une commande
406            # on annule l'affectation en cours
407            self.out= self.out+ self.affectation_courante.texte
408            self.affectation_courante=None
409            self.affectation=0
410         elif tstring == '(' and self.affectation == 3:
411            # on a deja trouve NAME=NAME
412            # on passe affectation a 4
413            if self.thiscol > self.lastcol :self.affectation_courante.append_text((self.thiscol - self.lastcol)*" ")
414            self.affectation_courante.append_text(tstring)
415            self.affectation=4
416            return
417         elif tstring == ';' and self.affectation>=1:
418            # l'affectation est terminee
419            self.out= self.out+ str(self.affectation_courante)
420            self.affectation_courante=None
421            self.please_indent=1
422            self.affectation=0
423         elif self.affectation>=1:
424            # on complete l'affectation
425            if self.thiscol > self.lastcol :self.affectation_courante.append_text((self.thiscol - self.lastcol)*" ")
426            self.affectation_courante.append_text(tstring)
427            self.affectation=2
428            return
429
430         self.affectation=0
431         if self.name and tstring=='=': 
432            self.affectation=1
433            self.affectation_courante=AFFECTATION()
434            self.affectation_courante.name=self.name
435         self.output(tstring)
436
437     ENDMARKER = ident
438     NEWLINE=NL
439
440     def INDENT(self, tstring):
441         #tstring=str(len(self.indent_list))*len(tstring)
442         self.indent_list.append(tstring) 
443         #print "indentation dans INDENT",len(self.indent_list),len(tstring)
444         self.affectation=0
445         if self.buffer:
446            self.update_indent()
447         self.flush_buffer()
448
449     def DEDENT(self, tstring):
450         #print "DEDENT",tstring,len(tstring)
451         if self.buffer:
452            self.out= self.out+ str(self.buffer[0])
453            if len(self.buffer) > 1:
454               for ob in self.buffer[1:]:
455                   self.do_indent()
456                   self.out= self.out+ str(ob)
457            self.buffer=[]
458            self.objet_courant=None
459            self.please_indent=1
460
461         self.affectation=0
462         self.indent_list = self.indent_list[:-1] 
463         #print "indentation dans DEDENT",len(self.indent_list)
464
465     def STRING(self, tstring):
466         self.flush_buffer()
467         if self.affectation>=1:
468            # affectation en cours, on ajoute
469            if self.thiscol > self.lastcol :self.affectation_courante.append_text((self.thiscol - self.lastcol)*" ")
470            self.affectation_courante.append_text(tstring)
471            self.affectation=2
472            return
473         self.output(tstring)
474
475 if __name__ == "__main__" :
476     import sys
477     import io
478     text="""
479 #
480 #   comment
481 #   comment
482 #   comment
483 #
484
485 import sys,os
486
487 # commentaire
488 # commentaire
489 # commentaire
490
491 DEBUT();
492 ##toto = FORMULE(REEL='(REEL:A) = A',);
493
494 x=2*cos(90.)/34.
495
496 a=1.
497 if a != 0:
498   a=+1
499
500 b=2.
501 c=a+b
502 #if 1:
503 #  d=3
504 #  e=5
505 #try:
506 #  a=1/2
507 #except KeyError:
508 #  pass
509
510 if 1:
511   a=2
512   b=3
513                # commenta
514 else:
515   # commen
516   # commen
517   a=3
518                #qqqqqqqqqqqqqqqqqqqqqqqq
519   c=5
520
521 b=5
522           # commentaire
523 toto = FORMULE(REEL='(REEL:A) = A',);
524 titi = FORMULE(REEL='(REEL:A) = A',) # commentaire inline
525 tutu = FORMULE(REEL='(REEL:A) = A',) ## commentaire inline
526
527 TEST_TABLE( TABLE=RELV[k],
528                FILTRE=(
529                         _F( NOM_PARA = 'QUANTITE',
530                             VALE_K = 'MAXIMUM'),),
531         # commentaire 
532                NOM_PARA='VMIS',  # comm
533                VALE=1.9669824189084E9,
534                REFERENCE='NON_REGRESSION',
535                VERSION='8.1.0'  )
536
537 if 1:
538    a=fff(a=1,
539          b=2)
540 if 1:
541   a=2
542   b=3
543                # commenta
544 else:
545   # commen
546   # commen
547   a=3
548
549 for k in range(1,10):
550
551    # Appel a GMSH pour le maillage
552
553    f=open("coque.geo","w")
554
555
556 a = 1.
557 b=3
558 c= 3 * 5
559 d= 4 + \
560  5 \
561  -4
562 e=toto(a=1)
563 x=(1,2)
564 y=[3,
565 #comme
566 4]
567 z="a"
568 zz='v'
569 u='''aaaa
570 bbbb'''
571 if 1:
572   a=45
573 else:
574   a=5.6
575 d={"a":0}
576 e={"a":0,
577 #comme
578 "d":4}
579 a==1
580 x=a==1
581 s="-"*80
582 fmt_raison='-'*80+'''
583
584    Exception erreur_Fatale interceptee
585    Raison : %s
586
587 '''+'-'*80+'xxxxxxxxxxxxxxxx'
588 q=30*cos(12)
589 f=cos(12)
590 #commen'''
591 #commen'''
592 y=a[1]
593 y=["x"]*10
594
595 ##toto = FORMULE(REEL='(REEL:A) = A',
596 ##               X=2
597 ##              );
598 #
599 #   comment
600 #   comment
601 #   comment
602 #
603 zz=8.9;
604 zz=8.9;aa=10
605 P1 = 9.8;
606
607 P2 = 8.8;
608
609 P3 = 7;
610
611 P5 = P3*P1;
612
613 P6 = P1-3;
614
615 P4 = [2,3,4];
616
617 P7=P4[1]
618 MA=LIRE_MAILLAGE()
619 MA=LIRE_MAILLAGE(#comment
620 )
621 xyz=cos(10)
622 MA=LIRE_MAILLAGE(INFO=1)
623 MA=LIRE_MAILLAGE(
624         NFO=1)
625 MA=LIRE_MAILLAGE(#comme
626         NFO=1)
627 MA=\
628 LIRE_MAILLAGE(INFO=1)
629 MA= LIRE_MAILLAGE()
630 TFIN = 1.790     # Temps fin pour le calcul
631
632 PAS = 0.001      # pas de temps du calcul
633 # parse: -affectation
634 DS1=[None]*5
635 DS2=[None]*5
636 DS3=[None]*5
637 DS4=[None]*5
638 CHS1=[None]*5
639 CHS2=[None]*5
640 MO=AFFE_MODELE(  MAILLAGE=MA,
641           #test de validateur GEOM (typ=grma) avec grma derive de GEOM
642                  AFFE=(_F(GROUP_MA = ('LI1'),
643                           PHENOMENE = 'MECANIQUE',
644                           MODELISATION = 'DIS_TR'),
645                                 ),
646                   INFO=2,);
647
648 for k in range(1,5):
649   DS1[k] = CREA_CHAMP( OPERATION='EXTR', TYPE_CHAM='NOEU_DEPL_R',
650                   RESULTAT= MODESTA1, NUME_ORDRE=k, NOM_CHAM = 'DEPL');
651
652 # parse: +affectation
653 ff=23 # parametre bidon
654
655 # parse: -all
656 a=45
657 #commment1
658 ##toto = FORMULE(REEL='(REEL:A) = A',
659 ##               X=2
660 ##              );
661 # parse: +all
662 b=45
663 #commment2
664 ##toto = FORMULE(REEL='(REEL:A) = A',
665 ##               X=2
666 ##              );
667 # parse: -comment
668 c=45
669 #commment3
670 ##toto = FORMULE(REEL='(REEL:A) = A',
671 ##               X=2
672 ##              );
673 # parse: +comment
674 d=45
675 #commment5
676 ##toto = FORMULE(REEL='(REEL:A) = A',
677 ##               X=2
678 ##              );
679 p=sin(ff)
680
681 e=toto(a=1)
682 e=toto(a=1,b=3)
683 e=toto(1,b=3)
684 e=toto(a,b=3)
685 e=toto()
686 sensible=[2.1E11, 0.3,  1.E-6,   1.E-6,   ]
687
688 n=len(sensible)
689 # parse: -affectation
690
691 PS=[None]*n
692
693 for i in range(n):
694     PS[i]=DEFI_PARA_SENSI(VALE=sensible[i])
695 # parse: +affectation
696
697 TEST_RESU(RESU=(_F(RESULTAT   = U3L,
698                    INST       = 1.0,
699                    NOM_CHAM   = 'DEPL',
700                    GROUP_NO   = 'PPA',
701                    NOM_CMP    = 'DX',
702                    VALE       = 2.86E-5,
703                    PRECISION  = 5.E-2,
704                    REFERENCE  = 'AUTRE_ASTER',
705                    VERSION    = '7.1.11',
706                    ),
707                 )
708        )#
709 #
710 FIN()
711 #
712
713 TEST_RESU(RESU=(_F(RESULTAT   = U3L,
714                    INST       = 1.0,
715                    NOM_CHAM   = 'DEPL',
716                    GROUP_NO   = 'PPA',
717                    NOM_CMP    = 'DX',
718                    VALE       = 2.86E-5,
719                    PRECISION  = 5.E-2,
720                    REFERENCE  = 'AUTRE_ASTER',
721                    VERSION    = '7.1.11',
722                    ),
723                 )
724        ) #a
725
726 titi = FORMULE(REEL='(REEL:A) = A',
727 ) # commentaire inline
728 titi = FORMULE(REEL='(REEL:A) = A',
729  ) # commentaire inline
730
731 def f(x):return x
732 #comment
733 def f(x):
734 #comment
735   for i in range(10): s=0
736
737 #com1
738 #com2
739
740 #com3
741 a=1
742 ##commendcomm
743 for k in range(1,10):
744
745    # Appel a GMSH pour le maillage
746
747    f=open("coque.geo","w")
748 #comm
749    if a==1:
750
751                          #comm
752
753       for i in x:
754 #comm
755 ##commendcomm
756 #comm
757 ##commendcomm
758 #comm
759         if x==3:
760 #comm
761           r=1
762         if w==4:
763 #comm
764
765            if k:
766
767 #comm
768              if g:
769
770 #comm
771
772                if t:
773                  a=5  
774 #comm
775 if 1:
776   a=2
777   b=3
778                # commenta
779 else:
780   # commen
781   # commen
782   a=3
783            # qqqqqqqqqqqqqqqq
784   c=5
785
786 b=5
787
788 if 1:
789   a=2
790                # commenta
791 else:
792   a=3
793 if 1:
794   if 2:
795      if 3:
796        a=1
797      elif 4:
798        b=1
799      else:
800        c=5
801   elif 3:
802      x=1
803   else:
804      y=4
805 elif 4:
806   s=1
807 else:
808   t=9
809 #com1
810 #com2
811
812 #com3
813 a=1
814 ##commendcomm
815 for k in range(1,10):
816
817    # Appel a GMSH pour le maillage
818
819    f=open("coque.geo","w")
820 #comm
821    if 1: 
822       if 2:
823          if 3:
824             a=1
825       else:
826          a=6
827 a=1
828 ##commendcomm
829 for k in range(1,10):
830
831    # Appel a GMSH pour le maillage
832
833    f=open("coque.geo","w")
834 #comm
835
836    if a==1:
837
838                          #comm
839
840       for i in x:
841 #comm
842 ##commendcomm
843 #comm
844 ##commendcomm
845 #comm
846         if x==3:
847 #comm
848           r=1
849
850    if 1:
851       if 2:
852          if 3:
853             a=1
854       else:
855          a=6
856
857 if 1:
858    if 2:
859       if 3:
860          r=1
861          # comm
862    else:
863       x=7
864       toto(a=1,
865 b=3)
866 SUP_=dict([(grand,0.) for grand in grand_obs])
867
868 for k in range(1,ns+1):
869    x=toto(a=1,b=2)
870 #   comm
871    if 1:
872      #com
873
874      #com
875       x=1
876      #com
877
878      #com
879    ##com
880    elif 3:
881    ##com
882       x=1
883    else:
884       y=3
885
886 def f():
887     return
888 ########################################################################
889
890 ########################################################################
891 # macro commande de post-traitement (ex POST_GOUJ2E)
892 # calcul des reactions cumulees suivant les filets
893
894 def POST_GOUJ_ops(self,TABLE):
895   ier=0
896
897 """
898     if len(sys.argv)== 2:
899        progname, input = sys.argv
900        f=open(input)
901        t=f.read()
902        f.close()
903     else:
904        t=text
905     txt = PARSEUR_PYTHON(t).get_texte()
906     print (txt)
907     compile(txt,"<string>",'exec')