2010-01-31 42 views
10

Lo sé 8086 Ensamblaje y aprendizaje Ensamblaje de MIPS. Además, estoy aprendiendo expresiones regulares, entonces quiero saber:Expresiones regulares y montaje

  • ¿Cómo puedo usar expresiones regulares en ellas?
+2

Abucheo a quien haya votado para cerrar esto. Esta es una pregunta de programación perfectamente legítima, y ​​el mundo sin duda necesita que más personas se enfrenten a problemas desafiantes. –

Respuesta

9

Este es un problema difícil de realizar en el montaje desde cero. Ningún lenguaje ensamblador admitiría expresiones regulares como un constructo de primera clase porque hay demasiada diferencia en el nivel de abstracción para que sea una inclusión útil. Eso significa que necesita construirlo usted mismo.

El soporte de expresiones regulares es esencialmente como tener un compilador dentro de su programa que traduce la expresión en una secuencia de instrucciones coincidentes. Deberá compilar todas las piezas que lo componen: un motor de traducción, una serie de reglas de transformación, un ensamblador DFA y un motor que coincida.

Dicho esto, ¡no es imposible! Comience poco a poco, apoya pequeños subconjuntos del lenguaje real que desea apoyar, y luego siga subiendo. Consulte chapter 16 of Assembly Language Programming para obtener un tutorial detallado de cómo puede construir su propio motor de expresiones regulares. Necesitará una buena comprensión de cómo funcionan (que este capítulo le proporcionará) y una sólida comprensión del ensamblaje también (vea los capítulos anteriores para eso).

+2

@Nathan Campos: Seguimiento: aunque aplaudo su deseo de enfrentar un desafío, si solo está aprendiendo el ensamblaje 8086, este será casi seguro un tema extremadamente avanzado en relación con su nivel de habilidad actual. Si quieres algo que todavía sea desafiante, prueba tu mano en un sub-objetivo más simple primero (tal vez simplemente construyendo una máquina de estado a partir de una cadena, por ejemplo). –

+0

Conozco mucho el ensamblaje 8086, pero aprendo MIPS. **; -) ** –

1

expresiones regulares no existe en el montaje, que parece un poco extraño cuestión, ya que son de naturaleza lenguaje de alto nivel de expresión regular, que no existe en el nivel de tuercas y tornillos ...

Edición: Nathan, here es el enlace que podría interesarle. Desplácese hasta la parte inferior de la página;)

Espero que esto ayude, Saludos cordiales, Tom.

+0

Puede que no existan como una construcción de primera clase, pero eso no significa que esta sea una "pregunta extraña". Las expresiones regulares tampoco existen en C# como una construcción de primera clase, pero creo que pocas personas dirían que es una mala idea que las expresiones regulares estén en el marco. –

+0

@John: Estoy de acuerdo ... sí, pero no estaba insinuando que es imposible de hacer, sino que sería más doloroso de lograr, ya que obviamente se hace referencia y se ajusta el patrón usando registros ... eso sería algo cerebral. tensión ... ¡Su respuesta lo resume exactamente! Es solo una pregunta inusual para preguntar ... por lo tanto, yo digo 'pregunta extraña' – t0mm13b

+0

Meh! Marcado ese enlace, ¡no es lo que estás buscando! Lo siento Nathan :( – t0mm13b

1

El conjunto de articles here describe cómo crear desde cero un motor de expresiones regulares muy simple pero potente. Utiliza C++ pero explica la teoría en detalle y el código puede traducirse a ASM sin demasiado esfuerzo por un programador experimentado.

Dicho esto, no creo que sea un ejercicio particularmente interesante, ni para aprender ASM ni para aprender expresiones regulares. Simplemente te empantanarás con los detalles.

0

Comience con expresiones regulares muy simples. Por ejemplo, reconocer secuencias de caracteres alfabéticos y caracteres numéricos y avanzar desde allí. Deberá considerar cuidadosamente cómo su código entregará sus resultados.

Puede ser una buena idea crear un analizador de expresiones regex es C primero, ya que más personas en este foro podrán ayudarte. Una vez que lo tenga funcionando, puede traducirlo a código de ensamblador. Una vez más, más personas estarán familiarizadas con la programación en lenguaje ensamblador 8086 que con MIPS, por lo que puede ser una buena idea usar 8086 aunque la arquitectura de la CPU no sea muy buena.

0

No estoy seguro de si desea saber cómo implementar un motor de expresiones regulares en el ensamblador o cómo usar fácilmente las expresiones regulares en las cadenas con terminación nula desde el lenguaje ensamblador. Si es el primero, le han dado algunos consejos. Si es el último, depende de su plataforma, pero la forma más fácil es llamar a una biblioteca codificada en C desde su ensamblado. Las variantes de Unix tienen expresiones regulares POSIX ya disponibles en la libc, y usted puede llamarlas desde su ensamblaje, simplemente siguiendo las convenciones de llamadas apropiadas.

3

Prueba esto: AsmRegEx - regular expression engine

está escrito en FASM. Lamentablemente, parece que el proyecto ya no progresará ...

+0

Eso es increíble, lo voy a echar un vistazo. Gracias. **: -) ** –

Cuestiones relacionadas