Jim, I tried that a couple of times and once it didn't give the error message. However, I opened the output file GroupLexer.m and I discovered that regardless of the syntax error message, it is actually generating the code and with or without a single escape ('%c' or '\%c') I get the correct output '%c'. It is just that it is generating an error message that caused me to think it wasn't generating the code.
Alan --- Alan Condit 1085 Tierra Ct. Woodburn, OR 97071 Email -- acon...@ipns.com Home-Office (503) 982-0906 On Feb 3, 2012, at 8:59 AM, Jim Idle wrote: > You probably have to double escape it: > > \\\% > > Jim > >> -----Original Message----- >> From: antlr-dev-boun...@antlr.org [mailto:antlr-dev-boun...@antlr.org] >> On Behalf Of Alan Condit >> Sent: Friday, February 03, 2012 8:23 AM >> To: Terence Parr >> Cc: ANTLR-dev Dev >> Subject: Re: [antlr-dev] ANTLR barfs on %c in format string in ObjC >> >> I tried changing the character after the escaped \% to d, f, s, x, @, >> all valid ObjC format options (in fact all but @ are valid for 'C' as >> well. They all generated the same syntax error message (except for the >> format character). >> >> This error is not occurring in "a group file" but the "group.g" grammar >> for ST4. Still as Ter says, it appears to be an error in an ANTLR >> grammar not passing the escaped % but rather seeing it as the start of >> a string template. >> >> Now this is really wierd, I opened the file in ANTLRWorks and just >> tried generating the code after changing the character after the >> escape. I tried about four times on the fourth try it accepted \%d. >> Then I exited out of ANTLRWorks and reloaded the file with the \%d in >> it and it failed, so I cycled through a bunch more changing trying to >> generate the code after each change. On about the fourth change it >> accepted \%c. >> >> Then I tried the same thing again and couldn't get anything but the >> syntax error after repeated trys. >> >> Alan >> --- >> >> Alan Condit >> 1085 Tierra Ct. >> Woodburn, OR 97071 >> >> Email -- acon...@ipns.com >> Home-Office (503) 982-0906 >> >> On Feb 2, 2012, at 10:58 AM, Terence Parr wrote: >> >>> "@lexer::methods {" tells me that it is an action within an antlr >>> grammar not group file. still, \% should work! :( Ter On Feb 2, 2012, >>> at 10:47 AM, Alan Condit wrote: >>> >>>> Ter, >>>> >>>> It is the group.g file from ST4 with option {language=ObjC}; I have >> tried it with the escape and without and still get the same error >> message. I have inserted the portion of the file below. >>>> >>>> Alan >>>> >>>> @lexer::methods { >>>> @synthesize group; >>>> >>>> - (void) reportError:(RecognitionException *)e { >>>> NSString *msg = nil; >>>> if ( [e isKindOfClass:[NoViableAltException class]] ) { #pragma >>>> error fix formatting >>>> msg = [NSString stringWithFormat:@"invalid character '\%c'", >> [input LA:1]]; >>>> } >>>> else if ( [e isKindOfClass:[MismatchedTokenException class]] && >> ((MismatchedTokenException *)e).expecting=='"' ) { >>>> msg = @"unterminated string"; >>>> } >>>> else { >>>> msg = [self getErrorMessage:e TokenNames:[self >> getTokenNames]]; >>>> } >>>> [group.errMgr groupSyntaxError:SYNTAX_ERROR srcName:[self >>>> getSourceName] e:e msg:msg]; } >>>> >>>> - (NSString *) getSourceName >>>> { >>>> return [super getSourceName]; >>>> } >>>> >>>> } >>>> >>>> --- >>>> >>>> Alan Condit >>>> 1085 Tierra Ct. >>>> Woodburn, OR 97071 >>>> >>>> Email -- acon...@ipns.com >>>> Home-Office (503) 982-0906 >>>> >>>> On Feb 2, 2012, at 9:42 AM, Terence Parr wrote: >>>> >>>>> that error message sounds like it is coming from ANTLR not ST. Are >> you sure you are not using an action with % in it within an ANTLR >> grammar or something? Hmm.% by itself should be no problem without an >> escape in a group file. >>>>> >>>>> does this happen at load time when you run ANTLR with an ObjC >> targeted grammar? >>>>> T >>>>> On Feb 2, 2012, at 8:58 AM, Alan Condit wrote: >>>>> >>>>>> In trying to build the error message string in group.g I use: >>>>>> msg = [NSString stringWithFormat:@"invalid character '\%c'", >>>>>> [input LA:1]]; but I get invalid StringTemplate % shorthand syntax >> '%c'. >>>>>> >>>>>> This is a valid format string. What is going on? >>>>>> >>>>>> Alan >>>>>> --- >>>>>> >>>>>> Alan Condit >>>>>> 1085 Tierra Ct. >>>>>> Woodburn, OR 97071 >>>>>> >>>>>> Email -- acon...@ipns.com >>>>>> Home-Office (503) 982-0906 >>>>>> >>>>>> _______________________________________________ >>>>>> antlr-dev mailing list >>>>>> antlr-dev@antlr.org >>>>>> http://www.antlr.org/mailman/listinfo/antlr-dev >>>>> >>>> >>> >> >> _______________________________________________ >> antlr-dev mailing list >> antlr-dev@antlr.org >> http://www.antlr.org/mailman/listinfo/antlr-dev > _______________________________________________ > antlr-dev mailing list > antlr-dev@antlr.org > http://www.antlr.org/mailman/listinfo/antlr-dev _______________________________________________ antlr-dev mailing list antlr-dev@antlr.org http://www.antlr.org/mailman/listinfo/antlr-dev