comp.lang.ada
 help / color / mirror / Atom feed
From: Stephen Leake <stephen_leake@stephe-leake.org>
Subject: Re: question about the usage of opentoken-4.0b
Date: Wed, 25 Apr 2012 08:03:59 -0400
Date: 2012-04-25T08:03:59-04:00	[thread overview]
Message-ID: <82r4vcf26o.fsf@stephe-leake.org> (raw)
In-Reply-To: 10328658.73.1335294078629.JavaMail.geo-discussion-forums@vber6

Charly <carl.weierstrass@googlemail.com> writes:

> Hi,
>
> I have a question about the usage of opentoken-4.0b, a scanner/parser-library written in Ada.
> So my question isn't about the language Ada itself but only about this library.
>
> I define a Grammar starting with 
>
>    Grammar : constant Production_List.Instance :=
>      Prog      <= Def_List & EOF + Program_Token.Create     and
>      Def_List  <= Def_List & Ent + Element_List.Concat      and
>      Def_List  <= Ent            + Element_List.Create      and
>      Ent       <= Entity_Key & Ident & Colon & El_List & End_Key &
>                   Semicolon      + Entity_Token.Create      and
> ...
>
> and I create and call the parser with 
>
>    Text_Parser := LALR_Parser.Generate (Grammar, Analyzer, False);
>
>    LALR_Parser.Parse (Text_Parser);
>
> It works fine, but to use the result of the parsing, which happens to
> be the start element 'Prog' of the above Grammar, I had to store it in
> a global variable, as one of the actions of the procedure
> 'Program_Token.Create'. But I would like to avoid this, because I
> don't like global variables;
>
> The variable 'Prog' in the Grammar definition has the right type, but
> does not contain any data, as I expected.
>
> Any help would be appreciated.

I think I understand; you want the side-effect output of
Program_Token.Create for Prog to be stored in some non-global variable.

I'll assume that by 'global' here you mean 'declared in some package,
and thus allocated statically' as opposed to 'declared in some
subroutine, and thus allocated dynamically'.

You want dynamic allocation (either stack or heap, but with the heap
root reference on the stack) for the side-effect output.

I've never tried to do that; I always have a few root global variables
in my most complex code (_something_ has to store the symbol table :),
so it has not come up.

The examples in OpenToken essentially do all processing inside the
various action subroutines, so they don't help here.

If you could post a small compilable example, I'd be able to think about
it more concretely. You might get somewhere with access discriminants,
but I don't see how immediately.

-- 
-- Stephe



  reply	other threads:[~2012-04-25 12:03 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-24 19:01 question about the usage of opentoken-4.0b Charly
2012-04-25 12:03 ` Stephen Leake [this message]
2012-04-25 19:27   ` Charly
2012-04-25 12:58 ` Marc C
replies disabled

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