diff options
Diffstat (limited to 'gfsm/gfsm/src/libgfsm/tests/gscantest.c')
-rw-r--r-- | gfsm/gfsm/src/libgfsm/tests/gscantest.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/gfsm/gfsm/src/libgfsm/tests/gscantest.c b/gfsm/gfsm/src/libgfsm/tests/gscantest.c new file mode 100644 index 0000000..199c414 --- /dev/null +++ b/gfsm/gfsm/src/libgfsm/tests/gscantest.c @@ -0,0 +1,51 @@ +#include <gfsm.h> +#include <glib.h> +#include <stdlib.h> + +#undef VERBOSE + +int main (int argc, char **argv) { + GScanner *scanner = g_scanner_new(&gfsm_automaton_scanner_config); + GTokenType typ; + + scanner->input_name = *argv; + g_scanner_input_file(scanner, fileno(stdin)); + while ((typ = g_scanner_get_next_token(scanner)) != G_TOKEN_EOF) { +#ifdef VERBOSE + switch (typ) { + case G_TOKEN_INT: + printf("INT %ld\n", scanner->value.v_int); + break; + case G_TOKEN_FLOAT: + printf("FLOAT %g\n", scanner->value.v_float); + break; + case G_TOKEN_CHAR: + if (scanner->value.v_char == '\n') printf ("CHAR '\\n'\n"); + else printf("CHAR '%c'\n", scanner->value.v_char); + break; + default: + printf("? (typ=%d)\n", typ); + break; + } +#else // !VERBOSE + switch (typ) { + case G_TOKEN_INT: + printf("%ld\t", scanner->value.v_int); + break; + case G_TOKEN_FLOAT: + printf("%g\t", scanner->value.v_float); + break; + case G_TOKEN_CHAR: + if (scanner->value.v_char == '\n') fputc('\n',stdout); + else exit(1); + break; + default: + exit(1); + break; + } +#endif // VERBOSE + } + g_scanner_destroy(scanner); + + return 0; +} |