#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) {
int x, y;
x = term ();
y = numexpr2 ();
if (y != -1) {
printf (" + ");
return x+y;
}
else
return x;
}
int numexpr2 (void) {
int x, y;
x = term ();
y = numexpr2 ();
if ((rand () % 2) == 0) {
if (y != -1) {
printf (" + ");
return x+y;
}
else
return x;
}
else {
return -1;
}
}
int term (void) {
int x, y;
x = factor ();
y = term ();
if (y != -1) {
printf (" * ");
return x * y;
}
else
return x;
}
int term2 (void) {
int x, y;
if ((rand () % 2) == 0) {
x = factor ();
y = term ();
if (y != -1) {
printf (" * ");
return x * y;
}
else
return x;
}
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;
}