All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.coode.owlapi.obo12.parser.OBOParser.jj Maven / Gradle / Ivy

options {
JAVA_UNICODE_ESCAPE=true;
    STATIC=false;
    JAVA_TEMPLATE_TYPE = "modern";
    EXCEPTIONS_SUPER_CLASS = "org.semanticweb.owlapi.io.OWLParserException";
    SUPPORT_CLASS_VISIBILITY_PUBLIC=false;
}

PARSER_BEGIN(OBOParser)

package org.coode.owlapi.obo12.parser;

import org.semanticweb.owlapi.model.*;
import java.net.*;
import java.util.*;

@SuppressWarnings("all")
public class OBOParser {

    private OBOParserHandler handler;

    public void setHandler(OBOParserHandler handler) {
        this.handler = handler;
    }
}

PARSER_END(OBOParser)

SKIP: { <"\n"|"\r"|"\t"|" "> }

/////////////////////////////////////////////////////////////////////////////////////

 SKIP : {}
TOKEN: { : IN_STANZA_HEADER}
 TOKEN: {}
 TOKEN: { : DEFAULT}
TOKEN: { : IN_TAG_VALUE_PAIR}
 SKIP:{ : IN_TAG_VALUE}
 SKIP: {  : IN_QUOTED_STRING }
 TOKEN : {  }
 SKIP : {
   : IN_TAG_VALUE  // To allow for malformed files - they do exist!
}
 SKIP : {  : DEFAULT }
 TOKEN: {  }
 TOKEN : {  }
 SKIP: {  : DEFAULT }
 SKIP:{  : IN_COMMENT}
 TOKEN:{ }
 SKIP :{  : DEFAULT}
TOKEN: { }

public void parse() : { } { Header()(Stanza())+ }

void Header() : { }
{
    {handler.startHeader();}
    ((TagValuePair())*)
    {handler.endHeader();}
}

void Stanza() :
{ Token t; }
{
    (t={handler.startFrame(t.image);} (TagValuePair())*)
    {handler.endFrame();}
}


void TagValuePair() :
{
    Token tagToken = null;
    Token valToken = null;
    String qualifierBlock = "";
    String comment = "";
    Token t;
    StringBuilder sb = new StringBuilder();

}
{
    tagToken= ((t={sb.append(t.image);}
    | t={sb.append(t.image);}
    | t={sb.append(t.image);}))* (comment=Comment())?
    {
        String name = tagToken.image.trim();
        String val = sb.toString().trim();
        // This a real mess.  The OBO format allows qualifier blocks at the end of lines.  However, things that look
        // like qualifier blocks can appear in the middle of values for comment tags.
        if(val.endsWith("}")) {
            int qualifierStart = val.lastIndexOf("{");
            if(qualifierStart != -1) {
                qualifierBlock = val.substring(qualifierStart);
                val = val.substring(0, qualifierStart).trim();
            }
        }
        handler.handleTagValue(name, val, qualifierBlock, comment);
    }
}

String Comment() : { Token t; } { t= {return t.image;} }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy