Language.C and non-pretty-printing
Alexander Bernauer
bernauer at inf.ethz.ch
Thu May 5 11:20:28 BST 2011
Hi Benedikt,
thank you for your work. I have a question, though.
The Show instances for the C operators do not return valid Haskell
syntax. Instead they return the C syntax of those operators. For
instance:
---8<---
$ cat foo.c
int foo(int i, int k)
{
return i < k;
}
$ runhaskell DumpAst.hs foo.c
CTranslUnit [CFDefExt (CFunDef [CTypeSpec (CIntType _)] (CDeclr (Just `foo') [CFunDeclr (Right ([CDecl [CTypeSpec (CIntType _)] [(Just (CDeclr (Just `i') [] Nothing [] _),Nothing,Nothing)] _,CDecl [CTypeSpec (CIntType _)] [(Just (CDeclr (Just `k') [] Nothing [] _),Nothing,Nothing)] _],False)) [] _] Nothing [] _) [] (CCompound [] [CBlockStmt (CReturn (Just (CBinary < (CVar `i' _) (CVar `k' _) _)) _)] _) _)] _
--->8---
Instead of the string "<" there should be the string "CLeOp". Is there a
specific reason for this? Similarily, why isn't the Show instance for
Ident using regular " quotes?
The reason why I would appreciate having valid Haskell syntax is that in
my daily work with laguage-c it is very helpfull to be able to dump the
AST of a sample program so that I can figure out the correct match
patterns.
To this end I am using the Haskell parser module to parse and pretty
print the AST dump from language-c. For the above example this looks
like this:
---8<---
[CFDefExt
(CFunDef [CTypeSpec (CIntType _)]
(CDeclr (Just "foo")
[CFunDeclr
(Right
([CDecl [CTypeSpec (CIntType _)]
[(Just (CDeclr (Just "i") [] Nothing [] _), Nothing, Nothing)] _,
CDecl [CTypeSpec (CIntType _)]
[(Just (CDeclr (Just "k") [] Nothing [] _), Nothing, Nothing)] _],
False))
[] _]
Nothing [] _)
[]
(CCompound []
[CBlockStmt
(CReturn (Just (CBinary CLeOp (CVar "i" _) (CVar "k" _) _)) _)]
_)
_)]
--->8---
So, would it be possible that
1) the Show instance for Ident uses " instead of ' and `?
2) the Show instances for the C operators return the name of the
respective data constructors?
3) the Pretty instances for the C operators don't rely on their Show
instances any more but return the correct C syntax string on their own?
If you say yes, I will go ahead and make a patch for that. I would also
add my above mentioned pretty printing util.
regards
Alex
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://projects.haskell.org/pipermail/language-c/attachments/20110505/2761765b/attachment.pgp>
More information about the Language-c
mailing list