Index: icu46/source/common/rbbinode.h |
=================================================================== |
--- icu46/source/common/rbbinode.h (revision 0) |
+++ icu46/source/common/rbbinode.h (revision 0) |
@@ -0,0 +1,118 @@ |
+/******************************************************************** |
+ * COPYRIGHT: |
+ * Copyright (c) 2001-2006, International Business Machines Corporation and |
+ * others. All Rights Reserved. |
+ ********************************************************************/ |
+ |
+#ifndef RBBINODE_H |
+#define RBBINODE_H |
+ |
+#include "unicode/utypes.h" |
+#include "unicode/uobject.h" |
+ |
+// |
+// class RBBINode |
+// |
+// Represents a node in the parse tree generated when reading |
+// a rule file. |
+// |
+ |
+U_NAMESPACE_BEGIN |
+ |
+class UnicodeSet; |
+class UVector; |
+ |
+class RBBINode : public UMemory { |
+ public: |
+ enum NodeType { |
+ setRef, |
+ uset, |
+ varRef, |
+ leafChar, |
+ lookAhead, |
+ tag, |
+ endMark, |
+ opStart, |
+ opCat, |
+ opOr, |
+ opStar, |
+ opPlus, |
+ opQuestion, |
+ opBreak, |
+ opReverse, |
+ opLParen |
+ }; |
+ |
+ enum OpPrecedence { |
+ precZero, |
+ precStart, |
+ precLParen, |
+ precOpOr, |
+ precOpCat |
+ }; |
+ |
+ NodeType fType; |
+ RBBINode *fParent; |
+ RBBINode *fLeftChild; |
+ RBBINode *fRightChild; |
+ UnicodeSet *fInputSet; // For uset nodes only. |
+ OpPrecedence fPrecedence; // For binary ops only. |
+ |
+ UnicodeString fText; // Text corresponding to this node. |
+ // May be lazily evaluated when (if) needed |
+ // for some node types. |
+ int fFirstPos; // Position in the rule source string of the |
+ // first text associated with the node. |
+ // If there's a left child, this will be the same |
+ // as that child's left pos. |
+ int fLastPos; // Last position in the rule source string |
+ // of any text associated with this node. |
+ // If there's a right child, this will be the same |
+ // as that child's last postion. |
+ |
+ UBool fNullable; // See Aho. |
+ int32_t fVal; // For leafChar nodes, the value. |
+ // Values are the character category, |
+ // corresponds to columns in the final |
+ // state transition table. |
+ |
+ UBool fLookAheadEnd; // For endMark nodes, set TRUE if |
+ // marking the end of a look-ahead rule. |
+ |
+ UVector *fFirstPosSet; |
+ UVector *fLastPosSet; // TODO: rename fFirstPos & fLastPos to avoid confusion. |
+ UVector *fFollowPos; |
+ |
+ |
+ RBBINode(NodeType t); |
+ RBBINode(const RBBINode &other); |
+ ~RBBINode(); |
+ |
+ RBBINode *cloneTree(); |
+ RBBINode *flattenVariables(); |
+ void flattenSets(); |
+ void findNodes(UVector *dest, RBBINode::NodeType kind, UErrorCode &status); |
+ |
+#ifdef RBBI_DEBUG |
+ void printNode(); |
+ void printTree(UBool withHeading); |
+#endif |
+ |
+ private: |
+ RBBINode &operator = (const RBBINode &other); // No defs. |
+ UBool operator == (const RBBINode &other); // Private, so these functions won't accidently be used. |
+ |
+#ifdef RBBI_DEBUG |
+ int fSerialNum; // Debugging aids. |
+#endif |
+}; |
+ |
+#ifdef RBBI_DEBUG |
+U_CFUNC void |
+RBBI_DEBUG_printUnicodeString(const UnicodeString &s, int minWidth=0); |
+#endif |
+ |
+U_NAMESPACE_END |
+ |
+#endif |
+ |
Property changes on: icu46/source/common/rbbinode.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |