#include #include #include "stack.h" // // NOTE: helper functions for parsing // bool isWhitespace(char c) { return(c == ' ' || c == '\t' || c == '\n' || c == '\r' ); } char *eatAllWhitespaces(char *At) { while(*At && isWhitespace(*At)) At++; return At; } bool isDigit(char Digit) { return (Digit >= '0' && Digit <= '9'); } int isNumber(char *Number) { int Result = 0; while(*Number && *Number != ' ') { if(!isDigit(*Number)) { Result = -1; return Result; } Number++; Result++; } return Result; } // // ---------------------------------- // /* * Stack-Interface * * void push(stack *Stack, float Value); * * float pop(stack *Stack); * * node *peak(stack *Stack); * */ int main(int argc, char **argv) { stack Stack = {}; // // Parsing // // NOTE: the string to parse char *Input = argv[1]; char *At = Input; while(*At) { At = eatAllWhitespaces(At); switch(*At) { case '+': { // TODO: implement addition }break; case '-': { // TODO: implement substraction // NOTE: substraction is orderdependent }break; case '*': { // TODO: implement multiplication }break; case '/': { // TODO: implement division // NOTE: division is orderdependent }break; default: { int Length = isNumber(At); if(Length != -1) { // TODO: implement the handling of new numbers At += Length -1; } else { printf("ERROR: Only Numbers and Operators + - * and / are allowed"); } } } At++; } // NOTE: print out the remaining stack // if everything went right, this should only be the result while(peak(&Stack)) { printf("%f ", pop(&Stack)); } printf("\n"); }