stringtranslate.com

Analizando

El análisis sintáctico , análisis de sintaxis o análisis sintáctico es el proceso de analizar una cadena de símbolos , ya sea en lenguaje natural , lenguajes informáticos o estructuras de datos , conforme a las reglas de una gramática formal . El término análisis proviene del latín pars ( orationis ), que significa parte (del discurso) . [1]

El término tiene significados ligeramente diferentes en diferentes ramas de la lingüística y la informática . El análisis de oraciones tradicional se realiza a menudo como método para comprender el significado exacto de una oración o palabra, a veces con la ayuda de dispositivos como diagramas de oraciones . Suele enfatizar la importancia de las divisiones gramaticales como sujeto y predicado .

Dentro de la lingüística computacional, el término se utiliza para referirse al análisis formal realizado por una computadora de una oración u otra cadena de palabras en sus constituyentes, lo que da como resultado un árbol de análisis que muestra su relación sintáctica entre sí, que también puede contener información semántica . [ cita necesaria ] Algunos algoritmos de análisis pueden generar un bosque de análisis o una lista de árboles de análisis para una entrada sintácticamente ambigua . [2]

El término también se utiliza en psicolingüística para describir la comprensión del lenguaje. En este contexto, el análisis se refiere a la forma en que los seres humanos analizan una oración o frase (en lenguaje hablado o texto) "en términos de constituyentes gramaticales, identificando las partes del discurso, relaciones sintácticas, etc." [1] Este término es especialmente común cuando se analiza qué señales lingüísticas ayudan a los hablantes a interpretar oraciones en el camino del jardín .

Dentro de la informática, el término se utiliza en el análisis de lenguajes informáticos , refiriéndose al análisis sintáctico del código de entrada en sus partes componentes con el fin de facilitar la escritura de compiladores e intérpretes . El término también puede usarse para describir una escisión o separación.

Lenguajes humanos

Métodos tradicionales

El ejercicio gramatical tradicional de análisis, a veces conocido como análisis de cláusulas , implica dividir un texto en las partes que lo componen con una explicación de la forma, función y relación sintáctica de cada parte. [3] Esto se determina en gran parte a partir del estudio de las conjugaciones y declinaciones del idioma , que pueden ser bastante complejas para idiomas con muchas flexiones . Analizar una frase como "el hombre muerde al perro" implica observar que el sustantivo singular "hombre" es el sujeto de la oración, el verbo "muerde" es la tercera persona del singular del tiempo presente del verbo "morder" y el sustantivo singular "perro" es el objeto de la oración. A veces se utilizan técnicas como los diagramas de oraciones para indicar la relación entre los elementos de la oración.

Anteriormente, el análisis sintáctico era fundamental para la enseñanza de la gramática en todo el mundo de habla inglesa y, en general, se lo consideraba básico para el uso y la comprensión del lenguaje escrito. Sin embargo, la enseñanza general de tales técnicas ya no es actual. [ cita necesaria ]

Métodos computacionales

En algunos sistemas de traducción automática y procesamiento de lenguaje natural , los textos escritos en lenguajes humanos son analizados mediante programas informáticos. [4] Los programas no analizan fácilmente las oraciones humanas, ya que existe una ambigüedad sustancial en la estructura del lenguaje humano, cuyo uso es transmitir significado (o semántica ) entre una gama potencialmente ilimitada de posibilidades, pero solo algunas de las cuales son pertinentes. el caso concreto. [5] Por lo tanto, una expresión "El hombre muerde al perro" frente a "El perro muerde al hombre" es definitiva en un detalle, pero en otro idioma podría aparecer como "El hombre muerde al perro" basándose en el contexto más amplio para distinguir entre esas dos posibilidades, si es que efectivamente esa diferencia era motivo de preocupación. Es difícil preparar reglas formales para describir el comportamiento informal aunque esté claro que algunas reglas se siguen. [ cita necesaria ]

Para analizar datos del lenguaje natural, los investigadores primero deben ponerse de acuerdo sobre la gramática que se utilizará. La elección de la sintaxis se ve afectada tanto por preocupaciones lingüísticas como computacionales; por ejemplo, algunos sistemas de análisis utilizan gramática funcional léxica , pero en general, se sabe que el análisis de gramáticas de este tipo es NP-completo . La gramática de estructura de frases basada en la cabeza es otro formalismo lingüístico que ha sido popular en la comunidad de análisis sintáctico, pero otros esfuerzos de investigación se han centrado en formalismos menos complejos como el utilizado en Penn Treebank . El análisis superficial tiene como objetivo encontrar sólo los límites de los constituyentes principales, como las frases nominales. Otra estrategia popular para evitar controversias lingüísticas es el análisis de la gramática de dependencia .

La mayoría de los analizadores modernos son al menos parcialmente estadísticos ; es decir, se basan en un corpus de datos de entrenamiento que ya han sido anotados (analizados a mano). Este enfoque permite que el sistema recopile información sobre la frecuencia con la que ocurren diversas construcciones en contextos específicos. (Ver aprendizaje automático .) Los enfoques que se han utilizado incluyen PCFG (gramáticas probabilísticas libres de contexto) sencillas, [6] entropía máxima , [7] y redes neuronales . [8] La mayoría de los sistemas más exitosos utilizan estadísticas léxicas (es decir, consideran las identidades de las palabras involucradas, así como su parte del discurso ). Sin embargo, dichos sistemas son vulnerables al sobreajuste y requieren algún tipo de suavizado para ser efectivos. [ cita necesaria ]

Los algoritmos de análisis de lenguaje natural no pueden depender de que la gramática tenga propiedades "agradables" como ocurre con las gramáticas diseñadas manualmente para lenguajes de programación. Como se mencionó anteriormente, algunos formalismos gramaticales son muy difíciles de analizar computacionalmente; en general, incluso si la estructura deseada no está libre de contexto , se utiliza algún tipo de aproximación a la gramática libre de contexto para realizar una primera pasada. Los algoritmos que utilizan gramáticas libres de contexto a menudo se basan en alguna variante del algoritmo CYK , generalmente con alguna heurística para eliminar análisis improbables y ahorrar tiempo. (Ver análisis de gráficos ). Sin embargo, algunos sistemas intercambian velocidad por precisión utilizando, por ejemplo, versiones de tiempo lineal del algoritmo de reducción de desplazamiento . Un desarrollo algo reciente ha sido la reclasificación de análisis en la que el analizador propone una gran cantidad de análisis y un sistema más complejo selecciona la mejor opción. [ cita necesaria ] En aplicaciones de comprensión del lenguaje natural , los analizadores semánticos convierten el texto en una representación de su significado. [9]

Psicolingüística

En psicolingüística , el análisis implica no sólo la asignación de palabras a categorías (formación de conocimientos ontológicos), sino también la evaluación del significado de una oración de acuerdo con las reglas de sintaxis extraídas mediante inferencias hechas a partir de cada palabra de la oración (conocido como connotación ). . Esto normalmente ocurre cuando se escuchan o leen palabras.

La neurolingüística generalmente entiende que el análisis es una función de la memoria de trabajo, lo que significa que el análisis se utiliza para mantener en juego en la mente varias partes de una oración al mismo tiempo, todas fácilmente accesibles para ser analizadas según sea necesario. Debido a que la memoria de trabajo humana tiene limitaciones, también las tiene la función de análisis de oraciones. [10] Esto se evidencia en varios tipos diferentes de oraciones sintácticamente complejas que plantean problemas potenciales para el análisis mental de las oraciones.

El primer tipo de oración, y quizás el más conocido, que desafía la capacidad de análisis es la oración del camino del jardín. Estas oraciones están diseñadas para que la interpretación más común de la oración parezca gramaticalmente defectuosa, pero tras una inspección más detallada, estas oraciones son gramaticalmente sólidas. Las oraciones del camino del jardín son difíciles de analizar porque contienen una frase o una palabra con más de un significado, siendo a menudo su significado más típico una parte diferente del discurso. [11] Por ejemplo, en la oración "el caballo corrió más allá del granero cayó", corrió se interpreta inicialmente como un verbo en tiempo pasado, pero en esta oración funciona como parte de una frase adjetiva. Dado que el análisis se utiliza para identificar partes del discurso, estas oraciones desafían la capacidad de análisis del lector.

Otro tipo de oración que es difícil de analizar es la ambigüedad de apego, que incluye una frase que potencialmente podría modificar diferentes partes de una oración y, por lo tanto, presenta un desafío a la hora de identificar la relación sintáctica (es decir, "El niño vio a la dama con el telescopio", en el que la frase ambigua con el telescopio podría modificar el niño vio o la señora.) [12]

Un tercer tipo de oración que desafía la capacidad de análisis es la incrustación central, en la que las frases se colocan en el centro de otras frases formadas de manera similar (es decir, "La rata, el gato que el hombre persiguió, corrió hacia la trampa".) Oraciones con 2 o en el En los casos más extremos, las incrustaciones de 3 centros son un desafío para el análisis mental, nuevamente debido a la ambigüedad de la relación sintáctica. [13]

Dentro de la neurolingüística existen múltiples teorías que tienen como objetivo describir cómo se produce el análisis sintáctico en el cerebro. Uno de esos modelos es un modelo generativo más tradicional de procesamiento de oraciones, que teoriza que dentro del cerebro hay un módulo distinto diseñado para el análisis de oraciones, que es precedido por el acceso al reconocimiento y recuperación léxico, y luego seguido por un procesamiento sintáctico que considera una sola resultado sintáctico del análisis, volviendo solo a revisar esa interpretación sintáctica si se detecta un problema potencial. [14] El modelo opuesto, más contemporáneo, teoriza que dentro de la mente, el procesamiento de una oración no es modular ni ocurre en secuencia estricta. Más bien, plantea que se pueden considerar varias posibilidades sintácticas diferentes al mismo tiempo, porque el acceso léxico, el procesamiento sintáctico y la determinación del significado ocurren en paralelo en el cerebro. De esta manera se integran estos procesos. [15]

Aunque todavía queda mucho por aprender sobre la neurología del análisis, los estudios han mostrado evidencia de que varias áreas del cerebro podrían desempeñar un papel en el análisis. Estos incluyen el polo temporal anterior izquierdo, la circunvolución frontal inferior izquierda, la circunvolución temporal superior izquierda, la circunvolución frontal superior izquierda, la corteza cingulada posterior derecha y la circunvolución angular izquierda. Aunque no se ha demostrado absolutamente, se ha sugerido que estas diferentes estructuras podrían favorecer el análisis de estructura de frase o el análisis de estructura de dependencia, lo que significa que diferentes tipos de análisis podrían procesarse de diferentes maneras que aún no se han entendido. [dieciséis]

Análisis del discurso

El análisis del discurso examina formas de analizar el uso del lenguaje y los eventos semióticos. El lenguaje persuasivo puede denominarse retórica .

Lenguajes informáticos

analizador

Un analizador es un componente de software que toma datos de entrada (frecuentemente texto) y construye una estructura de datos , a menudo algún tipo de árbol de análisis , árbol de sintaxis abstracta u otra estructura jerárquica, que proporciona una representación estructural de la entrada mientras verifica la sintaxis correcta. El análisis puede ir precedido o seguido de otros pasos, o estos pueden combinarse en un solo paso. El analizador suele ir precedido de un analizador léxico independiente , que crea tokens a partir de la secuencia de caracteres de entrada; alternativamente, estos se pueden combinar en un análisis sin escáner . Los analizadores pueden programarse manualmente o pueden generarse automática o semiautomáticamente mediante un generador de analizadores . El análisis es complementario a las plantillas , que producen resultados formateados. Estos pueden aplicarse a diferentes dominios, pero a menudo aparecen juntos, como el par scanf / printf , o las etapas de entrada (análisis frontal) y salida (generación de código back-end) de un compilador.

La entrada a un analizador suele ser texto en algún lenguaje informático , pero también puede ser texto en un lenguaje natural o datos textuales menos estructurados, en cuyo caso generalmente solo se extraen ciertas partes del texto, en lugar de construir un árbol de análisis. Los analizadores van desde funciones muy simples como scanf , hasta programas complejos como la interfaz de un compilador de C++ o el analizador HTML de un navegador web . Una clase importante de análisis simple se realiza mediante expresiones regulares , en las que un grupo de expresiones regulares define un lenguaje regular y un motor de expresiones regulares genera automáticamente un analizador para ese lenguaje, lo que permite la coincidencia de patrones y la extracción de texto. En otros contextos, las expresiones regulares se utilizan antes del análisis, como paso de lexing cuya salida luego utiliza el analizador.

El uso de analizadores varía según la entrada. En el caso de los lenguajes de datos, un analizador a menudo se encuentra como la función de lectura de archivos de un programa, como la lectura de texto HTML o XML ; Estos ejemplos son lenguajes de marcado . En el caso de los lenguajes de programación , un analizador es un componente de un compilador o intérprete , que analiza el código fuente de un lenguaje de programación informática para crear alguna forma de representación interna; el analizador es un paso clave en la interfaz del compilador . Los lenguajes de programación tienden a especificarse en términos de una gramática determinista libre de contexto porque para ellos se pueden escribir analizadores rápidos y eficientes. Para los compiladores, el análisis en sí se puede realizar en una o varias pasadas (consulte compilador de una sola pasada y compilador de varias pasadas ).

Las desventajas implícitas de un compilador de una sola pasada se pueden superar en gran medida añadiendo correcciones , donde se prevé la reubicación del código durante la pasada hacia adelante, y las correcciones se aplican hacia atrás cuando se ha reconocido que el segmento actual del programa ha sido eliminado. terminado. Un ejemplo en el que un mecanismo de reparación de este tipo sería útil sería una declaración GOTO directa, donde el objetivo de GOTO se desconoce hasta que se completa el segmento del programa. En este caso, la aplicación del arreglo se retrasaría hasta que se reconociera el objetivo del GOTO. Por el contrario, un GOTO hacia atrás no requiere reparación, ya que la ubicación ya será conocida.

Las gramáticas libres de contexto están limitadas en la medida en que pueden expresar todos los requisitos de un idioma. Informalmente, la razón es que la memoria de dicho lenguaje es limitada. La gramática no puede recordar la presencia de una construcción en una entrada arbitrariamente larga; esto es necesario para un idioma en el que, por ejemplo, se debe declarar un nombre antes de poder hacer referencia a él. Sin embargo, las gramáticas más potentes que pueden expresar esta restricción no se pueden analizar de manera eficiente. Por tanto, es una estrategia común crear un analizador relajado para una gramática libre de contexto que acepte un superconjunto de las construcciones del lenguaje deseadas (es decir, acepte algunas construcciones no válidas); Posteriormente, las construcciones no deseadas se pueden filtrar en el paso de análisis semántico (análisis contextual).

Por ejemplo, en Python el siguiente es un código sintácticamente válido:

x  =  1 ; imprimir ( x );

El siguiente código, sin embargo, es sintácticamente válido en términos de gramática libre de contexto, produciendo un árbol de sintaxis con la misma estructura que el anterior, pero viola la regla semántica que requiere que las variables se inicialicen antes de su uso:

x  =  1 imprimir ( y )

Descripción general del proceso

Flujo de datos en un analizador típico

El siguiente ejemplo demuestra el caso común de analizar un lenguaje informático con dos niveles de gramática: léxico y sintáctico.

La primera etapa es la generación de tokens, o análisis léxico , mediante el cual el flujo de caracteres de entrada se divide en símbolos significativos definidos por una gramática de expresiones regulares . Por ejemplo, un programa de calculadora miraría una entrada como " 12 * (3 + 4)^2" y la dividiría en tokens 12, *, (, 3, +, 4, ), ^, 2, cada uno de los cuales es un símbolo significativo en el contexto de una expresión aritmética. El lexer contendría reglas para indicarle que los caracteres *, +, ^y (marcan )el inicio de un nuevo token, por lo que no se generarán tokens sin sentido como " 12*" o " ".(3

La siguiente etapa es el análisis sintáctico, que consiste en verificar que los tokens formen una expresión permitida. Esto generalmente se hace con referencia a una gramática libre de contexto que define recursivamente los componentes que pueden formar una expresión y el orden en el que deben aparecer. Sin embargo, no todas las reglas que definen los lenguajes de programación pueden expresarse únicamente mediante gramáticas libres de contexto, por ejemplo, la validez de tipo y la declaración adecuada de identificadores. Estas reglas se pueden expresar formalmente con gramáticas de atributos .

La fase final es el análisis semántico , que consiste en determinar las implicaciones de la expresión recién validada y tomar las medidas adecuadas. [17] En el caso de una calculadora o intérprete, la acción es evaluar la expresión o programa; un compilador, por otro lado, generaría algún tipo de código. También se pueden utilizar gramáticas de atributos para definir estas acciones.

Tipos de analizadores

La tarea del analizador es esencialmente determinar si la entrada puede derivarse del símbolo inicial de la gramática y cómo. Esto se puede hacer esencialmente de dos maneras:

Análisis de arriba hacia abajo
El análisis de arriba hacia abajo puede verse como un intento de encontrar derivaciones más a la izquierda de un flujo de entrada mediante la búsqueda de árboles de análisis utilizando una expansión de arriba hacia abajo de las reglas gramaticales formales dadas . Las fichas se consumen de izquierda a derecha. La elección inclusiva se utiliza para dar cabida a la ambigüedad ampliando todos los lados derechos alternativos de las reglas gramaticales. [18] Esto se conoce como el enfoque de la sopa primordial. Muy similar a los diagramas de oraciones, la sopa primordial descompone los componentes de las oraciones. [19]
Análisis ascendente
Un analizador puede comenzar con la entrada e intentar reescribirla en el símbolo de inicio. De manera intuitiva, el analizador intenta localizar los elementos más básicos, luego los elementos que los contienen, y así sucesivamente. Los analizadores LR son ejemplos de analizadores ascendentes. Otro término utilizado para este tipo de analizador es análisis Shift-Reduce .

Los analizadores LL y los analizadores de descenso recursivo son ejemplos de analizadores de arriba hacia abajo que no pueden adaptarse a las reglas de producción recursivas por la izquierda . Aunque se ha creído que las implementaciones simples de análisis de arriba hacia abajo no pueden acomodar la recursión izquierda directa e indirecta y pueden requerir una complejidad exponencial de tiempo y espacio mientras se analizan gramáticas ambiguas libres de contexto , Frost ha creado algoritmos más sofisticados para el análisis de arriba hacia abajo. , Hafiz y Callaghan [20] [21] que se adaptan a la ambigüedad y la recursividad por la izquierda en tiempo polinomial y que generan representaciones de tamaño polinomial del número potencialmente exponencial de árboles de análisis. Su algoritmo es capaz de producir derivaciones tanto hacia la izquierda como hacia la derecha de una entrada con respecto a una gramática libre de contexto determinada .

Una distinción importante con respecto a los analizadores es si un analizador genera una derivación más a la izquierda o una derivación más a la derecha (ver gramática libre de contexto ). Los analizadores LL generarán una derivación más a la izquierda y los analizadores LR generarán una derivación más a la derecha (aunque normalmente a la inversa). [18]

AlgunoSe han diseñado algoritmos de análisis gráfico para lenguajes de programación visual. [22][23]Los analizadores de lenguajes visuales a veces se basan engramáticas gráficas. [24]

Se han utilizado algoritmos de análisis adaptativo para construir interfaces de usuario de lenguaje natural "autoextendibles" . [25]

Implementación

Las API de analizador más simples leen el archivo de entrada completo, realizan algunos cálculos intermedios y luego escriben el archivo de salida completo. (Como compiladores de múltiples pasadas en memoria ).

Esos analizadores simples no funcionarán cuando no haya suficiente memoria para almacenar todo el archivo de entrada o todo el archivo de salida. Tampoco funcionarán con flujos interminables de datos del mundo real.

Algunos enfoques API alternativos para analizar dichos datos:

Software de desarrollo de analizadores

Algunas de las herramientas de desarrollo de analizadores más conocidas incluyen las siguientes:

Mirar hacia el futuro

Programa C que no se puede analizar con menos de 2 tokens de anticipación. Arriba: extracto de gramática C. [28] Abajo: un analizador ha digerido los tokens " " y está a punto de elegir una regla para derivar Stmt . Al observar solo el primer token de anticipación " ", no puede decidir cuál de ambas alternativas elegirá Stmt ; este último requiere echar un vistazo a la segunda ficha.int v;main(){v

Lookahead establece el número máximo de tokens entrantes que un analizador puede usar para decidir qué regla debe usar. La anticipación es especialmente relevante para los analizadores LL , LR y LALR , donde a menudo se indica explícitamente colocando la anticipación al nombre del algoritmo entre paréntesis, como LALR(1).

La mayoría de los lenguajes de programación , el objetivo principal de los analizadores, se definen cuidadosamente de tal manera que un analizador con anticipación limitada, generalmente uno, pueda analizarlos, porque los analizadores con anticipación limitada suelen ser más eficientes. Un cambio importante [ cita necesaria ] en esta tendencia se produjo en 1990 cuando Terence Parr creó ANTLR para su doctorado. tesis, un generador de analizadores para analizadores LL( k ) eficientes, donde k es cualquier valor fijo.

Los analizadores LR normalmente solo realizan unas pocas acciones después de ver cada token. Son desplazamiento (agregue este token a la pila para su posterior reducción), reducción (saque tokens de la pila y forme una construcción sintáctica), fin, error (no se aplica ninguna regla conocida) o conflicto (no sabe si cambiar o reducir). .

La anticipación tiene dos ventajas. [ se necesita aclaración ]

Ejemplo: análisis de la expresión 1 + 2 * 3 [ dudoso ]

La mayoría de los lenguajes de programación (excepto algunos como APL y Smalltalk) y fórmulas algebraicas dan mayor prioridad a la multiplicación que a la suma, en cuyo caso la interpretación correcta del ejemplo anterior es 1 + (2 * 3) . Tenga en cuenta que la regla 4 anterior es una regla semántica. Es posible reescribir la gramática para incorporarla a la sintaxis. Sin embargo, no todas estas reglas se pueden traducir a la sintaxis.

Acciones simples del analizador sin anticipación

Inicialmente entrada = [1, +, 2, *, 3]

  1. Cambie "1" a la pila desde la entrada (anticipándose a la regla 3). Entrada = [+, 2, *, 3] Pila = [1]
  2. Reduce "1" a la expresión "E" según la regla 3. Pila = [E]
  3. Cambie "+" a la pila desde la entrada (anticipándose a la regla 1). Entrada = [2, *, 3] Pila = [E, +]
  4. Cambie "2" a la pila desde la entrada (anticipándose a la regla 3). Entrada = [*, 3] Pila = [E, +, 2]
  5. Reduzca el elemento de pila "2" a la expresión "E" según la regla 3. Pila = [E, +, E]
  6. Reduzca los elementos de la pila [E, +, E] y nueva entrada "E" a "E" según la regla 1. Pila = [E]
  7. Cambie "*" a la pila desde la entrada (anticipándose a la regla 2). Entrada = [3] Pila = [E,*]
  8. Cambie "3" a la pila desde la entrada (anticipándose a la regla 3). Entrada = [] (vacío) Pila = [E, *, 3]
  9. Reduzca el elemento de pila "3" a la expresión "E" según la regla 3. Pila = [E, *, E]
  10. Reduzca los elementos de la pila [E, *, E] y la nueva entrada "E" a "E" según la regla 2. Pila = [E]

El árbol de análisis y el código resultante no son correctos según la semántica del lenguaje.

Para analizar correctamente sin mirar hacia adelante, existen tres soluciones:

Acciones del analizador anticipado [ se necesita aclaración ]
  1. Cambie 1 a la pila en la entrada 1 en anticipación a la regla 3. No se reduce inmediatamente.
  2. Reduzca el elemento 1 de la pila a una expresión simple en la entrada + según la regla 3. La anticipación es +, por lo que estamos en el camino hacia E +, por lo que podemos reducir la pila a E.
  3. Shift + en la pila al ingresar + en anticipación a la regla 1.
  4. Cambie 2 a la pila en la entrada 2 en anticipación a la regla 3.
  5. Reduzca el elemento 2 de la pila a Expresión en la entrada * según la regla 3. La anticipación * espera solo E antes.
  6. Ahora la pila tiene E + E y aún la entrada es *. Ahora tiene dos opciones: cambiar según la regla 2 o reducir según la regla 1. Dado que * tiene mayor prioridad que + según la regla 4, desplazamos * a la pila en anticipación a la regla 2.
  7. Mueva 3 a la pila en la entrada 3 en anticipación a la regla 3.
  8. Reduzca el elemento 3 de la pila a Expresión después de ver el final de la entrada según la regla 3.
  9. Reduzca los elementos de la pila E * E a E según la regla 2.
  10. Reduzca los elementos de la pila E + E a E según la regla 1.

El árbol de análisis generado es correcto y simplemente más eficiente [ aclarar ] [ cita necesaria ] que los analizadores sin anticipación. Esta es la estrategia seguida en los analizadores LALR .

Ver también

Referencias

  1. ^ ab "Analizar". diccionario.reference.com . Consultado el 27 de noviembre de 2010 .
  2. ^ Masaru Tomita (6 de diciembre de 2012). Análisis LR generalizado. Medios de ciencia y negocios de Springer. ISBN 978-1-4615-4034-2.
  3. ^ "Gramática y composición". Archivado desde el original el 1 de diciembre de 2016 . Consultado el 24 de noviembre de 2012 .
  4. ^ Christopher D. Manning; Christopher D. Manning; Hinrich Schütze (1999). Fundamentos del procesamiento estadístico del lenguaje natural. Prensa del MIT. ISBN 978-0-262-13360-9.
  5. ^ Jurafsky, Daniel (1996). "Un modelo probabilístico de acceso y desambiguación léxico y sintáctico". Ciencia cognitiva . 20 (2): 137–194. CiteSeerX 10.1.1.150.5711 . doi :10.1207/s15516709cog2002_1. 
  6. ^ Klein, Dan y Christopher D. Manning. "Análisis preciso no lexicalizado". Actas de la 41ª Reunión Anual de la Asociación de Lingüística Computacional-Volumen 1. Asociación de Lingüística Computacional, 2003.
  7. ^ Charniak, Eugenio. "Un analizador inspirado en la máxima entropía Archivado el 1 de abril de 2019 en Wayback Machine ". Actas del primer capítulo norteamericano de la conferencia de la Asociación de Lingüística Computacional. Asociación de Lingüística Computacional, 2000.
  8. ^ Chen, Danqi y Christopher Manning. "Un analizador de dependencias rápido y preciso que utiliza redes neuronales". Actas de la conferencia de 2014 sobre métodos empíricos en el procesamiento del lenguaje natural (EMNLP). 2014.
  9. ^ Jia, Robin; Liang, Percy (11 de junio de 2016). "Recombinación de datos para análisis semántico neuronal". arXiv : 1606.03622 [cs.CL].
  10. ^ Sandra H. Vos, Thomas C. Gunter, Herbert Schriefers y Angela D. Friederici (2001) Análisis sintáctico y memoria de trabajo: los efectos de la complejidad sintáctica, la duración de la lectura y la carga concurrente, Lenguaje y procesos cognitivos, 16:1, 65 -103, DOI: 10.1080/01690960042000085
  11. ^ Pritchett, BL (1988). Fenómenos del camino del jardín y la base gramatical del procesamiento del lenguaje. Idioma, 64 (3), 539–576. https://doi.org/10.2307/414532
  12. ^ Pritchett, BL (1988). Fenómenos del camino del jardín y la base gramatical del procesamiento del lenguaje. Idioma, 64 (3), 539–576. https://doi.org/10.2307/414532
  13. ^ Karlsson, F. (2010). Restricciones de la memoria de trabajo en la incrustación de múltiples centros. Actas de la Reunión Anual de la Sociedad de Ciencias Cognitivas, 32. Obtenido de https://escholarship.org/uc/item/4j00v1j2
  14. ^ Ferreira, F. y Clifton, C. (1986). La independencia del procesamiento sintáctico. Revista de Memoria y Lenguaje, 25(3), 348–368. https://doi.org/10.1016/0749-596X(86)90006-9
  15. ^ Atlas, JD (1997). Sobre la modularidad del procesamiento de oraciones: generalidad semántica y lenguaje del pensamiento. Lenguaje y conceptualización, 213–214.
  16. ^ Lopopolo, Alessandro, van den Bosch, Antal, Petersson, Karl-Magnus y Roel M. Willems; Distinguir operaciones sintácticas en el cerebro: dependencia y análisis de estructura de frases. Neurobiología del Lenguaje 2021; 2 (1): 152-175. doi: https://doi.org/10.1162/nol_a_00029
  17. ^ Berant, Jonathan y Percy Liang. "Análisis semántico mediante paráfrasis". Actas de la 52ª Reunión Anual de la Asociación de Lingüística Computacional (Volumen 1: Artículos extensos). 2014.
  18. ^ ab Aho, AV, Sethi, R. y Ullman, JD (1986) "Compiladores: principios, técnicas y herramientas". Addison-Wesley Longman Publishing Co., Inc. Boston, MA, EE. UU.
  19. ^ Sikkel, Klaas, 1954- (1997). Esquemas de análisis: un marco para la especificación y análisis de algoritmos de análisis . Berlín: Springer. ISBN 9783642605413. OCLC  606012644.{{cite book}}: Mantenimiento CS1: varios nombres: lista de autores ( enlace ) Mantenimiento CS1: nombres numéricos: lista de autores ( enlace )
  20. ^ Frost, R., Hafiz, R. y Callaghan, P. (2007) "Análisis de arriba hacia abajo modular y eficiente para gramáticas recursivas izquierdas ambiguas Archivado el 22 de agosto de 2018 en Wayback Machine ". Décimo taller internacional sobre tecnologías de análisis (IWPT), ACL-SIGPARSE , páginas: 109 - 120, junio de 2007, Praga.
  21. ^ Frost, R., Hafiz, R. y Callaghan, P. (2008) "Combinadores de analizadores para gramáticas recursivas izquierdas ambiguas". Décimo Simposio Internacional sobre Aspectos Prácticos de las Lenguas Declarativas (PADL), ACM-SIGPLAN , Volumen 4902/2008, Páginas: 167 - 181, enero de 2008, San Francisco.
  22. ^ Rekers, Jan y Andy Schürr. "Definición y análisis de lenguajes visuales con gramáticas de gráficos en capas". Revista de Lenguajes Visuales y Computación 8.1 (1997): 27-55.
  23. ^ Rekers, Jan y A. Schurr. "Un enfoque de gramática gráfica para el análisis gráfico". Lenguajes visuales, Actas., XI Simposio Internacional IEEE sobre. IEEE, 1995.
  24. ^ Zhang, Da-Qian, Kang Zhang y Jiannong Cao. "Un formalismo gramático gráfico sensible al contexto para la especificación de lenguajes visuales". El diario informático 44.3 (2001): 186-200.
  25. ^ Jill Fain Lehman (6 de diciembre de 2012). Análisis adaptativo: interfaces de lenguaje natural autoextendibles. Medios de ciencia y negocios de Springer. ISBN 978-1-4615-3622-2.
  26. ^ Patrick Blackburn y Kristina Striegnitz. "Técnicas de procesamiento del lenguaje natural en Prolog".
  27. ^ Song-Chun Zhu. "Algoritmos de análisis clásicos".
  28. ^ tomado de Brian W. Kernighan y Dennis M. Ritchie (abril de 1988). El lenguaje de programación C. Serie de software de Prentice Hall (2ª ed.). Englewood Cliffs/Nueva Jersey: Prentice Hall. ISBN 0131103628.(Apéndice A.13 "Gramática", p.193 y siguientes)

Otras lecturas

enlaces externos