⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlsyntaxparser.jj

📁 Sematic Assessment System: Java GUI application that store all data in an Ontology in protege.
💻 JJ
📖 第 1 页 / 共 2 页
字号:
/**
 * Author: Matthew Horridge<br>
 * The University Of Manchester<br>
 * Medical Informatics Group<br>
 * Date: Jan 25, 2006<br><br>
 * <p/>
 * matthew.horridge@cs.man.ac.uk<br>
 * www.cs.man.ac.uk/~horridgm<br><br>
 */

options {
    JAVA_UNICODE_ESCAPE = true;
    STATIC = false;
}


PARSER_BEGIN(DLSyntaxParser)

package edu.stanford.smi.protegex.owl.model.classparser.dl;

import edu.stanford.smi.protege.model.*;
import edu.stanford.smi.protegex.owl.model.*;
import edu.stanford.smi.protegex.owl.model.classparser.*;
import java.io.*;
import java.util.*;

public class DLSyntaxParser {

    private static DatatypeNameChecker datatypeChecker;

    private boolean create;

    private OWLModel owlModel;

    public static DatatypeNameChecker getDatatypeNameChecker() {
        return datatypeChecker;
    }

    public OWLModel getOWLModel() {
        return owlModel;
    }

    public void setCreate(boolean b) {
        this.create = b;
    }

    public static OWLClass parseExpression(OWLModel owlModel, String expression, boolean create) throws ParseException {
        DLSyntaxParserTokenManager tokMan = new DLSyntaxParserTokenManager(new JavaCharStream(new StringReader(expression)));
        tokMan.setOWLModel(owlModel);
        DLSyntaxParser parser = new DLSyntaxParser(tokMan);
        parser.setCreate(create);
        parser.owlModel = owlModel;
        datatypeChecker = new DatatypeNameChecker(owlModel);
        return parser.parse();
    }


}

PARSER_END(DLSyntaxParser)


TOKEN_MGR_DECLS : {

    private OWLModel owlModel;

    private DatatypeNameChecker datatypeChecker;

    public void setOWLModel(OWLModel owlModel) {
        this.owlModel = owlModel;
        datatypeChecker = new DatatypeNameChecker(owlModel);
    }

}

/* WHITE SPACE */

SKIP :
{
  " "
| "\t"
| "\n"
| "\r"
| "\f"
}

TOKEN: {<OPENPAR: "(">}
TOKEN: {<CLOSEPAR: ")">}
TOKEN: {<OPENSQPAR: "[">}
TOKEN: {<CLOSESQPAR: "]">}
TOKEN: {<UNBOUNDEDVAL: "..">}

/* COMMENTS */

MORE :
{
  "//" : IN_SINGLE_LINE_COMMENT
|
  <"/**" ~["/"]> { input_stream.backup(1); } : IN_FORMAL_COMMENT
|
  "/*" : IN_MULTI_LINE_COMMENT
}

<IN_SINGLE_LINE_COMMENT>
SPECIAL_TOKEN :
{
  <SINGLE_LINE_COMMENT: "\n" | "\r" | "\r\n" > : DEFAULT
}

<IN_FORMAL_COMMENT>
SPECIAL_TOKEN :
{
  <FORMAL_COMMENT: "*/" > : DEFAULT
}

<IN_MULTI_LINE_COMMENT>
SPECIAL_TOKEN :
{
  <MULTI_LINE_COMMENT: "*/" > : DEFAULT
}

<IN_SINGLE_LINE_COMMENT,IN_FORMAL_COMMENT,IN_MULTI_LINE_COMMENT>
MORE :
{
  < ~[] >
}

TOKEN :
{
  < INTEGER_LITERAL: (["-"])?["0"-"9"] (["0"-"9"])* >
|
  < FLOATING_POINT_LITERAL:
        (["-"])?(["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)?
      | (["-"])? "." (["0"-"9"])+ (<EXPONENT>)?
      | (["-"])?(["0"-"9"])+ <EXPONENT>
      | (["-"])?(["0"-"9"])+ (<EXPONENT>)?
  >
|
  < #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >
|
  < STRING_LITERAL:

      "\""
      (   (~["\"","\\","\n","\r"])
        | ("\\"
            ( ["n","t","b","r","f","\\","'","\""]
            | ["0"-"7"] ( ["0"-"7"] )?
            | ["0"-"3"] ["0"-"7"] ["0"-"7"]
            )
          )
      )*
      "\""
  >
}

/* IDENTIFIERS */

TOKEN :
{
  < ONE_OF: "owl:oneOf{" >
|
  < IDENTIFIER: <LETTER> (<LETTER>|<DIGIT>)* | "'" (~["'"])* "'"> {
    String idName = ParserUtils.dequoteIdentifier(matchedToken.image);
    if(DLSyntaxParser.getDatatypeNameChecker().isDatatypeName(idName)) {
		matchedToken.kind = DATATYPE_ID;
    }
    else {
        Frame f = ParserUtils.getFrameByName(owlModel, idName);
        if(f instanceof OWLClass) {
            matchedToken.kind = CLASS_ID;
        }
        else if(f instanceof OWLObjectProperty) {
            matchedToken.kind = OBJECT_PROPERTY_ID;
        }
        else if(f instanceof OWLDatatypeProperty) {
            matchedToken.kind = DATATYPE_PROPERTY_ID;
        }
        else if(f instanceof OWLIndividual) {
            matchedToken.kind = INDIVIDUAL_ID;
        }

    }
  }
|
<DATATYPE_ID: <IDENTIFIER>>
|
<CLASS_ID: <IDENTIFIER>>
|
<OBJECT_PROPERTY_ID: <IDENTIFIER>>
|
<DATATYPE_PROPERTY_ID: <IDENTIFIER>>
|
<INDIVIDUAL_ID: <IDENTIFIER>>
|
  < #LETTER:
      [
       ":",
       ".",
       "-",
       "\u0041"-"\u005a",
       "\u005f",
       "\u0061"-"\u007a",
       "\u00c0"-"\u00d6",
       "\u00d8"-"\u00f6",
       "\u00f8"-"\u00ff",
       "\u0100"-"\u1fff",
       "\u3040"-"\u318f",
       "\u3300"-"\u337f",
       "\u3400"-"\u3d2d",
       "\u4e00"-"\u9fff",
       "\uac00"-"\ud7a3",
       "\uf900"-"\ufaff"
      ]
  >
|
  < #DIGIT:
      [
       "\u0030"-"\u0039",
       "\u0660"-"\u0669",
       "\u06f0"-"\u06f9",
       "\u0966"-"\u096f",
       "\u09e6"-"\u09ef",
       "\u0a66"-"\u0a6f",
       "\u0ae6"-"\u0aef",
       "\u0b66"-"\u0b6f",
       "\u0be7"-"\u0bef",
       "\u0c66"-"\u0c6f",
       "\u0ce6"-"\u0cef",
       "\u0d66"-"\u0d6f",
       "\u0e50"-"\u0e59",
       "\u0ed0"-"\u0ed9",
       "\u1040"-"\u1049"
      ]
  >
}


OWLClass parse() :
{
    OWLClass result;
}
{
    result=OWLUnionClass() <EOF>
    {
        return result;
    }
}

OWLClass OWLUnionClass() :
{
    ArrayList operands = new ArrayList();
    OWLClass cls;
}
{
    (
    (cls=OWLIntersectionClass() {operands.add(cls);})(("|" cls=OWLIntersectionClass(){operands.add(cls);})*)
    )
    {
        if(create) {
            if(operands.size() > 1) {
                return owlModel.createOWLUnionClass(operands);
            }
            else {
                return cls;
            }

        }
        else {
            return null;
        }
    }
}

OWLClass OWLIntersectionClass() :
{
    ArrayList operands = new ArrayList();
    OWLClass cls;
}
{
    (
    (cls=IntersectionClassOperand(){operands.add(cls);})
    ("&"(cls=IntersectionClassOperand(){operands.add(cls);}))*
    )
    {
        if(create) {
            if(operands.size() > 1) {
                return owlModel.createOWLIntersectionClass(operands);
            }
            else {
                return cls;
            }
        }
        return null;
    }
}

OWLClass IntersectionClassOperand() :
{
    OWLClass cls;
}
{
    (
    cls=OWLNamedClass()
    |
    "(" cls=OWLUnionClass() ")"
    |
    cls=OWLRestriction()
    |
    cls=OWLComplementClass()
    |
    cls=OWLEnumeratedClass()
    )
    {
        return cls;
    }
}

OWLClass OWLNamedClass() :
{
    Token t;
}
{
    t=<CLASS_ID> {
      try {
        String idName = ParserUtils.dequoteIdentifier(t.image);
        return ParserUtils.getOWLClassFromName(owlModel, idName);
      } catch (AmbiguousNameException ex) {
        throw new ParseException(ex.getMessage());
      }
    }
}

OWLClass OWLRestriction() :
{
    OWLClass cls;
}
{
    (
    cls = OWLAllValuesFromRestriction()
    |
    cls = OWLSomeValuesFromRestriction()
    |
    cls = OWLMaxCardinalityRestriction()
    |
    cls = OWLMinCardinalityRestriction()
    |
    cls = OWLCardinalityRestriction()
    ) {
        return cls;
    }

}

///////////////////////////////////////////////////////////////////////////////
//
// AllValuesFrom

OWLClass OWLAllValuesFromRestriction() :
{
    OWLClass cls;
}
{
    "*" (
        cls = OWLAllValuesFromDatatypePart()
        |
        cls = OWLAllValuesFromObjectPart()
        ) {
            return cls;
        }
}

OWLClass OWLAllValuesFromDatatypePart() :
{
    OWLDatatypeProperty prop;
    RDFSDatatype datatype;
}
{
    (
    prop = DatatypeProperty()
    datatype = Datatype()
    ) {
        if(create) {
            return owlModel.createOWLAllValuesFrom(prop, datatype);
        }
        return null;
    }
}

OWLClass OWLAllValuesFromObjectPart() :
{
    OWLObjectProperty prop;
    OWLClass filler;
}
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -