Pregunta

Estoy haciendo el diseño del compilador de clases en el capítulo de código intermedio.Investigando un poco en línea, encontré esta frase:

La interpretación recursiva es necesaria cuando el programa fuente puede incluir instrucciones compuestas.

No puedo encontrar qué es una instrucción compuesta en Google.

¿Fue útil?

Solución

En este caso (ver el enlace ) el escritor está haciendo una contrastar con lo que él llama un intérprete iterativo, que simplemente lee cada instrucción y la obedece, a continuación, pasa a la siguiente instrucción, y algo que tiene que hacer el análisis de una secuencia de instrucciones para encontrar en qué orden, para hacerlas.

Pero, para mí, la calidad de este material parece cuestionable.

Otros consejos

Capítulo 1 Notas - Introducción a compiladores

# High level languages support the use of complex expressions.
# Example:

x + y * z / (w + 1)

técnicas de uso de recursión analizadores el fin de analizar expresiones complejas y construir el árbol de sintaxis.

Eso capítulo es algo cuerda.

Intérprete:

Un programa expresado en un idioma que ejecuta programas expresados ​​en otro idioma.

Ver auto intérprete y intérprete metacircular para los casos en que el intérprete esté escrito en el mismo idioma.

Un intérprete compila un programa fuente y lo ejecuta inmediatamente.

No, eso sería un compilador justo a tiempo;Los intérpretes pueden utilizar técnicas JIT, pero también se utilizan para reducir el tamaño de un ejecutable compilado.Los verdaderos intérpretes no son compiladores JIT.

La interpretación es más lenta que la ejecución de código de máquina compilado.

Por lo general, aunque a veces, un intérprete con el código fuente completo puede realizar mejores optimizaciones que un compilador JIT.

La interpretación iterativa es posible cuando el programa fuente se puede ejecutar línea por línea.

También es posible si no es así, a menos que estén utilizando 'interpretación iterativa' para significar 'leer el código fuente una línea a la vez y procesarla', pero luego tienen "un interpretador [iterativo] [...] repite una secuencia de buscar, analizar y ejecutar.[...] repite en un bucle iterativo.", así que no, puedes hacerlo con prácticamente cualquier entrada, una vez que la hayas analizado y hayas realizado algún procesamiento.

Un intérprete de un lenguaje de comandos puede ser iterativo.

Es cierto, pero no tiene nada de especial. lenguajes de comando a este respecto.Cualquier lenguaje se puede interpretar mediante enfoques iterativos o recursivos.

La interpretación recursiva es necesaria cuando el programa fuente puede incluir instrucciones compuestas.

Puede asignar cualquier procedimiento recursivo a un procedimiento iterativo con una pila explícita, por lo que una implementación recursiva nunca es estrictamente necesario.

Supongo que esto significa lo mismo que las expresiones cuyos términos son compuestos, principalmente porque es la única forma en que tiene sentido.

Si tiene un intérprete que ve:

z = a + 5

entonces para la expresión a + 5 puede buscar cuál es el valor de a es y conoce la constante 5, entonces puede calcular a + 5 y almacenar el resultado en z.

Si la expresión es en cambio:

z = a + ( b * c )

entonces puede buscar cuál es el valor de a es, pero para calcular b * c tiene que llamarse a sí mismo de forma recursiva o presionar z = a + pop() en una pila y calcular push(b*c).

Para interpretar expresiones de términos compuestos usando un intérprete iterativo, puede transformar la fuente en una forma lineal usando temporales, así:

z = a + ( b * c )

se convierte en:

temp = b * c
z = a + d

Todas las expresiones con términos compuestos pueden reducirse a términos no compuestos.Por lo general, esta transformación se realiza antes de que el código llegue al bucle principal del intérprete, lo que hace que ese bucle principal sea más sencillo y rápido.

Un intérprete de un lenguaje de alto nivel debe ser recursivo.

Falso, ver arriba.

Un intérprete para un lenguaje de consulta debe ser recursivo.

Falso, ver arriba.

La interpretación recursiva es más lenta que la interpretación iterativa.

Generalmente es cierto, pero estoy seguro de que habrá algunas excepciones si las buscas.

Esto es una referencia para usted:

instrucciones compuestas

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top