Me pregunto si es posible extraer la posición del índice en una cadena dada donde falló una Regex al intentar hacer coincidirla?Índice regex en una cadena coincidente donde falló la coincidencia
Por ejemplo, si mi expresión regular era "abc" y yo intentó igualar eso con "abd" el partido fallaría al índice 2.
Editar una aclaración. La razón por la que necesito esto es para permitirme simplificar el componente de análisis de mi aplicación. La aplicación es una herramienta de enseñanza de idiomas Assmebly que permite a los estudiantes escribir, compilar y ejecutar ensambles como programas.
Actualmente tengo una clase tokenizer que convierte cadenas de entrada en tokens utilizando expresiones regulares. Esto funciona muy bien Por ejemplo:
El tokenizer produciría los siguientes tokens les da la siguiente entrada = "INP: x:"
:
Token.OPCODE, Token.WHITESPACE, Token.LABEL, Token.EOL
Estas fichas se analizan a continuación, para asegurar que se ajustan a una sintaxis para una declaración dada . Actualmente esto se hace usando declaraciones IF y está resultando engorroso. Lo bueno de este enfoque es que puedo proporcionar mensajes de error detallados. I.E
if(token[2] != Token.LABEL) { throw new SyntaxError("Expected label");}
Quiero usar una expresión regular para definir una sintaxis en lugar de las molestas declaraciones IF. Pero al hacerlo, pierdo la capacidad de devolver informes de error detallados. Por lo tanto, al menos me gustaría informar al usuario de DONDE ocurrió el error.
Me interesaría saber si esto realmente resultó más fácil. Al no haber mirado nunca el código de un compilador, creo que el código que genera sus mensajes de error a menudo se parece mucho al suyo. – harpo
Al final decidí continuar con las declaraciones IF. Sin embargo, eliminé las declaraciones de IF reales de las clases de Statement derivadas y en su lugar puse un método CheckSyntax() en mi clase Statement base, que hizo la excepción IF checking/throwing. Esto me permitió eliminar una gran cantidad de duplicación de código. –