2012-10-08 11 views
11

Actualmente estoy leyendo Javascript: The Good Parts y estoy teniendo problemas para entender sus diagramas de "gramática".¿Cómo leo este diagrama de JavaScript?

El primero es Whitespace

enter image description here

No estoy muy seguro de cómo leerlo, tal vez algo de código ayudará a entender?

Gracias por la ayuda en chicos avanzados.

+2

Básicamente, espacios, tabulaciones y caracteres de salto de línea son considerados todos los espacios en blanco, así como cualquier comentario. – Brad

+0

Estaba teniendo problemas para tratar de averiguar qué tenía que ver la sintaxis de los comentarios con el espacio en blanco, pero ahora tiene sentido con la respuesta de Brad. –

+0

Entiendo un poco ahora. Pero, ¿y la estructura? Todavía un poco confuso con los siguientes ejemplos de sección:/¿Debo omitir el capítulo de gramática e ir con objetos? – RufioLJ

Respuesta

3

La barra doble del lado izquierdo ("||") se puede ver como la "entrada" de una función y la barra doble derecha como la "salida". Entonces, en este caso, un carácter o línea es la entrada, y las rutas entre las barras dobles son las pruebas. Si el carácter/línea se considera "espacio en blanco" por cualquiera de las pruebas, el resultado de la función será "verdadero", de lo contrario será "falso".

En particular, digamos que sigues la cuarta ruta. En este camino, primero encontrará un "/", seguido de otro "/", seguido de cualquier otro carácter hasta el carácter EOL. En este caso, si la línea de código es "// un ejemplo", la salida será verdadera.

+0

Ok, esto ayuda, pero me quedo atascado después de la tercera línea. Por alguna razón, pensé que el diagrama intentaba decir el espacio en blanco de/*// */de la tercera línea. Gracias por ayudarme. – RufioLJ

1

Piénselo como si usted son el analizador sintáctico o el lenguaje, y necesita un conjunto de reglas para comprender el flujo de entrada de caracteres.

Al pensar en cómo funciona el analizador, puede comprender exactamente qué constituye los tokens del lenguaje JavaScript.

4

Comience en el extremo izquierdo || y continúe a la derecha. La primera barra hacia abajo (Inmediatamente al lado de su punto de inicio) no se puede seguir porque la curva no se origina desde la izquierda (La dirección en que viaja). Si mira de dónde viene, debería ser fácil decir que representa una while bucle:

while (!EOF) {} // While there's still text to parse 

la segunda línea se puede seguir ya que la curva se origina desde la izquierda (. a raíz de su directorio actual) esta línea representa esta declaración else if-:

if (char == '/') {}  // Forward slash 
else if (char == '\n') {} // Line end 
else if (char == '\t') {} // Tab 
else if (char == ' ') {} // Space 

espacio, tabulación y Al final de la línea ambos terminan la función y return o continue inmediatamente. Sin embargo, si el personaje es una barra inclinada, se tiene que comprobar si se trata de una sola línea (//) o múltiples (/* */):

*char++;     // Move to next character 
if (char == '*') {}  // Multi line 
else if (char == '/') {} // Single line 

Si se trata de una sola línea que lee hasta el final de la línea y continúa. Si es una línea múltiple, se lee de manera similar hasta que encuentra '*' seguido de '/' y luego continúa.

1

El diagrama de gramática al que se refiere fue ampliamente utilizado para documentar la sintaxis de Pascal. Básicamente es el diagrama de flujo de cómo se analiza el código fuente. Cada "porción" del gráfico, en su ejemplo, "espacio en blanco", es como una llamada a función. Técnicamente estamos hablando de un analizador de descenso recursivo.

Así que mi forma de pensar al respecto es:

El analizador consigue un carácter del flujo de entrada.Así que vamos y "probamos" la función de espacios en blanco, si ese personaje es un espacio, tabulador, línea final o carácter '/' vamos al siguiente paso, si no salimos con un valor de retorno 'no encontrado'.

Si fue un '/' entonces obtenemos el siguiente caracter. Si es otro '/', leemos los caracteres hasta que termina la línea y luego salimos con el valor de retorno 'encontrado'.

Si el siguiente carácter es '', buscamos leer cualquier cosa que no sea '/' o ''. etc ...

Básicamente el flujo es de izquierda a derecha, pero cuando una línea gira hacia la izquierda tenemos una repetición. Lo bueno de estos diagramas es que, una vez que lo dominas, es fácil escribir rápidamente el código sintácticamente correcto. Y puede codificar fácilmente el analizador de descenso recursivo siguiendo el 'diagrama de flujo'.

1

(consulte this answer)

Para aprender a cómo leer diagrama de ferrocarril, es necesario entender la diferencia de la gráfica en estas tres situaciones:

cero o más, cero o uno, uno o más.

Para entender sus diferencias (como muestra la siguiente imagen), el punto es "Empiezas en el borde izquierdo y sigues las pistas hasta el borde derecho". Entonces imagina que eres el tren, solo gira a la derecha, no puedes girar a la izquierda.

enter image description here

la imagen de arriba creado por http://bottlecaps.de/rr/ En la pestaña "Editar Gramática", introduzca la siguiente gramática:

zeroormore ::= element* 
zeroorone ::= element? 
oneormore ::= element+