#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;
}