comp.lang.ada
 help / color / mirror / Atom feed
* Question on use of ! instead of |
@ 2005-06-22 13:35 James Alan Farrell
  2005-06-22 22:35 ` Manuel G. R.
  2005-06-23  1:27 ` Steve
  0 siblings, 2 replies; 4+ messages in thread
From: James Alan Farrell @ 2005-06-22 13:35 UTC (permalink / raw)


[-- Attachment #1: Type: text/plain, Size: 3257 bytes --]

Hi all,
I'm working on a program to analyze Ada code using ASIS.  We use ACATS 
to test our software, and this has turned up some behavior I'm having 
troubles explaining.

ACATS test a2a031a.adb (below) has a line in it:

      VAR := (A!B => E2, C ! D => 0);    -- AGGREGATE.

According to ASIS, "A!B" is an identifier.  If I put spaces around the ! 
then A and B are identifiers and things work the way I expect, and if I 
replace the ! with a | again things work the way I expect.

Could this be a bug in the compiler or in ASIS?

I couldn't find ! in the ARM.  It's supposed to be a direct replacement 
for |, correct?  (ie, they should work the same semantically and 
syntactically?)

I am using gnat 3.15p and the appropriate matching version of ASIS.

Thanks,
James Alan Farrell
Grammatech, inc.


-- A2A031A.ADA

--                             Grant of Unlimited Rights
--
--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
--     unlimited rights in the software and documentation contained herein.
--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making
--     this public release, the Government intends to confer upon all
--     recipients unlimited rights  equal to those held by the Government.
--     These rights include rights to use, duplicate, release or 
disclose the
--     released technical data and computer software in whole or in 
part, in
--     any manner and for any purpose whatsoever, and to have or permit 
others
--     to do so.
--
--                                    DISCLAIMER
--
--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE 
AVAILABLE
--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
--     PARTICULAR PURPOSE OF SAID MATERIAL.
--*
-- CHECK THAT AN EXCLAMATION MARK CAN REPLACE A VERTICAL BAR WHEN THE
-- VERTICAL BAR IS USED AS A SEPARATOR.

-- CONTEXTS ARE:
--   AS A CHOICE IN A VARIANT PART
--   IN A DISCRIMINANT CONSTRAINT
--   IN A CASE STATEMENT CHOICE
--   IN AN AGGREGATE
--   IN AN EXCEPTION HANDLER.

-- JBG 5/25/85

WITH REPORT; USE REPORT;
PROCEDURE A2A031A IS

      TYPE ENUM IS (E1, E2, E3);
      TYPE REC (A, B : ENUM) IS
           RECORD
                C : INTEGER;
                CASE A IS
                     WHEN E1 ! E2 =>     -- CHOICE OF VARIANT.
                          D : INTEGER;
                     WHEN E3 =>
                          E : FLOAT;
                END CASE;
           END RECORD;

      EX1, EX2, EX3 : EXCEPTION;

      VAR  : REC (A!B => E2);            -- DISCRIMINANT CONSTRAINT.

      EVAR : ENUM := E2;

BEGIN

      TEST ("A2A031A", "CHECK USE OF ! AS SEPARATOR IN PLACE OF |");

      CASE EVAR IS
           WHEN E3 => NULL;
           WHEN E2!E1 => NULL;           -- CASE STATEMENT CHOICE.
      END CASE;

      VAR := (A!B => E2, C ! D => 0);    -- AGGREGATE.

      RESULT;
EXCEPTION
      WHEN EX1!EX2 ! EX3 => NULL;        -- EXCEPTION HANDLER.
END A2A031A;

[-- Attachment #2: jfarrell.vcf --]
[-- Type: text/x-vcard, Size: 88 bytes --]

begin:vcard
fn:James Alan Farrell
n:Farrell;James
org:GrammaTech
version:2.1
end:vcard


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Question on use of ! instead of |
  2005-06-22 13:35 Question on use of ! instead of | James Alan Farrell
@ 2005-06-22 22:35 ` Manuel G. R.
  2005-06-23 13:00   ` James Alan Farrell
  2005-06-23  1:27 ` Steve
  1 sibling, 1 reply; 4+ messages in thread
From: Manuel G. R. @ 2005-06-22 22:35 UTC (permalink / raw)


James Alan Farrell wrote:
> According to ASIS, "A!B" is an identifier.  If I put spaces around the ! 
> then A and B are identifiers and things work the way I expect, and if I 
> replace the ! with a | again things work the way I expect.
> 
> Could this be a bug in the compiler or in ASIS?

In ASIS for GNAT, I think.

> 
> I couldn't find ! in the ARM.  It's supposed to be a direct replacement 
> for |, correct?  (ie, they should work the same semantically and 
> syntactically?)
> 

Yes, they should. This is one of the obsolescent features in Ada 95: "A 
vertical line character (|) can be replaced by an exclamation mark (!) 
where used as a delimiter."

http://www.adaic.com/standards/95lrm/html/RM-J-2.html


-- 
Ada programming tutorial: http://en.wikibooks.org/wiki/Programming:Ada
Tutorial de programaci�n en Ada: 
http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_Ada



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Question on use of ! instead of |
  2005-06-22 13:35 Question on use of ! instead of | James Alan Farrell
  2005-06-22 22:35 ` Manuel G. R.
@ 2005-06-23  1:27 ` Steve
  1 sibling, 0 replies; 4+ messages in thread
From: Steve @ 2005-06-23  1:27 UTC (permalink / raw)


"James Alan Farrell" <jfarrell@nospam.com> wrote in message 
news:42b96967$1_1@newsfeed.slurp.net...
> Hi all,
> I'm working on a program to analyze Ada code using ASIS.  We use ACATS
> to test our software, and this has turned up some behavior I'm having
> troubles explaining.
>
> ACATS test a2a031a.adb (below) has a line in it:
>
>      VAR := (A!B => E2, C ! D => 0);    -- AGGREGATE.
>
> According to ASIS, "A!B" is an identifier.  If I put spaces around the !
> then A and B are identifiers and things work the way I expect, and if I
> replace the ! with a | again things work the way I expect.
>

Ada 95 Reference Manual
2.3 Identifiers

  identifier ::= identifier_letter{[underline]letter_or_digit}

I would certainly say that A!B is not an identifier.

Seems worthy of sending a report to AdaCore.

report@gnat.com

(as I recall)

Steve
(The Duck)







^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Question on use of ! instead of |
  2005-06-22 22:35 ` Manuel G. R.
@ 2005-06-23 13:00   ` James Alan Farrell
  0 siblings, 0 replies; 4+ messages in thread
From: James Alan Farrell @ 2005-06-23 13:00 UTC (permalink / raw)


[-- Attachment #1: Type: text/plain, Size: 1516 bytes --]

Manuel G. R. wrote:
> James Alan Farrell wrote:
> 
>> According to ASIS, "A!B" is an identifier.  If I put spaces around the 
>> ! then A and B are identifiers and things work the way I expect, and 
>> if I replace the ! with a | again things work the way I expect.
>>
>> Could this be a bug in the compiler or in ASIS?
> 
> 
> In ASIS for GNAT, I think.
> 

I was thinking about this last night.  Seems the parser needs to 
determine where the identifier begins and ends (the lexer actually), so 
that needs to be saying the three characters are the identifier.  The 
bug has to be here (well before ASIS gets involved).

But if that were the case, it should fail with an error that A!B is 
undefined.  So it appears that there is a second place place where the 
delimiter is looked for - when the declaration of A is looked up.

Now there's a subtlety with this test case:  A and B are parameters to a 
variant record.  But nothing in the record depends on B.  So if B is not 
set, executable code would be produced that still produces the expected 
output, and the ACATS test could still pass.

>>
>> I couldn't find ! in the ARM.  It's supposed to be a direct 
>> replacement for |, correct?  (ie, they should work the same 
>> semantically and syntactically?)
>>
> 
> Yes, they should. This is one of the obsolescent features in Ada 95: "A 
> vertical line character (|) can be replaced by an exclamation mark (!) 
> where used as a delimiter."
> 
> http://www.adaic.com/standards/95lrm/html/RM-J-2.html
> 
> 


[-- Attachment #2: jfarrell.vcf --]
[-- Type: text/x-vcard, Size: 88 bytes --]

begin:vcard
fn:James Alan Farrell
n:Farrell;James
org:GrammaTech
version:2.1
end:vcard


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2005-06-23 13:00 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-06-22 13:35 Question on use of ! instead of | James Alan Farrell
2005-06-22 22:35 ` Manuel G. R.
2005-06-23 13:00   ` James Alan Farrell
2005-06-23  1:27 ` Steve

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