John, Yes. And it is infinitely better this way. Thank you, sir.
- Alex :) On Wed, Sep 1, 2010 at 1:19 PM, John B. Brodie <[email protected]> wrote: > Greetings! > > On Wed, 2010-09-01 at 11:30 -0700, Alex Rodriguez wrote: >> Greetings, >> >> Given a very simple grammar for a language that only has an 'if' >> statement, I would like to be able to parse white space within literal >> values. So far, this works (case 1): >> >> if(value=='white space'){doThis('arg')} >> >> But this doesn't work (case 2): >> >> if (value == 'white space') { doThis('arg') } > > because you have permitted blanks in an ID, the string "if " above is an > ID under your rules and *NOT* the keyword 'if' followed by a blank. > >> >> Note that case 2 is spaced for readability. >> >> Debugging case 2 in ANTLRWorks produces a MismatchedTokenException. >> >> What is the best way to handle both cases? Here is the grammar: > > move your literalValue rule into the lexer and take out the blank from > ID. > > see attached for the way i would change your grammar to solve this > issue. > > hope this helps... > -jbb > > >> >> grammar Lang; >> >> statement >> : >> 'if' LPAREN ID EQ literalValue RPAREN '{' action '}' >> ; >> >> literalValue >> : >> '\'' ID '\'' >> ; >> >> action >> : >> ID LPAREN literalValue RPAREN >> ; >> >> ID >> : >> ('a'..'z' | 'A'..'Z' | '0'..'9' | '@' | ':' | '_' | ' ' | '+')+ >> ; >> >> LPAREN >> : >> '(' >> ; >> >> RPAREN >> : >> ')' >> ; >> >> EQ >> : >> '==' >> ; >> >> WS >> : >> (' ' |'\t' |'\r' |'\n' )+ { $channel=HIDDEN; } >> ; > > 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.
