2010-01-31 20 views
10

Conosco 8086 Assemblaggio MIPS di assemblaggio e apprendimento. Inoltre, sto imparando le espressioni regolari, quindi voglio sapere:Espressioni regolari e assemblaggio

  • Come posso utilizzare le espressioni regolari su di esse?
+2

Boo su chi ha votato per chiudere questo. Questa è una domanda di programmazione perfettamente legittima e il mondo ha sicuramente bisogno di più persone che affrontino problemi impegnativi. –

risposta

9

Questo è un problema complesso da estrarre in assemblaggio da zero. Nessun linguaggio assembly può supportare espressioni regolari come costrutto di prima classe perché c'è troppa differenza nel livello di astrazione per renderlo utile. Ciò significa che devi costruirlo da solo.

Il supporto delle espressioni regolari è essenzialmente come avere un compilatore all'interno del programma che traduce l'espressione in una sequenza di istruzioni corrispondenti. Dovrai costruire tutti i pezzi costitutivi: un motore di traduzione, una serie di regole di trasformazione, un assemblatore DFA e un motore di corrispondenza.

Detto questo, non è impossibile! Inizia in piccolo, supportando piccoli sottoinsiemi del linguaggio reale che vuoi supportare, e poi fatti strada. Controlla chapter 16 of Assembly Language Programming per una panoramica dettagliata di come potresti creare il tuo motore di espressioni regolari. Avrai bisogno di una buona comprensione di come funzionano (che questo capitolo ti darà) e una solida conoscenza del montaggio (vedi i capitoli precedenti per questo).

+2

@Nathan Campos: Follow-up: mentre apprezzo il tuo desiderio di affrontare una sfida, se stai imparando solo l'assemblaggio 8086, questo sarà quasi sicuramente un argomento estremamente avanzato relativamente al tuo attuale livello di abilità. Se vuoi qualcosa che sarà ancora impegnativo, prova prima il subgoal più semplice (magari costruendo una macchina a stati di una stringa, ad esempio). –

+0

Conosco molto l'assemblaggio 8086, ma apprendo MIPS. **; -) ** –

1

espressioni regolari non esiste in assemblea, che sembra un po 'bizzarra domanda, così come lo sono di Regex di natura linguaggio di livello più alto, non esiste al livello di dadi e bulloni ...

Edit: Nathan, here è il link che potrebbe interessarti. Scorri fino alla fine della pagina;)

Spero che questo aiuti, Cordiali saluti, Tom.

+0

Possono non esistere come costrutto di prima classe, ma ciò non significa che questa sia una "domanda bizzarra". Anche le espressioni regolari non esistono in C# come costrutto di prima classe, ma penso che poche persone possano dire che è una cattiva idea che le regex siano nel framework. –

+0

@John: Sono d'accordo ... sì, ma non stavo implicando che è impossibile da fare, piuttosto sarebbe più doloroso da raggiungere come ovviamente riferimento e pattern matching usando registri ... sarebbe un po 'di cervello ceppo ... La tua risposta lo riassume esattamente! E 'solo una domanda insolita da chiedere ... da qui il mio modo di dire "domanda bizzarra" – t0mm13b

+0

Meh! Controllato quel link, non è quello che stai cercando! Mi dispiace Nathan :( – t0mm13b

1

Il set di articles here descrive come creare un motore regex molto semplice ma potente da zero. Utilizza il C++ ma spiega la teoria in dettaglio e il codice può essere tradotto in ASM senza troppo sforzo da parte di un programmatore esperto.

Detto questo, non penso che sia un esercizio particolarmente interessante, né per l'apprendimento dell'ASM né per l'apprendimento di espressioni regolari. Ti sentirai troppo impantanato dai dettagli.

0

Iniziare con espressioni regolari molto semplici. Ad esempio, riconoscendo sequenze di caratteri alfabetici e caratteri numerici e risalendo da lì. Dovrai considerare attentamente come il tuo codice fornirà i risultati.

Potrebbe essere una buona idea creare un parser regex come prima C, poiché più persone in questo forum saranno in grado di aiutarti. Una volta che hai funzionato, puoi tradurlo in codice assembler. Ancora una volta, più persone avranno familiarità con la programmazione del linguaggio assembly 8086 che con MIPS, quindi potrebbe essere una buona idea usare 8086 anche se l'architettura della CPU non è molto bella.

0

Non so se si desidera sapere come implementare un motore regex nell'assembler o semplicemente come utilizzare facilmente le espressioni regolari sulle stringhe null-ended dal linguaggio assembly. Se è il primo, ti sono stati forniti alcuni suggerimenti. Se è il più tardi, dipende dalla tua piattaforma, ma il modo più semplice è chiamare una libreria con codice C dal tuo assembly. Le varianti Unix hanno le espressioni regolari POSIX già disponibili nella libc, e puoi chiamarle dal tuo assembly, seguendo semplicemente le convenzioni di chiamata aproppiate.