That was exactly what I was looking for! I added "-trace" to the "ANTLR options" section of ANTLRWorks/Preferences and started getting all the output I was looking for.
I found some documentation on the -trace option in the v2 section, but none in the v3 area. Of note is that -trace works in v3, but -traceParser and -traceLexer don't do anything at all. Looks like they've been deprecated. No matter, it was pretty easy to get what I was looking for without them. The method of getting similar behavior to those two options is as follows: To turn off Lexer trace, override TraceIn and TraceOut (the 2 arg versions) in your lexer class, like so: public partial class PLSQL31Lexer { public override void TraceIn( string ruleName, int ruleIndex ) { // Create no trace output for lexing } public override void TraceOut( string ruleName, int ruleIndex ) { // Create no trace output for lexing } } That leaves me with just parser trace, exactly what I was looking for. I then override the same methods to redirect the trace from the stdout to the debugout: using trace = System.Diagnostics.Trace; // use this instead of private TextWriter trace! public partial class PLSQL31Parser { //private TextWriter trace = Console.Out; // This mirrors the behaviour we're overloading // Override the parser trace method so we can control where the information goes public override void TraceIn( string ruleName, int ruleIndex ) { TraceIn( ruleName, ruleIndex, input.LT( 1 ) ); } // Override the parser trace method so we can control where the information goes public override void TraceIn( string ruleName, int ruleIndex, object inputSymbol ) { trace.Write( is_sql ? "(SQL)" : "(PL/)" ); trace.Write( "enter " + ruleName + " " + inputSymbol ); if (state.backtracking > 0) { trace.Write( " backtracking=" + state.backtracking ); } trace.WriteLine( string.Empty ); } // Override the parser trace method so we can control where the information goes public override void TraceOut( string ruleName, int ruleIndex, object inputSymbol ) { trace.Write( is_sql ? "(SQL)" : "(PL/)" ); trace.Write( "exit " + ruleName + " " + inputSymbol ); if (state.backtracking > 0) { trace.Write( " backtracking=" + state.backtracking ); trace.WriteLine( state.failed ? " FAILED!" : " succeeded" ); } else { trace.WriteLine( string.Empty ); } } // Override the parser trace method so we can control where the information goes public override void TraceOut( string ruleName, int ruleIndex ) { TraceOut( ruleName, ruleIndex, input.LT( 1 ) ); } } Note that I can comment out my using statement and uncomment the private to easily switch from debugout to any other TextWriter stream I want. Very handy! With this setup it's a one-line change to generate a file that traces my parsing if I want it. And of course, to get a -traceLexer behavior I'd just reverse my implementation. Thanks Ter, very handy! J -----Original Message----- From: antlr-interest-boun...@antlr.org [mailto:antlr-interest-boun...@antlr.org] On Behalf Of Terence Parr Sent: Thursday, May 14, 2009 5:48 PM To: Tilman Bender Cc: antlr-inter...@antlr.org Subject: Re: [antlr-interest] Parse trace? -trace option will work great for you. recompile and when you run your parser traceIn/traceOut methods will be called. you can override them or use the default which spits out information. Ter On May 14, 2009, at 11:34 AM, Tilman Bender wrote: > Hi Jay, > > I am sure what you mean by "annotatin my grammar with trace > statements". > If you mean doing this manually for every rule/alternative: you need > not do that. > > As far as I see you can have ANTLR add such trace information for > you, so you do not have to do > it manually. I've seen this as a config option in the antlr3-maven- > plugin and I am sure there is a corresponding > ANTLR-Tool option for this. > > Another (maybe weird) idea: Isn't this a typical use case for AOP? > Would it be feasible to weave the logging > into the whole thing? Just an idea ;-) > > Tilman Bender > Student des Software Engineering > Hochschule Heilbronn > tben...@stud.hs-heilbronn.de > > > > Am 14.05.2009 um 20:07 schrieb West Jay - Toronto-MROC - external: > >> So far, the only option I've seen is annotating my grammar with >> trace statements that'll execute during parsing. Ick. Is there >> not a better way? > > > List: http://www.antlr.org/mailman/listinfo/antlr-interest > Unsubscribe: > http://www.antlr.org/mailman/options/antlr-interest/your-email-address List: http://www.antlr.org/mailman/listinfo/antlr-interest Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address 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 il-antlr-interest@googlegroups.com To unsubscribe from this group, send email to il-antlr-interest+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en -~----------~----~----~----~------~----~------~--~---