comp.lang.ada
 help / color / mirror / Atom feed
From: Stephen Leake <stephen_leake@stephe-leake.org>
Subject: Re: LALR parser question
Date: Fri, 03 May 2013 04:45:41 -0500
Date: 2013-05-03T04:45:41-05:00	[thread overview]
Message-ID: <85zjwc8khm.fsf@stephe-leake.org> (raw)
In-Reply-To: klsgo4$pfl$1@munin.nbi.dk

"Randy Brukardt" <randy@rrsoftware.com> writes:

> "Stephen Leake" <stephen_leake@stephe-leake.org> wrote in message 
> news:85sj2aydwi.fsf@stephe-leake.org...
>> As part of Emacs Ada mode 5.0, I'm building a generalized LALR grammar
>> for Ada (see
>> http://stephe-leake.org/emacs/ada-mode/emacs-ada-mode.html#ada-mode-5.0 )
>>
>> I'm having trouble with empty declarations. For example (using Bison
>> syntax for the grammar), a simplified subset of the Ada package_body sytax 
>> is:
>>
>> package_body
>>  : IS declaration_list BEGIN SEMICOLON
>>  ;
>>
>> declaration_list
>>  : declaration
>>  | declaration_list declaration
>>  ;
>>
>> declaration
>>  : object_declaration
>>  | subprogram_declaration
>>  ;; ...
>>  ;
>>
>> 1) Add an empty declaration choice to declaration_list:
>>
>> declaration_list
>>  : ;; empty list
>>  | declaration_list declaration
>>  ;
>>
> > 2) Add an empty declaration choice to declaration:
> >
> > declaration
> >   : ;; empty declaration
> >   | object_declaration
> >   | subprogram_declaration
> >   ;; ...
> >   ;


> Choice 1 here is the best way to do this for an LALR(1) grammar. The 
> equivalent part of the Janus/Ada grammer reads:
>
> package_body ::= package_head declarative_part block_option ## 8
>
> declarative_part ::= dec_option ## 0
> dec_option ::= pragma_option
>     | dec_option declaration pragma_option
>     | dec_option body_dec pragma_option ## 0
>
> pragma_option ::= pragma_option pragma_stmt
>     | ## 0                                             -- Empty production
>
> "declaration" and "body_dec" include the usual suspects, and no empty
> parts.

This actually the same as my choice 2; the empty production is not in
the list rule (dec_option), it's in one of the options of that rule
(pragma_option).
 
> This generates a grammar with no conflicts.

I get a conflict with choice 2, but I now believe that's a bug; I think
there's something wrong with the lookahead propagation step.

>> Any other ways to handle this problem?
>
> Get a better parser generator?? 

I'm fixing OpenToken; I'm asking if the OpenToken behavior for choice 1
is a bug. You have not directly addressed that, but thanks for letting
me know someone is using LALR in a commercial product!

-- 
-- Stephe

  parent reply	other threads:[~2013-05-03  9:45 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-28 13:37 LALR parser question Stephen Leake
2013-04-28 14:43 ` Dmitry A. Kazakov
2013-04-30  1:19   ` Yannick Duchêne (Hibou57)
2013-04-30  2:03     ` John B. Matthews
2013-04-30  4:11       ` Yannick Duchêne (Hibou57)
2013-04-30 11:55         ` Peter C. Chapin
2013-04-30 13:14           ` john
2013-04-30 14:14             ` Dmitry A. Kazakov
2013-05-01 11:33             ` Peter C. Chapin
2013-04-30 16:06     ` Shark8
2013-04-30 17:15       ` Yannick Duchêne (Hibou57)
2013-04-30 17:51         ` Shark8
2013-04-30 18:52           ` Yannick Duchêne (Hibou57)
2013-05-01 12:31         ` Stephen Leake
2013-05-01 13:57           ` Shark8
2013-04-30 21:18       ` Dmitry A. Kazakov
2013-04-30 22:09         ` Shark8
2013-05-02  1:49 ` Randy Brukardt
2013-05-02  2:39   ` Yannick Duchêne (Hibou57)
2013-05-02 21:57     ` Randy Brukardt
2013-05-06 18:25     ` Oliver Kellogg
2013-05-03  9:45   ` Stephen Leake [this message]
2013-05-03 22:57     ` Randy Brukardt
2013-05-06  9:45     ` Stephen Leake
replies disabled

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