Un equipo tiene un número finito de memoria. No hay equipos con infinito de la memoria. Por lo tanto, los únicos idiomas que una computadora puede procesar son aquellos cuyos miembros cadenas son finitos. Como recuerdo, la potencia de cálculo necesaria para cualquier lenguaje finito es pequeño-un determinista autómatas de estado finito es suficiente para el proceso finito idiomas, creo.
Así que no hay tal cosa como el contexto libre de idiomas o recursivamente enumerable idiomas, derecho? Los lenguajes de programación no son de contexto libre, sólo son simples regulares de idiomas, derecho? La idea de que un lenguaje de programación es un contexto libre de la lengua ... bueno, eso es una ilusión, ¿verdad?
¿Por qué se molestó hablar de contexto libre de idiomas, lenguajes recursivos, recursivamente enumerable idiomas ya que dentro de la (finito) equipo todo es sólo un lenguaje regular?
Obviamente estoy jugando diablos-defensor de aquí, pero realmente me gustaría comprender la falacia de mi argumento.
Resumen de las Respuestas
Muchas gracias a todos los que respondieron. He estudiado sus respuestas cuidadosamente. Hay muchas perlas de sabiduría en sus respuestas que me decidí a resumir. Si mi resumen es incorrecta, claro, o la falta de un concepto importante, por favor hágamelo saber.
> A computer has a finite memory. There are no computers
> with infinite memory. Therefore the only languages that
> a computer can process are those whose member strings
> are finite.
Respuestas
Una memoria de la computadora es finito, por lo que en su memoria se puede reconocer sólo finita idiomas. Sin embargo, si a usted le pase una entrada externa para el ordenador, entonces podría reconocer algunos infinito idiomas.
Ejemplo: a*b
es un idioma infinito y cualquier cadena en la que el lenguaje puede ser reconocido, incluso si la cadena supera el tamaño de la memoria de la computadora. He aquí cómo: paso de la cadena en el equipo, carácter por carácter. Si el primer carácter que se pasa no es una "a", a continuación, ir a un estado de error. De lo contrario, permanecer en el "un" estado hasta que un no"un" carácter de entrada. Si el carácter no es una "b", a continuación, vaya al estado de error. De lo contrario, vaya a aceptar un estado. Para cualquiera de los caracteres más allá de la "b" ir al estado de error.
No todos los infinitos idiomas puede ser reconocido mediante esta técnica de alimentación de las cadenas de entrada como entrada externa. De hecho, la técnica puede ser utilizada sólo con regular idiomas. E incluso de los regulares de idiomas, sólo algunos de ellos pueden ser reconocidos.
Ejemplo: Para fines de ilustración, supongamos que el equipo tiene un ridículamente pequeño tamaño de la memoria, dicen, de 2 bytes. Supongamos que 1 byte se requiere para cada estado de un autómata de estado finito. A continuación, el equipo no será capaz de reconocer este lenguaje regular: a*b*c*
porque, al menos, tres byes son necesarios – un byte para el estado que consume todo el un, un segundo byte para el estado que consume todo el b, y un tercer byte para el estado que consume todo el c.
Cualquier autómata de estado finito que requiere de más estados que no son bytes en la memoria de la computadora no puede ser reconocida.
Finalmente, con esta técnica de alimentación arbitrariamente largas cadenas en el equipo como externos de entrada, tendríamos que encontrar una manera alrededor de ciertas limitaciones técnicas, tales como una fuente de alimentación continua.
> A computer has a finite memory. Therefore the only languages
> that a computer can process are those whose member strings
> are finite … So there is no such thing as context-free languages
> or recursively enumerable languages, right?
Respuestas
Considere la posibilidad de un idioma infinito. Se compone de cadenas de longitud arbitraria. Muchas cadenas será mayor que el tamaño de la memoria de la computadora. Es incorrecto decir que porque un equipo puede retener en su memoria sólo las cadenas que son de una cierta longitud finita, el lenguaje tiene sólo un número finito de cadenas. Es cierto que cualquier subconjunto finito de un lenguaje es regular. Pero eso no quiere decir que el idioma original debe haber sido regular.
> A computer has a finite memory. Therefore, in general, a computer
> can only process a finite subset of an infinite language. A finite
> subset of a language is regular. So why don't we simply treat all
> languages used in computers as regular?
Respuestas
La razón para tratar, por ejemplo, un lenguaje de programación independiente del contexto es que la gramática independiente del contexto, se explica cómo analizar el lenguaje. Si se considera sólo el subconjunto de programas con una longitud de no más de 2de 32, que sería regular, pero la expresión regular es probable que constan de millones de casos individuales, y no sería útil para el análisis de los programas.