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")
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")
def faux(contexte, a): if isinstance(a, cel.Atome): return a.faux() else: return cel.Atome("faux")
def vrai(contexte, a): if isinstance(a, cel.Atome): return a.vrai() else: return cel.Atome("true")
def ou(contexte, *propositions): for i in propositions: if i.vrai().nom == "true": return cel.Atome("true") return cel.Atome("false")
def version(contexte, *expr): return cel.Atome("alpha-2")
def listevide(contexte, expr): if isinstance(expr, cel.Liste) and len(expr.liste) == 0: return cel.Atome("true") else: return cel.Atome("false")
def errtype(contexte, err): if isinstance(err, cel.Erreur): return err.tp else: return cel.Erreur(cel.Atome("InvalidArgument"), cel.String("..."))
def err(contexte, tp, msg): if isinstance(tp, cel.Atome): return cel.Erreur(tp, msg) else: return cel.Erreur(cel.Atome("InvalidArgument"), cel.String("..."))