Qué significa exactamente ‘parsing’ en programación?

¿Qué significa 'parsing' en programación?

Me tomé la libertad de editar la pregunta a la anterior, porque originalmente decía "¿Qué no significa 'parsing' en programación?", que es una forma bastante rara de hacer una pregunta, y tiene infinitas respuestas. La versión editada sólo tiene una o dos respuestas posibles, así que la he cambiado para que me resulte más fácil.

Paralizar significa tomar un flujo de texto y dividirlo en trozos con sentido. Es un proceso vital para convertir el código escrito en algún lenguaje de código fuente en un código ejecutable que se puede hacer para realizar alguna tarea en un ordenador.

"Parsing" en general es convertir el lenguaje escrito en significado - lo hacemos todo el tiempo. Por ejemplo, mientras lees esta respuesta, lo estás haciendo en tu cerebro para averiguar de qué demonios estoy hablando.

Cuando escribimos código en un ordenador en algún lenguaje -Java, por ejemplo- todo lo que estamos haciendo es añadir caracteres a un archivo de texto. Para que ese código tenga luego algún sentido, tenemos que seguir las estrictas reglas del lenguaje -cuando aprendemos un lenguaje de programación, son en realidad estas reglas las que estamos aprendiendo. Si lo que escribimos se ajusta a las reglas, entonces es analizable, lo que significa que es sintácticamente correcto. (Eso no significa que el programa en sí sea de alguna manera correcto o útil o libre de errores).

El analizador sintáctico es un paso importante en la compilación del código. Primero rompe el flujo de texto en una serie de tokens, que son unidades de significado dentro del lenguaje. Por ejemplo, una palabra clave, un valor numérico, un paréntesis y muchos otros. Las unidades de significado - los tokens - se forman en un árbol de análisis sintáctico, que es una estructura jerárquica que revela la intención del programa - lo que las unidades sintácticas juntas hacen realmente. Una vez que se ha llegado a una expresión con sentido, el compilador podrá generar código de otra forma que sea una versión ejecutable por la máquina del código que escribimos - o, si el código no se ajusta a las reglas o tiene algún otro problema, un error.

Parsear un lenguaje informático es un proceso puramente mecánico, y el lenguaje está diseñado para no ser ambiguo, de modo que sólo hay unas pocas formas posibles de expresar una intención dada. A diferencia del lenguaje natural, que es mucho más complejo, a menudo ambiguo, y generalmente inadecuado para la programación (se han hecho intentos para hacer posible la programación utilizando un lenguaje más natural, generalmente sin éxito). Aunque es posible analizar mecánicamente el lenguaje natural hasta cierto punto, depende de una gran cantidad de contexto (en otras palabras, la inteligencia para "saber" de qué se está hablando). En cambio, la mayoría de los lenguajes informáticos son "libres de contexto", lo que significa que no se necesita ese conocimiento y una máquina tonta y poco inteligente puede analizarlo.