Skip to content

Commit

Permalink
lib: parser: remove startnode & sentence_root
Browse files Browse the repository at this point in the history
This removes an artificial restriction for the first token in a
command's graph to be a WORD_TKN.  The intention seems to be to prohibit
empty paths through a command, and to restrict "explosion" of choices in
the root node.

The better approach to the former is to check for an empty path after
the definition is parsed.  The latter will happen anyway, by duplication
of the command, which just makes it worse...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
  • Loading branch information
eqvinox committed Dec 16, 2016
1 parent bca1a30 commit fd19e7a
Showing 1 changed file with 6 additions and 22 deletions.
28 changes: 6 additions & 22 deletions lib/command_parse.y
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@
struct cmd_element *el;

struct graph *graph;
struct graph_node *currnode, *startnode;
struct graph_node *currnode;

/* pointers to copy of command docstring */
char *docstr_start, *docstr;
Expand All @@ -91,7 +91,6 @@

/* union types for parsed rules */
%type <node> start
%type <node> sentence_root
%type <node> literal_token
%type <node> placeholder_token
%type <node> simple_token
Expand Down Expand Up @@ -151,9 +150,7 @@
/* called automatically before yyparse */
%initial-action {
/* clear state pointers */
ctx->currnode = ctx->startnode = NULL;

ctx->startnode = vector_slot (ctx->graph->nodes, 0);
ctx->currnode = vector_slot (ctx->graph->nodes, 0);

/* copy docstring and keep a pointer to the copy */
if (ctx->el->doc)
Expand All @@ -173,15 +170,15 @@
%%

start:
sentence_root cmd_token_seq
cmd_token_seq
{
// tack on the command element
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)
graph_delete_node (ctx->graph, $3);
if ((ctx->currnode = add_edge_dedup (ctx->currnode, $2)) != $2)
graph_delete_node (ctx->graph, $2);

((struct cmd_token *)ctx->currnode->data)->allowrepeat = 1;

Expand All @@ -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:
/* empty */
| cmd_token_seq cmd_token
Expand Down

0 comments on commit fd19e7a

Please sign in to comment.