Пример #1
0
def analyseSelect(text, expression, count, flag, c):
    """
    Analyse une opération de Sélection entrée au clavier.
    Syntaxe attendue : 
        -exemple1 : Select(attr1,Cst(value),Rel(name))
        -exemple2 : Select(attr1,attr2,Rel(name))
        Note : Pas d'espace, pas de guillemets, 'Cst' est un mot réservé.
               Une Cst peut être soit un chaîne de caractère, soit un nombre
               Le dernier paramètre peut être autre chose qu'une relation (Ex : une autre expression)
    """
    flag.append(False)
    param1 = None
    attr = None
    param2 = None
    currentExpression = o.Selection(param1, param2, attr, c)
    #On analyse le param1 (L'attribut que l'on sélectionne)
    count += 1
    attr, j = analyseAttr(text,count)
    count = j
    currentExpression.param1 = e.Attribut(attr)
    #On analyse attr (Le deuxième élément de l'égalité)
    count += 1
    if(text[count : count +3] == "Cst"):
        #On égalise avec une constante
        count += 4
        vCst= ""
        while(text[count] != ")") :
            vCst += text[count]
            count += 1
        #On détermine le type de la constante
        if (vCst.isalpha() == False):
            vCst = float(vCst)
        currentExpression.attr = e.Cst(vCst)
        count += 1
    else:
        #On égalise avec un attribut
        attr, j = analyseAttr(text,count)
        count = j
        currentExpression.attr = e.Attribut(attr)
    #On analyse param2 (La relation ou l'expression sur laquelle on applique cette sélection)
    count += 1
    if(text[count:count+3] == "Rel"):
        #C'est une relation, l'expression est donc complète
        flag[-1] = True
        currentExpression.param2=(e.Relation(analyseRel(text, count), c))
    else:
        flag[-1] = False

    if (expression != None):
        #Ce n'est pas la première opération de l'expression : On ajoute l'opération à l'expression existante
        expression.addExpr(currentExpression)
        return expression, flag, count
    else:
        #C'est la première opération de l'expression 
        expression = currentExpression
        return expression, flag, count
Пример #2
0
def analyseRename(text, expression, count,flag, c):
    """
    Analyse une opération de Renommage entrée au clavier.
    Syntaxe attendue : 
        -exemple1 : Rename(oldName,newName,Rel(name))
    """
    flag.append(False)
    newAttr = None
    param1 = None
    param2 = None
    currentExpression = o.Rename(param1, param2, newAttr, c)
    #On analyse newAttr
    count += 1
    nAttr, j = analyseAttr(text, count)
    currentExpression.param1 = e.Attribut(nAttr)
    count = j
    #On analyse le param1
    count += 1
    nParam1, j = analyseAttr(text, count)
    currentExpression.newAttr = e.Attribut(nParam1)
    count = j
    #On analyse le param2
    count += 1
    if(text[count:count+3] == "Rel"):
        flag[-1] = True
        currentExpression.param2=(e.Relation(analyseRel(text, count), c))
    else:
        flag[-1] = False
    
    if (expression != None):
        #Ce n'est pas la première opération de l'expression : On ajoute l'opération à l'expression existante
        expression.addExpr(currentExpression)
        return expression, flag, count
    else:
        #C'est la première opération de l'expression 
        expression = currentExpression
        return expression, flag, count
Пример #3
0
def analyseProj(text, expression, count, flag, c):
    """
    Analyse une opération de Projection entrée au clavier.
    Syntaxe attendue : 
        -exemple1 : Proj([attr1,attr2],Rel(name))
        -exemple2 : Proj([attr1,attr2],Expression)
        Note : Pas d'espace, pas de guillemets.
    """
    flag.append(False)
    listAttr = e.ListeAttribut([])
    param2 = None
    currentExpression = o.Proj(listAttr, param2, c)
    #On analyse la liste d'attributs
    count += 2 
    endAttr = count
    while (text[endAttr] != ']'):
       endAttr+=1

    l = text[count:endAttr].split(",")
    for a in l :
        currentExpression.param1.liste.append(e.Attribut(a))

    count = endAttr

    #On analyse la relation sur laquelle on applique la projection
    count += 2
    if(text[count:count+3] == "Rel"):
        #C'est une relation, l'expression est donc complète
        flag[-1] = True
        currentExpression.param2=(e.Relation(analyseRel(text, count), c))
    else:
        flag[-1] = False

    if (expression != None):
        #Ce n'est pas la première opération de l'expression : On ajoute l'opération à l'expression existante
        expression.addExpr(currentExpression)
        return expression, flag, count
    else:
        #C'est la première opération de l'expression 
        expression = currentExpression
        return expression, flag, count