para nuestra clase de teoría de compilación, tenemos la tarea de crear un intérprete simple para nuestro propio lenguaje de programación diseñado. Estoy usando jflex y cup como mis generadores, pero estoy un poco atascado con lo que es un error léxico. Además, ¿se recomienda que use la función de estado de jflex? se siente mal, ya que parece que el analizador es más adecuado para manejar ese aspecto. y ¿recomienda alguna otra herramienta para crear el idioma? Lo siento si estoy impaciente, pero se vence el martes.¿Qué es un ejemplo de error léxico y es posible que un idioma no tenga errores léxicos?
Respuesta
Un error léxico es cualquier entrada que pueda ser rechazada por el lexer. En general, esto se debe a que el reconocimiento de tokens no coincide con el final de las reglas que ha definido. Por ejemplo (en ninguna sintaxis particular):
[0-9]+ ===> NUMBER token
[a-zA-Z] ===> LETTERS token
anything else ===> error!
Si se piensa en un analizador léxico como una máquina de estado finito que acepta cadenas de entrada válidos, a continuación, los errores van a ser las cadenas de entrada que no resultan en ese estado finito máquina que alcanza un estado de aceptación.
El resto de su pregunta no me resultaba clara. Si ya tiene algunas herramientas que está utilizando, tal vez sea mejor que aprenda cómo lograr lo que quiere lograr usando esas herramientas (no tengo experiencia con ninguna de las herramientas que mencionó).
EDIT: Después de volver a leer su pregunta, hay una segunda parte que puedo responder. Es posible que un idioma no tenga errores léxicos; es el idioma en el que cualquier cadena de entrada es una entrada válida.
Un error léxico podría ser un carácter no válido o inaceptable por el lenguaje, como '@' que se rechaza como un error léxico para los identificadores en Java (está reservado).
Los errores léxicos son los errores arrojados por su lexer cuando no pueden continuar. Lo que significa que no hay manera de reconocer un lexema como un token válido para usted más lexer. Los errores de sintaxis, en el otro lado, serán lanzados por su escáner cuando un conjunto dado de ya reconocidos tokens válidos no coincidan con ninguno de los lados derechos de sus reglas de gramática.
se siente mal, ya que parece que el analizador es más adecuado para el manejo de ese aspecto
No. parece porque context-free languages include regular languages (lo que significa que un programa de análisis puede hacer el trabajo de un analizador léxico) Pero tenga en cuenta que un analizador es un autómata de pila y empleará recursos informáticos adicionales (la pila) para reconocer algo que no requiere que se reconozca una pila (una expresión regular). Esa sería una solución subóptima.
NOTA: por expresión regular, quiero decir ... expresión regular en el sentido de Jerarquía de Chomsky, no una clase java.util.regex.*
.
error léxico es cuando la entrada no pertenece a ninguna de estas listas: palabras clave: "if", "else", "main"...
símbolos: '=','+',';'...
símbolos dobles: ">=", "<=", "!=", "++"
Variables: [a-z/A-Z]+[0-9]*
números: [0-9]*
ejemplos: 9var : error, número antes de caracteres, no una variable y tampoco una palabra clave. $: error
lo que no sé es si algo así como más de un símbolo, uno tras otro se acepta, como "+ -"
9var es un error de systax. –
compilador puede coger un error cuando se tiene la gramática en ella! Dependerá del compilador si tiene la capacidad (alcance) de detectar los errores léxicos o no. Si se decide durante el desarrollo del compilador qué tipos de error léxico y cómo (de acuerdo con la gramática) se van a manejar. Por lo general, todos los compiladores famosos y más utilizados tienen estas capacidades.
- 1. ¿Es posible que un dominio de Grails no tenga 'id'?
- 2. ¿Es posible evitar que se guarde un archivo php que tenga un error de análisis?
- 3. ¿Es posible tener un tiempo real difícil con alcance léxico?
- 4. Un ejemplo de un cambio que NO es un conflicto
- 5. ¿Qué es un enlace de idioma?
- 6. ¿Qué es un ejemplo de un descuento no válido?
- 7. ¿Es posible tener una interfaz que tenga métodos privados/protegidos?
- 8. ¿Es posible que un ciclo 'foreach' tenga una verificación de estado?
- 9. ¿Es posible atrapar errores de CORS?
- 10. ¿Qué es un ejemplo real de ACID?
- 11. ¿Es posible que un nombre de dominio tenga varias direcciones IP correspondientes?
- 12. ¿Es posible que una tabla SQL tenga cero columnas?
- 13. Ejemplo de un URI que no es una URL?
- 14. ¿Qué es un error de dominio
- 15. ¿Es posible "ocultar" extensiones de idioma?
- 16. ¿Cómo es posible vender código escrito en un idioma interpretado?
- 17. ¿Es posible crear un GridView que tenga hijos de diferentes tamaños?
- 18. ¿Por qué Array.Length es un int, y no es un error
- 19. ¿Por qué es necesario que una clase base tenga un constructor que tome 0 argumentos?
- 20. ¿Cuáles son los peligros de un idioma que es "propiedad"?
- 21. Haskell: ¿Un ejemplo de un Plegable que no es un Functor (o no Traversable)?
- 22. ¿Qué es un ejemplo del Principio de Responsabilidad Individual?
- 23. ¿por qué no es posible robar un token de acceso?
- 24. ¿Es posible que un control WPF tenga un Ancho real y una Altura real si nunca se ha procesado?
- 25. ¿Qué es un semáforo que no bloquea?
- 26. ¿Qué significa el término "léxico" en C++?
- 27. ¿Por qué obtengo un objeto no es un error iterable?
- 28. ¿Qué es un sistema de tipo y efecto?
- 29. ¿Es posible crear un Uri que no sea absoluto?
- 30. ¿Es posible determinar en qué idioma se escribió un ensamblado .NET ex post facto?
'$' está reservado en Java? – Ypnypn
No, no lo es. Mal ejemplo. Déjame cambiarlo. – mschonaker
Hecho. '$' solo se desaconseja, ya que se usa para el cambio de nombre de clase. – mschonaker