57
votes

Qu'est-ce que __PEG_PARSER__ dans Python?

J'utilisais le mot-clé construit -in module pour obtenir une liste de tous les mots clés de la version Python actuelle. Et c'est ce que j'ai fait:

>>> __peg_parser__
  File "<stdin>", line 1
    __peg_parser__
    ^
SyntaxError: You found it!


2 commentaires

Avez-vous essayé de lire ceci: bugs.python.org/issue40939 Je pense que c'est une ancienne fonctionnalité, mais Je ne suis pas en mesure de digérer les informations là-bas.


@deecue merci pour le lien, il semble que ce soit un œuf de Pâques qui sera changé dans Python 3.10


4 Réponses :


33
votes

9
votes

Qu'est-ce que __ pEG_Parser __ ?

C'est un œuf de Pâques à Python (du PEG Parser ) pour quand le nouveau Peg Parser a été libéré. Comme mentionné dans ce discussion , il sera supprimé dans Python 3.10.

Avant L'œuf de Pâques a été appelé __ new_parser __ , mais a été changé en __ pEg_parser __ , pour en faire une preuve future comme mentionné dans le Message :

nouveau , ex ou ng ne sont pas vraiment des noms de preuve futurs. Pouvons-nous renommer le mot-clé à __ pEG_Parser __ ?

pourquoi obtenez-vous syntaxerror: vous l'avez trouvé! ?

Vous obtenez syntaxerror: vous l'avez trouvé! parce que c'est Une partie de l'oeuf de Pâques.

sera-t-elle supprimée à l'avenir?

Puisque le ll (1) analyser sera remplacé d'être le nouveau PEG PARSER , il sera supprimé dans Python 3.10.

__ PEG_PARSER __ dans les versions antérieures et ultérieures de Python

existent dans les versions antérieures de Python.

python 3.8 et plus tôt:

>>> __peg_parser__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name '__peg_parser__' is not defined

python 3.9:

>>> __peg_parser__
  File "<stdin>", line 1
    __peg_parser__
    ^
SyntaxError: You found it!

1 commentaires

@ppwater je pense que seul Python 3.9



14
votes

Guido publié sur github ici pour le nouveau PEG Parser.

C'est aussi sur python pep .

Comme il mentionne:

Ce PEP propose de remplacer l'analyseur actuel basé sur LL (1) de CPYTHON par un nouvel analyseur basé sur PEG. Ce nouvel analyseur permettrait l'élimination de plusieurs "hacks" qui existent dans la grammaire actuelle pour contourner la fiabilité LL (1). Cela réduirait considérablement les coûts de maintenance dans certaines zones liées au pipeline de compilation telles que la grammaire, l'analyseur et la génération AST. Le nouveau PEG Parser soulèvera également la restriction LL (1) sur la grammaire Python actuelle.

également mentionné dans python 3.9 quoi de nouveau A > Page.

Dans Python 3.10, l'analyseur ll (1) sera supprimé. Python 3.9 utilise un nouvel analyseur, basé sur PEG au lieu de LL (1).

Dans Python 3.6, il n'est pas défini:

>>> __peg_parser__
Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    __peg_parser__
NameError: name '__peg_parser__' is not defined
>>> 


0 commentaires

2
votes

Ce PEP propose de remplacer l'analyseur actuel basé sur LL (1) de CPYTHON par un nouvel analyseur basé sur PEG. Ce nouvel analyseur permettrait l'élimination de plusieurs "hacks" qui existent dans la grammaire actuelle pour contourner la fiabilité LL (1). Cela réduirait considérablement les coûts de maintenance dans certaines zones liées au pipeline de compilation telles que la grammaire, l'analyseur et la génération AST. Le nouveau PEG Parser soulèvera également la restriction LL (1) sur la grammaire Python actuelle.

En savoir plus


0 commentaires