stringtranslate.com

Discusión:Análisis léxico

Asignación de curso apoyada por Wiki Education Foundation

Este artículo fue objeto de una tarea de curso apoyada por Wiki Education Foundation, entre el 24 de agosto de 2020 y el 9 de diciembre de 2020. Hay más detalles disponibles en la página del curso . Editor(es) de estudiantes: Oemo01 .

El mensaje anterior sin fecha fue sustituido por la tarea de Template:Dashboard.wikiedu.org de PrimeBOT ( discusión ) 02:31, 17 de enero de 2022 (UTC) [ responder ]

Ejemplos


¡Este artículo no es lo suficientemente claro! ¡Necesita más ejemplos!

Roberto A.


El enlace a ocaml-ulex en 'Enlaces' está roto.

Franco S.


Robert, este artículo está muy mal articulado. Parece que sus autores no tienen la suficiente claridad para explicarlo y hacerlo comprensible. Y probablemente el artículo debería estar marcado como tal, ya que requiere mayor claridad. Stevenmitchell ( discusión ) 16:08 25 ene 2014 (UTC) [ responder ]

Tipos de tokens

¿Alguien me puede explicar qué tipos de tokens existen? (¿Palabras clave, identificadores, literales? ¿O hay más?) ¿Y cada uno de estos tipos va en una tabla de símbolos de ese tipo? Es decir, ¿una tabla de identificadores, una tabla de palabras clave y una tabla de literales? ¿O simplemente se almacenan en una tabla de símbolos uniforme? — Dudboi 02:17, 6 de noviembre de 2006 (UTC) [ responder ]

Depende mucho. Por ejemplo, para el lenguaje de ejemplo (PL/0; consulte el código fuente correspondiente) del artículo, estos son los tipos de token disponibles:

operadores multi-caracteres: '+', '-', '*', '/', '=', '(', ')', ':=', '<', '<=', '<>', '>', '>=' idioma requerido puntuación: ',', ';', '.', números literales - específicamente, números enteros identificadores: a-zA-Z {a-zA-Z0-9} palabras clave: "begin", "call", "const", "do", "end", "if", "odd", "procedure", "then", "var", "while"

Otros lenguajes pueden tener más tipos de tokens. Por ejemplo, en el lenguaje C, tendrías literales de cadena, literales de caracteres, números de punto flotante, números hexadecimales, directivas, etc.

Los he visto almacenados todos en una sola tabla y también los he visto almacenados en varias tablas. No sé si existe un estándar, pero por los libros que he leído y el código fuente que he visto, parece que el uso de varias tablas es popular.

La segunda tarea realizada durante el análisis léxico es ingresar tokens en una tabla de símbolos si está allí. Otras tareas realizadas durante el análisis léxico son: 1. eliminar todos los comentarios, tabulaciones, espacios en blanco y caracteres de máquina. 2. producir mensajes de error ocurridos en un programa fuente.

Consulte los siguientes enlaces para obtener fuentes de compiladores sencillas y accesibles:

http://en.wikipedia.org/wiki/Talk:Lexical_analysis/PL/0 http://www.246.dk/pascals1.html http://www.246.dk/pascals5.html

Para más información sobre PL/0, véase http://www.246.dk/pl0.html. 208.253.91.250 18:07, 13 de noviembre de 2006 (UTC) [ responder ]

Fusión y limpieza

He "fusionado" el token (analizador) aquí. Sin embargo, la página ahora está un poco desordenada. Los encabezados que he creado deberían ayudar a solucionarlo. Los ejemplos deberían mejorarse para que ocupen menos espacio. El archivo lex probablemente debería trasladarse a la página flex . -- MarSch 15:37, 30 de abril de 2007 (UTC) [ responder ]

He realizado el movimiento del ejemplo. -- MarSch 15:39, 30 de abril de 2007 (UTC) [ responder ]

¿Próximo?

Sería bueno ver qué implica el siguiente paso, o al menos ver un enlace a la página que describe todo el proceso de convertir código de alto nivel en código de bajo nivel.

-Dusan B.

¿Te refieres a compilar ? -- MarSch 10:53, 5 de mayo de 2007 (UTC) [ responder ]

Errores léxicos

Se menciona que el escaneo falla en un "token no válido". No parece particularmente claro qué constituye un error léxico además de una cadena de caracteres basura. ¿Alguna idea? -- 138.16.23.227 (discusión) 04:54, 27 de noviembre de 2007 (UTC) [ responder ]

Si el analizador léxico encuentra un token no válido, informará un error.
El comentario necesita algo de contexto. En términos generales, un analizador léxico puede informar de un error, pero eso suele estar (por ejemplo, en la herramienta de programación Lex ) bajo el control de la persona que diseña las reglas para el análisis. El propio analizador puede rechazar las reglas porque son inconsistentes. Por otro lado, es más probable que el analizador tenga un comportamiento incorporado: yacc , por ejemplo, falla ante cualquier discrepancia, lo que requiere que el desarrollador especifique cómo manejar los errores (actualizar el artículo para reflejar estos comentarios requiere citar fuentes confiables, por supuesto; las páginas de discusión no son una fuente). Tedickey ( discusión ) 13:56, 27 de noviembre de 2007 (UTC) [ responder ]

Analizador léxico, tokenizador, escáner y analizador

Debería explicarse más claramente qué es exactamente lo que diferencia a esos módulos, cuáles son sus trabajos particulares y cómo se componen entre sí (¿quizás alguna ilustración?). —Comentario anterior sin firmar agregado por Sasq777 ( discusióncontribuciones ) 16:06, 11 de junio de 2008 (UTC) [ responder ]

Estoy de acuerdo, el artículo no deja claro qué es qué, qué viene primero, etc. De hecho, parece haber algunas afirmaciones contradictorias. Un diagrama de bloques sería ideal, pero se necesita urgentemente una explicación clara. Gracias. 122.29.91.176 ( discusión ) 01:03 21 jun 2008 (UTC) [ responder ]

Algo así como la página 4 de este documento, que por cierto se puede reproducir fácilmente aquí (ver Prefacio). 122.29.91.176 ( discusión ) 08:50 21 jun 2008 (UTC) [ responder ]

En informática y lingüística, el análisis sintáctico, o, más formalmente, el análisis sintáctico, es el proceso de analizar una secuencia de tokens para determinar su estructura gramatical con respecto a una gramática formal dada (más o menos).

El análisis sintáctico es también un término anterior para la diagramación de oraciones de lenguas naturales, y todavía se utiliza para la diagramación de lenguas flexivas, como las lenguas romances o el latín. El término análisis sintáctico proviene del latín pars (ōrātiōnis), que significa parte (del discurso).[1][2] —Comentario anterior sin firmar añadido por 122.168.58.48 (discusión) 13:09 25 sep 2008 (UTC) [ responder ]

Existen dos definiciones diferentes de tokenización, una en la sección Tokens y la otra en la subsección Tokenización. —Comentario anterior sin firmar añadido por 134.2.173.25 (discusión) 14:24, 28 de marzo de 2011 (UTC) [ responder ]

El ejemplo de análisis léxico debe utilizar una lista, no XML ni expresiones s

En el artículo hay dos ejemplos que quiero comentar. Uno muestra XML. Otro utiliza una expresión s. Estos ejemplos crean la impresión de que el análisis léxico produce una estructura de datos en forma de árbol. Sin embargo, el análisis léxico genera una lista de tokens (a menudo tuplas). Para ser claros, una lista, no un árbol . En los analizadores léxicos que he utilizado, los tokens no contienen otros tokens. Puede haber excepciones, pero si las hay, son poco comunes.

Para mostrar el análisis léxico, es mejor utilizar una estructura de datos de lista (simple). A continuación, se incluye un ejemplo en Python. (JSON también sería adecuado. La idea es elegir una representación de datos de uso común para transmitir el mensaje; es decir, solo se necesita una lista de tuplas).

desde  enumeración  importar  Enum clase  Token ( Enum ):  WORD  =  1  PUNC  =  2tokenización  =  [  ( Token.WORD , "El" ) , ( Token.WORD , " rápido" ) , ( Token.WORD , " marrón" ) , ( Token.WORD , "zorro" ) , ( Token.WORD , " salta" ) , ( Token.WORD , " sobre" ) , ( Token.WORD , " el" ) , ( Token.WORD , " perezoso " ) , ( Token.WORD , " perro " ) , ( Token.PUNC , " . " ) , ]                   

DavidCJames ( discusión ) 15:45 10 mar 2021 (UTC) [ responder ]

Respecto a la sección “Generadores de analizadores léxicos”

Parece ser un duplicado de Lista de generadores de analizadores . ¿Probablemente se pueda eliminar? 98.176.182.199 (discusión) 02:57, 6 de diciembre de 2009 (UTC) [ responder ]

No es un duplicado (como observará el lector ocasional). Tedickey ( discusión ) 12:00 6 dic 2009 (UTC) [ responder ]

Repasemos esto. En algún momento de los últimos nueve años, la página Comparación de generadores de analizadores ha ampliado secciones tanto para analizadores normales como para analizadores independientes del contexto. La lista que aparece aquí se convierte mejor en una referencia a esa otra página. Voto por realizar esa operación. 141.197.12.183 ( discusión ) 16:40, 25 de enero de 2019 (UTC) [ responder ]

Controlado por tablas vs. codificado directamente

No creo que el enfoque basado en tablas sea el problema (consulte el artículo "tabla de control"). Flex parece ser ineficiente y no utiliza una función hash trivial . —Comentario anterior sin firmar agregado por 81.132.137.100 (discusión • contribuciones )

El editor comenta que lex/flex no utiliza hash (esto puede ser relevante). Entiendo que la afirmación es que las tablas de estados pueden crecer mucho en comparación con los analizadores codificados manualmente. Si bien estamos de acuerdo en que son más simples de implementar, hay más de un aspecto de eficiencia. Tedickey ( discusión ) 20:37, 2 de mayo de 2010 (UTC) [ responder ]
En realidad, depende de lo que se entienda por un enfoque "basado en tablas". Si simplemente se habla de tablas de especificaciones "en bruto" que deben analizarse/interpretarse antes de la ejecución, en lugar de Ifdeclaraciones codificadas manualmente integradas, el texto original puede ser correcto.
Sin embargo, si estás hablando de una tabla de control "lista para la ejecución" realmente bien diseñada , que luego se usa para ingresar una "tabla de especificaciones" ya compacta y bien diseñada (v. instrucciones basadas en texto verboso), puede ser muy superior en eficiencia algorítmica, facilidad de mantenimiento y prácticamente en todos los demás aspectos. En otras palabras, la frase "controlada por tablas" tal vez se use de manera bastante ambigua en este contexto, sin hacer referencia al enfoque mucho más profundo de "programación controlada por tablas". —Comentario anterior sin firmar agregado por 86.139.34.219 (discusión) 10:53, 7 de mayo de 2010 (UTC)[ responder ]

Ejemplo de libro SICP

No estoy familiarizado con los ejemplos de código en SICP. ¿Alguien podría proporcionarme el nombre/número de la sección/ejemplo y, posiblemente, un enlace al ejemplo? Gracias, Ckoch786 ( discusión ) 01:43, 7 de febrero de 2014 (UTC) [ responder ]

recursión vs expresiones regulares

Una edición reciente, que utiliza el sentido de que la recursión es buena y popular significa lo mismo, equiparando popular con soporte para expresiones regulares recursivas . Necesitamos una fuente de información confiable que discuta ese aspecto y qué características de diseño respaldan directamente la recursión TEDickey ( discusión ) 11:17, 1 enero 2017 (UTC) [ responder ]

Muchas bibliotecas de expresiones regulares populares admiten lo que el artículo dice expresamente que "no son lo suficientemente potentes para manejar". El autor de esa declaración está expresando una opinión inexacta y debería eliminarse. No tomo otra posición sobre los méritos de las expresiones regulares frente a la capacidad del analizador, salvo afirmar que el artículo es engañoso en los hechos que mencioné. He proporcionado las siguientes referencias para justificar la revisión del artículo. Hrmilo (discusión) 21:30 1 ene 2017 (UTC) [1] [2] [ responder ]

El tema de MSDN no menciona la recursión; el otro enlace la menciona sin proporcionar nunca una definición (salvo las referencias circulares), la equipara a los grupos de equilibrio y no la relaciona con ninguno de los sentidos de recursión que utilizan otros, y mucho menos explica por qué el autor de la página pensó que era recursión. Implicar que todos los analizadores de expresiones regulares hacen esto es engañoso, en particular porque precede a una discusión sobre lex. Si desea ampliar esto, puede considerar leer las definiciones de POSIX (por ejemplo, expresiones regulares y lex). (Tenga en cuenta también que una sola fuente no justifica agregar su terminología a este tema). TEDickey ( discusión ) 14:59, 2 de enero de 2017 (UTC) [ responder ]

@Hrmilo: Las populares bibliotecas de "expresiones regulares" en cuestión reconocen de hecho un lenguaje independiente del contexto o incluso sensible al contexto. Se las llama "expresiones regulares" porque la sintaxis que admiten tiene un fuerte parecido superficial con la verdadera "expresión regular", un concepto formalmente definido. Véase https://en.wikipedia.org/wiki/Talk:Lexical_analysis/Regular_expression#Formal_language_theory 141.197.12.183 ( discusión ) 16:46 25 ene 2019 (UTC) [ responder ]

Referencias

  1. ^ https://msdn.microsoft.com/en-us/library/bs2twtah(v=vs.110).aspx#balancing_group_definition
  2. ^ http://www.regular-expressions.info/balancing.html

generador léxico

Esta sección del artículo dice:

El más establecido es Lex (software), emparejado con el generador de analizador yacc y los equivalentes gratuitos Flex/bison.

Sin embargo, [1] es un yacc de dominio público, por lo que insinuar que flex y bison son gratuitos al contrario de yacc no es, en mi opinión, exacto. — Comentario anterior sin firmar agregado por Ngzero ( discusióncontribuciones ) 12:00, 20 abril 2018 (UTC) [ responder ]

En mi opinión, se podría mencionar [Berkeley_Yacc] y decir explícitamente que yacc es el 'yacc' original. De nuevo, quedaría claro que yacc se refiere simplemente al yacc original si lo lees dos veces.
Ngzero ( discusión ) 12:09 20 abr 2018 (UTC) [ responder ]

Sección sobre software

La sección de software de este artículo fue eliminada hace algún tiempo por consenso, lo que fue una buena decisión porque ya hay un enlace a una página de Wikipedia separada con una lista de implementaciones y suficientes detalles. Parece que se ha vuelto a colocar (?) con algunos ejemplos bastante específicos en lugar de intentar ser genérico. Peor aún (en mi opinión), hay afirmaciones en esa sección como "Lex es demasiado complejo e ineficiente" que claramente no pertenecen allí. Eliminaré esta sección a menos que alguien tenga un argumento sólido por el cual debería incluirse. — Comentario anterior sin firmar agregado por Robert van Engelen ( discusióncontribuciones ) 13:24, 29 de abril de 2021 (UTC) [ responder ]

Tokenización de editores

¿Existe algún artículo de Wikipedia que analice el tipo de tokenización que se utiliza en muchos dialectos de BASIC? Según tengo entendido:

Este artículo sobre tokenización (análisis léxico) cubre el tipo de cosas que se hacen en compiladores similares a (a), pero ese artículo no dice nada sobre (b), que los compiladores nunca hacen, pero prácticamente todos los dialectos BASIC mencionados en el artículo " Lista de computadoras con BASIC integrado " sí lo hacen.

El artículo sobre el editor de código fuente menciona brevemente "editores de tokenización" que hacen tanto (a) como (b). He oído que muchas implementaciones del lenguaje Forth tienen un comando "see" que hace algo similar a (b). El artículo sobre el intérprete de BASIC#Tokenización y codificación de líneas y la mayoría de nuestros artículos sobre implementaciones específicas de BASIC ( GFA BASIC , GW-BASIC , Atari BASIC#Tokenizer , etc.) tratan brevemente dicha tokenización.

Pero todavía me pregunto: ¿hay otros lenguajes que normalmente tienen implementaciones que hacen tal tokenización?

¿Debería *este* artículo sobre " tokenización (análisis léxico) " tener al menos una sección que mencione (b), o ya hay algún otro artículo que lo trate?

(Vuelvo a publicar esta pregunta que publiqué anteriormente en Talk:BASIC#tokenization , porque parece tener una aplicación más amplia que solo el lenguaje BASIC). -- DavidCary ( discusión ) 19:19, 27 de septiembre de 2023 (UTC) [ responder ]

Tarea de Wiki Education: La lingüística en la era digital

Este artículo fue objeto de una tarea de curso apoyada por Wiki Education Foundation, entre el 15 de enero de 2024 y el 8 de mayo de 2024. Hay más detalles disponibles en la página del curso . Editor(es) estudiante(s): Minhngo6 (contribuciones al artículo).

— Tarea actualizada por última vez por Minhngo6 ( discusión ) 18:32, 7 de marzo de 2024 (UTC) [ responder ]