[antlr-interest] Composite grammar support in antlr4.0ea

Terence Parr parrt at cs.usfca.edu
Mon Jan 2 18:26:52 PST 2012


Hi Dave,What do you want to put in the header? imports? Perhaps you are putting stuff in the header that should be in the members action?
Ter
On Jan 2, 2012, at 1:51 PM, Dave Thomas wrote:

> Thanks, Ter!
> 
> It sounds like the subordinate grammar means the dependent grammar which in
> my case is the root combined grammar Java.g (per
> http://www.antlr.org/wiki/display/ANTLR3/Composite+Grammars).
> 
> It totally makes sense that an incomplete grammar cannot stand alone in its
> own package.  I had originally envisioned different packages for major
> components of my language but it's not a real necessity and their coupling
> could complicate things.
> 
> I also agree grammars shouldn't be forced into the package of their
> dependencies.
> 
> However it seems that I get a duplicate header definition error on all
> parser grammars (including combined grammars) regardless of whether they
> contain the same package.  I can't see how this is intended to work when
> the header contains imports, which seems to me to be a fairly common case.
> An updated tarball with a concrete example is attached.  I put all
> grammars in the same package for simplicity.
> 
> The simplest thing that could work would be to have a subordinate grammar
> override the header of it's dependency (as illustrated in the attached
> example).  This can work but I suspect requires the subordinate duplicate
> the code of it's dependencies.  In fact I just discovered (at least with
> v4) that although antlr spits our the error and nonzero return code, it
> appears to be properly emitting this!
> 
> In an ideal world (ahem crazy, badass like the honey badger) we might come
> up with a way of scoping to either share common headers (like
> includes/imports) or allow disjoint ones (like specifying the package).
> 
> ... or am I truly missing the obvious and trying to do it "the hard way" ?
> 
> Thanks and Happy New Year!
> On Jan 2, 2012 12:36 PM, "Terence Parr" <parrt at cs.usfca.edu> wrote:
> 
>> Hi Dave,Because the subordinate important grammars are not complete, they
>> should not have a header that specifies the package. Very least, it's more
>> flexible to not force subordinate grammars into certain packages. Is
>> correct that you have duplicate header definition because you specify the
>> package twice.
>> 
>> v4 didn't complain about this so I will have to add an error.
>> Thanks,
>> Ter
>> On Jan 1, 2012, at 8:21 PM, Dave Thomas wrote:
>> 
>>> With all this exciting Honey Badger activity (which is just crazy and
>>> doesn't give a shit), I thought I'd bump this "Redefinition of header
>>> action" thread and attach a minimal tarball with code for your
>> convenience!
>>> 
>>> I get the same result with antlr-4.0ea (as I did with 3.4 nicely
>> mavenized)
>>> by running:
>>> cd src/main/antlr3; java  -cp
>>> /path/to/antlr-4.0ea-complete.jar:/path/to/ST-4.0.4.jar org.antlr.Tool
>>> test/*.g -o ../../../target
>>> error(144): JavaDecl.g:3:2: redefinition of header action
>>> 
>>> 
>>> On Tue, Nov 22, 2011 at 9:07 PM, Dave Thomas <opensource at peoplemerge.com
>>> wrote:
>>> 
>>>> Hi all,
>>>> 
>>>> I'm using ANTLR for my masters thesis, which includes letting user
>> extend
>>>> the lex and parser grammars I supply with their own jargon in the form
>> of a
>>>> combined grammar.  I wouldn't have dreamed it possible before ANTLR, and
>>>> I'm a big fan!
>>>> 
>>>> The problem I'm having is:
>>>> error(144): JavaDecl.g:3:2: redefinition of header action
>>>> 
>>>> The reason this is making me scratch my head is that I see this issue
>> has
>>>> been reported, and AFAICT addressed:
>>>> http://www.antlr.org/jira/browse/ANTLR-301
>>>> http://www.antlr.org/jira/browse/ANTLR-370
>>>> http://www.antlr.org/jira/browse/ANTLR-375
>>>> http://www.antlr.org/pipermail/antlr-interest/2011-January/040487.html
>>>> http://www.antlr.org/wiki/display/ANTLR3/Composite+Grammars (basis for
>>>> the examples; sorry for the cross-post)
>>>> 
>>>> Am I specifying the antlr release wrong in the maven plugin?
>>>> 
>>>> Should I be concerned that my dependency hierarchy includes antlr 2.7.7?
>>>> Per http://www.antlr.org/wiki/display/ANTLR3/ANTLR+3.4+Release+Notesthe
>>>> dependency on v2 should be removed, but I still see it when I do `mvn
>> clean
>>>> antlr3:antlr compile -X`:
>>>> 
>>>> [DEBUG]    org.antlr:antlr:jar:3.4:compile
>>>> [DEBUG]       org.antlr:antlr-runtime:jar:3.4:compile
>>>> [DEBUG]          org.antlr:stringtemplate:jar:3.2.1:compile
>>>> [DEBUG]          antlr:antlr:jar:2.7.7:compile
>>>> 
>>>> 
>>>> src/main/antlr3/test/JLex.g
>>>> 
>>>> lexer grammar JLex;
>>>> @lexer::header { package test; }
>>>> 
>>>> INT : 'int';
>>>> SEMICOLON : ';';
>>>> EQUALS : '=';
>>>> ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*;
>>>> 
>>>> 
>>>> src/main/antlr3/test/JavaDecl.g
>>>> 
>>>> parser grammar JavaDecl;
>>>> @header { package test; }
>>>> type : INT ;
>>>> decl : type ID SEMICOLON
>>>>    | type ID init SEMICOLON
>>>>    ;
>>>> init : EQUALS INT ;
>>>> 
>>>> 
>>>> src/main/antlr3/test/Java.g:
>>>> 
>>>> grammar Java;
>>>> import JavaDecl, JLex;
>>>> @header { package test; }
>>>> prog : decl ;
>>>> type : 'int' | 'float' ;
>>>> 
>>>> pom.xml:
>>>> 
>>>> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
>>>> http://www.w3.org/2001/XMLSchema-instance"
>>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>> <modelVersion>4.0.0</modelVersion>
>>>> <groupId>test</groupId>
>>>> <artifactId>test</artifactId>
>>>> <packaging>jar</packaging>
>>>> <version>1.0-SNAPSHOT</version>
>>>> <name>test</name>
>>>> <build>
>>>> <plugins>
>>>> <plugin>
>>>> <groupId>org.antlr</groupId>
>>>> <artifactId>antlr3-maven-plugin</artifactId>
>>>> <version>3.4</version>
>>>> <executions>
>>>> <execution>
>>>> <configuration>
>>>> <goals>
>>>> <goal>antlr</goal>
>>>> </goals>
>>>> </configuration>
>>>> </execution>
>>>> </executions>
>>>> </plugin>
>>>> </plugins>
>>>> </build>
>>>> </project>
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>> <antlr-header.tar>
>>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
>>> Unsubscribe:
>> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>> 
>> 
> <antlr-header.tar>
> 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