Antes de comenzar con el concepto, repasemos la terminología en detalle. La palabra analizar significa dividir algo en sus componentes y luego describir sus roles sintácticos. El procesamiento de textos es una palabra familiar y significa tratar con algo utilizando un procedimiento estándar. Combinados, estos dos explican cómo funciona el analizador HTML en la generación de árboles DOM a partir de recursos de texto/html.
Este enfoque define las reglas de análisis de documentos HTML para determinar si son sintácticamente correctos o no. Los puntos donde la sintaxis no coincide, se inicia un error de análisis. Al final del procedimiento, si se determina que un recurso está en la sintaxis HTML, entonces es un documento HTML.
VISIÓN GENERAL DEL MODELO DE ANÁLISIS
La entrada al proceso de análisis de HTML consiste en un flujo de puntos de código, que luego se pasan a través de una etapa de tokenización seguida de una etapa de construcción de árbol para producir un objeto Documento como salida. En su mayoría, los datos manejados por la etapa de tokenización provienen de la red, pero también pueden provenir de un script que se ejecuta en el agente de usuario, por ejemplo, usando la API document.write(). El tokenizador y la etapa de construcción del árbol tienen solo un conjunto de estados, pero mientras la etapa de construcción del árbol funciona con un token, el tokenizador se puede reanudar. Debido a que esta etapa de construcción del árbol a menudo se considera reentrante. Para manejar tales casos, los analizadores tienen un nivel de anidamiento de secuencias de comandos, que inicialmente debe establecerse en 0 y un indicador de pausa del analizador, que debe inicializarse en falso.
ERRORES DE ANÁLISIS: como se mencionó anteriormente, al analizar un recurso, se verifica con su sintaxis y si algo no coincide con el protocolo estándar, genera un error de análisis. Si se encuentra que un recurso está libre de errores, se convierte en un documento. Los errores de análisis solo se ocupan de los errores relacionados con la sintaxis de un documento HTML. Además de verificar los errores de análisis, los verificadores de conformidad también validan los documentos para que coincidan con los requisitos básicos de conformidad. El manejo de errores para los errores de análisis está bien definido. Si se encuentran una o más condiciones de análisis dentro del documento, es deber de los verificadores de conformidad informar al menos una de ellas y no informar ninguna si no se genera ningún error. Los verificadores de conformidad pueden informar más de una condición de error de análisis si se encuentra más de una condición de error de análisis en el documento.
ENTENDIENDO CADA CAPA
- El flujo de bytes de entrada:
el agente de usuario verá inicialmente el flujo de puntos de código que serán la entrada para la etapa de tokenización como un flujo de bytes que normalmente proviene de una red o de un sistema de archivos local. Los bytes codifican los caracteres reales según una codificación de caracteres particular, que el agente de usuario usa para decodificar los bytes en caracteres.Dada una codificación de caracteres, los bytes en el flujo de bytes de entrada deben convertirse en caracteres para usarlos con el tokenizador como su flujo de entrada, sin pasar por el flujo de bytes de entrada y la codificación de caracteres para decodificar.
Cuando el analizador HTML está decodificando un flujo de bytes de entrada, utiliza una codificación de caracteres y una confianza que es tentativa, cierta o irrelevante. La codificación utilizada y el tipo de confianza en esa codificación se emplean durante el análisis para determinar si se debe cambiar la codificación. Si no es necesaria la codificación, por ejemplo, porque el analizador está operando en un flujo Unicode y no tiene que usar una codificación de caracteres en absoluto, entonces la confianza es irrelevante.
- Preprocesador de flujo de entrada: el flujo de entrada está formado por los caracteres insertados en él a medida que se decodifica el flujo de bytes de entrada o desde las diversas API que manipulan directamente el flujo de entrada. Antes de la etapa de tokenización, las líneas nuevas se normalizan en el flujo de entrada. Inicialmente, el siguiente carácter de entrada es el primer carácter de la entrada que aún no se ha consumido y el carácter de entrada actual es el último carácter que se ha consumido. El punto de inserción es la posición en la que se inserta realmente el contenido insertado mediante(). El punto de inserción no es un desplazamiento absoluto en el flujo de entrada, sino que es relativo a la posición del carácter inmediatamente posterior. Inicialmente, el punto de inserción no está definido.
- Tokenización: se espera que las implementaciones actúen como si estuvieran usando la siguiente máquina de estado para tokenizar HTML. Se espera que la máquina de estado comience en un estado de datos. La mayoría de los estados toman un solo carácter, que cambia la máquina de estado a un nuevo estado para volver a consumir el carácter de entrada actual o lo cambia a un nuevo estado para consumir el siguiente carácter. Algunos estados tienen un comportamiento más complicado y pueden incluir varios caracteres antes de cambiar a otro estado. En algunos casos, el estado del tokenizador también se ve afectado por la etapa de construcción del árbol.
El resultado generado en este paso es una serie de cero o más de los siguientes tokens: DOCTYPE, etiqueta de inicio, etiqueta de fin, comentario, carácter, fin de archivo. También crear y emitir tokens son dos conceptos completamente diferentes. Cuando se emite un token, inmediatamente debe ser atendido por la etapa de construcción del árbol. La etapa de construcción del árbol puede afectar el estado de la etapa de tokenización e incluso se le permite insertar caracteres adicionales en la transmisión.
- Construcción del árbol: la secuencia de tokens del estado de tokenización forman la entrada para la etapa de construcción del árbol. Una vez que se crea el analizador, la etapa de construcción del árbol se asocia con el Modelo de objetos del documento (DOM). El resultado de esta etapa consiste en modificar o extender dinámicamente el árbol DOM de ese documento. A medida que se envía cada token desde el tokenizador, se espera que el agente de usuario siga un cierto algoritmo para tratar con ellos.
Publicación traducida automáticamente
Artículo escrito por vanshikagoyal43 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA