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

org.globus.rsl.RSLParser Maven / Gradle / Ivy

The newest version!
/* Generated By:JavaCC: Do not edit this line. RSLParser.java */
/*
 * Copyright 1999-2006 University of Chicago
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.globus.rsl;

import java.io.StringReader;
import java.util.LinkedList;
import java.util.ListIterator;

/**
 * Parser for the 
 * Globus Resource Specification Language RSL v1.0. 
 * 
* Things that are not supported:
* (1) User-specified delimiter for quoted literals.
* (2) RSLs that only contain relations outside of 'spec-list'.

* Other notes:
* (1) Implicit concatenation is not part of the 'simple value' relation * and is implemented by inspecting the white space between individual * values. */ public class RSLParser implements RSLParserConstants { private Class nodeClass = RslNode.class; public static void main(String argv[]) throws ParseException { if ((argv.length != 0) && (argv.length != 1)) { System.err.println("Usage: RSL [rsl string]"); System.exit(1); } RSLParser parser = null; if (argv.length == 0) { parser = new RSLParser(System.in); } else { parser = new RSLParser(new StringReader(argv[0])); } parser.parse(); } public static RslNode parse(String rsl) throws ParseException { return (RslNode)parse(RslNode.class, rsl); } public static AbstractRslNode parse(Class rslNodeClass, String rsl) throws ParseException { RSLParser parser = new RSLParser(new StringReader(rsl)); parser.setRslNodeClass(rslNodeClass); return parser.parse(); } public RSLParser(String rsl) throws ParseException { this(new StringReader(rsl)); } public void setRslNodeClass(Class rslNodeClass) { nodeClass = rslNodeClass; } private String unQuotify(String str, char quoteChar) { char curChar; char nextChar; int size = str.length(); StringBuffer buf = new StringBuffer(size-2); for (int i=1;i 0) { valueList.add( concat(tokenList) ); tokenList.clear(); } } private String unQuotify(Token tok) { switch(tok.kind) { case DOUBLE_QUOTED_LITERAL: return unQuotify(tok.image,'"'); case SINGLE_QUOTED_LITERAL: return unQuotify(tok.image,'\''); default: return tok.image; } } final public AbstractRslNode parse() throws ParseException { AbstractRslNode tree; tree = subSpecification(); jj_consume_token(0); {if (true) return tree;} throw new Error("Missing return statement in function"); } final public void specification(AbstractRslNode parentNode) throws ParseException { AbstractRslNode node; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case VARIABLES: case VARIABLES_DQUOTE: case VARIABLES_SQUOTE: case UNQUOTED_LITERAL: case DOUBLE_QUOTED_LITERAL: case SINGLE_QUOTED_LITERAL: relation(parentNode); break; case AND: case OR: case MULTI: node = subSpecification(); parentNode.add(node); break; default: jj_la1[0] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } final public AbstractRslNode subSpecification() throws ParseException { AbstractRslNode node = null; try { node = (AbstractRslNode)nodeClass.newInstance(); } catch(Exception e) { throw new ParseException("Failed to instantiate rsl node class: " + e.getMessage()); } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case AND: jj_consume_token(AND); specList(node); node.setOperator(RslNode.AND); {if (true) return node;} break; case MULTI: jj_consume_token(MULTI); specList(node); node.setOperator(RslNode.MULTI); {if (true) return node;} break; case OR: jj_consume_token(OR); specList(node); node.setOperator(RslNode.OR); {if (true) return node;} break; default: jj_la1[1] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public void relation(AbstractRslNode node) throws ParseException { String attribute; int op; LinkedList values; Token tok; Bindings bd; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case VARIABLES: tok = jj_consume_token(VARIABLES); jj_consume_token(EQUAL); values = bindingSequence(); bd = new Bindings(tok.image); bd.setValues(values); node.add(bd); break; case VARIABLES_DQUOTE: tok = jj_consume_token(VARIABLES_DQUOTE); jj_consume_token(EQUAL); values = bindingSequence(); bd = new Bindings(unQuotify(tok.image,'"')); bd.setValues(values); node.add(bd); break; case VARIABLES_SQUOTE: tok = jj_consume_token(VARIABLES_SQUOTE); jj_consume_token(EQUAL); values = bindingSequence(); bd = new Bindings(unQuotify(tok.image,'\'')); bd.setValues(values); node.add(bd); break; case UNQUOTED_LITERAL: case DOUBLE_QUOTED_LITERAL: case SINGLE_QUOTED_LITERAL: attribute = attribute(); op = op(); values = valueSequence(); NameOpValue nm = new NameOpValue(attribute, op); nm.setValues(values); node.add(nm); break; default: jj_la1[2] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } final public void specList(AbstractRslNode node) throws ParseException { label_1: while (true) { jj_consume_token(RPAREN); specification(node); jj_consume_token(LPAREN); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case RPAREN: ; break; default: jj_la1[3] = jj_gen; break label_1; } } } final public int op() throws ParseException { Token tok; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case EQUAL: tok = jj_consume_token(EQUAL); {if (true) return NameOpValue.EQ;} break; case NOT_EQUAL: tok = jj_consume_token(NOT_EQUAL); {if (true) return NameOpValue.NEQ;} break; case GREATER_THAN: tok = jj_consume_token(GREATER_THAN); {if (true) return NameOpValue.GT;} break; case GREATER_THAN_EQUAL: tok = jj_consume_token(GREATER_THAN_EQUAL); {if (true) return NameOpValue.GTEQ;} break; case LESS_THAN: tok = jj_consume_token(LESS_THAN); {if (true) return NameOpValue.LT;} break; case LESS_THAN_EQUAL: tok = jj_consume_token(LESS_THAN_EQUAL); {if (true) return NameOpValue.LTEQ;} break; default: jj_la1[4] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public String attribute() throws ParseException { String name; name = stringLiteral(); {if (true) return name;} throw new Error("Missing return statement in function"); } final public LinkedList valueSequence() throws ParseException { LinkedList list = new LinkedList(); LinkedList tokenList = new LinkedList(); label_2: while (true) { value(list, tokenList); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case RPAREN: case VARSTART: case UNQUOTED_LITERAL: case DOUBLE_QUOTED_LITERAL: case SINGLE_QUOTED_LITERAL: ; break; default: jj_la1[5] = jj_gen; break label_2; } } if (tokenList.size() > 0) { list.add( concat(tokenList) ); } {if (true) return list;} throw new Error("Missing return statement in function"); } final public LinkedList bindingSequence() throws ParseException { LinkedList list = new LinkedList(); label_3: while (true) { binding(list); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case RPAREN: ; break; default: jj_la1[6] = jj_gen; break label_3; } } {if (true) return list;} throw new Error("Missing return statement in function"); } final public void binding(LinkedList list) throws ParseException { Value value; String name; jj_consume_token(RPAREN); name = stringLiteral(); value = concatSimpleValue(); jj_consume_token(LPAREN); Binding db = new Binding(name, value); list.add(db); } final public void value(LinkedList list, LinkedList tokenList) throws ParseException { Object value = null; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case RPAREN: jj_consume_token(RPAREN); value = valueSequence(); jj_consume_token(LPAREN); list.add(value); break; case VARSTART: case UNQUOTED_LITERAL: case DOUBLE_QUOTED_LITERAL: case SINGLE_QUOTED_LITERAL: value = SimpleValue(list, tokenList); tokenList.add(value); break; default: jj_la1[7] = jj_gen; jj_consume_token(-1); throw new ParseException(); } } final public Value SimpleValue(LinkedList valueList, LinkedList tokenList) throws ParseException { Token t1 = null; Value v1 = null; Value v2 = null; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case UNQUOTED_LITERAL: case DOUBLE_QUOTED_LITERAL: case SINGLE_QUOTED_LITERAL: t1 = stringToken(); v2 = explicitConcat(valueList, tokenList); updateValueList(t1, valueList, tokenList); Value v = new Value( unQuotify(t1) ); if (v2 != null) { v.concat(v2); } {if (true) return v;} break; case VARSTART: v1 = variableReference(valueList, tokenList); v2 = explicitConcat(valueList, tokenList); if (v2 != null) { v1.concat(v2); } {if (true) return v1;} break; default: jj_la1[8] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public Value variableReference(LinkedList valueList, LinkedList tokenList) throws ParseException { String name = null; Value value = null; Token t1; t1 = jj_consume_token(VARSTART); name = stringLiteral(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case VARSTART: case UNQUOTED_LITERAL: case DOUBLE_QUOTED_LITERAL: case SINGLE_QUOTED_LITERAL: value = concatSimpleValue(); break; default: jj_la1[9] = jj_gen; ; } jj_consume_token(LPAREN); updateValueList(t1, valueList, tokenList); VarRef vr = new VarRef(name); if (value != null) vr.setDefaultValue(value); {if (true) return vr;} throw new Error("Missing return statement in function"); } final public Value explicitConcat(LinkedList valueList, LinkedList tokenList) throws ParseException { Object v1 = null; Value v2 = null; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case 27: jj_consume_token(27); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case UNQUOTED_LITERAL: case DOUBLE_QUOTED_LITERAL: case SINGLE_QUOTED_LITERAL: v1 = stringLiteral(); break; case VARSTART: v1 = variableReference(valueList, tokenList); break; default: jj_la1[10] = jj_gen; jj_consume_token(-1); throw new ParseException(); } v2 = explicitConcat(valueList, tokenList); break; default: jj_la1[11] = jj_gen; ; } Value v = null; if (v1 instanceof String) { v = new Value( (String)v1); } else if (v1 instanceof Value) { v = (Value)v1; } if (v2 != null) { v.concat(v2); } {if (true) return v;} throw new Error("Missing return statement in function"); } final public Token stringToken() throws ParseException { Token tok; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case UNQUOTED_LITERAL: tok = jj_consume_token(UNQUOTED_LITERAL); {if (true) return tok;} break; case DOUBLE_QUOTED_LITERAL: tok = jj_consume_token(DOUBLE_QUOTED_LITERAL); {if (true) return tok;} break; case SINGLE_QUOTED_LITERAL: tok = jj_consume_token(SINGLE_QUOTED_LITERAL); {if (true) return tok;} break; default: jj_la1[12] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public String stringLiteral() throws ParseException { Token tok; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case UNQUOTED_LITERAL: tok = jj_consume_token(UNQUOTED_LITERAL); {if (true) return tok.image;} break; case DOUBLE_QUOTED_LITERAL: tok = jj_consume_token(DOUBLE_QUOTED_LITERAL); {if (true) return unQuotify(tok.image,'"');} break; case SINGLE_QUOTED_LITERAL: tok = jj_consume_token(SINGLE_QUOTED_LITERAL); {if (true) return unQuotify(tok.image,'\'');} break; default: jj_la1[13] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } // ----------------------------------------------------- final public Value concatSimpleValue() throws ParseException { LinkedList list = new LinkedList(); LinkedList tokenList = new LinkedList(); label_4: while (true) { concatSimpleValueSub(list, tokenList); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case VARSTART: case UNQUOTED_LITERAL: case DOUBLE_QUOTED_LITERAL: case SINGLE_QUOTED_LITERAL: ; break; default: jj_la1[14] = jj_gen; break label_4; } } if (tokenList.size() > 0) { list.add( concat(tokenList) ); } if (list.size() == 1) { {if (true) return (Value)list.getFirst();} } else { {if (true) throw new ParseException("Encountered sequence instead of a single value.");} } throw new Error("Missing return statement in function"); } final public void concatSimpleValueSub(LinkedList list, LinkedList tokenList) throws ParseException { Object value = null; value = SimpleValue(list, tokenList); tokenList.add(value); } public RSLParserTokenManager token_source; ASCII_CharStream jj_input_stream; public Token token, jj_nt; private int jj_ntk; private int jj_gen; final private int[] jj_la1 = new int[15]; final private int[] jj_la1_0 = {0x71c7000,0x7000,0x71c0000,0x8000,0xfc0,0x7028000,0x8000,0x7028000,0x7020000,0x7020000,0x7020000,0x8000000,0x7000000,0x7000000,0x7020000,}; public RSLParser(java.io.InputStream stream) { jj_input_stream = new ASCII_CharStream(stream, 1, 1); token_source = new RSLParserTokenManager(jj_input_stream); token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 15; i++) jj_la1[i] = -1; } public void ReInit(java.io.InputStream stream) { jj_input_stream.ReInit(stream, 1, 1); token_source.ReInit(jj_input_stream); token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 15; i++) jj_la1[i] = -1; } public RSLParser(java.io.Reader stream) { jj_input_stream = new ASCII_CharStream(stream, 1, 1); token_source = new RSLParserTokenManager(jj_input_stream); token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 15; i++) jj_la1[i] = -1; } public void ReInit(java.io.Reader stream) { jj_input_stream.ReInit(stream, 1, 1); token_source.ReInit(jj_input_stream); token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 15; i++) jj_la1[i] = -1; } public RSLParser(RSLParserTokenManager tm) { token_source = tm; token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 15; i++) jj_la1[i] = -1; } public void ReInit(RSLParserTokenManager tm) { token_source = tm; token = new Token(); jj_ntk = -1; jj_gen = 0; for (int i = 0; i < 15; i++) jj_la1[i] = -1; } final private Token jj_consume_token(int kind) throws ParseException { Token oldToken; if ((oldToken = token).next != null) token = token.next; else token = token.next = token_source.getNextToken(); jj_ntk = -1; if (token.kind == kind) { jj_gen++; return token; } token = oldToken; jj_kind = kind; throw generateParseException(); } final public Token getNextToken() { if (token.next != null) token = token.next; else token = token.next = token_source.getNextToken(); jj_ntk = -1; jj_gen++; return token; } final public Token getToken(int index) { Token t = token; for (int i = 0; i < index; i++) { if (t.next != null) t = t.next; else t = t.next = token_source.getNextToken(); } return t; } final private int jj_ntk() { if ((jj_nt=token.next) == null) return (jj_ntk = (token.next=token_source.getNextToken()).kind); else return (jj_ntk = jj_nt.kind); } private java.util.Vector jj_expentries = new java.util.Vector(); private int[] jj_expentry; private int jj_kind = -1; final public ParseException generateParseException() { jj_expentries.removeAllElements(); boolean[] la1tokens = new boolean[28]; for (int i = 0; i < 28; i++) { la1tokens[i] = false; } if (jj_kind >= 0) { la1tokens[jj_kind] = true; jj_kind = -1; } for (int i = 0; i < 15; i++) { if (jj_la1[i] == jj_gen) { for (int j = 0; j < 32; j++) { if ((jj_la1_0[i] & (1<




© 2015 - 2025 Weber Informatics LLC | Privacy Policy