I can't answer the question about the official C# runtimes for 3.2. I have gotten tree rewriting working in C# however. Here's how to get this working with a slightly modified antlr-3.2.jar and the latest CSharp2 runtime. Specifically I got the sample for pattern 19 (symtab/class) from Language Implementation Patterns working. That should cover all the filter=true; Downup() goodness.
1.) Download the latest CSharp2 runtime code and build it (I got a zip from http://fisheye2.atlassian.com/browse/antlr/runtime/CSharp2). There's a Visual Studio 2008 project file that builds it without modification. 2.) You'll need to make a few modifications to the string templates. The file to modify in the jar (antlr3-3.2.jar) is org\antlr\codegen\templates\CSharp2\CSharp2.stg. (To update...Unzip the jar, modify CSharp2.stg, and rezip sans any compression). Here are the updates to make. a.) Change Index() to just Index (there are 3 occurances) b.) Update the treeParser rule to use the TreeRewriter base class as shown below. Replace the old version (line 312) with this. /** How to generate a tree parser; same as parser except the input * stream is a different type. */ treeParser(grammar, name, scopes, tokens, tokenNames, globalAction, rules, numRules, bitsets, labelType={<ASTLabelType>}, ASTLabelType="object", superClass={<if(filterMode)><if(buildAST)>TreeRewriter<else>TreeFilter<endif><else>TreeParser<endif>}, members={<actions.treeparser.members>}, filterMode) ::= << 3.) Add the override methods for Topdown / Bottomup to YourGrammar.g. [[To have this behave like the java runtime, the string template for rule would have to be modified to override the two methods topdown/bottomup. You have to explicitly "override" in C#. topdown/bottomup also need to be all lower case in CSharpN runtimes since they are not Lexer rules.]] @members { ... protected override void Topdown() { topdown(); } protected override void Bottomup() { bottomup(); } } 4.) Make sure you translate the java version of TreeAdapter class to explicitly override Create/DupNode/ErrorNode (or you'll get mysterious casting exceptions if left as create/dupNode/errorNode). Mine looks like this // test.cs public static Test.TreeAdaptor cymbalAdaptor = new Test.TreeAdaptor(); public class TreeAdaptor : CommonTreeAdaptor { public override object Create(IToken token) { return new CymbolAST(token); } public override object DupNode(object t) { if (t == null) return null; return Create(((CymbolAST)t).Token); } public override object ErrorNode(ITokenStream input, IToken start, IToken stop, RecognitionException e) { CymbolErrorNode t = new CymbolErrorNode(input, start, stop, e); Console.WriteLine("returning error node '"+t+"' @index="+input.Index); return t; } } Hopefully that helps. Andrew On Mon, Mar 15, 2010 at 9:34 AM, Kevin Carroll <[email protected]>wrote: > What is the "official" status of C# port of ANTLR 3.2 (i.e., > language=CSharp3)? Several of the new features of 3.2 are utilized quite a > bit in "Language Implementation Patterns". Most importantly, tree > rewriting. > > I have been using Sam Harwell's stand-alone Windows port of ANTLR 3.2 with > success (after a few tweaks to unify member name capitalization and a > correction to the ApplyOnce method to bring it up-to-date with the Java > version). The only true problem is that I would really love to use my > ANTLR-generated parser in conjunction with Actipro Software's SyntaxEditor, > but they only currently support the CSharp2 target (understandably). > > Thanks for any info, > Kevin Carroll > > List: http://www.antlr.org/mailman/listinfo/antlr-interest > Unsubscribe: > http://www.antlr.org/mailman/options/antlr-interest/your-email-address > -- /Andrew List: http://www.antlr.org/mailman/listinfo/antlr-interest Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address -- You received this message because you are subscribed to the Google Groups "il-antlr-interest" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en.
