mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 10:46:22 +00:00
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:
commit
6cc1ba027f
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user