2017-08-19 16 views
0

Ich baue einen Assembler mit zwei Durchgängen in C.So finden Sie ein Matrix-Deklarationsmuster in C

Ein Teil seiner Arbeit ist es, mit Matrizen arbeiten zu können.

sagen lassen, dass es die folgende Zeile:

mov m[r2][r5], XYZ

mov der Betrieb ist.

und m[r2][r5] und XYZ sind die Operanden.

Ich muss herausfinden, ob ein Operand eine Matrix ist. und erhalten die: 1. Matrix-Name. 2. Reihe. 3. Spalte.

Wie ist es möglich?

Versucht, sscanf ohne Erfolg zu verwenden.

Vielen Dank im Voraus!

+0

Ist ['regex.h'] (http://pubs.opengroup.org/onlinepubs/7908799/xsh/regex.h.html) auf Ihrer Plattform verfügbar? –

+0

Welche anderen Muster müssen Sie erkennen? Einfache Vektoren? Einfache Variablen? Können die Vektoren nur auf der LHS der Operanden erscheinen? Was hast du mit 'sscanf()' versucht? –

+0

http://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html – Yunnosch

Antwort

1

Leider ist das Schreiben eines Assemblers nicht so einfach wie die Verwendung des scanf. Vereinfachung: Sie müssen den Eingabestrom in die Tokens aufteilen, dann müssen Sie ihn parsen und den semantischen Baum aufbauen, dann müssen Sie die semantische Analyse durchführen, den Baum reduzieren (durch Auswertung konstanter Ausdrücke, Adressen finden usw.) und eventuell den Maschinencode generieren.

+0

Hallo Peter. Zuerst benutze ich strtok, um die Operanden einzeln zu lesen. Die Matrixvalidierung muss nur für einen einzelnen Operanden implementiert werden. Ich endete mit dem folgenden Muster: Lesen Sie zuerst den Operanden, bis es in '[' 'Zeichen kommt. dann: 'res = sscanf (wort," [% [^]]] [% [^]]] ", row_register, col_register);' was die Dinge für mich vereinfachte .. Nicht sicher, es ist der beste Weg, dies zu tun obwohl.. –

Verwandte Themen