
Untitled
By: a guest on
Aug 18th, 2012 | syntax:
None | size: 2.33 KB | hits: 10 | expires: Never
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
/*Geo code
int number = 0; int inNumber = FALSE;
const char* text = "ovo je neki string sa 59 66 broj3vima";
while(*text) {
if (*text >= '0' && *text <= '9') {
number = number * 10 + *text - '0';
inNumber = TRUE;
} else {
if (inNumber) printf("saw a number : %d\n", number);
inNumber = FALSE;
number=0
}
++text;
}
treba inNumber=FALSE;number=0*/
/*Globals*/
int g_pos = 0;
char* g_str = NULL;
/*Forward declarations*/
int parseE();
int parseE1(int x);
int parseT();
void printError();
char getToken();
typedef struct Token
{
int number;
char oper;
}Token;
int parseE()
{
char c = getToken();
int x = atoi(&c);
return parseE1(x);
}
int parseE1(int x)
{
char c = getToken();
if(c == '\0')
return x; /*fuck*/
int y = parseT();
return parseE1(x+y);
}
int parseT()
{
char c = getToken();
int x = atoi(&c);
return x;
}
void printError()
{
printf("Parsing error incorrect input!\n");
exit(1);
}
char getToken()
{
char c = g_str[g_pos];
int number = 0;
char atNumber = 1;
while(*g_str)
{
if(isdigit(c))
{
number = number * 10 + *g_str - '0';
atNumber = 0;
}
else
{
if(atNumber)
{
printf("%d\n", number);
}
number = 0;
atNumber = 0;
}
g_str++;
}
return c;
}
Token next()
{
Token t;
int number = 0;
char inNumber = 1;
char c = g_str[g_pos];
if(c == '+' || c == '-' || c == '*' || c == '/' || c == '(' || c == ')')
t.oper = c;
if(isdigit(c)) /*if the char is a digit*/
{
c =g_str[g_pos+1]; /*set c to the next character*/
if(isdigit(c))
{
number = number * 10 + c * '0';
inNumber = 0;
}
else
{
t.number = atoi(&c);
number = 0; inNumber = 0;
}
}
g_pos++;
return t;
}
int evaluate(char *str)
{
g_str = str;
parseE();
}
int main()
{
/*char* test = "2+9";
int p = evaluate(test);
printf("Result: %d\n", p);*/
g_str = "++--";
Token p;
p = next();
printf("%c", p.oper);
p = next();
printf("%c", p.oper);
return 0;
}