[cfe-dev] extend C syntax in clang plug-in?

Nico Weber thakis at chromium.org
Mon Nov 17 19:46:52 PST 2014


This isn't possible. The plugin API allows you to add an ASTConsumer that
runs either instead of or after codegen. The ASTConsumer interface [1] only
has hooks that tell you about the AST that clang is building – so a plugin
can only do things in response to receiving an AST. Plugins can't modify
parsing, or add new AST nodes.

1: http://clang.llvm.org/doxygen/classclang_1_1ASTConsumer.html

On Mon, Nov 17, 2014 at 7:00 PM, hongborong <hongbo.rong at intel.com> wrote:

> I want to experiment with some syntax extensions to C, including some new
> built-in types and new statements. Can it be done completely in a plugin?
> Any related examples to look at?
>
> For an extremely simple example, let us say we have
>         int A;
>         A, B = 1, [1.0, 2.0];
> Here B is untyped, and [1.0, 2.0] is not an expected expression. Instead of
> throwing errors, can we write a clang plugin to do the following? (1)
> Pre-process the token stream. For example, the second statement can be
> broken into two statements: A=1; B=[1.0, 2.0]; That gives us a new token
> stream. (2) Parse. For the statement “B=[1.0, 2.0]”, build a customized AST
> node, and insert it to the function’s AST. (3) Some additional analysis may
> be done on the function’s AST. (4) Finally, transform the function's AST so
> that it completely conforms to standard C.
>
> Thanks,
> Hongbo
>
>
>
> --
> View this message in context:
> http://clang-developers.42468.n3.nabble.com/extend-C-syntax-in-clang-plug-in-tp4042499.html
> Sent from the Clang Developers mailing list archive at Nabble.com.
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20141117/20799417/attachment.html>


More information about the cfe-dev mailing list