diff --git a/THANKS b/THANKS index a5b29e96..c609d158 100644 --- a/THANKS +++ b/THANKS @@ -39,6 +39,7 @@ Daniel Galloway dg1751@att.com Daniel Hagerty hag@gnu.org David J. MacKenzie djm@gnu.org David Kastrup dak@gnu.org +David Michael fedora.dm0@gmail.com Dennis Clarke dclarke@blastwave.org Derek Clegg derek@me.com Derek M. Jones derek@knosof.co.uk diff --git a/src/reader.c b/src/reader.c index 98d42f4a..dcdcb45e 100644 --- a/src/reader.c +++ b/src/reader.c @@ -709,6 +709,26 @@ prepare_percent_define_front_end_variables (void) } } +/* Find the first LHS which is not a dummy. */ + +static symbol * +find_start_symbol () +{ + symbol_list *res = grammar; + for (; + res != NULL && symbol_is_dummy (res->content.sym); + res = res->next) + { + for (res = res->next; + res != NULL && res->content.sym != NULL; + res = res->next) + continue; + aver (res != NULL); + } + aver (res != NULL); + return res->content.sym; +} + /*-------------------------------------------------------------. | Check the grammar that has just been read, and convert it to | @@ -738,19 +758,8 @@ check_and_convert_grammar (void) /* Find the start symbol if no %start. */ if (!start_flag) { - symbol_list *node; - for (node = grammar; - node != NULL && symbol_is_dummy (node->content.sym); - node = node->next) - { - for (node = node->next; - node != NULL && node->content.sym != NULL; - node = node->next) - continue; - } - aver (node != NULL); - grammar_start_symbol_set (node->content.sym, - node->content.sym->location); + symbol *start = find_start_symbol (); + grammar_start_symbol_set (start, start->location); } /* Insert the initial rule, whose line is that of the first rule