[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