Merge pull request #6 from opensourcerouting/dev/osr/vty_pending

parser: accept non-words as first tokens & numbers as word tokens
This commit is contained in:
Donald Sharp 2016-12-16 15:52:47 -05:00 committed by GitHub
commit 6cc1ba027f
2 changed files with 7 additions and 23 deletions

View File

@ -26,7 +26,7 @@
#include "command_parse.h" #include "command_parse.h"
%} %}
WORD (\-|\+)?[a-z\*][-+_a-zA-Z0-9\*]* WORD (\-|\+)?[a-z0-9\*][-+_a-zA-Z0-9\*]*
IPV4 A\.B\.C\.D IPV4 A\.B\.C\.D
IPV4_PREFIX A\.B\.C\.D\/M IPV4_PREFIX A\.B\.C\.D\/M
IPV6 X:X::X:X IPV6 X:X::X:X

View File

@ -73,7 +73,7 @@
struct cmd_element *el; struct cmd_element *el;
struct graph *graph; struct graph *graph;
struct graph_node *currnode, *startnode; struct graph_node *currnode;
/* pointers to copy of command docstring */ /* pointers to copy of command docstring */
char *docstr_start, *docstr; char *docstr_start, *docstr;
@ -91,7 +91,6 @@
/* union types for parsed rules */ /* union types for parsed rules */
%type <node> start %type <node> start
%type <node> sentence_root
%type <node> literal_token %type <node> literal_token
%type <node> placeholder_token %type <node> placeholder_token
%type <node> simple_token %type <node> simple_token
@ -151,9 +150,7 @@
/* called automatically before yyparse */ /* called automatically before yyparse */
%initial-action { %initial-action {
/* clear state pointers */ /* clear state pointers */
ctx->currnode = ctx->startnode = NULL; ctx->currnode = vector_slot (ctx->graph->nodes, 0);
ctx->startnode = vector_slot (ctx->graph->nodes, 0);
/* copy docstring and keep a pointer to the copy */ /* copy docstring and keep a pointer to the copy */
if (ctx->el->doc) if (ctx->el->doc)
@ -173,15 +170,15 @@
%% %%
start: start:
sentence_root cmd_token_seq cmd_token_seq
{ {
// tack on the command element // tack on the command element
terminate_graph (ctx, ctx->currnode); terminate_graph (ctx, ctx->currnode);
} }
| sentence_root cmd_token_seq placeholder_token '.' '.' '.' | cmd_token_seq placeholder_token '.' '.' '.'
{ {
if ((ctx->currnode = add_edge_dedup (ctx->currnode, $3)) != $3) if ((ctx->currnode = add_edge_dedup (ctx->currnode, $2)) != $2)
graph_delete_node (ctx->graph, $3); graph_delete_node (ctx->graph, $2);
((struct cmd_token *)ctx->currnode->data)->allowrepeat = 1; ((struct cmd_token *)ctx->currnode->data)->allowrepeat = 1;
@ -194,19 +191,6 @@ start:
} }
; ;
sentence_root: WORD
{
struct graph_node *root =
new_token_node (ctx, WORD_TKN, strdup ($1), doc_next(ctx));
if ((ctx->currnode = add_edge_dedup (ctx->startnode, root)) != root)
graph_delete_node (ctx->graph, root);
free ($1);
$$ = ctx->currnode;
}
;
cmd_token_seq: cmd_token_seq:
/* empty */ /* empty */
| cmd_token_seq cmd_token | cmd_token_seq cmd_token