source: trunk/src/contentmodel.h @ 106

Last change on this file since 106 was 106, checked in by lindanl, 11 years ago

Content Models.

File size: 2.5 KB
Line 
1/*  contentmodel.h - Content Models from !ELEMENT declarations.
2    Copyright (c) 2008, Robert D. Cameron and Dan Lin.
3    Licensed to the public under the Open Software License 3.0.
4    Licensed to International Characters, Inc., under the Academic
5    Free License 3.0.
6*/
7
8#ifndef CONTENTMODEL_H_
9#define CONTENTMODEL_H_
10
11#include <set>
12#include <iostream>
13#include <string>
14#include <iterator>
15
16using namespace std;
17
18typedef hash_map<int, int> symbol_set_t;
19
20enum ContentModel_t {
21        cm_Empty, cm_Any, cm_Mixed, cm_RegExp};
22
23class ContentModel {
24        public:
25        ContentModel_t cm_type;
26};
27
28class CM_Any: public ContentModel {
29public:
30        CM_Any();
31        int Set_IDs(int base_ID);
32        void Set_First_Map();
33};
34
35class CM_Empty: public ContentModel {
36public:
37        CM_Empty();
38        int Set_IDs(int base_ID);
39        void Set_First_Map();
40};
41
42class CM_Mixed: public ContentModel {
43public:
44        CM_Mixed();
45        int Set_IDs(int base_ID);
46        void Set_First_Map();
47};
48
49class Content_RE{
50public:
51        bool matches_empty;
52        symbol_set_t first_map;
53        symbol_set_t follow_map;
54        virtual int Set_IDs(int base_ID) = 0;
55        virtual void Set_First_Map() = 0;
56        virtual void Set_Follow_Map(symbol_set_t * transition_map) = 0;
57};
58
59class CRE_Seq : public Content_RE {
60public:
61        CRE_Seq();
62        vector<Content_RE *> subCMs;
63        int Set_IDs(int base_ID);
64        void Set_First_Map();
65        void Compile();
66        void Set_Follow_Map(symbol_set_t * transition_map);
67};
68
69class CRE_Choice : public Content_RE {
70public:
71        CRE_Choice();
72        vector<Content_RE *> subCMs;
73        int Set_IDs(int base_ID);
74        void Set_First_Map();
75        void Compile();
76        void Set_Follow_Map(symbol_set_t * transition_map);
77};
78
79class CRE_Star : public Content_RE {
80public:
81        CRE_Star(Content_RE * s);
82        Content_RE * subCM;
83        int Set_IDs(int base_ID);
84        void Set_First_Map();
85        void Set_Follow_Map(symbol_set_t * transition_map);
86};
87
88class CRE_Plus : public Content_RE {
89public:
90        CRE_Plus(Content_RE * s);
91        Content_RE * subCM;
92        int Set_IDs(int base_ID);
93        void Set_First_Map();
94        void Set_Follow_Map(symbol_set_t * transition_map);
95};
96
97class CRE_Opt : public Content_RE {
98public:
99        CRE_Opt(Content_RE * s);
100        Content_RE * subCM;
101        int Set_IDs(int base_ID);
102        void Set_First_Map();
103        void Set_Follow_Map(symbol_set_t * transition_map);
104};
105
106class CRE_Name : public Content_RE {
107public:
108        CRE_Name(int id);
109        int elemID;
110        int stateID;
111        int Set_IDs(int base_ID);
112        void Set_First_Map();
113        void Set_Follow_Map(symbol_set_t * transition_map);
114};
115
116class CM_RegExp: public ContentModel {
117public:
118        CM_RegExp();
119        symbol_set_t  * transition_map;
120        Content_RE * content_re;
121};
122
123#endif /*CONTENTMODEL_H_*/
Note: See TracBrowser for help on using the repository browser.