5 ms·
Whatever happened to cdecl? : fred@dejah sql $; cdecl Type `help' or `?' for help cdecl> declare x as pointer to function returning int int (*x)() cd
by ratboy666 9y ago
Whatever happened to cdecl?
: fred@dejah sql $; cdecl
Type `help' or `?' for help
cdecl> declare x as pointer to function returning int
int (*x)()
cdecl> declare x as pointer to function returning pointer to function returning int
int (*(*x)())()
cdecl>
- ufo 9y agoWhile we are on the topic of cdecl, does anyone know where I can find a succinct algorithm for producing valid C declarations from a structured description of the type? Basically, what the examples in the parent post are doing (and NOT the other way around, which is parsing valid C declarations). I tried looking at cdecl's source code but everything is implemented as a big yacc grammar, which obscures the control flow of the algorithm. While this is necessary for the parsing feature, I suspect that for producing declarations it might be possible to use a simple recursive algorithm instead...
- webkike 9y agoThere's no "algorithm" in that it's the same way you traverse over any tree to produce output, a la compilers.
- ufo 9y agoSure, but I already spent a whole day trying to write said tree traversal, and failed miserably. Eventually I had to give up and find another way to solve my original problem, which annoys me to this day. If anyone can help me find a way to convert a tree representing a C data type into a string with a syntactically valid C declaration for it I would be very grateful. I suspect that it should be possible to do this via a clean recursive algorithm, but the only implementation of this I could find so far was cdecl's LALR-based one.
- webkike 9y agoIt entirely depends on how you structure your data, so asking for help in this regard is essentially asking someone to do it for you.
- ufo 9y agoI thought that I was making myself very clear that I was asking for someone to help me, either by pointing me to the solution or just outright stating it (I suspect that it shouldn't be very long) :) I don't think it would depend very much on how the data is structured though. How many different ways are there to represent C types using tagged unions?
- webkike 9y agoI understand, but there's a difference between doing work for you and helping you get there. Imagine a sexpression representing C data types the following two ways: (pointer-to (integer)) (integer (pointed-to)) We could very easily print a decl for the second example by printing the two atoms seen in order: int * But if we want to print the first correctly, we will have to prepend to a string in order to correctly display the decl. That is, we will have to change our traversal order: https://en.wikipedia.org/wiki/Tree_traversal https://en.wikipedia.org/wiki/Tree_traversal
- ufo 9y agoCome on, that is a trivial difference that doesn't change anything in the grand scheme of things. At this point needlessly restricting the input format would just serve to make it harder for other people to help me find the solution I need. And it is fine if you don't want to help me with this but sheesh, I am not trying to get someone else to do my homework here. I am trying to share a fun (and hopefully short) problem I couldnt solve myself yet.
- imglorp 9y agoThe algorithm is the "spiral rule". http://c-faq.com/decl/spiral.anderson.html http://c-faq.com/decl/spiral.anderson.html
- ufo 9y agoThanks, but I actually want the other way around. Instead of parsing an existing C declaration, I want to produce one when given a structured tree representing the C datatype. I found that to be trickier than it sounds.
- deleted 9y ago[deleted]
- dee-see 9y agoIt's also available online https://cdecl.org/ https://cdecl.org/
- teddyh 9y agoNothing happened to it. apt install cdecl