Hi, I'm trying to develop a contrib module in order to parse sqlf queries, I'm using lemon as a LALR parser generator (because I think it's easier than bison) and re2c (because I think it's easier than flex) but when I try to split the string into words postgres add some weird characters (this works in pure gcc), I write something like "CREATE FUZZY PREDICATE joven ON 0..120 AS (0,0,35,120);", but postgresql adds a character like at the end of "joven" and the others words.
The code I use to split the string is: void parse_query(char *str,const char **sqlf){ parse_words(str); *sqlf=fuzzy_query; } void parse_words(char *str){ char *word; int token; const char semicolon =';'; const char dot='.'; const char comma=','; const char open_bracket='('; const char close_bracket=')'; struct Token sToken; int i = 0; void* pParser = ParseAlloc (malloc); while(str[i] !='\0'){ int c=0; word=(char *)malloc(sizeof(char)); if(isspace(str[i]) || str[i]==semicolon){ i++; continue; } if (str[i]==open_bracket || str[i]==close_bracket || str[i]==dot || str[i]==comma){ word[c] = str[i]; i++; token=scan(word, strlen(word)); Parse(pParser, token, sToken); continue; }else{ while(!isspace(str[i]) && str[i]!=semicolon && str[i]!='\0' && str[i]!=open_bracket && str[i]!=close_bracket && str[i]!=dot && str[i]!=comma){ word[c++] = str[i++]; } } token=scan(word, strlen(word)); if (token==PARAMETRO){ //TODO: I don't know why it needs the malloc function again, all I know is it's working const char *param=word; word= (char *)malloc(sizeof(char)); sToken.z=param; } Parse(pParser, token, sToken); free(word); } Parse(pParser, 0, sToken); ParseFree(pParser, free ); } Header: #ifndef SQLF_H_ #define SQLF_H_ typedef struct Token { const char *z; int value; unsigned n; } Token; void parse_query(char *str,const char **sqlf); void parse_words(char *str); int scan(char *s, int l); #endif /* SQLF_H_ */ Screen: postgres=# select * from fuzzy.sqlf('CREATE FUZZY PREDICATE joven ON 0..120 AS (0,0,35,120);'::text); ERROR: syntax error at or near "" LINE 1: INSERT INTO fuzzydb.pg_fuzzypredicate VALUES(joven,0� �,120 ... ^ QUERY: INSERT INTO fuzzydb.pg_fuzzypredicate VALUES(joven,0� �,120 �,0� �,0� �,35 �,120 �); Thanks for any help