[antlr-interest] Inject Lexer Tokens before parsing further

Indhu Bharathi indhu.b at s7software.com
Thu Apr 9 22:05:55 PDT 2009


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 
> <mailto: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
>>     <mailto: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>
>>         [mailto: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/e51e48e6/attachment.html 


More information about the antlr-interest mailing list