I have added a new feature to the Felix parser to make this work:

////////////////////////////////////////
#import <flx.flxh>

syntax csyn {
  statement := typedef "int" sname; =># """`(ast_nop ,_sr "int")""";
  statement := typedef "long" sname; =># """`(ast_nop ,_sr "long")""";
}

open syntax csyn;

typedef int fred;
typedef long fred;
//typedef complex fred;

println "Done";
////////////////////////////////////////////////

In case you didn't spot it: if you write a work in quotes such
as "int" or "long" above, it will match the identifier with
the same spelling.

This is very similar to using a keyword EXCEPT it isn't a 
keyword. The identifier is ONLY matched in the context of
the candidate production.

Note: if you try something like:

        statement := "int" sname ; =># ...

then 

        int x;

will also be parsed as 

        call int x;

[that is, as a call of procedure 'int' on argument 'x']

Dypgen will then call a merge function which by default
choses the latest definition, our new one.

And in case you didn't spot the purpose of this .. I am going
to add a C style typedef to the grammar, similarly C style
other stuff (eg function definitions).

In most cases, either:

(a) there's no ambiguity between C and Felix, or,
(b) the parse is ambiguous, but the result is equivalent, or,
(c) as above with int x .. we prefer the C form, because there
    is another way to do it in Felix (eg use call keyword).

to get this stuff to work I MAY have to change some of
the Felix syntax.. be warned .. some stuff looking like
C now with a different meaning might silently change to
have the C meaning.

A workaround may be to require

        extern "C"

around C stuff ..

Another feature to be added is the logical extension of this:
allow a dynamically modifiable list of such things, in particular
names of C types. Not sure on the syntax, or whether this is 
a good idea or not :)

-- 
John Skaller <skaller at users dot sf dot net>
Felix, successor to C++: http://felix.sf.net

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to