001: /*
002: (c) Copyright 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP, all rights reserved.
003: [See end of file]
004: $Id: RegexpTreeGenerator.java,v 1.11 2008/01/02 12:06:04 andy_seaborne Exp $
005: */
006:
007: package com.hp.hpl.jena.graph.query.regexptrees;
008:
009: import java.util.List;
010:
011: /**
012: A RegexpTreeGenerator supplies appropriate RegexpTrees; different users
013: of the RegexpTree parsers can supply specialised generators that produce
014: instances appropriate to their needs, or fail by throwing an exception.
015: @author hedgehog
016: */
017: public interface RegexpTreeGenerator {
018: /**
019: Answer some instance of AnySingle (a pattern that matches any one
020: character). May return the same instance on each call.
021: */
022: public abstract RegexpTree getAnySingle();
023:
024: /**
025: Answer some instance of StartOfLine (a pattern that matches the start of
026: a line). May return the same instance on each call.
027: */
028: public abstract RegexpTree getStartOfLine();
029:
030: /**
031: Answer some instance of EndOfLine (a pattern that matches the end of
032: a line). May return the same instance on each call.
033: */
034: public abstract RegexpTree getEndOfLine();
035:
036: /**
037: Answer some instance of Text which matches the literal character
038: <code>ch</code>.
039: */
040: public abstract RegexpTree getText(char ch);
041:
042: /**
043: Answer an instance of ZeroOrMore with repeated content <code>d</code>.
044: */
045: public abstract RegexpTree getZeroOrMore(RegexpTree d);
046:
047: /**
048: Answer an instance of OneOrMore with repeated content <code>d</code>.
049: */
050: public abstract RegexpTree getOneOrMore(RegexpTree d);
051:
052: /**
053: Answer an instance of Optional with content <code>d</code>.
054: */
055: public abstract RegexpTree getOptional(RegexpTree d);
056:
057: /**
058: Answer a RegexpTree which for matching the sequence of operands
059: in the list. Every element must be a RegexpTree. If the list contains
060: exactly one element, it is strongly recommended that that element be
061: returned. If the list is empty, it is recommended that Nothing be returned.
062: */
063: public abstract RegexpTree getSequence(List operands);
064:
065: /**
066: Answer a RegexpTree for matching one of a set of alternative operand
067: expressions from the list. Every element must be a RegexpTree. If the
068: list has exactly one element, it is recommended that that element be
069: returned.
070: */
071: public abstract RegexpTree getAlternatives(List operands);
072:
073: /**
074: Answer an empty RegexpTree (corresponding to nothing in a parsed
075: expression, and matching the empty string).
076: */
077: public abstract RegexpTree getNothing();
078:
079: /**
080: Answer a RegexpTree that encodes a match which accepts (reject=false)
081: or rejects (reject=true) any (all) of the characters in <code>chars</code>.
082: */
083: public abstract RegexpTree getClass(String chars, boolean reject);
084:
085: /**
086: Answer a RegexpTree that wraps parentheses around an operand. The
087: index is non-zero if this is a back-reference referrable object.
088: */
089: public abstract RegexpTree getParen(RegexpTree operand, int index);
090:
091: /**
092: Answer a RegexpTree that refers back to noted parenthesisation n.
093: */
094: public abstract RegexpTree getBackReference(int n);
095: }
096:
097: /*
098: (c) Copyright 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
099: All rights reserved.
100:
101: Redistribution and use in source and binary forms, with or without
102: modification, are permitted provided that the following conditions
103: are met:
104:
105: 1. Redistributions of source code must retain the above copyright
106: notice, this list of conditions and the following disclaimer.
107:
108: 2. Redistributions in binary form must reproduce the above copyright
109: notice, this list of conditions and the following disclaimer in the
110: documentation and/or other materials provided with the distribution.
111:
112: 3. The name of the author may not be used to endorse or promote products
113: derived from this software without specific prior written permission.
114:
115: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
116: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
117: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
118: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
119: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
120: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
121: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
122: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
123: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
124: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
125: */
|