[antlr-interest] Inject Lexer Tokens before parsing further

Des Hartman des at deshartman.com
Thu Apr 9 22:09:31 PDT 2009


ah, ok, I understand. I'll have a look at it then.  Thanks for the help

Thanks
Des



2009/4/10 Indhu Bharathi <indhu.b at s7software.com>

>  Because the syntactic predicate will look ahead without consuming the
> token. PLUS or MINUS will still be unconsumed and can later be consumed by
> expression.
>
>
> Des Hartman wrote:
>
> Not sure how that would help. If I select the second option because the
> recognised Token is "-", how would I pass the whole expression to
> "expression"?
>
> Thanks
> Des
>
>
>
> 2009/4/10 Indhu Bharathi <indhu.b at s7software.com>
>
>> Well, in that case the second solution that uses syntactic predicate
>> should work.
>>
>> Des Hartman wrote:
>>
>> Indhu
>>
>> This is based on how users enter formulas in Excel. It allows you to
>> prefix a formula with "=", "-" or "+" to indicate it is a formula being
>> entered, so I have to accomodate it.
>>
>> I have a rough solution which is to Pre-parse the text and then change the
>> text to "=-5+4" and then pass the new text to the second parser, but I was
>> wondering if there is a more elegant solution
>>
>> Thanks
>> Des
>>
>>
>>
>> 2009/4/10 Indhu Bharathi <indhu.b at s7software.com>
>>
>>>  Curious… Why not change formula production to
>>>
>>>
>>>
>>> formula
>>>
>>> : EQ expression
>>>
>>> | expression
>>>
>>> ;
>>>
>>>
>>>
>>> If for some reason you want to enforce that the input has to start with
>>> PLUS or MINUS then maybe you can rewrite formula production as
>>>
>>>
>>>
>>> formula
>>>
>>> : EQ expression
>>>
>>> | (PLUS | MINUS)=> expression
>>>
>>> ;
>>>
>>> This way, PLUS or MINUS won’t be consumed while checking and it will be
>>> consumed as part of expression. But first option is more elegant and go for
>>> second only if you need it.
>>>
>>>
>>>
>>>
>>>
>>> - Indhu
>>>
>>>
>>>
>>> *From:* antlr-interest-bounces at antlr.org [mailto:
>>> antlr-interest-bounces at antlr.org] *On Behalf Of *Des Hartman
>>> *Sent:* Friday, April 10, 2009 6:15 AM
>>> *To:* ANTLR
>>> *Subject:* [antlr-interest] Inject Lexer Tokens before parsing further
>>>
>>>
>>>
>>> I have two ways of entering an expression to evaluate:
>>>
>>>
>>>
>>> 1) =-5+4
>>>
>>> 2) -5+4
>>>
>>> I have written the usual expression evaluator that evaluates the
>>> expression as per 1) above to -1. The problem lies with the second form of
>>> input. Since the parser recognises the "=" OR the "-" as the start of an
>>> expression, it then strips the "=" and "-" off and passes the rest to the
>>> expression evaluator. This means for "=" this is correctly done as "-5+4",
>>> but for the "-" this is incorrect as "5+4".
>>>
>>>
>>>
>>> Is there a way to "reinject" the "-" so that the expression evaluated is
>>> "-5+4" again?
>>>
>>>
>>>
>>>
>>>
>>> For reference here is the relevant parts of the parser
>>>
>>>
>>>
>>> cell
>>>
>>> : formula EOF
>>>
>>> | EOF
>>>
>>> ;
>>>
>>>
>>>
>>> formula
>>>
>>> : EQ expression
>>>
>>> | PLUS expression
>>>
>>> | MINUS expression
>>>
>>> ;
>>>
>>> expression
>>>
>>> : equalityExpression
>>>
>>> ;
>>>
>>> equalityExpression
>>>
>>> : relationalExpression (( EQ | NOTEQ) relationalExpression)*
>>>
>>> ;
>>>
>>> <snip>
>>>
>>> unaryOperation
>>>
>>> : PLUS operand
>>>
>>> | MINUS operand
>>>
>>> | operand
>>>
>>> ;
>>>
>>> operand
>>>
>>> : literal
>>>
>>> | LPAREN expression RPAREN
>>>
>>> ;
>>>
>>> literal
>>>
>>> : NUMBER
>>>
>>> | STRING
>>>
>>> ;
>>>
>>>
>>> --
>>>
>>> Thanks
>>> Des
>>>
>>>
>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20090410/31becf5f/attachment.html 


More information about the antlr-interest mailing list