All pastes #243888 Raw Edit

Mine

public c v1 · immutable
#243888 ·published 2006-11-09 00:28 UTC
rendered paste body
#include "string.h"#include "stdlib.h"#include "stdio.h"#include "types.c"#define EOS '\0'#define INT_TYPE 1#define DOUBLE_TYPE 2#define STRING_TYPE 3#define SYMBOL_TYPE 4struct token {	int ttype;	union data tvalue;};char read_char(char *line, int *cur_col) {	char ch = line[*cur_col];	if (ch != EOS) {		(*cur_col)++;		return ch;			} else		printf("end");		return 0;}struct token get_token(char *line, int *cur_col, int *empty) {	printf("calling gt on %s\n", line);	int ttype;	int bracket_level = 0;	int bracket_start = 0;	int bracket_end = 0;	int int_start = 0;	int int_end = 0;	int symbol_start = 0;	int symbol_end = 0;	char ch;	while ( ch = read_char(line, cur_col) ) {		switch(ch) {			case '{': {				if (bracket_level == 0) {					bracket_start = *cur_col;				}				bracket_level--;			}			break;			case '}': {				bracket_level++;				if (bracket_level == 0) {					bracket_end = *cur_col-1;					char *bracketed_string = malloc(bracket_end-bracket_start+1);					int bracket_length = bracket_end-bracket_start;					strncpy(bracketed_string, line+bracket_start, bracket_length);					bracketed_string[bracket_length]=EOS;					struct token t;					t.ttype=STRING_TYPE;					t.tvalue.data_string = bracketed_string;					free(bracketed_string);					return t;				}			}			break;			default: {								if (bracket_level >= 0 ) {					if (isdigit(ch)) {						int_start = *cur_col-1;						ch = read_char(line, cur_col);						while (isdigit(ch))							ch = read_char(line, cur_col);						(*cur_col)--;						int_end = *cur_col;						char *int_string = malloc(int_end-int_start+1);						strncpy(int_string, line+int_start, int_end-int_start);						int_string[int_end-int_start]=EOS;						struct token t;						t.ttype=INT_TYPE;						t.tvalue.data_int=atoi(int_string);						free(int_string);						return t;											} else if (ch != ' ' && line[*cur_col-2] == ' '){						symbol_start = *cur_col-1;					} else if (ch !=' ' && ( line[*cur_col] == ' ' || line[*cur_col] == EOS) ) {						symbol_end = *cur_col;						char *symbol_string = malloc(symbol_end-symbol_start+1);												strncpy(symbol_string, line+symbol_start, symbol_end-symbol_start);						symbol_string[symbol_end-symbol_start]=EOS;						struct token t;						t.ttype=SYMBOL_TYPE;						t.tvalue.data_string=symbol_string;						free(symbol_string);												return t;					}				} else {					// This is inside brackets, ignore.				}			}				 		}	}	*empty = 1;}