Hi Enrique,
It's pretty easy to do, but it's generally
a bad idea. This
should work:
Helpers
letter = ['a'..'z'];
five_optional_letters =
letter? letter? letter? letter? letter?;
Tokens
name =
letter
letter? letter? letter? letter?
five_optional_letters
five_optional_letters five_optional_letters
five_optional_letters five_optional_letters;
Why do you need specifically to restrict the maximum number of
letters to 30? Think about it. If someone provides a 31-letter name,
the lexer will match two names, a 30-letter name and a 1-letter
name, because of the
longest-match rule. It would be
much preferable to match a single 31-letter name and issue a
semantic error about exceeding 30 letters.
Have fun!
Etienne
Etienne Gagnon, Ph.D.
http://sablecc.org