home *** CD-ROM | disk | FTP | other *** search
-
-
-
- CCCCDDDDEEEECCCCLLLL((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV CCCCDDDDEEEECCCCLLLL((((1111))))
-
-
-
- NNNNAAAAMMMMEEEE
- cdecl - Compose C declarations
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- ccccddddeeeeccccllll
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- _C_d_e_c_l is a program for encoding and decoding C type-
- declarations. It reads standard input for statements in the
- language described below. The results are written on
- standard output.
-
- _C_d_e_c_l'_s scope is intentionally small. It doesn't help you
- figure out storage classes or initializations.
-
- CCCCOOOOMMMMMMMMAAAANNNNDDDD LLLLAAAANNNNGGGGUUUUAAAAGGGGEEEE
- There are four statements in the language. The "declare"
- statement composes a C type-declaration from a verbose
- description. The "cast" statement composes a C type-cast as
- might appear in an expression. The "explain" statement
- decodes a C type-declaration, producing a verbose
- description. The "help" statement describes the others.
-
- The following grammar describes the language. In the
- grammar, words in "<>" are non-terminals, bare lower-case
- words are terminals that stand for themselves. Bare upper-
- case words are other lexical tokens: NOTHING means the
- empty string; NAME means a C identifier; NUMBER means a
- string of decimal digits; and NL means the new-line
- character.
-
- <program> ::= NOTHING
- | <program> <stat> NL
- <stat> ::= NOTHING
- | declare NAME as <decl>
- | cast NAME into <decl>
- | explain <cdecl>
- | help
- <decl> ::= array of <decl>
- | array NUMBER of <decl>
- | function returning <decl>
- | function ( NAME ) returning <decl>
- | pointer to <decl>
- | <type>
- <cdecl> ::= <cdecl1>
- | * <cdecl>
- <cdecl1> ::= <cdecl1> ( )
- | <cdecl1> [ ]
- | <cdecl1> [ NUMBER ]
- | ( <cdecl> )
- | NAME
- <type> ::= <typename> | <modlist>
-
-
-
- Page 1 (printed 10/21/87)
-
-
-
-
-
-
- CCCCDDDDEEEECCCCLLLL((((1111)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV CCCCDDDDEEEECCCCLLLL((((1111))))
-
-
-
- | <modlist> <typename>
- | struct NAME | union NAME | enum NAME
- <typename> ::= int | char | double | float
- <modlist> ::= <modifier> | <modlist> <modifier>
- <modifier> ::= short | long | unsigned
-
- EEEEXXXXAAAAMMMMPPPPLLLLEEEESSSS
- To declare an array of pointers to functions like malloc(3),
- do declare fptab as array of pointer to function returning
- pointer to char The result of this command is char
- *(*fptab[])() When you see this declaration in someone
- else's code, you can make sense out of it by doing explain
- char *(*fptab[])() The proper declaration for signal(2)
- cannot be described in _c_d_e_c_l's language (it can't be
- described in C either). An adequate declaration for most
- purposes is given by declare signal as function returning
- pointer to function returning int The function declaration
- that results has two sets of empty parentheses. The author
- of such a function might wonder where the parameters go.
- declare signal as function (args) returning pointer to
- function returning int provides the solution: int
- (*signal(args))()
-
- DDDDIIIIAAAAGGGGNNNNOOOOSSSSTTTTIIIICCCCSSSS
- The declare statement tries to point out constructions that
- are not supported in C. Also, certain non-portable
- constructs are flagged.
-
- Syntax errors cause the parser to play dead until a newline
- is read.
-
- SSSSEEEEEEEE AAAALLLLSSSSOOOO
- Section 8.4 of the C Reference Manual.
-
- BBBBUUUUGGGGSSSS
- The pseudo-English syntax is excessively verbose.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 2 (printed 10/21/87)
-
-
-
-