예제 #1
0
def non(contexte, a):
    if isinstance(a, cel.Atome):
        if a.nom == "true":
            return cel.Atome("false")
        else:
            return cel.Atome("true")
    else:
        return cel.Erreur("NotBool", "aurnist")
예제 #2
0
파일: parser.py 프로젝트: Aluminium95/Alisp
 def parse(self, token):
     if isinstance(token, list):  # si on a une liste de tokens
         l = [cel.Variable("body")
              ]  # body signifie qu'on a plusieurs éléments
         # et que seul le dernier donnera sa valeur à l'expression
         for i in token:
             l.append(self.parse(i))
         return cel.Liste(l)  # On crée une véritable Liste (cellule)
     elif isinstance(token, tok.String):
         return cel.String(token.valeur)
     elif isinstance(token, tok.Nombre):
         return cel.Nombre(token.val)
     elif isinstance(token, tok.Atome):
         return cel.Atome(token.val)
     elif isinstance(token, tok.Liste):
         l = []
         for i in token.liste:
             l.append(self.parse(i))
         return cel.Liste(l)
     elif isinstance(token, tok.Dict):
         l = []
         for i in token.liste:
             l.append(self.parse(i))
         return cel.Dico(l)
     elif isinstance(token, str):  # symbole
         # alphanum plus tard ici TODO
         return cel.Variable(token)
     else:
         raise ValueError("Token inconnu")
예제 #3
0
def faux(contexte, a):
    if isinstance(a, cel.Atome):
        return a.faux()
    else:
        return cel.Atome("faux")
예제 #4
0
def vrai(contexte, a):
    if isinstance(a, cel.Atome):
        return a.vrai()
    else:
        return cel.Atome("true")
예제 #5
0
def ou(contexte, *propositions):
    for i in propositions:
        if i.vrai().nom == "true":
            return cel.Atome("true")
    return cel.Atome("false")
예제 #6
0
def version(contexte, *expr):
    return cel.Atome("alpha-2")
예제 #7
0
def listevide(contexte, expr):
    if isinstance(expr, cel.Liste) and len(expr.liste) == 0:
        return cel.Atome("true")
    else:
        return cel.Atome("false")
예제 #8
0
def errtype(contexte, err):
    if isinstance(err, cel.Erreur):
        return err.tp
    else:
        return cel.Erreur(cel.Atome("InvalidArgument"), cel.String("..."))
예제 #9
0
def err(contexte, tp, msg):
    if isinstance(tp, cel.Atome):
        return cel.Erreur(tp, msg)
    else:
        return cel.Erreur(cel.Atome("InvalidArgument"), cel.String("..."))