Re: cids and fnames in ccall impents

2003-01-22 Thread Manuel M T Chakravarty
Ian Lynagh [EMAIL PROTECTED] wrote,

 On Wed, Nov 06, 2002 at 12:04:22AM +, Ian Lynagh wrote:
  On Tue, Nov 05, 2002 at 09:53:52PM +, Alastair Reid wrote:
   
   If it isn't spelled out explicitly already, it would be good to do that.
  
  How about something like this?
  
  Maximal munch applies.
  
  token - special |  | fname | cid | whitespace
  special - static | dynamic | wrapper
  fname - ... .h  (... as I don't have [3] handy)
  cid - ... excluding special   (... as I don't have [3] handy)
 
 [3] tells me that cid is [_a-zA-Z][_a-zA-Z0-9]* (which I think should be
 in the FFI spec itself too) but I can't find a definition of fname in
 it.
 
 The C99 spec allows a lot of stuff I don't think makes sense after
 #include, but a header file is specified by either [^\n]+ or
 [^\n]+. This only seems sensible if the  or  are also in the
 impent string which is not the case in the examples.
 
 Can someone clarify the intention for me please (and preferably also do
 so in the FFI spec)?

I have now included a formal definition of the two
nonterminals in Section 2 (Lexical Structure) of the FFI
report.  I append the text below.  cid is defined to be
[_a-zA-Z][_a-zA-Z0-9]* (as you wrote above).  However,
chname (which now replaces fname) produces only a subset of
those lexemes admitted by C99.  I don't think there would be
much point in trying to exactly mirror C99, as more
complicated header file arrangements require a special
purpose C header file for Haskell bindings anyway.

Cheers,
Manuel

-=-

To refer to objects of an external C context, we introduce the following
phrases:
%
\begin{grammar}
  \grule[C header filename]{chname}{%
\grepeat{\gnterm{chchar}} .\ h}
  \grule[C identifier]{cid}{%
\gnterm{letter} \grepeat{\gnterm{letter} \galt\ \gnterm{ascDigit}}}
  \grule{chchar}{%
\gnterm{letter} \galt\ \gnterm{ascSymbol}\gminus{\}}
  \grule{letter}{%
\gnterm{ascSmall} \galt\ \gnterm{ascLarge} \galt\ \_}
\end{grammar}
%
The range of lexemes that are admissible for \gnterm{chname} is a subset of
those permitted as arguments to the \code{\#{}include} directive in C.  In
particular, a file name \gnterm{chname} must end in the suffix \code{.h}.  The
lexemes produced by \gnterm{cid} coincide with those allowed as C identifiers,
as specified in~\cite{C}.
___
FFI mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/ffi



Re: cids and fnames in ccall impents

2002-11-19 Thread Ian Lynagh
On Wed, Nov 06, 2002 at 12:04:22AM +, Ian Lynagh wrote:
 On Tue, Nov 05, 2002 at 09:53:52PM +, Alastair Reid wrote:
  
  If it isn't spelled out explicitly already, it would be good to do that.
 
 How about something like this?
 
 Maximal munch applies.
 
 token - special |  | fname | cid | whitespace
 special - static | dynamic | wrapper
 fname - ... .h  (... as I don't have [3] handy)
 cid - ... excluding special   (... as I don't have [3] handy)

[3] tells me that cid is [_a-zA-Z][_a-zA-Z0-9]* (which I think should be
in the FFI spec itself too) but I can't find a definition of fname in
it.

The C99 spec allows a lot of stuff I don't think makes sense after
#include, but a header file is specified by either [^\n]+ or
[^\n]+. This only seems sensible if the  or  are also in the
impent string which is not the case in the examples.

Can someone clarify the intention for me please (and preferably also do
so in the FFI spec)?


Thanks
Ian

___
FFI mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/ffi