comp.lang.ada
 help / color / mirror / Atom feed
From: usenet@leapheap.co.uk
Subject: Re: Lack of formal syntax undermines Ada
Date: Tue, 15 Apr 2008 05:57:42 -0700 (PDT)
Date: 2008-04-15T05:57:42-07:00	[thread overview]
Message-ID: <0d5b2ee5-56e7-446f-b29c-564580263c3e@i36g2000prf.googlegroups.com> (raw)
In-Reply-To: 47ff4970$0$19809$4d3efbfe@news.sover.net

Peter C. Chapin wrote:
> use...@leapheap.co.uk wrote:
> > Ada does not have a formal syntax. The LRM provides "syntax rules"
> > section by section, then collectively in Annex P. The resulting
> > woolly grammar is well-known to be ambiguous (e.g. is X:=Y(Z) an
> > assignment from a function call, array indexing or something
> > else?). It mixes lexical and syntactical information. It cannot
> > be used as the input to a parser generator.
>
[snip]
> It is sometimes possible to express a language restriction by creating a
> suitably elaborate grammar that enforces that restriction syntactically.
> On the other hand it is sometimes easier to just use a grammar that
> allows illegal programs and then enforce the restriction in the semantic
> analysis phase of the compiler. Thus there is no "one true grammar" for
> Ada or indeed any full scale programming language (as far as I know,
> anyway).

The one true grammar would be the one that the language designers
developed ("our DO ... UNLESS construct should look something
like...")
and committed to in the LRM.

> Instead the grammar used is an implementation detail, defined
> at the option of the compiler vendor as part of that vendor's overall
> strategy for handling the language. Grammars that appear in language
> standards are generally non-normative for precisely this reason. They
> exist only to clarify, for the human reader, the descriptive rules
> written in the document.

The syntax rules in the LRM cannot be non-normative. It is not
possible to deduce the structure of Ada from a version of the
LRM with the syntax rules and examples (also non-normative)
stripped. I was surprised to see Annex P marked as "informative".
I took this as shorthand for a statement of the form:
"This Annex is a collection of the syntax rules presented in other
sections of the document. Because of the dangers of a transcription
error, it is informative only. The syntax rules as they appear in
the other sections are normative"

Long familiarity with Ada may lead to underestimating the
difficulty of interpreting the descriptive rules. Try this
one:

From 2.8 Pragmas
(BTW I am using the 'consolidated' version of the Ada95 RM)

[start of quote]
Pragmas are only allowed at the following places in a program:

After a semicolon delimiter, but not within a formal_part
or discriminant_part.

At any place where the syntax rules allow a construct defined
by a syntactic category whose name ends with "declaration",
"statement", "clause", or "alternative", or one of the syntactic
categories variant or exception_handler; but not in place of
such a construct. Also at any place where a compilation_unit
would be allowed.

Additional syntax rules and placement restrictions exist for
specific pragmas.
[end of quote]

Question:
Can a sequence of pragmas (as opposed to a single pragma)
appear at one of the allowed program locations?

Answer 1:
Yes, the text implies this by saying
"Pragmas are only allowed..."; if
only a single pragma could appear, it would say
"A pragma is only allowed..."

Answer 2:
Yes, because the expansion of the syntactic construct
pragma ends in a semicolon. You are then free to reapply
the rule and use the first limb to add a second pragma.
And so on.

Answer 3:
No, there is no provision in the text for inserting more
than one pragma at each allowed location.

Is it obvious to anyone which answer is correct?

Regards,
Chris Noonan



  reply	other threads:[~2008-04-15 12:57 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-11  9:41 Lack of formal syntax undermines Ada usenet
2008-04-11 11:20 ` Peter C. Chapin
2008-04-15 12:57   ` usenet [this message]
2008-04-16  2:26     ` Peter C. Chapin
2008-04-16  3:14       ` Eric Hughes
2008-04-17  6:37     ` Randy Brukardt
2008-04-11 17:27 ` Georg Bauhaus
2008-04-11 18:13   ` Adam Beneschan
2008-04-11 21:25 ` John McCabe
2008-04-11 21:45   ` Robert A Duff
2008-04-11 22:37     ` John McCabe
2008-04-11 23:08       ` Adam Beneschan
2008-04-12  7:16         ` Dirk Craeynest
2008-04-14  7:23         ` Jean-Pierre Rosen
2008-04-12 12:57       ` Robert A Duff
2008-04-12 15:06         ` (see below)
2008-04-12 16:25           ` John McCabe
2008-04-12 17:55             ` (see below)
2008-04-12 22:19               ` John McCabe
2008-04-13  1:13                 ` (see below)
2008-04-13 11:51                   ` John McCabe
2008-04-13 14:13                     ` (see below)
2008-04-13 19:34                       ` John McCabe
2008-04-13 20:51                         ` (see below)
2008-04-13 21:06                           ` John McCabe
2008-04-12 17:16         ` Gary Scott
2008-04-12 18:43           ` Peter C. Chapin
2008-04-12 19:16             ` Gary Scott
2008-04-12 20:04               ` Robert A Duff
2008-04-12 23:32                 ` Gary Scott
2008-04-13  1:16                   ` Robert A Duff
2008-04-12 20:02           ` Robert A Duff
2008-04-12 20:52             ` Pascal Obry
2008-04-13 22:01       ` Florian Weimer
2008-04-13  9:46 ` anon
2008-04-15 13:22   ` usenet
2008-04-15 16:08     ` Adam Beneschan
2008-04-13 22:04 ` Florian Weimer
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox