2011-09-08 7 views
11

¿Es posible usar Javascript para escribir un compilador que pueda admitir otro tipo de lenguaje como scripting?Posible escribir un compilador con Javascript?

Digamos que tengo una pieza de HTML.

<script language="cpp" id="cppScriptBlock" EntryPoint="main"> 
    int main() { 
     cout << "<h1>CPPHeader</h1>"; 
    } 
</script> 

<script language="java" id="javaScriptBlock" EntryPoint="MyJavaClass"> 
    public class MyJavaClass { 
     public final void main() { 
      java.lang.System.out.println("<h1>JavaHeader</h1>"); 
     } 
    } 
</script> 

<script language="csharp" id="csharpScriptBlock" EntryPoint="MyCSharpClass "> 
    public class MyCSharpClass { 
     public static void Main() { 
      System.Console.WriteLine("<h1>CSharpHeader</h1>"); 
     } 
    } 
</script> 


<script language="javascript"> 
    $("#cppScriptBlock").compileAndRun(); 
    $("#javaScriptBlock").compileAndRun(); 
    $("#csharpScriptBlock").compileAndRun(); 
</script> 

Y finalmente generar el código HTML siguiente

<h1>CPPHeader</h1> 
<h1>JavaHeader</h1> 
<h1>CSharpHeader</h1> 

¿Es posible?

Alex

+3

Sí, se puede hacer. Debo desearle buena suerte, sin embargo. :) –

+4

Voy a dejar esto aquí: http://bellard.org/jslinux/ –

+1

Ver https://github.com/gpjt/webgl-lessons/blob/master/example01/index.html para ver un ejemplo en WebGL. Los programas GLSL (lenguaje de sombreado) se escriben en bloques de script. –

Respuesta

0

Sí, es posible.

Sin embargo, sería mucho más fácil escribir un intérprete que convierta de un idioma a Javascript y luego hacer que el navegador maneje la generación y la ejecución del código de bytes.

7

Sí, pero hay mucho trabajo que debería hacer. Al igual que un compilador real, tendría que analizar el código, convertirlo en código intermedio, etc. Después de eso, tendría que simular el entorno, incluidas todas las bibliotecas de tiempo de ejecución incluidas en esos idiomas. En resumen, no es práctico, pero es posible.

+0

Convertir a "código intermedio" implica que necesito una "Máquina virtual" creada con Javascript para ejecutar el código intermedio, ¿no es así? –

+0

@Alex: Eso es lo que estaba asumiendo que harías. La mayoría de los compiladores (y un gran número de intérpretes también) generan código intermedio en algún momento. Si eso se emite, se ejecuta o se transforma, más difiere, pero la mayoría de los compiladores tienen un paso común de generar algo similar al código intermedio. – icktoofay

7

Sí, Javascript es Turing Complete. Puede codificar cualquier cosa que pueda codificar en cualquier idioma. Por supuesto que eso incluye compiladores. No puedo imaginar ninguna razón para hacer esto sin embargo. Si eres lo suficientemente bueno en Javascript para escribir un compilador, probablemente quieras escribir tu código en JavaScript en lugar de en otro idioma.

+2

de acuerdo con usted. Prácticamente, no voy a hacer eso. Solo estoy interesado en la posibilidad de compilar el compilador con Javascript. La idea es para la combinación del lenguaje de programación. –

+3

que es como decirle a un artista que si él/ella es lo suficientemente bueno para pintar una imagen de alguien que pinta una imagen de un gato, él/ella debería simplemente pintar un gato. si el artista quiere pintar, déjelo pintar. simplemente no trates de decirles QUÉ pintar. – unsynchronized

2

Consulte Metacompiler tutorial sobre cómo escribir compiladores arbitrarios (y compiladores compiladores) en general, utilizando Javascript como lenguaje de implementación.

16

Sí, es muy posible usar Jison.

Genera un analizador de JavaScript basado en las construcciones de lenguaje que defina.

Jison toma una gramática libre de contexto como entrada y genera un archivo JavaScript capaz de analizar el lenguaje descrito por que la gramática. Usted puede usar el script generado para analizar entradas y aceptar, rechazar, o realizar acciones basadas en la entrada.

- desde el PS documentation

: CoffeeScript! también fue creado usando esto. :)

1

Sí, es posible. Pero en lugar de escribir tu analizador sintácticamente, te animo a usar un buen generador de analizadores.

Por ejemplo ANTLR por Terence Parr es un generador de analizadores muy poderoso que tiene a JavaScript target.Funciona en entornos compatibles con ECMAScript 5.1. (probado en Firefox, Safari, Chrome, Internet Explorer y Node.js). Es de código abierto (licencia BSD) con una amplia documentación y un muy buen libro disponible.

Usando una herramienta como esta, en lugar de escribir su propio analizador, escribe una gramática y se genera el analizador para usted.

Cuestiones relacionadas