/media/sda-magnetic/david/david2/david2/Dokumente/bak/twitter-python-2022-07-31/arithcompilertwitter3.c


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/*
 * numexpr  ::= term numexpr2 
 * numexpr2 ::= + term numexpr2 | e
 * term     ::= factor term2
 * term2    ::= * factor term2 | e
 * factor   ::= id | const | (expr)
 */

int numexpr (void);
int numexpr2 (void);
int term (void);
int term2 (void);
int factor (void);

int numexpr (void) {
    return term () + numexpr2 ();
}

int numexpr2 (void) {
    printf (" + ");
    if ((rand () % 2) == 0) {
        return term () + numexpr2 ();
    }
    else {
        printf ("0");
        return 0;
    }
}

int term (void) {
    return factor () * term2 ();
}

int term2 (void) {
    printf (" * ");
    if ((rand () % 2) == 0) {
        return factor () * term2 ();
    }
    else { 
        printf ("1");
        return 1;
    }
}

int factor (void) {
    int y;
    int x = rand () % 13;
    if ((x >= 0) && (x <= 9)) {
        printf ("%i", x);
        return x;
    }
    else if (x > 9) {
        printf ("(");
        y = numexpr ();
        printf (")");
        return y;
    }
}


int main (void) {
    srand( time( NULL ) );
    printf (" = %i\n", numexpr ());
return 0;
}