Charles Mills wrote:
> On Aug 25, 2004, at 12:01 PM, Joel VanderWerf wrote:
> 
>> Phil Tomson wrote:
>>
>>> Anybody got a complete, working and not too large RACC example?
>>
>>
>> How about a RACC-based parser for C/C++ expressions? It's mostly 
>> complete, it works (I use it to translate from the Teja language which 
>> embeds C++ expressions), but it may be too large.
>>
> I have done something like this for C only - I am going to release it 
> with a companion article soon...
> Is your parser available to look at?  Do you build a syntax tree?
> -Charlie
> 
>> It's based on the yacc grammar at
>>
>>   http://www.lysator.liu.se/c/ANSI-C-grammar-y.html
>>
> 

It's bundled up in

http://PATH.Berkeley.EDU/~vjoel/mobies/teja2hsif/teja2hsif-0.1/

Look in the lib/teja/cparser dir. The nodes.rb, scanner.rb, and 
parser.y.rb are the useful parts. There is also a shell.rb in the same 
dir that uses readline to interactively parse expressions and show the tree:

expr> 1+4
= <AddOp>
   op: "+"
   left_expr: <Constant 1>
   right_expr: <Constant 4>

expr> sin(*a[5]->b)
= <FnCall>
   fn_expr: <Identifier sin>
   arg_expr:
     <UnOp>
       op: "*"
       expr: <DerefAccess>
         this_expr: <Aref>
           ary_expr: <Identifier a>
           idx_expr: <Constant 5>
         member_name: "b"

There are some limitations, due to the contstraints of the application:

-- no special attention to strings (no string literals)

-- no attention to declarations, control structures, function defs, etc.

It would be great if someone put together a complete C parser in RACC...

Anyway, I hope this is of some use to somebody.