The s/r conflicts can also be a problem, depending on what you're trying to parse. It's generally a good idea to get rid of them if you can, but at the least you should understand why they exist (use happy --info) and document them in Parser.y.pp.

Cheers,
Simon

On 30/06/2014 14:04, Simon Peyton Jones wrote:
Gergo

It's just a question of chasing down the reduce/reduce errors.  You can give a 
flag to Happy that makes it dump a file with all the info about it parsing 
states, and where the reduce/reduce errors come from, and you can go from there.

If you don't know how to interpret that file, just commit your best try to your 
wip/ branch and maybe some other ghc devs will help you.  Maybe me.  But 
without being able to reproduce it, it's hard to help.

Simon

| -----Original Message-----
| From: Dr. ERDI Gergo [mailto:ge...@erdi.hu]
| Sent: 25 June 2014 14:20
| To: Simon Peyton Jones
| Cc: GHC Devs
| Subject: RE: Help needed: parsing pattern synonym contexts
|
| On Tue, 24 Jun 2014, Simon Peyton Jones wrote:
|
| > In the latter case, what happened to the shift/reduce and
| > reduce/reduce errors reported by Happy?  Esp the latter.  If you are
| > getting more you need to track them down.
|
| I think I've figured out what might be causing the problem.
|
| First, a couple figures. With these rules:
|
| pattern_synonym_decl
|          : 'pattern' con vars0 patsyn_token pat
|          | 'pattern' varid conop varid patsyn_token pat
|
| pattern_synonym_sig
|          : 'pattern' patsyn_stuff '::' ctype
|
| patsyn_stuff
|          : constr_stuff
|
| I'm getting 112 new reduce/reduce conflicts.
|
| If I add the context like you recommended:
|
| pattern_synonym_sig
|          : 'pattern' patsyn_context patsyn_stuff '::' ctype
|
| patsyn_context :: { LHsContext RdrName }
|          : forall
|          | forall context '=>'
|
|
| then I get 54 new shift/reduce conflicts and no (new) reduce/reduce
| conflicts.
|
| My feeling is the problem is that patterns don't need any special
| parentheses around type annotations, which means the following is a
| legal pattern synonym definition:
|
| pattern Single x = [x] :: [Int]
|
| and I think that the difference (the '=' or '<-') is too 'deep' between
| this and something like
|
| pattern Single a :: [a]
|
| Unfortunately, I still have no idea how to solve this problem...
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs

_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to