Need C language Description

Steven Ryan smryan at garth.UUCP
Tue Aug 2 06:06:26 AEST 1988


>I have sitting in front of me the 1.31.87 version of "High C Language
>Reference Manual".

[I wonder if that's a reference to Hi C?]
 
>I'll quote from it, without permission, to see if you think their
>formal definition is sufficiently formal:
>
>\begin{quote}
>7.7 for
>
>Syntax
>
>Statement -> 'for' '(' First: EL? ';'
>		       Next: EL? ';'
>			Last: EL?
>		   ')' Body: Statement
>
>Constraints:
>	`Next', if present, must have a scalar type.

In the style of A68 RR:

NEST for statment:
    for token,NEST for control pack,NEST controlled statement.
NEST for control:
    NEST initial expression,semicolon token,
        NEST next expression,semicolon token,
        NEST last expression.
NEST initial expression:
    TYPE NEST expression list.
NEST next expression:                 {This is what I mean by formal context}
    TYPE NEST expression list,        {sensitive grammar. The tools are     }
        where TYPE is scalar type;    {available though unused.             }
    EMPTY.
NEST final expression:
    TYPE NEST expression list.
NEST controlled statement:
    loop level NEST statement.        {Mark loop for contained break/continue.}
 
>Semantics:
>	If `Next' is omitted, `1' is implied.
>
>	Except in the matter of a contained _continue_ `Statement' in
>the `Body', this statement is exactly equivalent to 
>
>	First; while (Next) { Body; Last; }
>
>Thys, the `First' and `Next' evaluation ends are sequence points.

In the for statement S, let F be the first expression, N be the next expression
if not null otherwise 1, let be L be the last expression, let C be the
controlled statement.

The evaluation of S is
     (a) the evaluation of F
     (b) the evaluation of N
         If the yield of N is a true value,
             (i) the evaluation of C
{Need to include something here so that the evaluation of break or continue
 within C terminates the evaluation of C here and possibly the evaluation of
 S. It's difficult to do in isolation of the entire grammar, but at least the
 declaration nest is marked.}
	     (ii) the evaluation of L
	     (iii) the evaluation of the for statement S' with F' empty,
                   N' is N, L' is L, C' is C.
         If the yield of N is a false value,
             (iv) the evaluation of S is complete.

>Discussion:
>	The first expression is a convenient place to put any
>initialization for the loop.   The second specifies a test for
>continuing the loop and perhaps an incrementation.  The third usually
>specifies an operation performed at the end of the loop, such as an
>increment of a variable.

{How to use the language is not part of the definition--it belongs in
 tutorials. However to explain some of the subtleties, comments can be
 included so long as they are not considerred part of the definition.}
 
>\end{quote}
>
>I wish MetaWare had spent less time making Ada-like extensions to C
>(their compiler supports Ada-style "keyword" arguments with defaults,
>for example, which you are not going to find in any other compiler),

It's nice to see somebody make a stab at a complete definition. Now if
if everybody can agree to this definition (assuming it is complete and all
ambiguities are resolved) C will finally be formally defined. The fact
that contains extensions (what C compiler doesn't?) makes that unlikely.



More information about the Comp.lang.c mailing list