[antlr-interest] Weird problem with semantic predicates. Incorrect warning message
Gabriel Petrovay
gabriel.petrovay at 28msec.com
Tue Apr 28 07:18:37 PDT 2009
The warning can be stopped and the behavior corrected if the grammar
is made incomplete by commenting the last p_ExprSingle in either the
p_ReplaceExpr or the p_ExitExpr.
Any ideas why is this?
Regads,
Gabriel
On Tue, Apr 28, 2009 at 2:10 PM, Gabriel Petrovay
<gabriel.petrovay at 28msec.com> wrote:
> Hi all,
>
> I have the parser grammar posted at the bottom of this e-mail. (there
> is a corresponding lexer grammar that provides all the necessary
> tokens).
>
> If I try to build the parser for this grammar, I get the following warning:
> -------
> warning(200): exit_test.g:13:3: Decision can match input such as
> "IF" using multiple alternatives: 1, 3
> As a result, alternative(s) 3 were disabled for that input
> -------
>
> If I comment the following line in the p_ExprSingle rule:
>
> // | {flag}?=> p_ExitExpr
>
> everything is OK. Why is this? Why does it work with the next
> alternative (p_WhileExpr) but not with the p_ExitExpr alternative? The
> message of the waring is wrong: the same message should appear even
> also when the line is commented.
>
> Assume I want to parse the text "if" (the token IF). In the rule
> p_ExprSingle, the p_IfExpr alternative should fail, the second would
> fail anyway an the third one will be successful. So, why the warning?
> In a similar manner the parsing of the text "exit" should reach the
> 3rd alternative.
>
>
> IMPORTANT: The p_ReplaceExpr rule is not used in any other rule. But
> if deleted, I have no more warning and everything is OK. My research
> on this problem tells me that there is something fishy regarding the
> "WITH p_ExprSingle" at the end of both rules: p_ReplaceExpr and
> p_ExitExpr.
>
> Regards,
> Gabriel
>
>
> PARSER GRAMMAR:
> --------------------------------------------------
> parser grammar exit_test;
>
> options {
> tokenVocab=XQueryLexer;
> }
>
>
> pm_Expr
> : p_ExprSingle EOF
> ;
>
> p_ExprSingle
> : p_IfExpr
> | {flag}?=> p_ExitExpr
> | {flag}?=> p_WhileExpr
> | p_StepExpr
> ;
>
> p_IfExpr
> : IF LPAREN pm_Expr RPAREN
> ;
>
> p_StepExpr
> : p_NCName
> | p_EnclosedExpr
> ;
>
> p_EnclosedExpr
> : LBRACKET pm_Expr RBRACKET
> ;
>
> p_NCName
> : L_NCName | IF | EXIT
> ;
>
> p_ReplaceExpr
> : REPLACE p_ExprSingle WITH p_ExprSingle
> ;
>
> p_ExitExpr
> : EXIT WITH p_ExprSingle
> ;
>
> p_WhileExpr
> : WHILE LPAREN p_ExprSingle RPAREN
> ;
>
> --------------------------------------------------
>
> --
> MSc Gabriel Petrovay
> MCSA, MCDBA, MCAD
> Mobile: +41(0)787978034
>
--
MSc Gabriel Petrovay
MCSA, MCDBA, MCAD
Mobile: +41(0)787978034
More information about the antlr-interest
mailing list