I only know that Terence's solution solves the OP's problem AFAIK, whereas yours I am not sure of: I simply find it too verbose to fully grasp by only reading through it. Sorry.
Bart. On Fri, Nov 4, 2011 at 6:18 PM, Jim Idle <j...@temporal-wave.com> wrote: > You may prefer whatever solution you like of course (though these are not > the same solution), but you should be accurate about the other solutions > and take the time to read through them. > > 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 10:13 AM > > To: antlr-interest@antlr.org interest > > Subject: Re: [antlr-interest] about range float and stuff > > > > 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+poi > > nt,+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+po > > > int,+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- > > 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.