[antlr-interest] ANTLR4 (beta 3 bug report) . . 1) problem with imported @actions . . 2) @after action and import . . 3) strange error message
Terence Parr
parrt at cs.usfca.edu
Thu Nov 22 15:56:22 PST 2012
THANKS! Fixed all 3 issues you found. please grab from github and rebuild.
Ter
On Nov 20, 2012, at 2:20 PM, Bernard Kaiflin wrote:
> [ Bugs button not working yet :) In the meantime, I post a bug report here.
> ]
>
> To parse the Ruby parser, consisting of a Bison grammar and C code, I have
> written a C grammar which parses only C code, and a Bison grammar which
> parses only the Bison tags and meta-language, and rely upon the C grammar
> to parse C embedded code.
>
> So I need to import the C grammar into the Bison grammar.
>
> *Problem 1)* The Bison grammar contains neither @header, nor @members, nor
> @after actions, but ANTLR complains :
>
> $ alias
> alias antlr4='java -jar /usr/local/lib/antlr-4.0b3-complete.jar'
> $ java -version
> java version "1.6.0_37"
> Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
> Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)
> $ antlr4 C.g4 [used previously]
> $ antlr4 Bison.g4
> error(94): /.../C.g4:23:9: redefinition of members action
> error(94): /.../C.g4:349:1: redefinition of after action
> error(94): /.../C.g4:361:1: redefinition of after action
> error(94): /.../C.g4:579:1: redefinition of after action
> [... *100 % CPU, heating* ...]
> *^C*$
>
> Have also tried this :
>
> grammar B;
> import BisonOnly; [without import C;]
> import C;
>
> $ antlr4 B.g4
> [ ... Java task 100 % ... ]
> ^C$
>
> I have simplified both grammars to a minimum. Bison_test.g4 compiles only
> after removing the last @after action remaining in the imported grammar
> C_test.g4.
>
> grammar Bison_test;
> import C_test;
>
> grammar C_test;
> program : declaration ;
> declaration
> //@after {System.out.println("...... exiting declaration " +
> $declaration.text);}
> : 'auto' | 'register' | 'static' | 'extern'
> ;
> ID : [a-zA-Z] ;
>
>
> The message
>
> $ antlr4 Bison_test.g4
> error(94): /.../C_test.g4:9:9: redefinition of members action
>
> appears again only if adding both @lexer and @parser actions in C_test.g4 :
>
> grammar C_test;
> @lexer::members {
> }
>
> @parser::members {
> }
>
>
>
> *Problem (or just strange behavior ) 2)* Before simplifying C and Bison, I
> have tried to reproduce the problem with code/reference/ELang.g4 +
> MyELang.g4 :
>
> grammar ELang;
>
> stat : (expr ';')+ ;
> expr
> @after {System.out.println("expr found " );} // + $expr.text);}
> : ID ;
> WS : [ \r\t\n]+ -> skip ;
> ID : [a-z]+ ;
>
> The grammar MyELang.g4 is not changed :
>
> grammar MyELang;
> import ELang;
> expr : INT | ID ;
> INT : [0-9]+ ;
>
> $ antlr4 MyELang.g4
> $ javac MyELang*.java
> $ grun MyELang stat
> 34;
> ➾EOF [ctrl-D]
> $
>
> There is no output from expr. OK, that's because exp in MyELang overwrites
> expr in ELang. But adding a print statement in MyELang makes them both
> active.
>
> grammar MyELang;
> import ELang;
> expr
> @after {System.out.println("expr found " + $expr.text);}
> : INT | ID ;
>
> $ grun MyELang stat
> 34;
> ➾EOF [ctrl-D]
> expr found 34
> expr found
>
>
>
>
> *Problem 3)* With no @after action in MyELang, one with the full print
> statement in ELang.g4 using $expr.text in the *parser* rule expr
>
> grammar MyELang;
> import ELang;
> expr
> //@after {System.out.println("expr found " + $expr.text);}
> : INT | ID ;
> INT : [0-9]+ ;
>
> grammar ELang;
>
> stat : (expr ';')+ ;
> expr
> @after {System.out.println("expr found " + $expr.text);}
> : ID ;
> WS : [ \r\t\n]+ -> skip ;
> ID : [a-z]+ ;
>
> there is a strange error message (because expr is a parser, not lexer rule)
> :
>
> $ antlr4 MyELang.g4
> error(128): MyELang.g4:5:44: attribute references not allowed in
> *lexer*actions: $expr.text
> Exception in thread "main" java.lang.NullPointerException
> at
> org.antlr.v4.codegen.ActionTranslator.qualifiedAttr(ActionTranslator.java:210)
> ....
>
> Kind regards
> Bernard
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
More information about the antlr-interest
mailing list