Writing Programms for MIPS

Antworten
Benutzeravatar
yun7x
Site Admin
Beiträge: 1560
Registriert: Di Jul 18, 2023 8:36 pm
Wohnort: D-72072, Tübingen
Kontaktdaten:

Writing Programms for MIPS

Beitrag von yun7x »

Ich schreibe jetzt einen Parser für arithmetische Ausdrücke in der Bakus Naurr Form. das übliche. Zurückgeben wird er aber keinen Wert, sondern eine Ausgabe in MIPS Assembler

So weit bin ich bisher

Code: Alles auswählen

/*
 * expr ::= term + expr | term
 * term ::= factor * term | factor
 * factor ::= num | (expr)
 */
#include <stdio.h>

int tokennext ();
void tokenback ();
void expr ();
void term ();
void factor ();

char *s = "(4+3)*2";
int i = 0;

int tokennext () {
    return s [i++];
}

void tokenback () {
    i--;
}

void expr () {
    term ();
    if (tokennext () == '+') {
        expr ();
        printf ("add $r1, $r1, $r2\n");
    }
    else
        tokenback ();
return;
}

void term () {
    factor ();
    if (tokennext () == '*') {
        term ();
        printf ("mult $r2, $r2, $r3\n");
    }
    else
        tokenback ();
return;
}

void factor () {
    int ch;
    ch = tokennext ();

    if ((ch >= '0') && (ch <= '9'))
        printf ("li $r3, %c\n", ch);
    else if (ch == '(') {
        expr ();
        printf ("move $r1, $r3\n");
    }
return;
}

int main (void) {
    printf (".text\n");
    printf ("main:\n");
    expr ();
return 0;
}
An den Registern müssen wir noch arbeiten

Code: Alles auswählen

david@laptop-peaq:~$ gcc bakusnaurrmips01.c 
david@laptop-peaq:~$ ./a.out
.text
main:
li $r3, 4
li $r3, 3
add $r1, $r1, $r2
move $r1, $r3
david@laptop-peaq:~$ 
Antworten