[cfe-dev] Patch to allow comment translators implementation

Douglas Gregor dgregor at apple.com
Mon Jan 11 16:54:50 PST 2010

On Jan 6, 2010, at 1:13 AM, Abramo Bagnara wrote:

> Il 29/12/2009 23:51, Abramo Bagnara ha scritto:
>> Il 29/12/2009 21:08, Chris Lattner ha scritto:
>>> On Dec 26, 2009, at 7:58 AM, Abramo Bagnara wrote:
>>>> This small patch change comments handler in a simple way to  
>>>> permit to
>>>> implement quite easily comment translators.
>>>> Once applied this patch, a CommentHandler is allowed to build a  
>>>> first
>>>> token to be returned to Lexer and to push a TokenStream for the  
>>>> others,
>>>> then allowing generic comment -> tokens transformer.
>>>> This can be useful to transform comment shaped program annotation  
>>>> that
>>>> should be translated to source code and also other interesting  
>>>> applications.
>>> This is an interesting approach.  The only major concern I have is
>>> that this only allows you to translate comments into exactly one
>>> token.  In the case of openmp pragmas (for example) this doesn't  
>>> seem
> Do I've been sufficient clear explaining that the comments may be
> translated to an arbitrary number of tokens calling EnterTokenStream
> inside the CommentHandler?

Yes, but I find the protocol for introducing tokens via a comment  
handler to be very confusing. Could we instead eliminate the Token  
&token argument, and just make the protocol: to "parse" the contents  
of the comment, use EnterTokenStream and then return true?

Or, at the very least, the "token" argument should be named  
"firstToken", to indicate that it is possible to inject other tokens.  
Of course, HandleComment also needs documentation to describe what the  
parameters and return value actually mean, and how comment handlers  
can introduce tokens into the stream.

>>> rich enough.  A different approach would be to allow the handler to
>>> push an arbitrary number of tokens into the parser's lookahead
>>> buffer.  Would this work for what you're trying to do?
>> Yes, but perhaps this is not needed: as I wrote the CommentHandler  
>> could
>> return a first token *and* produce the other tokens to be read and  
>> push
>> them to lexer stack using EnterTokenStream.
>> I've already tried this with success in a sample implementation that
>> simply lex the comment content without modify it:
> Still I've not got any feedback: do you think that the patch in  
> original
> mail will be applied as is? Should I improve it in some way?

I think it's okay if the HandleComment protocol can be simplified a  
bit and if it is documented, although I'd like to hear from Chris. I'd  
feel much better if we actually had some kind of use of this code path  
within Clang itself. For example, would it be possible for the keep- 
comments mode to be implemented outside of the lexer using your  
changes to HandleComment? That might actually simplify the lexer while  
making it more general.

	- Doug

More information about the cfe-dev mailing list