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