Re: Identification of root rule

Steven Pemberton <steven.pemberton@cwi.nl> writes:

> I noted a user of my implementation having lots of trouble this week,
> which they were unable to resolve.
>
> My original implementation identified the top-level rule by analysing
> the grammar, but we later resolved that the top-level rule had to be
> the first rule in the grammar.

Is there a reliable way to determine the start symbol by analysing the
productions?

I think there is not.  So either there must be a convention like the one
we use (parallel, if memory serves, to conventions in some other parsing
systems), or there must be additional syntax for identifying the start
symbol.

> This user apparently comes from a define-before-use background, and so
> consistently had the root rule as the last in the file. As a result,
> they didn't manage to get a single successful result.
>
> I'm not sure what to make of this. On the one hand, the spec clearly says:
>
> 	"The root symbol of the grammar is the name of the first rule
> 	in the grammar."
>
>
> On the other hand, I feel bad for the user; I think notations should
> try to serve users, and not the other way round: usability
> first.

I feel bad for them, too.  If I remember correctly, the Algol 60 report
also works bottom up, with a definition-before-use organizing principle.

> Which is why I did my original implementation that way.

I wonder whether you had any user who defined a grammar like

    A = B; 'a'.
    B = A; 'b'.

If our plan is to identify the start symbol by selecting a terminal not
referred to, we are doomed to disappointment in this or in any grammar
where the start symbol is recursive.  If we try to avoid that
disappointment by requiring that the start symbol not be recursive, we
interfere with the design of the grammar in a really big way.

> Anyway, it's a potential discussion point.

Yes, agreed.

-- 
C. M. Sperberg-McQueen
Black Mesa Technologies LLC
http://blackmesatech.com

Received on Tuesday, 17 October 2023 13:47:57 UTC