Voici les étapes pour ajouter un opérateur ternaire à CPython. Cet article utilise Python 3.10. Veuillez vous référer à ici pour l'explication de la construction de CPython et de la structure des fichiers.
Les opérateurs ternaires Python sont: En Python, (valeur lorsque la condition est True) vient en premier, (condition) vient ensuite, et enfin (valeur lorsque la condition est False). Il n'est pas courant que (condition) soit au milieu de la syntaxe de l'opérateur ternaire.
(Valeur lorsque la condition est vraie) if (conditions) else (conditionsがFalseのときの値)
L'opérateur ternaire modifié est le suivant. (Condition) vient en premier, puis (valeur lorsque la condition est True) et enfin (valeur lorsque la condition est False). En langage C etc., les opérateurs ternaires sont décrits dans cet ordre.
if (conditions) then (conditionsがTrueのときの値) else (conditionsがFalseのときの値)
Modifions maintenant l'opérateur ternaire Python par celui montré dans 2.2. L'opérateur ternaire existe déjà en Python. Ainsi, vous pouvez utiliser ceci et appeler le même processus si le cas échéant. Ici, seul python.gram est modifié. Il y a la description suivante dans L341 de Grammer / python.gram.
Grammer/python.gram
a = disjunction 'if' b=disjunction 'else' c=expression { _Py_IfExp(b, a, c, EXTRA) }
Ceci est une description de l'opérateur ternaire Python d'origine. Pour imiter cela, écrivez l'opérateur ternaire modifié sur la ligne ci-dessous.
Grammer/python.gram
'if' a = disjunction 'then' b=disjunction 'else' c=expression { _Py_IfExp(a, b, c, EXTRA) }
Ici, faites attention à l'ordre des variables lors de l'appel de _Py_IfExp. Avec les changements ci-dessus
$ make regen-pegen
Vous pouvez ajouter l'opérateur ternaire en exécutant et en reconstruisant. Bien entendu, vous pouvez également utiliser la syntaxe de l'opérateur ternaire d'origine.
L'opérateur ternaire implémenté par les changements ci-dessus fonctionne comme suit.
Exploration de logiciels à grande échelle
Ceci est un site expérimental.
CPython
Dépôt CPython
24. Changer la grammaire de CPython
Une liste de contrôle pour ajouter des fonctions à CPython a été incluse pour vous aider à comprendre la structure de CPython.
Recommended Posts