[comp.lang.c] Harbison/Steele C grammar bugs

mao@hpclmao.HP.COM (Mike Ogush) (10/30/87)

The grammar for C (including Draft ANSI features) in appendix B of the 2nd
edition the book _C: A Refrence Manual_ by Harbison and Steele seems to
have a number of bugs in it:


    p. 380  = appears twice in the production(s) for assignment-op

    p. 382  The production for conditional-statement appears twice

            The right-side of the production for const-type-specifier
            should be in the font that indicates a reserved word not the
            font for non-terminal symbols.

    p. 383  There is a missing production:

             declarator-list:
                           declarator
                           declarator , declarator

            The symbol 'name' in the production for
            direct-component-selection should be 'identifier'

            There is a spurious line:

             enumeration-constant = expression

    p. 384  There is only one right-side in the production for
            enumeration-type-definition, which is the concatenation of the
            two given in the book.


    p. 386  The symbol 'name' in the production for
            indirect-component-selection should be 'identifier'

    p .389  The symbol 'name' in the production for primary should be
            'identifier'

    p. 392  The right-side of the production for volatile-type-specifier
            should be in the font that indicates a reserved word not the
            font for non-terminal symbols.


Are there any bugs that I have missed?  Are there better ways to fix the
problems that what I suggested above?


    Mike Ogush

    Computer Languages Lab  
    Hewlett-Packard Company

    ...!hplabs!hpclla!mao

kenny@uiucdcsb.cs.uiuc.edu (11/02/87)

/* Written  2:17 pm  Oct 30, 1987 by mao@hpclmao.HP.COM in uiucdcsb:comp.lang.c */
>    p. 380  = appears twice in the production(s) for assignment-op

And |= doesn't appear at all.  I suspect that |= was intended for the
second appearance of =.

>    p. 383
>            The symbol 'name' in the production for
>            direct-component-selection should be 'identifier'

No, it should be `component-name' and there should then be a
production:

	component-name:
		identifier ,

to document the semantic restriction.

>    p. 386  The symbol 'name' in the production for
>            indirect-component-selection should be 'identifier'

>    p .389  The symbol 'name' in the production for primary should be
>            'identifier'

The same comments about documenting the semantic restriction.  You
need the restriction, otherwise the declarations involving named types
are impossible to handle.

Thanks to Mike for pointing out these bugs.

Kevin Kenny			UUCP: {ihnp4,pur-ee,convex}!uiucdcs!kenny
Department of Computer Science	ARPA: kenny@B.CS.UIUC.EDU (kenny@UIUC.ARPA)
University of Illinois		CSNET: kenny@UIUC.CSNET
1304 W. Springfield Ave.
Urbana, Illinois, 61801		Voice: (217) 333-8740

tom@hcx1.SSD.HARRIS.COM (11/12/87)

More errors in Harbison and Steele Grammar as published:

In definition of  inner-declaration-list  the nonterminal
initialized-declaration-list  is referenced, but is not
defined anywhere. Should add:

   initialized-declaration-list :
           initialized-declaration
           initialized-declaration-list initialized-declaration

In definition of  type-specifier  the symbol  floating-point-type-specifier
should be just  floating-type-specifier

The definition of type-specifier-list is missing a production. It should
read:

   type-specifier-list :
           type-specifier                       <-- missing
           type-specifier-list type-specifier

In case anyone is interested in such trivia -- after fixing all the
bugs, running the grammar through a LALR(1) parser generator
results in 40 states with conflicts. The grammar published in
the draft ANSI C standard only has 14 states with conflicts.

Also one of the previously posted corrections is wrong:

>    p. 383  There is a missing production:
>
>             declarator-list:
>                           declarator
>                           declarator , declarator

Should read:

    p. 383  There is a missing production:

             declarator-list:
                           declarator
                           declarator-list , declarator

------------------------------------------------------------------------
tahorsley@hcx1.harris.com          | Aging - just say no!
------------------------------------------------------------------------