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.