Alright thanks for your comprehensive answer! I think I got something to work with :)
Cheers, Tom On Tue, Mar 8, 2011 at 8:09 PM, Stephen Tetley <stephen.tet...@gmail.com>wrote: > Hi Tom > > Here's how I'd do comment annotation in the Parser: > > > > type Comment = String > > type Identifier = String > > I suspect data carrying tokens need to pair the data and the comment > so Happy can treat them as a positional reference e.g. $1 > > > data Token = > > TK_identifier (Identifier,Comment) > > | TK_kywd_module Comment > > | ... > > > Productions now have to use smart constructors: > > > > > module :: { Module } > > : '%module' mname defs > > { mkModule $1 $2 $3 } > > > > > > > data Module = Module { mod_comment :: Comment > > , mod_name :: String > > , mod_body :: [Def] > > } > > > > The 'smart' constructor takes the comment before the module > delacration, any comment between the module start token and the module > name is ignored... > > > mkModule :: Comment -> (String,Comment) -> [Def] -> Module > > mkModule outer_comment (mname, _) defs = > > Module outer_comment mname defs > > > > As for error handling, the strategy is to add error handling > productions after "good" productions. > > Now module can "handle" a missing module name: > > > > > module :: { Module } > > : '%module' mname defs > > { mkModule $1 $2 $3 } > > : ''%module' defs > > { badModule $1 $2 } > > > > > > badModule :: Comment [Def] -> Module > > badModule outer_comment defs = Module outer_comment fake_name defs > > where > > fake_name = "ERR - parser error reading module name" > > > > Ideally the smart constructors should be in a monad that supports > error logging like Writer. > > As you can see this isn't a great way of doing things but I'm not sure > you have any other options. Personally I'd see if I could live with > "first fail" instead. > > Best wishes > > Stephen > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe