-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathParseTreeNode.h
More file actions
94 lines (84 loc) · 1.55 KB
/
ParseTreeNode.h
File metadata and controls
94 lines (84 loc) · 1.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#ifndef PARSETREENODE_H
#define PARSETREENODE_H
#include "Automata.h"
#include <vector>
#include <stack>
class Automata;
// base class
class ParseTreeNode
{
protected:
Automata* self;
public:
ParseTreeNode();
virtual Automata* gen_automata()=0;
virtual void print(int indent) = 0;
virtual ~ParseTreeNode()=0;
};
// *
class StarNode:public ParseTreeNode
{
private:
ParseTreeNode* child;
public:
StarNode(ParseTreeNode* node);
Automata* gen_automata();
void print(int indent);
~StarNode();
};
// .
class DotNode:public ParseTreeNode
{
private:
public:
DotNode();
Automata* gen_automata();
void print(int indent);
~DotNode();
};
// character
class CharNode:public ParseTreeNode
{
private:
char ch;
public:
CharNode(char ch);
Automata* gen_automata();
void print(int indent);
~CharNode();
};
// |
class UnionNode:public ParseTreeNode
{
private:
ParseTreeNode* left;
ParseTreeNode* right;
public:
UnionNode(ParseTreeNode* l, ParseTreeNode* r);
Automata* gen_automata();
void print(int indent);
~UnionNode();
};
// ?
class ExistNode:public ParseTreeNode
{
private:
ParseTreeNode* child;
public:
ExistNode(ParseTreeNode* node);
Automata* gen_automata();
void print(int indent);
~ExistNode();
};
class CatNode:public ParseTreeNode
{
private:
ParseTreeNode* left;
ParseTreeNode* right;
public:
CatNode(ParseTreeNode *l, ParseTreeNode *r){left = l; right=r;}
Automata* gen_automata();
void print(int indent);
virtual ~CatNode();
};
#endif