6 #include "expression.h"
7 #include "expressionbase.h"
11 int main(int argc
, char* argv
[]) {
12 int i
= 0, factor
= 1;
15 ExpressionBase
*base
= new_expression_base();
16 Expression
*expr
= malloc(sizeof(Expression
)), *prevp
;
19 while(next
= getchar()) {
20 if(next
== '\n') { // We hit end of line, make last expression and break
21 if (get_value(expression
)) { // We don't have an empty expression
22 finish_expression(expr
, expression
, next
, factor
);
28 if(isdigit(next
) || next
== '.') { // We hit a number - add that to the stack
29 if (i
== 0 && base
->last
&& base
->last
->op
== 0) { // after (
34 } else if ( next
== '*' || next
== '/' || next
== '+' || next
== '-' || next
== '^') { // We hit an operator, make a new expression
35 if (i
== 0) { // after (
36 base
->last
->op
= next
;
39 finish_expression(expr
, expression
, next
, factor
);
42 expr
= malloc(sizeof(Expression
));
43 strncpy(expression
, "\0", strlen(expression
));
45 } else if (next
== '(') {
46 if (get_value(expression
)) {
47 finish_expression(expr
, expression
, '*', factor
);
50 expr
= malloc(sizeof(Expression
));
51 strncpy(expression
, "\0", strlen(expression
));
54 } else if (next
== ')') {
55 finish_expression(expr
, expression
, 0, factor
);
58 expr
= malloc(sizeof(Expression
));
59 strncpy(expression
, "\0", strlen(expression
));
62 } else { // We didn't hit a digit or an operator - do nothing
67 for (expr
= base
->first
; expr
; expr
= expr
->next
) {
71 printf("= %.1f\n", prevp
->value
);