DokuWiki

It's better when it's simple

Herramientas de usuario

Herramientas del sitio


es:devel:parser

El Analizador Sintáctico de la DokuWiki

Este documento explica los detalles del analizador sintàctico (parser) de la DokuWiki y está destinado a desarrolladores que desean modificar el comportamiento del analizador u obtener un mayor control sobre el documento de salida, modificando el código HTML generado o implementando diferentes formatos de salida.

Información general

El parser1) descompone en etapas discretas el proceso de transformar un documento DokuWiki crudo en el documento de salida final2).

En términos generales estos elementos son:

  1. Lexer3) explora4) un documento DokuWiki y genera una secuencia de tokens5), que corresponde a la sintaxis en el documento.
  2. Handler6): recibe los tokens del Lexer y los transforma en una secuencia de “instrucciones”7). En él se describe cómo debe traducirse el documento, de principio a fin, sin necesidad de que el Render lleve un registro de estado.
  3. Parser8): “conecta” el Lexer con el Handler, proporcionando las reglas de sintaxis de la DokuWiki, así como el punto de acceso al sistema (el método Parser::parse())
  4. Renderer9): acepta las instrucciones del Handler y “dibuja” el documento listo para su visualización (por ejemplo, como XHTML)

No se proporciona ningún mecanismo para conectar el Handler con el Renderer - es necesaria una codificación para cada caso específico.

Diagrama aproximado de las relaciones entre estos componentes :

                                                               
      +-----------+          +-----------+
      |           |  Input   |  Código   |
      |  Parser   |<---------|  Cliente  |
      |           |  String  |           |
      +-----.-----+          +-----|-----+
    Modes   |                     /|\
      +     |             Renderer |
    Input   |          Instructions|
    String \|/                     |
      +-----'-----+          +-----------+
      |           |          |           |
      |  Lexer    |--------->|  Handler  |
      |           |  Tokens  |           |
      +-----.-----+          +-----------+
            |
            |
       +----+---+
       | Modes  |-+
       +--------+ |-+
         +--------+ |
           +--------+

El “Código Cliente” (código enviado al Parser) invoca al Parser, dándole la cadena de entrada. Recibe, a cambio, la lista de las “Instrucciones de Renderer”, construidas por el Handler. Estas pueden alimentar a algún objeto que implementa el Renderer.

1)
analizador
2)
normalmente XHTML
3)
Lexer: hace referencia a la clase Doku_Lexer y al contenido del archivo inc/parser/lexer.php
4)
explora un documento PHP desde el pincipio al final
5)
el término token (testigo), en este documento, se refiere a las expresiones regulares coincidentes que genera el Lexer y las correspondientes llamadas a métodos en el Handler
6)
Handler (manejador): hace referencia a la clase Doku_Handler y al contenido del archivo inc/parser/handler.php
7)
la secuencia de instrucciones se almacena en una matriz llamada $calls, que es una propiedad del Handler. Está diseñada para ser utilizada con call_user_func_array
8)
Parser (analizador): hace referencia a la clase Doku_Parser y al contenido del archivo inc/parser/parser.php
9)
Render (procesador): hace referencia a alguna clase que implemente Doku_Renderer - ver inc/renderer/renderer.php y inc/parser/xhtml.php
es/devel/parser.txt · Última modificación: 2015-09-07 12:33 por 85.192.111.10

Excepto donde se indique lo contrario, el contenido de este wiki esta bajo la siguiente licencia: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki