¿Qué es __Peg_Parser__ en Python? -- python campo con python-3.x campo con python-3.9 camp Relacionados El problema

What is __peg_parser__ in Python?


53
vote

problema

Español

Estaba usando la keyword construida -En el módulo para obtener una lista de todas las palabras clave de la versión actual de Python. Y esto es lo que hice:

  >>> import keyword >>> print(keyword.kwlist) ['False', 'None', 'True', '__peg_parser__', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']   

y en la keyword.kwlist LISTA Hay __peg_parser__ . Entonces, para ver lo que hace, escribo __peg_parser__ en un intérprete de Python 3.9 en Windows, y esto es lo que se obtiene:

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

Entonces, mi pregunta es, ¿qué es __peg_parser__ y por qué obtengo SyntaxError: You found it! ?

Original en ingles

I was using the keyword built-in module to get a list of all the keywords of the current Python version. And this is what I did:

>>> import keyword >>> print(keyword.kwlist) ['False', 'None', 'True', '__peg_parser__', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] 

And in the keyword.kwlist list there is __peg_parser__. So to see what it does, I type __peg_parser__ in a Python 3.9 interpreter on Windows, and this is what is get:

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

So my question is, what is __peg_parser__ and why do I get SyntaxError: You found it!?

        
   
   

Lista de respuestas

31
 
vote
vote
La mejor respuesta
 

Fue un huevo de Pascua relacionado con el despliegue de el nuevo PEG Parser . El huevo de Pascua, junto con el antiguo LL (1) analizador, se eliminará en 3.10 .

 

It was an easter egg related to the rollout of the new PEG parser. The easter egg, along with the old LL(1) parser, will be removed in 3.10.

 
 
13
 
vote

GUIDO Publicado en GitHub aquí para el nuevo parser PEG.

También está en Python PEP .

Como menciona:

Este PEP propone reemplazar el analizador de cpython con un nuevo analizador basado en PEG. Este nuevo analizador permitiría la eliminación de múltiples "hacks" que existen en la gramática actual para eludir la LL (1) -Limitación. Reduciría sustancialmente los costos de mantenimiento en algunas áreas relacionadas con la tubería de compilación, como la gramática, el analizador y la generación AST. El nuevo PEG Parser también elevará la restricción de LL (1) en la gramática actual de Python.

También se mencionó en Python 3.9 What's New página. < / p>

En Python 3.10, se eliminará el analizador LL(1) . Python 3.9 usa un nuevo analizador, basado en PEG en lugar de LL (1).

en Python 3.6, no está definido:

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

 

Guido published on github here for the new PEG parser.

It's also on Python PEP.

As it mentions:

This PEP proposes replacing the current LL(1)-based parser of CPython with a new PEG-based parser. This new parser would allow the elimination of multiple "hacks" that exist in the current grammar to circumvent the LL(1)-limitation. It would substantially reduce the maintenance costs in some areas related to the compiling pipeline such as the grammar, the parser and the AST generation. The new PEG parser will also lift the LL(1) restriction on the current Python grammar.

Also mentioned in Python 3.9 What's new page.

In Python 3.10, the LL(1) parser will be removed. Python 3.9 uses a new parser, based on PEG instead of LL(1).

In Python 3.6, it is not defined:

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

¿Qué es __peg_parser__ ?

Es un huevo de Pascua en Python (de la PEG PARSER ) Para cuando el nuevo PEG Parser fue lanzado. Como se mencionó en este discusión , se eliminará en Python 3.10.

Antes de que se llamara el huevo de Pascua __new_parser__ , pero se cambió a __peg_parser__ , para que sea una prueba futura como se menciona en la mensaje :

new , ex o ng No son los nombres de prueba futuros. ¿Podemos cambiar el nombre de la palabra clave a __peg_parser__ ?

¿Por qué obtienes SyntaxError: You found it! ?

Usted obtiene >>> __peg_parser__ Traceback (most recent call last): File "<pyshell#13>", line 1, in <module> __peg_parser__ NameError: name '__peg_parser__' is not defined >>> 0 porque es parte del huevo de Pascua.

se eliminará en el futuro?

Desde la ll (1) el analizador será reemplazado ser el nuevo PEG Parser , se eliminará en Python 3.10.

>>> __peg_parser__ Traceback (most recent call last): File "<pyshell#13>", line 1, in <module> __peg_parser__ NameError: name '__peg_parser__' is not defined >>> 1111 En versiones anteriores y posteriores de Python

No existía en versiones anteriores de Python.

Python 3.8 y antes:

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

Python 3.9:

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

Python 3.10:

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

What is __peg_parser__?

It is an Easter Egg in Python (of the Peg Parser) for when the new Peg Parser was released. As mentioned in this discussion, it will be removed in Python 3.10.

Before the Easter Egg was called __new_parser__, but was changed to __peg_parser__, to make it future proof as mentioned in the message:

new, ex or ng are not really future proof names. Can we rename the keyword to __peg_parser__?

Why do you get SyntaxError: You found it!?

You get SyntaxError: You found it! because it is part of the Easter Egg.

Will it be removed in the future?

Since the LL(1) parser will be replaced be the new Peg Parser, it will be removed in Python 3.10.

__peg_parser__ in Earlier and Later Versions of Python

It didn't exist in earlier versions of Python.

Python 3.8 and earlier:

>>> __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! 

Python 3.10:

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

Este PEP propone reemplazar el analizador de cpython con un nuevo analizador basado en PEG. Este nuevo analizador permitiría la eliminación de múltiples "hacks" que existen en la gramática actual para eludir la LL (1) -Limitación. Reduciría sustancialmente los costos de mantenimiento en algunas áreas relacionadas con la tubería de compilación, como la gramática, el analizador y la generación AST. El nuevo PEG Parser también elevará la restricción de LL (1) en la gramática actual de Python.

Leer más

 

This PEP proposes replacing the current LL(1)-based parser of CPython with a new PEG-based parser. This new parser would allow the elimination of multiple "hacks" that exist in the current grammar to circumvent the LL(1)-limitation. It would substantially reduce the maintenance costs in some areas related to the compiling pipeline such as the grammar, the parser and the AST generation. The new PEG parser will also lift the LL(1) restriction on the current Python grammar.

read more

 
 

Relacionados problema

0  ¿Cómo configuro Python y organizo a mis intérpretes?  ( How do i configure python and organise my interpreters ) 
Fondo: He estado aprendiendo Python (en MacOS) durante unos tres meses, así que por favor, vaya fácil en mí. Comencé por instalar Python 3.7 a través de A...

3  Estoy tratando de instalar Kivy con Python 3.9.0 y me da un error después de escribir: Python -M PIP Instale Kivy  ( Im trying to install kivy with python 3 9 0 and it gives me an error after i ty ) 
Estoy en Windows 10. Estuve siguiendo las instrucciones en https://kivy.org/doc/stable /instalation/installation-windows.html# y yo llegué a la parte donde ...

0  Utilizando Python para ejecutar .exe automáticamente  ( Using python to run exe automatically ) 
Tengo algunas aplicaciones .exe que me han dado por un proveedor de sensores. Me permiten tomar datos en momentos específicos y convertir los tipos de archivo...

-1  "AtributeError: Module 'PIP' no tiene atributo 'principal'" al instalar bibliotecas de Python  ( Attributeerror module pip has no attribute main when installing python li ) 
Tengo este problema con Python ( versión 3.9 ) y Visual Studio 2019. AttributeError: module 'pip' has no attribute 'main' ¿Puede alguien ayudarme? ...

0  Parece que no puede pasar el contenido de una lectura previa en un subsiguiente subproceso.Popen de entrada CMD  ( Cant seem to pass the contents of a previous read into a subsequent subprocess ) 
Esto está en Windows 10 Linux (WSL) que ejecuta Python 3.8.5 y 3.90RC1. No usar Windows nativo. Soy OS.Comprar a través de una jerarquía de directorios que ...

0  Problemas con la instalación de MATPLOTLIB en Windows 10 con PIPWIN [DUPLICATE]  ( Issues with installing matplotlib on windows 10 with pipwin ) 
Esta pregunta ya tiene respuestas aquí : Python, error al instalar matplotlib ...

1  Python 3.9: El desempleamiento de los datos de isocalendardate devuelve una tupla  ( Python 3 9 unpickling of isocalendardate data returns a tuple ) 
Considere la siguiente discusión / característica en Python3.9: https://bugs.python.org/issis24416 En resumen, se decidió que el resultado de datetime.da...

0  ¿Cómo usar un módulo antiguo en un Venv Pycharm con una versión 3.9?  ( How to use an old module in a pycharm venv with a 3 9 version ) 
He configurado un VenV de 3.9 Python para mi proyecto y me gustaría llamar a un módulo llamado Cantera dentro de él. El problema con él es que Cantera solo es...

0  Error al instalar OPENCV con Python3.9 en MacOS Mojave  ( Error while installing opencv with python3 9 on macos mojave ) 
Mensaje de error: $ pip3 install opencv-contrib-python ERROR: Could not find a version that satisfies the requirement opencv-contrib-python (from versions...

0  Python 3.9 Problema de importación  ( Python 3 9 import issue ) 
Acabo de instalar Python 3.9 con el instalador de Windows 64-BIT. Por alguna razón, los módulos Todos los módulos que había instalado anteriormente usando tr...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos