> Hi Tony,
>
> On Sat, May 17, 2008 at 12:14 AM, Tony Djordjevski <[EMAIL PROTECTED]> wrote:
> > Thanks for the reply. I'm actually working with Curtis on this; we
> > happened to fix it by casting the denominator to a float, so no worries
> on
> > getting it fixed for 3.1.
> >
> > We also tried to use the double forward slash operator to enable true
> > division but we were getting errors because we believe ANTLR was
> > interpreting the operator as a comment in our grammar. We tried all
> sorts
> > of escaping with no luck. How would one do something like the
> following:
> >
> > expr returns [value]
> > ... (stuff omitted for brevity)
> > | ^(DIV a = expr b = expr) {$value = a//b}
> > ... (rest of stuff)
>
> I guess you mean something like that:
> ---
> grammar T;
> options { language=Python; }
> a: 'a' { foo = 1 // 2 };
> ---
> ANTLR Parser Generator Version 3.1b1 (??) 1989-2007
> error(10): internal error: Exception /tmp/T.g:4:1: expecting '}',
> found '<EOF>'@org.antlr.tool.ANTLRLexer.nextToken(ANTLRLexer.java:333):
> unexpected stream error from parsing /tmp/T.g
>
> error(150): grammar file /tmp/T.g has no rules
> error(100): /tmp/T.g:0:0: syntax error: assign.types: <AST>:0:0:
> unexpected end of subtree
> error(100): /tmp/T.g:0:0: syntax error: define: <AST>:0:0: unexpected
> end of subtree
>
> Ter: that looks like a bug to me...
It's not a bug in the way you believe. The deeper problem is that ANTLR
recognizes // and % as comments in actions, treating the } as part of the
comment - and as no other languages treat // as valid operator this was so far
ignorable. The real fix would be that choosing a target allows ANTLR to switch
the comment markers to the one of the target language.
Johannes
>
> A usable workaround seems to be to move the closing brace to the next
> line, i.e.
> a: 'a' { foo = 1 // 2
> };
>
>
> -Ben
>
> > Benjamin Niemann wrote:
> >
> > > HI Curtis,
> > >
> > > good point, haven't thought about his yet.
> > > Should be fairly easy to fix, but it may not make it into the upcoming
> > > V3.1 release.
> > > If you are not afraid of building antlr yourself:
> > >
> > > In src/org/antlr/codegen/templates/Python/Python.stg there's a line
> > >
> > > <actions.(actionScope).header>
> > >
> > > move it up right before the <@imports> line. Then you should be able
> to
> > say
> > >
> > > @header {
> > > from __future__ import division
> > > }
> > >
> > > and it should appear where you need it.
> > >
> > > As a long term solution I probably have to introduce a separate @
> > > action, because e.g. when having other things than imports in @header,
> > > you want these to be after the 'from antlr import *'.
> > >
> > > -Ben
> > >
> > > On Fri, May 16, 2008 at 4:19 PM, Curtis Deck <[EMAIL PROTECTED]> wrote:
> > >
> > > >
> > > >
> > > >
> > > > I am writing an expression evaluator using antlr 3 and python. I
> want to
> > do
> > > > real division but I cannot use from __future__ import division
> because
> > it
> > > > needs to be at the top of the script.
> > > >
> > > >
> > > >
> > > > Can any one help me please.
> > > >
> > > >
> > > >
> > > > Thanks in advance!
> > > >
> > >
> > >
> >
> >
> _______________________________________________
> antlr-dev mailing list
> [email protected]
> http://www.antlr.org:8080/mailman/listinfo/antlr-dev
--
Psssst! Schon vom neuen GMX MultiMessenger gehört?
Der kann`s mit allen: http://www.gmx.net/de/go/multimessenger
_______________________________________________
antlr-dev mailing list
[email protected]
http://www.antlr.org:8080/mailman/listinfo/antlr-dev