2010-11-24 11 views
5

Quiero saber cómo crear un lenguaje como PHP. ¿Cómo sabe el servidor cómo traducir un archivo PHP? ¿Como funciona? Quiero hacer esto con fines educativos. Un lenguaje sencillo con funciones básicas como eco, etc.¿Cómo puedo crear un lenguaje como PHP y cómo funciona?

+2

No es una respuesta completa, pero puede descargar el código fuente de PHP desde php.net. Está escrito en C –

+1

http://stackoverflow.com/questions/366998/good-resources-on-programming-language-design da algunas sugerencias sobre cómo diseñar un lenguaje de programación –

Respuesta

4

Fundamentalmente, cuando el servidor web obtiene la solicitud para procesar el archivo php, se traduce esta solicitud al procesador php, podría ser un módulo (como php.so en apache) o servicio (como php-cgi). El servicio o el módulo compila el script php en código máquina, lo ejecuta y le da al servidor el resultado de su trabajo. Puede descargar el código fuente de php desde http://php.net. El código fuente incluye analizador, thanslator, compilador y otros componentes necesarios para ejecutar el script php como código de máquina

+0

¿Cómo sabe el servidor web de forma automática? Esta petición. – liamzebedee

+0

Throu config file. Por ejemplo, en apache config AddHandler php5-script .php AddType text/html .php – Vadyus

+0

Esto está mal. La versión de PHP en php.net se compila en bytecode para su ejecución por Zend VM. PHP generalmente se interpreta o se compila en código intermedio. La compilación de códigos de máquina es posible pero no la regla. –

2

Esta es una gran pregunta. Y no uno que realmente puede ser respondida aquí, pero algunas sugerencias para ayudarle a empezar ...

PHP expone algunos de sus funcionamientos internos - si usted tiene un vistazo a:

<?php 

$srctokens=token_get_all(file_get_contents(__FILE__)); 
print "<pre>\n"; 
foreach ($srctokens as $tok) { 
    print token_name($tok[0]) . ' -&gt; ' . $tok[1]; 
} 
?> 

podrás ver que divide el código en 'palabras' y asigna metadatos a cada uno (es un nombre de función, una variable, un operador ...).

Luego construye esto en una estructura de árbol, p. una instrucción 'if' podría tener tres nodos secundarios: una expresión para evaluar (que a su vez tendría nodos secundarios), algún código para evaluar si la expresión es verdadera y algún código para evaluar si la expresión es falsa.

Normalmente utilizará un conjunto de funciones integradas para leer datos del exterior y enviar datos al mundo exterior.

Wikipedia o google son generalmente buenos puntos de partida para descubrir cosas que no conoce.

Vale la pena señalar que, debido a que es un lenguaje interpretado, es sencillo crear código ejecutable a partir de estructuras de datos PHP utilizando eval() o create_function() (o simplemente usando archivos temporales). De hecho, incluso podría implementar un sistema de reescritura estructurado para que los datos originales no se parezcan en nada al código PHP. p.ej. lolcode

Pero debe tener mucho cuidado de no exponer este mecanismo a alguien que pueda abusar de él.

HTH

4

Dividir la tarea en al menos dos partes, de nivel superior:

  1. PHP como cualquier otro lenguaje de programación - se necesita un analizador léxico, analizador e intérprete.

  2. Las bibliotecas y módulos para servidores web prefieren Apache/TomCat para interactuar con PHP.

+1

3) un módulo cgi-bin (o alternativas) o un módulo apache – Quamis

2

También podría escribirlo en PHP, como BobX. Tenga en cuenta que BobX es en realidad un ejemplo de lo que NO hacer.

+0

Eso trae recuerdos ... –

Cuestiones relacionadas