#ifndef LANGSCAN_C_H #define LANGSCAN_C_H #define LANGSCAN_C_TOKEN_LIST \ LANGSCAN_C_TOKEN(classdecl) \ LANGSCAN_C_TOKEN(classdef) \ LANGSCAN_C_TOKEN(classref) \ LANGSCAN_C_TOKEN(preproc_beg) \ LANGSCAN_C_TOKEN(preproc_end) \ LANGSCAN_C_TOKEN(character) \ LANGSCAN_C_TOKEN(integer) \ LANGSCAN_C_TOKEN(floating) \ LANGSCAN_C_TOKEN(string) \ LANGSCAN_C_TOKEN(ident) \ LANGSCAN_C_TOKEN(punct) \ LANGSCAN_C_TOKEN(comment) \ LANGSCAN_C_TOKEN(space) typedef enum { langscan_c_eof = 0, #define LANGSCAN_C_TOKEN(name) langscan_c_##name, LANGSCAN_C_TOKEN_LIST #undef LANGSCAN_C_TOKEN } langscan_c_token_t; typedef struct { int beg_lineno; int beg_columnno; int beg_byteno; int end_lineno; int end_columnno; int end_byteno; int eof; char *text; int leng; size_t (*user_read)(void **user_data_p, char *buf, size_t maxlen); void *user_data; } langscan_c_lex_extra_t; typedef struct langscan_c_tokenizer_tag { langscan_c_lex_extra_t *extra; void *scanner; } langscan_c_tokenizer_t; typedef size_t (*user_read_t)(void **user_data_p, char *buf, size_t maxlen); langscan_c_tokenizer_t *langscan_c_make_tokenizer(user_read_t user_read, void *user_data); langscan_c_token_t langscan_c_get_token(langscan_c_tokenizer_t *tokenizer); void langscan_c_free_tokenizer(langscan_c_tokenizer_t *tokenizer); user_read_t langscan_c_tokenizer_get_user_read(langscan_c_tokenizer_t *tokenizer); void *langscan_c_tokenizer_get_user_data(langscan_c_tokenizer_t *tokenizer); const char *langscan_c_token_name(langscan_c_token_t token); #define langscan_c_curtoken_beg_lineno(tokenizer) ((tokenizer)->extra->beg_lineno) #define langscan_c_curtoken_beg_columnno(tokenizer) ((tokenizer)->extra->beg_columnno) #define langscan_c_curtoken_beg_byteno(tokenizer) ((tokenizer)->extra->beg_byteno) #define langscan_c_curtoken_end_lineno(tokenizer) ((tokenizer)->extra->end_lineno) #define langscan_c_curtoken_end_columnno(tokenizer) ((tokenizer)->extra->end_columnno) #define langscan_c_curtoken_end_byteno(tokenizer) ((tokenizer)->extra->end_byteno) #define langscan_c_curtoken_text(tokenizer) ((tokenizer)->extra->text) #define langscan_c_curtoken_leng(tokenizer) ((tokenizer)->extra->leng) void langscan_c_extract_functions(langscan_c_tokenizer_t *); #endif