#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) {
printf (" + ");
return term () + numexpr2 ();
}
int numexpr2 (void) {
if ((rand () % 2) == 0) {
printf (" + ");
return term () + numexpr2 ();
}
else {
return 0;
}
}
int term (void) {
printf (" * ");
return factor () * term2 ();
}
int term2 (void) {
if ((rand () % 2) == 0) {
printf (" * ");
return factor () * term2 ();
}
else {
return 1;
}
}
int factor (void) {
int y;
int x = rand () % 11;
if ((x >= 0) && (x <= 9)) {
printf ("%i", x);
return x;
}
else if (x == 10) {
printf ("(");
y = numexpr ();
printf (")");
return y;
}
}
int main (void) {
srand( time( NULL ) );
printf ("= %i\n", numexpr ());
return 0;
}