📄 rqlparser.java
字号:
/* Generated By:JavaCC: Do not edit this line. RqlParser.java */package org.openrdf.sesame.query.rql.parser;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.openrdf.sesame.query.rql.model.And;import org.openrdf.sesame.query.rql.model.ArraySelection;import org.openrdf.sesame.query.rql.model.BooleanConstant;import org.openrdf.sesame.query.rql.model.BooleanQuery;import org.openrdf.sesame.query.rql.model.ClassQuery;import org.openrdf.sesame.query.rql.model.ClassSelector;import org.openrdf.sesame.query.rql.model.ClassVar;import org.openrdf.sesame.query.rql.model.CompareTo;import org.openrdf.sesame.query.rql.model.Constant;import org.openrdf.sesame.query.rql.model.DataPathSelector;import org.openrdf.sesame.query.rql.model.DataQuery;import org.openrdf.sesame.query.rql.model.DataVar;import org.openrdf.sesame.query.rql.model.Domain;import org.openrdf.sesame.query.rql.model.DomainSelector;import org.openrdf.sesame.query.rql.model.Exists;import org.openrdf.sesame.query.rql.model.Forall;import org.openrdf.sesame.query.rql.model.In;import org.openrdf.sesame.query.rql.model.InstanceOf;import org.openrdf.sesame.query.rql.model.InstanceSelector;import org.openrdf.sesame.query.rql.model.IntegerConstant;import org.openrdf.sesame.query.rql.model.Intersect;import org.openrdf.sesame.query.rql.model.Like;import org.openrdf.sesame.query.rql.model.Minus;import org.openrdf.sesame.query.rql.model.Not;import org.openrdf.sesame.query.rql.model.Or;import org.openrdf.sesame.query.rql.model.PropertyQuery;import org.openrdf.sesame.query.rql.model.PropertySelector;import org.openrdf.sesame.query.rql.model.PropertyVar;import org.openrdf.sesame.query.rql.model.Query;import org.openrdf.sesame.query.rql.model.Range;import org.openrdf.sesame.query.rql.model.RangeSelector;import org.openrdf.sesame.query.rql.model.RdfProperty;import org.openrdf.sesame.query.rql.model.RdfsClass;import org.openrdf.sesame.query.rql.model.RealConstant;import org.openrdf.sesame.query.rql.model.ResourceQuery;import org.openrdf.sesame.query.rql.model.SetQuery;import org.openrdf.sesame.query.rql.model.SfwQuery;import org.openrdf.sesame.query.rql.model.StringConstant;import org.openrdf.sesame.query.rql.model.SubClassOf;import org.openrdf.sesame.query.rql.model.SubPropertyOf;import org.openrdf.sesame.query.rql.model.SuperClassOf;import org.openrdf.sesame.query.rql.model.SuperPropertyOf;import org.openrdf.sesame.query.rql.model.TypeOf;import org.openrdf.sesame.query.rql.model.URI;import org.openrdf.sesame.query.rql.model.Union;import org.openrdf.sesame.query.rql.model.UnknownSelector;import org.openrdf.sesame.query.rql.model.Var;public class RqlParser implements RqlParserConstants { protected Map _varMap = new HashMap(); protected List _varList = new ArrayList(); protected List _unboundVarList = new ArrayList(); public Var getSharedVar(String name) { Var result = (Var)_varMap.get(name); if (result == null) { // Create a new Var if (name.startsWith("$")) {//System.out.println("Creating new ClassVar: " + name); result = new ClassVar(name); } else if (name.startsWith("@")) {//System.out.println("Creating new PropertyVar: " + name); result = new PropertyVar(name); } else {//System.out.println("Creating new DataVar: " + name); result = new DataVar(name); } _varMap.put(name, result); _varList.add(result); _unboundVarList.add(result); } return result; } public List getVarList() { return _varList; } public void clearVars() { _varMap.clear(); _varList = new ArrayList(); } private int _varNo = 1; public String getAnonymousVarName() { return "_" + _varNo++; } /** namespaces **/ protected Map _nsMap = new HashMap(); public void addNamespace(String prefix, String namespace) { _nsMap.put(prefix, namespace); } public String getNamespace(String prefix) { return (String)_nsMap.get(prefix); } // non-public "struct" static class FromTo { DataVar dataVar; ClassQuery classQ; } final public Query parse() throws ParseException { Query q; // (re)set _varNo to '1'. _varNo = 1; clearVars(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case USING: jj_consume_token(USING); jj_consume_token(NAMESPACE); namespace(); label_1: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case COMMA: ; break; default: jj_la1[0] = jj_gen; break label_1; } jj_consume_token(COMMA); namespace(); } break; default: jj_la1[1] = jj_gen; ; } q = query(); jj_consume_token(0); if (_unboundVarList.size() > 0) { String msg = "Unbound variable(s): "; for (int i = 0; i < _unboundVarList.size(); i++) { Var var = (Var)_unboundVarList.get(i); if (i > 0) { msg += ", "; } msg += var.getName(); } {if (true) throw new ParseException(msg);} } {if (true) return q;} throw new Error("Missing return statement in function"); }/*-------------------------------------------------+| NAMESPACE DECLARATIONS |+-------------------------------------------------*/ final public void namespace() throws ParseException { Token prefixToken, nsToken; prefixToken = jj_consume_token(IDENTIFIER); jj_consume_token(EQ); nsToken = jj_consume_token(URI); String prefix = prefixToken.image; String ns = nsToken.image; //FIXME: check if prefix isn't used twice? addNamespace(prefix, ns); }/*-------------------------------------------------+| QUERY |+-------------------------------------------------*/ final public Query query() throws ParseException { Query q; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case SELECT: q = sfw_query(); {if (true) return q;} break; case URI: q = uri(); {if (true) return q;} break; case CIRCUMFLEX: case IDENTIFIER: q = data_query(); {if (true) return q;} break; case CLASS: case TYPEOF: case SUBCLASSOF: case SUPERCLASSOF: case DOMAIN: case RANGE: case CLASSVAR: q = class_query(); {if (true) return q;} break; case PROPERTY: case SUBPROPERTYOF: case SUPERPROPERTYOF: case PROPERTYVAR: q = property_query(); {if (true) return q;} break; case LPAREN: q = set_query(); {if (true) return q;} break; default: jj_la1[2] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); }/*-------------------------------------------------+| VARIABLES |+-------------------------------------------------*/ final public Var var() throws ParseException { Var v; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case IDENTIFIER: v = datavar(); {if (true) return v;} break; case CLASSVAR: v = classvar(); {if (true) return v;} break; case PROPERTYVAR: v = propertyvar(); {if (true) return v;} break; default: jj_la1[3] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public DataVar datavar() throws ParseException { Token t; t = jj_consume_token(IDENTIFIER); {if (true) return (DataVar)getSharedVar(t.image);} throw new Error("Missing return statement in function"); } final public ClassVar classvar() throws ParseException { Token t; t = jj_consume_token(CLASSVAR); {if (true) return (ClassVar)getSharedVar(t.image);} throw new Error("Missing return statement in function"); } final public PropertyVar propertyvar() throws ParseException { Token t; t = jj_consume_token(PROPERTYVAR); {if (true) return (PropertyVar)getSharedVar(t.image);} throw new Error("Missing return statement in function"); }/*-------------------------------------------------+| URI's |+-------------------------------------------------*/ final public URI uri() throws ParseException { Token t; t = jj_consume_token(URI); String uriString = t.image; int colonIdx = uriString.indexOf(':'); if (colonIdx != -1) { String prefix = uriString.substring(0, colonIdx); String namespace = getNamespace(prefix); if (namespace != null) { uriString = namespace + uriString.substring(colonIdx + 1); } } {if (true) return new URI(uriString);} throw new Error("Missing return statement in function"); }/*-------------------------------------------------+| SFW QUERY |+-------------------------------------------------*/ final public ResourceQuery sfw_query() throws ParseException { List projsList = new ArrayList(); List rangesList = new ArrayList(); BooleanQuery where = null; jj_consume_token(SELECT); projslist(projsList); jj_consume_token(FROM); rangeslist(rangesList); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case WHERE: jj_consume_token(WHERE); where = boolean_query(); break; default: jj_la1[4] = jj_gen; ; } if (projsList.isEmpty()) { // select * projsList = getVarList(); } {if (true) return new SfwQuery(projsList, rangesList, where);} throw new Error("Missing return statement in function"); } final public void projslist(List projsList) throws ParseException { ResourceQuery q; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ASTERISK: jj_consume_token(ASTERISK); break; case TYPEOF: case SUBCLASSOF: case SUPERCLASSOF: case SUBPROPERTYOF: case SUPERPROPERTYOF: case DOMAIN: case RANGE: case NULL: case IDENTIFIER: case CLASSVAR: case PROPERTYVAR: case URI: q = projs_elem(); projsList.add(q); label_2: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case COMMA: ; break; default: jj_la1[5] = jj_gen; break label_2; } jj_consume_token(COMMA); q = projs_elem(); projsList.add(q); } break; default: jj_la1[6] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } final public ResourceQuery projs_elem() throws ParseException {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -