source: branches/parabix-svgopen-2008/src/contentmodel.h @ 212

Last change on this file since 212 was 108, checked in by lindanl, 11 years ago
File size: 2.3 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 <iostream>
12#include <string>
13#include <iterator>
14
15using namespace std;
16
17typedef hash_map<int, int> symbol_set_t;
18
19enum ContentModel_t {
20        cm_Empty, cm_Any, cm_Mixed, cm_RegExp};
21
22class ContentModel {
23        public:
24        ContentModel_t cm_type;
25};
26
27class CM_Any: public ContentModel {
28public:
29        CM_Any();
30};
31
32class CM_Empty: public ContentModel {
33public:
34        CM_Empty();
35};
36
37class CM_Mixed: public ContentModel {
38public:
39        CM_Mixed();
40        symbol_set_t elements;
41};
42
43class Content_RE{
44public:
45        bool matches_empty;
46        symbol_set_t first_map;
47        symbol_set_t follow_map;
48        virtual int Set_IDs(int base_ID) = 0;
49        virtual void Set_First_Map() = 0;
50        virtual void Set_Follow_Map(symbol_set_t * transition_map) = 0;
51};
52
53class CRE_Seq : public Content_RE {
54public:
55        CRE_Seq();
56        vector<Content_RE *> subCMs;
57        int Set_IDs(int base_ID);
58        void Set_First_Map();
59        void Compile();
60        void Set_Follow_Map(symbol_set_t * transition_map);
61};
62
63class CRE_Choice : public Content_RE {
64public:
65        CRE_Choice();
66        vector<Content_RE *> subCMs;
67        int Set_IDs(int base_ID);
68        void Set_First_Map();
69        void Compile();
70        void Set_Follow_Map(symbol_set_t * transition_map);
71};
72
73class CRE_Star : public Content_RE {
74public:
75        CRE_Star(Content_RE * s);
76        Content_RE * subCM;
77        int Set_IDs(int base_ID);
78        void Set_First_Map();
79        void Set_Follow_Map(symbol_set_t * transition_map);
80};
81
82class CRE_Plus : public Content_RE {
83public:
84        CRE_Plus(Content_RE * s);
85        Content_RE * subCM;
86        int Set_IDs(int base_ID);
87        void Set_First_Map();
88        void Set_Follow_Map(symbol_set_t * transition_map);
89};
90
91class CRE_Opt : public Content_RE {
92public:
93        CRE_Opt(Content_RE * s);
94        Content_RE * subCM;
95        int Set_IDs(int base_ID);
96        void Set_First_Map();
97        void Set_Follow_Map(symbol_set_t * transition_map);
98};
99
100class CRE_Name : public Content_RE {
101public:
102        CRE_Name(int id);
103        int elemID;
104        int stateID;
105        int Set_IDs(int base_ID);
106        void Set_First_Map();
107        void Set_Follow_Map(symbol_set_t * transition_map);
108};
109
110class CM_RegExp: public ContentModel {
111public:
112        CM_RegExp();
113        symbol_set_t  * transition_map;
114        Content_RE * content_re;
115};
116
117#endif /*CONTENTMODEL_H_*/
Note: See TracBrowser for help on using the repository browser.