Op.hpp
上传用户:zhuqijet
上传日期:2013-06-25
资源大小:10074k
文件大小:12k
源码类别:

词法分析

开发平台:

Visual C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
  5.  * reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  *
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  *
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in
  16.  *    the documentation and/or other materials provided with the
  17.  *    distribution.
  18.  *
  19.  * 3. The end-user documentation included with the redistribution,
  20.  *    if any, must include the following acknowledgment:
  21.  *       "This product includes software developed by the
  22.  *        Apache Software Foundation (http://www.apache.org/)."
  23.  *    Alternately, this acknowledgment may appear in the software itself,
  24.  *    if and wherever such third-party acknowledgments normally appear.
  25.  *
  26.  * 4. The names "Xerces" and "Apache Software Foundation" must
  27.  *    not be used to endorse or promote products derived from this
  28.  *    software without prior written permission. For written
  29.  *    permission, please contact apache@apache.org.
  30.  *
  31.  * 5. Products derived from this software may not be called "Apache",
  32.  *    nor may "Apache" appear in their name, without prior written
  33.  *    permission of the Apache Software Foundation.
  34.  *
  35.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  36.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  37.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  38.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  39.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  40.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  41.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  42.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  43.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  44.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  45.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  46.  * SUCH DAMAGE.
  47.  * ====================================================================
  48.  *
  49.  * This software consists of voluntary contributions made by many
  50.  * individuals on behalf of the Apache Software Foundation, and was
  51.  * originally based on software copyright (c) 2001, International
  52.  * Business Machines, Inc., http://www.ibm.com .  For more information
  53.  * on the Apache Software Foundation, please see
  54.  * <http://www.apache.org/>.
  55.  */
  56. /*
  57.  * $Id: Op.hpp,v 1.8 2003/05/22 02:10:52 knoaman Exp $
  58.  */
  59. #if !defined(OP_HPP)
  60. #define OP_HPP
  61. // ---------------------------------------------------------------------------
  62. //  Includes
  63. // ---------------------------------------------------------------------------
  64. #include <xercesc/util/RefVectorOf.hpp>
  65. #include <xercesc/util/RuntimeException.hpp>
  66. XERCES_CPP_NAMESPACE_BEGIN
  67. // ---------------------------------------------------------------------------
  68. //  Forward Declaration
  69. // ---------------------------------------------------------------------------
  70. class Token;
  71. class XMLUTIL_EXPORT Op : public XMemory
  72. {
  73. public:
  74.     enum {
  75.         O_DOT                = 0,
  76.         O_CHAR               = 1,
  77.         O_RANGE              = 3,
  78.         O_NRANGE             = 4,
  79.         O_ANCHOR             = 5,
  80.         O_STRING             = 6,
  81.         O_CLOSURE            = 7,
  82.         O_NONGREEDYCLOSURE   = 8,
  83.         O_QUESTION           = 9,
  84.         O_NONGREEDYQUESTION  = 10,
  85.         O_UNION              = 11,
  86.         O_CAPTURE            = 15,
  87.         O_BACKREFERENCE      = 16,
  88.         O_LOOKAHEAD          = 20,
  89.         O_NEGATIVELOOKAHEAD  = 21,
  90.         O_LOOKBEHIND         = 22,
  91.         O_NEGATIVELOOKBEHIND = 23,
  92.         O_INDEPENDENT        = 24,
  93.         O_MODIFIER           = 25,
  94.         O_CONDITION          = 26
  95.     };
  96.     // -----------------------------------------------------------------------
  97.     //  Public Constructors and Destructor
  98.     // -----------------------------------------------------------------------
  99.     virtual ~Op() { }
  100.     // -----------------------------------------------------------------------
  101.     // Getter functions
  102.     // -----------------------------------------------------------------------
  103.             short        getOpType() const;
  104.             const Op*    getNextOp() const;
  105.     virtual XMLInt32     getData() const;
  106.     virtual XMLInt32     getData2() const;
  107.     virtual int          getSize() const;
  108.     virtual int          getRefNo() const;
  109.     virtual const Op*    getConditionFlow() const;
  110.     virtual const Op*    getYesFlow() const;
  111.     virtual const Op*    getNoFlow() const;
  112.     virtual const Op*    elementAt(int index) const;
  113.     virtual const Op*    getChild() const;
  114.     virtual const Token* getToken() const;
  115.     virtual const XMLCh* getLiteral() const;
  116.     // -----------------------------------------------------------------------
  117.     // Setter functions
  118.     // -----------------------------------------------------------------------
  119.     void setOpType(const short type);
  120.     void setNextOp(const Op* const next);
  121. protected:
  122.     // -----------------------------------------------------------------------
  123.     //  Protected Constructors
  124.     // -----------------------------------------------------------------------
  125.     Op(const short type);
  126.     friend class OpFactory;
  127. private:
  128.     // -----------------------------------------------------------------------
  129.     //  Unimplemented constructors and operators
  130.     // -----------------------------------------------------------------------
  131.     Op(const Op&) {ThrowXML(RuntimeException, XMLExcepts::Regex_NotSupported);};
  132.     Op& operator=(const Op&) {ThrowXML(RuntimeException, XMLExcepts::Regex_NotSupported);};
  133.     // -----------------------------------------------------------------------
  134.     //  Private data members
  135.     //
  136.     //  fOpType
  137.     //      Indicates the type of operation
  138.     //
  139.     //  fNextOp
  140.     //      Points to the next operation in the chain
  141.     // -----------------------------------------------------------------------
  142.     short fOpType;
  143.     const Op*   fNextOp;
  144. };
  145. class XMLUTIL_EXPORT CharOp: public Op {
  146. public:
  147. // -----------------------------------------------------------------------
  148.     //  Public Constructors and Destructor
  149.     // -----------------------------------------------------------------------
  150. CharOp(const short type, const XMLInt32 charData);
  151. ~CharOp() {}
  152. // -----------------------------------------------------------------------
  153. // Getter functions
  154. // -----------------------------------------------------------------------
  155. XMLInt32 getData() const;
  156. private:
  157. // Private data members
  158. XMLInt32 fCharData;
  159. };
  160. class XMLUTIL_EXPORT UnionOp : public Op {
  161. public:
  162. // -----------------------------------------------------------------------
  163.     //  Public Constructors and Destructor
  164.     // -----------------------------------------------------------------------
  165. UnionOp(const short type, const int size,
  166.             MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
  167. ~UnionOp() { delete fBranches; }
  168. // -----------------------------------------------------------------------
  169. // Getter functions
  170. // -----------------------------------------------------------------------
  171. int getSize() const;
  172. const Op* elementAt(int index) const;
  173. // -----------------------------------------------------------------------
  174. // Setter functions
  175. // -----------------------------------------------------------------------
  176. void addElement(Op* const op);
  177. private:
  178. // Private Data memebers
  179. RefVectorOf<Op>* fBranches;
  180. };
  181. class XMLUTIL_EXPORT ChildOp: public Op {
  182. public:
  183. // -----------------------------------------------------------------------
  184.     //  Public Constructors and Destructor
  185.     // -----------------------------------------------------------------------
  186. ChildOp(const short type);
  187. ~ChildOp() {}
  188. // -----------------------------------------------------------------------
  189. // Getter functions
  190. // -----------------------------------------------------------------------
  191. const Op* getChild() const;
  192. // -----------------------------------------------------------------------
  193. // Setter functions
  194. // -----------------------------------------------------------------------
  195. void setChild(const Op* const child);
  196. private:
  197. // Private data members
  198. const Op* fChild;
  199. };
  200. class XMLUTIL_EXPORT ModifierOp: public ChildOp {
  201. public:
  202. // -----------------------------------------------------------------------
  203.     //  Public Constructors and Destructor
  204.     // -----------------------------------------------------------------------
  205. ModifierOp(const short type, const XMLInt32 v1, const XMLInt32 v2);
  206. ~ModifierOp() {}
  207. // -----------------------------------------------------------------------
  208. // Getter functions
  209. // -----------------------------------------------------------------------
  210. XMLInt32 getData() const;
  211. XMLInt32 getData2() const;
  212. private:
  213. // Private data members
  214. XMLInt32 fVal1;
  215. XMLInt32 fVal2;
  216. };
  217. class XMLUTIL_EXPORT RangeOp: public Op {
  218. public:
  219. // -----------------------------------------------------------------------
  220.     //  Public Constructors and Destructor
  221.     // -----------------------------------------------------------------------
  222. RangeOp(const short type, const Token* const token);
  223. ~RangeOp() {}
  224. // -----------------------------------------------------------------------
  225. // Getter functions
  226. // -----------------------------------------------------------------------
  227. const Token* getToken() const;
  228. private:
  229. // Private data members
  230. const Token* fToken;
  231. };
  232. class XMLUTIL_EXPORT StringOp: public Op {
  233. public:
  234. // -----------------------------------------------------------------------
  235.     //  Public Constructors and Destructor
  236.     // -----------------------------------------------------------------------
  237. StringOp(const short type, const XMLCh* const literal);
  238. ~StringOp() { delete[] fLiteral;}
  239. // -----------------------------------------------------------------------
  240. // Getter functions
  241. // -----------------------------------------------------------------------
  242. const XMLCh* getLiteral() const;
  243. private:
  244. // Private data members
  245. XMLCh* fLiteral;
  246. };
  247. class XMLUTIL_EXPORT ConditionOp: public Op {
  248. public:
  249. // -----------------------------------------------------------------------
  250.     //  Public Constructors and Destructor
  251.     // -----------------------------------------------------------------------
  252. ConditionOp(const short type, const int refNo,
  253. const Op* const condFlow, const Op* const yesFlow,
  254. const Op* const noFlow);
  255. ~ConditionOp() {}
  256. // -----------------------------------------------------------------------
  257. // Getter functions
  258. // -----------------------------------------------------------------------
  259. int getRefNo() const;
  260. const Op* getConditionFlow() const;
  261. const Op* getYesFlow() const;
  262. const Op* getNoFlow() const;
  263. private:
  264. // Private data members
  265. int fRefNo;
  266. const Op* fConditionOp;
  267. const Op* fYesOp;
  268. const Op* fNoOp;
  269. };
  270. // ---------------------------------------------------------------------------
  271. //  Op: getter methods
  272. // ---------------------------------------------------------------------------
  273. inline short Op::getOpType() const {
  274. return fOpType;
  275. }
  276. inline const Op* Op::getNextOp() const {
  277. return fNextOp;
  278. }
  279. // ---------------------------------------------------------------------------
  280. //  Op: setter methods
  281. // ---------------------------------------------------------------------------
  282. inline void Op::setOpType(const short type) {
  283. fOpType = type;
  284. }
  285. inline void Op::setNextOp(const Op* const nextOp) {
  286. fNextOp = nextOp;
  287. }
  288. XERCES_CPP_NAMESPACE_END
  289. #endif
  290. /**
  291.   * End of file Op.hpp
  292.   */