Salome HOME
Traducteur devient Traducteur2 ( python 2)
[tools/eficas.git] / Traducteur / parseur.py
diff --git a/Traducteur/parseur.py b/Traducteur/parseur.py
deleted file mode 100644 (file)
index 3a525a2..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2017   EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library 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
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-import re,string
-import compiler
-
-debug=0
-
-escapedQuotesRE = re.compile(r"(\\\\|\\\"|\\\')")
-stringsAndCommentsRE =  \
-      re.compile("(\"\"\".*?\"\"\"|'''.*?'''|\"[^\"]*\"|\'[^\']*\'|#.*?\n)", re.DOTALL)
-allchars = string.maketrans("", "")
-allcharsExceptNewline = allchars[: allchars.index('\n')]+allchars[allchars.index('\n')+1:]
-allcharsExceptNewlineTranstable = string.maketrans(allcharsExceptNewline, '*'*len(allcharsExceptNewline))
-
-#------------------------------
-def maskStringsAndComments(src):
-#------------------------------
-    """Remplace tous les caracteres dans commentaires et strings par des * """
-
-    src = escapedQuotesRE.sub("**", src)
-    allstrings = stringsAndCommentsRE.split(src)
-    # every odd element is a string or comment
-    for i in xrange(1, len(allstrings), 2):
-        if allstrings[i].startswith("'''")or allstrings[i].startswith('"""'):
-            allstrings[i] = allstrings[i][:3]+ \
-                           allstrings[i][3:-3].translate(allcharsExceptNewlineTranstable)+ \
-                           allstrings[i][-3:]
-        else:
-            allstrings[i] = allstrings[i][0]+ \
-                           allstrings[i][1:-1].translate(allcharsExceptNewlineTranstable)+ \
-                           allstrings[i][-1]
-
-    return "".join(allstrings)
-
-#un nombre queconque de blancs,un nom,des blancs
-pattern_oper   = re.compile(r"^\s*(.*?=\s*)?([a-zA-Z_]\w*)(\s*)(\()(.*)",re.DOTALL)
-pattern_proc   = re.compile(r"^\s*([a-zA-Z_]\w*)(\s*)(\()(.*)",re.DOTALL)
-
-implicitContinuationChars = (('(', ')'), ('[', ']'), ('{', '}'))
-linecontinueRE = re.compile(r"\\\s*(#.*)?$")
-emptyHangingBraces = [0,0,0,0,0]
-
-#--------------------------------------
-class UnbalancedBracesException: pass
-#--------------------------------------
-
-#-----------
-class Node:
-#-----------
-    def __init__(self):
-        self.childNodes=[]
-
-    def addChild(self,node):
-        self.childNodes.append(node)
-
-
-#-------------------
-class FactNode(Node):
-#-------------------
-    pass
-
-
-#-------------------
-class JDCNode(Node):
-#-------------------
-    def __init__(self,src):
-        Node.__init__(self)
-        self.src=src
-
-#-------------------
-class Command(Node):
-#-------------------
-    def __init__(self,name,lineno,colno,firstparen):
-        Node.__init__(self)
-        self.name=name
-        self.lineno=lineno
-        self.colno=colno
-        self.firstparen=firstparen
-
-#-------------------
-class Keyword(Node):
-#-------------------
-    def __init__(self,name,lineno,colno,endline,endcol):
-        Node.__init__(self)
-        self.name=name
-        self.lineno=lineno
-        self.colno=colno
-        self.endline=endline
-        self.endcol=endcol
-
-    def getText(self,jdc):
-        if self.endline > self.lineno:
-            debut=jdc.getLines()[self.lineno-1][self.colno:]
-            fin  = jdc.getLines()[self.endline-1][:self.endcol]
-            texte=debut
-            lignecourante=self.lineno
-            while  lignecourante < self.endline -1  :
-                texte = texte + jdc.getLines()[lignecourante]
-                lignecourante = lignecourante + 1
-            if chaineBlanche(fin) == 0 :
-                texte=texte + fin
-            if texte[-1] == "\n" :
-                texte=texte[0:-1]
-        else:
-            texte = jdc.getLines()[self.lineno-1][self.colno:self.endcol]
-        return texte
-
-#-------------------------
-def chaineBlanche(texte) :
-#-------------------------
-# retourne 1 si la chaine est composee de " "
-# retourne 0 sinon
-    bool = 1 ;
-    for i in range(len(texte)) :
-        if texte[i] != " " : bool = 0
-    return bool
-
-#-------------------
-def printNode(node):
-#-------------------
-    if hasattr(node,'name'):
-        print node.name
-    else:
-        print "pas de nom pour:",node
-    for c in node.childNodes:
-        printNode(c)
-
-#------------------------
-def parser(src,atraiter):
-#------------------------
-    """Parse le texte src et retourne un arbre syntaxique (root).
-
-       Cet arbre syntaxique a comme noeuds (childNodes) les commandes a traiter (liste atraiter)
-    """
-    lines=src.splitlines(1)
-    maskedSrc=maskStringsAndComments(src)
-    maskedLines=maskedSrc.splitlines(1)
-
-    root=JDCNode(src)
-
-    # (a) dans un premier temps on extrait les commandes et on les insere
-    #     dans un arbre (root)  les noeuds fils sont stockes dans
-    #     root.childNodes (liste)
-    lineno=0
-    for line in maskedLines:
-        lineno=lineno+1
-        if debug:print "line",lineno,":",line
-        m=pattern_proc.match(line)
-        if m and (m.group(1) in atraiter):
-            if debug:print m.start(3),m.end(3),m.start(4)
-            root.addChild(Command(m.group(1),lineno,m.start(1),m.end(3)))
-        else:
-            m=pattern_oper.match(line)
-            if m and (m.group(2) in atraiter):
-                root.addChild(Command(m.group(2),lineno,m.start(2),m.end(4)))
-
-    #(b) dans un deuxieme temps , on recupere le texte complet de la commande
-    #    jusqu'a la  derniere parenthese fermante
-
-    # iterateur sur les lignes physiques masquees
-    iterlines=iter(maskedLines)
-
-    linenum=0
-    for c in root.childNodes:
-        lineno=c.lineno
-        colno=c.colno                       # debut de la commande
-        while linenum < lineno:
-            line=iterlines.next()
-            linenum=linenum+1
-            if linenum != lineno:
-                if debug:print "line %s:"%linenum, line
-        tmp = []
-        hangingBraces = list(emptyHangingBraces)
-        hangingComments = 0
-        while 1:
-            # update hanging braces
-            for i in range(len(implicitContinuationChars)):
-                contchar = implicitContinuationChars[i]
-                numHanging = hangingBraces[i]
-
-                hangingBraces[i] = numHanging+line.count(contchar[0]) - \
-                                line.count(contchar[1])
-
-            hangingComments ^= line.count('"""') % 2
-            hangingComments ^= line.count("'''") % 2
-
-            if hangingBraces[0] < 0 or hangingBraces[1] < 0 or hangingBraces[2] < 0:
-                raise UnbalancedBracesException()
-
-            if linecontinueRE.search(line):
-                tmp.append(lines[linenum-1])
-            elif hangingBraces != emptyHangingBraces:
-                tmp.append(lines[linenum-1])
-            elif hangingComments:
-                tmp.append(lines[linenum-1])
-            else:
-                tmp.append(lines[linenum-1])
-                src="".join(tmp)
-                c.src=src
-                c.endline=linenum
-                decal=len(line)-line.rindex(')')
-                c.lastParen=len(src)-decal
-                if debug:print "logical line %s %s:" % (c.lineno,c.endline),src
-                break
-            line=iterlines.next()
-            linenum=linenum+1
-
-    return root
-
-
-#-----------------
-def lastParen(src):
-#-----------------
-    """Retourne la position de la derniere parenthese fermante dans src a partir du debut de la string
-
-       La string doit contenir la premiere parenthese ouvrante
-    """
-
-    src=maskStringsAndComments(src)
-    level=0
-    i,n=0,len(src)
-    while i < n:
-        ch=src[i]
-        i=i+1
-        if ch in ('(','['):
-            level=level+1
-        if ch in (')',']'):
-            if level == 0:
-                raise UnbalancedBracesException()
-            level=level-1
-            if level == 0:
-                #derniere parenthese fermante
-                return i
-
-#-------------------
-def lastParen2(src):
-#-------------------
-    """Retourne la position de la derniere parenthese fermante dans src a partir du debut de la string
-
-       La string ne contient pas la premiere parenthese ouvrante
-    """
-    src=maskStringsAndComments(src)
-    level=1
-    i,n=0,len(src)
-    while i < n:
-        ch=src[i]
-        i=i+1
-        if ch in ('(','['):
-            level=level+1
-        if ch in (')',']'):
-            if level == 0:
-                raise UnbalancedBracesException()
-            level=level-1
-            if level == 0:
-                #derniere parenthese fermante
-                return i