This project is a simple compiler for a polynomial-evaluation programming language.
This compiler takes programs written in a text file as input via redirection.
ex.) $ ./a.out < program.txt
A program written in the compiler-specific language is composed of three sections (in order):
- A polynomial declaration section
- A START section
- A user input section
Polynomials are declared with the following 2 forms of syntax:
form 1: POLY <name> = <polynomial>;
note: polynomials declared in this form have only one default parameter, x
ex.) POLY F = x^2 + x - 1;
form 2: POLY <name>(<parameter list>) = <polynomial>;
ex.) POLY X(p, i) = p*(i + 22/7);
The beginning of this section starts with a single line that reads START
.
The following lines can consist of the following statements:
1.) initializing a user-input variable
form: INPUT <variable name>;
note: inputs are assigned to variables in the order in which they are provided.
ex.) INPUT G;
G will equal the int-value x if the input section consists of "x w
" (where x
is an integer, and w
is a potentially empty list of integers delimited by spaces).
2.) polynomial function call
form: <name>(<argument list>);
ex.) F(1);
ex.) F(G);
ex.) X(G, i);
ex.) F(X(5, G));
This section is a line at the bottom of the program that consists of a non-empty list of integers. There must be a sufficient number of integers specified in this line for all INPUT statements (There cannot be more INPUT statements than there are user inputs).
ex.) -3 1 4 1 5 9
Program_1.txt
POLY F = x + 9;
START
F(2);
1 2 3 4 5
Terminal output
$ ./a.out < Program_1.txt
11
Program_2.txt
POLY A(M, N) =
M^6 + 3 N - N^2 + 71;
POLY B(O, P, Q) = 1 O + 2 P + 3 Q - 4;
POLY C(R, S, T) = S + 100;
POLY D
(U, V, W) = U^2 + 4 V^2 W^3 - 6 U^1 V^4;
POLY E = x^5 - x^4 + 2;
START
INPUT X;
INPUT Y;
A(X, Y);
INPUT X;
INPUT Y;
INPUT Z;
B(X, Y, Z);
INPUT X;
INPUT Y;
INPUT Z;
C(X, Y, Z);
D(X, Y, Z);
INPUT X;
INPUT Y;
INPUT Z;
D(X, Y, Z);
E(Z);
1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6
Terminal Output
$ ./a.out < Program_1.txt
74
22
101
32
3401
2502