When this grammar is given the following input, a few bugs are observed,
as shown in the output.

 

Input: "ident ident" (no quotes)

 

Output:

Setting scope at level 1 to true

4: b is false size = 2 bt = 2

3: b is false size = 2 bt = 2

2: b is false size = 2 bt = 2

4: b is true size = 1 bt = 1

4: b is false size = 2 bt = 1

3: b is false size = 2 bt = 1

2: b is false size = 2 bt = 1

1: b is true size = 1 bt = 1

Exception in thread "main" java.util.EmptyStackException

                at java.util.Stack.peek(Unknown Source)

                at
TestSemPredScopesParser.test(TestSemPredScopesParser.java:98)

                at __Test__.main(__Test__.java:14)

 

Grammar:

 

grammar TestSemPredScopes;

 

scope MyScope { boolean b; }

 

@parser::members {

        boolean report( int n, boolean b ) {

                System.err.println( n + ": b is " + b + " size = " +
MyScope_stack.size() + " bt = " + state.backtracking);

                return true;

        }

}

 

test

        :       (       (subrule1) => subrule1

                |       subrule2

                )

                EOF

        ;

 

subrule1

scope MyScope;

        :       nest1subrule1

        ;

 

nest1subrule1

@init

{

        System.err.println( "Setting scope at level " +
MyScope_stack.size() + " to true" );

        $MyScope::b = true;

}

        :       (nest2subrule1) => nest2subrule1
{report(1,$MyScope::b)}?

        |       subrule2

        ;

 

nest2subrule1

scope MyScope;

        : nest3subrule1 {report(2,$MyScope::b)}? ;

 

nest3subrule1

        :       {report(4,$MyScope::b) /*&& !$MyScope::b*/}? =>
{report(3,$MyScope::b)}? IDENTIFIER IDENTIFIER

        ;

 

subrule2 : IDENTIFIER ;

 

IDENTIFIER : ('a'..'z')+ ;

WS : (' ' | '\t')+ {$channel = HIDDEN;} ;

 

_______________________________________________
antlr-dev mailing list
[email protected]
http://www.antlr.org:8080/mailman/listinfo/antlr-dev

Reply via email to