Pierre
Pierre

Reputation: 35246

javaCC inserts non-wanted statements

I've got the following javacc grammar.

The rule UnaryExpr creates some anonymous classes implementing java.util.function.Predicate<>

options {
static=false;
DEBUG_PARSER=false;
IGNORE_CASE=true;
JDK_VERSION="1.8";
}

(...)

private Predicate<SAMRecord> UnaryExpr(): { }
    {
    (
    <DUPLICATE> { return new Predicate<SAMRecord>() {
            @Override public boolean test(final SAMRecord rec) { return rec.getDuplicateReadFlag();}
        };}
    | <UNMAPPED> { return new Predicate<SAMRecord>() {
            @Override public  boolean test(final SAMRecord rec) { return rec.getReadUnmappedFlag();}
        };}
    | <FAILSVENDORQUALITY> { return new Predicate<SAMRecord>() {
            @Override public  boolean test(final SAMRecord rec) { return rec.getReadFailsVendorQualityCheckFlag();}
        };}
    | <PROPERPAIR> { return new Predicate<SAMRecord>() {
            @Override public boolean test(final SAMRecord rec) { return rec.getReadPairedFlag();}
        };}
    )
    }

when I'm generating the code using javacc 7.0.2, the generated java code contains some extra statements that break the code {if ("" != null). In the java file, instead or my original code:

@Override public boolean test(final SAMRecord rec) {return rec.getDuplicateReadFlag();}

I've got:

@Override public boolean test(final SAMRecord rec) { {if ("" != null) return rec.getDuplicateReadFlag();}}

How can I fix this ? Thanks .

Upvotes: 1

Views: 124

Answers (1)

Theodore Norvell
Theodore Norvell

Reputation: 16231

That's a rather annoying behaviour.

Could you live with this?

private Predicate<SAMRecord> UnaryExpr(): {
    class A implements Predicate<SAMRecord> {
        @Override public boolean test(final SAMRecord rec) {
            return rec.getDuplicateReadFlag(); } }

    class B implements Predicate<SAMRecord> {
        @Override public boolean test(final SAMRecord rec) {
            return rec.getReadUnmappedFlag(); } }

    class C implements Predicate<SAMRecord> {
        @Override public boolean test(final SAMRecord rec) {
            return rec.getReadFailsVendorQualityCheckFlag(); } }

    class D implements Predicate<SAMRecord> {
        @Override public boolean test(final SAMRecord rec) {
            return rec.getReadPairedFlag(); } }
}
{
    ( <DUPLICATE> { return new A() ; }
    | <UNMAPPED> { return new B() ; }
    | <FAILSVENDORQUALITY> { return new C() ; }
    | <PROPERPAIR> { return new D() ; }
    )
}

Upvotes: 1

Related Questions