fprintf(stderr, "\t->value: %ld\n", node->value);
fprintf(stderr, "\t->is_start: %d\n", node->is_start);
fprintf(stderr, "\t->element: %p\n", node->element);
- fprintf(stderr, "\t->min: %ld\n->max: %ld\n", node->min, node->max);
+ fprintf(stderr, "\t->min: %lld\n->max: %lld\n", node->min, node->max);
fprintf(stderr, "\t->arg: %s\n", node->arg);
fprintf(stderr, "\t->refs: %d\n", node->refs);
fprintf(stderr, "\tnum children: %d\n", vector_active(node->children));
char* text; // for WORD_GN and VARIABLE_GN
long value; // for NUMBER_GN
- long min, max; // for RANGE_GN
+ signed long long min, max;// for RANGE_GN
/* cmd_element struct pointer, only valid for END_GN */
struct cmd_element *element;
{IPV6} {yylval.string = XSTRDUP(MTYPE_TMP, yytext); return IPV6;}
{IPV6_PREFIX} {yylval.string = XSTRDUP(MTYPE_TMP, yytext); return IPV6_PREFIX;}
{VARIABLE} {yylval.string = XSTRDUP(MTYPE_TMP, yytext); return VARIABLE;}
-{NUMBER} {yylval.integer = atoi(yytext); return NUMBER;}
+{NUMBER} {
+ char *endptr;
+ yylval.integer = strtoll(yytext, &endptr, 10);
+ return NUMBER;
+ }
{RANGE} {yylval.string = XSTRDUP(MTYPE_TMP, yytext); return RANGE;}
. {return yytext[0];}
%%
match_range (struct graph_node *rangenode, const char *str)
{
char *endptr = NULL;
- signed long val;
+ signed long long val;
if (str == NULL)
return 1;
return num == numnode->value ? exact_match : no_match;
}
-#define VARIABLE_ALPHABET "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
+#define VARIABLE_ALPHABET "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890:"
static enum match_type
match_variable(struct graph_node *varnode, const char *word)
{
- return strlen(word) == strspn(word, VARIABLE_ALPHABET) && isalpha(word[0]) ?
+ return strlen(word) == strspn(word, VARIABLE_ALPHABET) ?
exact_match : no_match;
}
/* valid types for tokens */
%union{
- int integer;
+ signed long long integer;
char *string;
struct graph_node *node;
}
yyerror("Duplicate command.");
YYABORT;
}
- fprintf(stderr, "Added END_GN with active children: %d\n", vector_active(end->children));
+ fprintf(stderr, "Parsed full command successfully.\n");
}
sentence_root: WORD
// get the numbers out
strsep(&yylval.string, "(-)");
- $$->min = atoi( strsep(&yylval.string, "(-)") );
- $$->max = atoi( strsep(&yylval.string, "(-)") );
+ char *endptr;
+ $$->min = strtoll( strsep(&yylval.string, "(-)"), &endptr, 10 );
+ $$->max = strtoll( strsep(&yylval.string, "(-)"), &endptr, 10 );
free ($1);
}
fprintf(stderr, "Token on error: ");
if (yylval.string) fprintf(stderr, "%s\n", yylval.string);
else if (yylval.node) fprintf(stderr, "%s\n", yylval.node->text);
- else fprintf(stderr, "%d\n", yylval.integer);
+ else fprintf(stderr, "%lld\n", yylval.integer);
}
char* command = argv_concat(argv, argc, 0);
struct cmd_element *cmd = malloc(sizeof(struct cmd_element));
cmd->string = command;
+ cmd->doc = NULL;
+ cmd->func = NULL;
parse_command_format(nodegraph, cmd);
return CMD_SUCCESS;
}
fprintf(stderr, "<cr> %p\n", cnode->element->func);
else
fprintf(stderr, "%s\n", describe_node(cnode, desc, 50));
+
+ if (cnode->type == RANGE_GN)
+ fprintf(stderr, "%lld - %lld\n", cnode->min, cnode->max);
}
free(desc);
}