/* (C) Copyright 2008 Nick Mudge * This code can be freely copied and modified. */ #include #include "parser.h" extern char *input; Token *token; static char *next_input = NULL; static Token *la(void); void peek(void) { char *beginning; if(input != next_input && next_input != NULL) return; beginning = input; token = la(); next_input = input; input = beginning; } void next(void) { input = next_input; } Token *la(void) { Token *token; if ((token = malloc(sizeof(Token))) == NULL) { memory_error(); } while(isspace(*input)) input++; if(*input == '\0') { token->id = END_OF_TOKENS; return token; } if(isdigit(*input)) { token->id = NUM; token->value = atoi(input); while(isdigit(*input)) input++; return token; } else if(*input == '+' || *input == '-' || *input == '*' || *input == '/' || *input == '(' || *input == ')') { token->id = *input; input++; return token; } token->id = ERROR_CHAR; return token; }