I like your idea in principle, have you thought to use a tool like led/peg
parser http://piumarta.com/software/peg/ using a C grammar like
http://www.romanredz.se/freesoft.htm#C, you'll have more freedom to express
your ideas.

Also maybe you already know this:

- http://milgra.com/classc/
- pcc http://pcc.ludd.ltu.se/ has the beginings of a c++ made on top of c
uses bison/yacc.
- vala https://wiki.gnome.org/Projects/Vala
- Class-C source-to-source compiler http://www.milgra.com/classc
- https://github.com/ryanashcraft/Classified-C

Cheers !


On Fri, Apr 18, 2014 at 12:17 PM, mobi phil <m...@mobiphil.com> wrote:

> Hi,
>
>
> I know that this topic was here few times, last time I came with some
> questions.
>
> The goal of this email is both to purpose some simple tcc "meta" extension
> and to ask
> some further help to implement what I need.
>
> My intention is to extend C with some features for object (oriented)
> programming.
> In my previous email about the topic I mentioned that I wanted to
> implement those
> extensions with macros. Though I invested a lot of time, I realized that
> it was rather
> a stoic exercise and with the macros will be impossible to implement more
> powerful
> constructs like type checking.
>
> After lot of brainstorming, I have a better understanding of what
> extensions I would like
> to have and how I want to implement them.
>
> I will basically need 4 constructs:
>
> 1. a struct like construct, "black". This is the blackbox of the object.
> This will be mainly
> defined in the source file and holds private objects/members. So far did
> not find
> a better name. One candidate would be "implementation", but it is also not
> really
> the implementation etc.
>
> example:
>
> black MyType
> {
>    type1 member1;
>    type2 member2;
>    type3 member3;
> };
>
> 2. a struct like construct, "white". Again, did not find a better name,
> "interface" could have
> been a candidate, but the real interface to the object will be the virtual
> methods declared
> inside the "white" block + the static methods that are defined outside of
> the block.
>
> white MyType: Object /* inheritance, though there will be no
> public/private keywoards for the moment */
> {
>    type1 aVirtualMethod();
>
>    type1 member1; /* this is the declaration of on accessor that will be
> "bound" to the one with
>   same name from the /*black*/
> }
>
> 3. a method declaration and definiton. This will be similar to the C++
> method definition.
>
> /* in the header file */
> type1 MyType:.aNonVirtualMethod();
>
> /* later in the implementation file */
> type1 MyType:.aNonVirtualMethod();
>
> note here the usage of the ":." instead of "::" as the semantic is a bit
> different than in C++
>
> 4. method call
>
> type1 object;
> object..aVirtualMethod();
>
> the token here is ".." instead of "." or "->"
> This is again has different semantics. But would not bother with details
> for the moment.
>
> Further new constructs are in my mind for fibers, continuations (yes they
> will be different) and and.
> Decided to call this "babel C", so files will probably have extension
> bh/bc (header/implementation)
>
> The bc file will be translated into pure C by the modified tcc. A
> construct like 1. will be translated into
> a C struct with some additional part etc + some glue code. (Will not go
> into details, but will publish soon the details).
> Construct 2 will be also translated into a struc + some glue code, the
> same with 3. and 4.
>
> I studied the tcc parser and compiler bit more in depth. Found more or
> less where I should patch. I kept things easy,
> (you remember wanted to use some special syntax with @  etc. etc.), so
> that my stuff fits easyl
> into the parsers logic.
>
> What I need now and this is the minimum that would be probably nice to see
> it going upstream.
> My first naiv approach wast to save a pointer in the input buffer and:
> -> anything that is normal C syntax, after successful parsing of a
> declaration or part of a declaration,
> send the input to the output
> -> anything that is syntax extension, fill in a kind of template and send
> the result to the output.
> This task became though a bit complex for me due to the pre-processing.
> Got a bit lost with token managemnt,
> but probably after further hours could find the solution. Though some
> hints would be welcome.
>
> I got the suggestion to separate the code from original tcc, keep the
> parser and implement my code generation.
> Not sure that this would make my life easier. Do not think this is a good
> idea as the assembly code generation
> bits would not disturb me (the part that would be redundant for me).
>
> My own first question seems to be confusing as it is not easy to ask it
> :)... I am rather expecting some hints..
> The second question if you could suggest some basic changes in the parser
> and supporting code that
> would make life easier to implement such extensions for code generation.
>
> thanks a lot,
> mobi phil
>
> _______________________________________________
> Tinycc-devel mailing list
> Tinycc-devel@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/tinycc-devel
>
>
_______________________________________________
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel

Reply via email to