If your (Jim) definition of "without code" means no @members section, then I find it a bit of an odd definition since the lexer rules from http://www.antlr.org/wiki/display/ANTLR3/Lexer+grammar+for+floating+point,+dot,+range,+time+specs are littered with `{ ... }` code blocks: not what I'd call "without code". I much prefer the solution proposed by Terence in http://www.antlr.org/wiki/pages/viewpage.action?pageId=3604497 (which I based my suggestion on): far less verbose than the first option, IMO.
Bart. On Fri, Nov 4, 2011 at 5:59 PM, Bart Kiers <bki...@gmail.com> wrote: > The only wiki-link posted in this thread is > http://www.antlr.org/wiki/display/ANTLR3/Lexer+grammar+for+floating+point,+dot,+range,+time+specs > which > contains Java code, so you must mean something else (of which, I have no > idea of)... > > Bart. > > > On Fri, Nov 4, 2011 at 5:47 PM, Jim Idle <j...@temporal-wave.com> wrote: > >> The example on the Wiki already does all of this in the lexer, but without >> any code. >> >> Jim >> >> > -----Original Message----- >> > From: antlr-interest-boun...@antlr.org [mailto:antlr-interest- >> > boun...@antlr.org] On Behalf Of Bart Kiers >> > Sent: Friday, November 04, 2011 7:12 AM >> > To: Fabien Hermenier >> > Cc: antlr-interest@antlr.org >> > Subject: Re: [antlr-interest] about range float and stuff >> > >> > You're welcome Fabien, but note that it most likely looks a lot like >> > something I found on the ANTLR Wiki: so I can't claim credit for it >> > (perhaps a small part! :)). >> > I'll have a look later on and see if I can dig up the Wiki page. >> > >> > Regards, >> > >> > Bart. >> > >> > >> > On Fri, Nov 4, 2011 at 3:04 PM, Fabien Hermenier >> > <hermenierfab...@gmail.com>wrote: >> > >> > > Thanks Bart, I think I have understand your approach and indeed, it >> > > seems beautiful and simple. >> > > I will try your solution during the week-end. >> > > >> > > Fabien. >> > > >> > > Le 04/11/11 02:48, Bart Kiers a écrit : >> > > >> > > Hi Fabien, >> > > >> > > Handling this in the parser will make your life much harder than it >> > > has to. Doing it in the lexer, you will need a bit of custom code, >> > but >> > > I'd go for something similar to this (something like it is on the >> > WIki >> > > somewhere, but can't find it...): >> > > >> > > grammar RangeDemo; >> > > >> > > @lexer::members { >> > > >> > > java.util.Queue<Token> tokens = new java.util.LinkedList<Token>(); >> > > >> > > public void offer(int ttype, String ttext) { >> > > emit(new CommonToken(ttype, ttext)); >> > > } >> > > >> > > @Override >> > > public void emit(Token t) { >> > > state.token = t; >> > > tokens.offer(t); >> > > } >> > > >> > > @Override >> > > public Token nextToken() { >> > > super.nextToken(); >> > > return tokens.isEmpty() ? Token.EOF_TOKEN : tokens.poll(); >> > > } >> > > } >> > > >> > > parse >> > > : (t=. {System.out.printf("\%-10s \%s\n", tokenNames[$t.type], >> > > $t.text);})* EOF >> > > ; >> > > >> > > FLOAT >> > > : INT '..' {offer(INT, $INT.text); offer(RANGE, "..");} >> > > | OCTAL '..' {offer(OCTAL, $OCTAL.text); offer(RANGE, "..");} >> > > | '.' DIGITS >> > > | DIGITS '.' DIGITS? >> > > ; >> > > >> > > RANGE >> > > : '..' >> > > ; >> > > >> > > INT >> > > : '1'..'9' DIGIT* >> > > | '0' >> > > ; >> > > >> > > OCTAL >> > > : '0' ('0'..'7')+ >> > > ; >> > > >> > > fragment DIGITS : DIGIT+; >> > > fragment DIGIT : '0'..'9'; >> > > >> > > SPACE >> > > : (' ' | '\t' | '\r' | '\n') {skip();} >> > > ; >> > > >> > > And if you run the class: >> > > >> > > import org.antlr.runtime.*; >> > > >> > > public class Main { >> > > public static void main(String[] args) throws Exception { >> > > String src = "..07..8.5 1.9..02 1..3.4"; >> > > RangeDemoLexer lexer = new RangeDemoLexer(new >> > ANTLRStringStream(src)); >> > > RangeDemoParser parser = new RangeDemoParser(new >> > > CommonTokenStream(lexer)); >> > > System.out.println("Parsing: '" + src + "'"); >> > > parser.parse(); >> > > } >> > > } >> > > >> > > You'll see the following being printed to the console: >> > > >> > > Parsing: '..07..8.5 1.9..02 1..3.4' >> > > RANGE .. >> > > OCTAL 07 >> > > RANGE .. >> > > FLOAT 8.5 >> > > FLOAT 1.9 >> > > RANGE .. >> > > OCTAL 02 >> > > INT 1 >> > > RANGE .. >> > > FLOAT 3.4 >> > > >> > > >> > > Regards, >> > > >> > > Bart. >> > > >> > > >> > > >> > > On Fri, Nov 4, 2011 at 7:28 AM, Fabien Hermenier < >> > > hermenierfab...@gmail.com> wrote: >> > > >> > >> Hi >> > >> >> > >> In an earlier version of my language, I had to parse range of >> > >> integers in various base. Now I want to include float. I have read >> > >> >> > >> >> > http://www.antlr.org/wiki/display/ANTLR3/Lexer+grammar+for+floating+p >> > >> oint,+dot,+range,+time+specs >> > >> but I've still got some questions. >> > >> >> > >> All the work seems to be done at the lexer level so the type of the >> > >> following tokens will be as example: >> > >> 5 : DECIMAL_LITTERAL >> > >> 07 : OCTAL_LITTERAL >> > >> 7.5: FLOATING_POINT_LITTERAL >> > >> 5..7 : DOTDOT >> > >> >> > >> In the last example, the result is not very convenient because I >> > will >> > >> still have to extract the bounds and compute their type by myself >> > >> which seems quite redundant with the job performed by the lexer. >> > >> May be I am missing something ? >> > >> >> > >> I would rather be able to express the range at the parser level >> > which >> > >> seems much more convenient to me: >> > >> range: FLOATING_POINT_LITTERAL DOTDOT FLOATING_POINT_LITTERAL. >> > >> In this way, I will also be able to manage the possible spaces >> > >> between the bounds and the DOTDOT. >> > >> >> > >> So, am I right to try to parse range at the parser level ? Or is >> > >> there a solution to extract easily the bounds with their type if I >> > am >> > >> doing the job at the lexer level ? >> > >> >> > >> Thanks in advance, >> > >> Fabien. >> > >> >> > >> >> > >> >> > >> >> > >> List: http://www.antlr.org/mailman/listinfo/antlr-interest >> > >> Unsubscribe: >> > >> http://www.antlr.org/mailman/options/antlr-interest/your-email- >> > addres >> > >> s >> > >> >> > > >> > > >> > > >> > >> > 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-inter...@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.