Mercurial > hg > Applications > Grep
annotate c/regexParser/main.cc @ 80:0a452d69f0e2
remove global variable in main.cc
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 07 Oct 2015 16:08:34 +0900 |
parents | 52da06c3f050 |
children | 27883946b2dc |
rev | line source |
---|---|
55 | 1 /* |
56
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
2 * <literal> ::= [a-z][A-Z][0-9] |
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
3 * <charClass> ::= '['<literal>'-'<literal>']' |
58
4053c3e0fa7f
implement group()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
57
diff
changeset
|
4 * <group> ::= '('<regex>')' |
66
f8fb3b463f70
fix when '|' come procces
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
65
diff
changeset
|
5 * <regexAtom> ::= <literal>|<charClass>|<group> |
f8fb3b463f70
fix when '|' come procces
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
65
diff
changeset
|
6 * <regex> ::= <regexAtom>|<regexAtom>'*'|<regexAtom>'|'<regex>|<regexAtom><regex> |
55 | 7 */ |
8 | |
45 | 9 #include <stdio.h> |
56
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
10 #include <stdlib.h> |
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
11 #include <string.h> |
77
7f53a587bf97
add regexParser.h
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
76
diff
changeset
|
12 #include "regexParser.h" |
76 | 13 |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
14 typedef struct regexInfo { |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
15 unsigned char *ptr; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
16 unsigned char tokenType; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
17 int tokenValue; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
18 } RegexInfo, *RegexInfoPtr; |
58
4053c3e0fa7f
implement group()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
57
diff
changeset
|
19 |
56
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
20 NodePtr charClass(); |
58
4053c3e0fa7f
implement group()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
57
diff
changeset
|
21 NodePtr group(); |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
22 NodePtr regex(RegexInfoPtr); |
67
4842ca2cf8ee
print character
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
66
diff
changeset
|
23 NodePtr createNode(unsigned char,NodePtr,NodePtr); |
76 | 24 void token(); |
25 NodePtr regexAtom(); | |
79
52da06c3f050
add printTree.cc & fix Makefile
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
77
diff
changeset
|
26 extern void printTree(NodePtr); |
64
e0ad6c145f89
remove some errors
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
27 |
76 | 28 /** |
29 * Create a node of regex parse tree. | |
30 * tokenType | |
31 * regexPosition(state) | |
32 * stateTransitionTable | |
33 */ | |
67
4842ca2cf8ee
print character
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
66
diff
changeset
|
34 NodePtr createNode(unsigned char character, NodePtr left, NodePtr right) { |
57
71b497d25273
fix literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
56
diff
changeset
|
35 NodePtr n = (NodePtr)malloc(sizeof(Node)); |
58
4053c3e0fa7f
implement group()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
57
diff
changeset
|
36 n->self = n; |
67
4842ca2cf8ee
print character
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
66
diff
changeset
|
37 n->Value.character = character; |
56
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
38 n->left = left; |
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
39 n->right = right; |
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
40 return n; |
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
41 } |
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
42 |
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
43 // <charClass> ::= '['<literal>'-'<literal>']' |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
44 NodePtr charClass(RegexInfoPtr ri) { |
62
a49b4a8b8c14
implement isLiteral
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
61
diff
changeset
|
45 NodePtr n = (NodePtr)malloc(sizeof(Node)); |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
46 unsigned char startChar = ri->ptr[0]; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
47 while (ri->ptr[0] == '-') { |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
48 ri->ptr++; |
67
4842ca2cf8ee
print character
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
66
diff
changeset
|
49 } |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
50 unsigned char endChar = ri->ptr[0]; |
67
4842ca2cf8ee
print character
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
66
diff
changeset
|
51 unsigned char *charTable = (unsigned char*)malloc(sizeof(char)*256); |
4842ca2cf8ee
print character
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
66
diff
changeset
|
52 |
62
a49b4a8b8c14
implement isLiteral
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
61
diff
changeset
|
53 return n; |
56
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
54 } |
55 | 55 |
56
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
56 // <literal> ::= [a-z][A-Z][0-9] |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
57 NodePtr literal(RegexInfoPtr ri) { |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
58 NodePtr n = createNode(ri->ptr[0],0,0); |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
59 ri->ptr++; |
57
71b497d25273
fix literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
56
diff
changeset
|
60 return n; |
56
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
61 } |
55 | 62 |
63 | 63 // <group> ::= '('<regex>')' |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
64 NodePtr group(RegexInfoPtr ri) { |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
65 return regex(ri); |
58
4053c3e0fa7f
implement group()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
57
diff
changeset
|
66 } |
4053c3e0fa7f
implement group()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
57
diff
changeset
|
67 |
55 | 68 |
71
58d2b10988c9
move ptr++ in token()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
69 |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
70 void token(RegexInfoPtr ri) { |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
71 while (ri->ptr[0] != '\0') { |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
72 if (ri->ptr[0] == '('){ |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
73 ri->ptr++; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
74 ri->tokenType = '('; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
75 ri->tokenValue = 0; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
76 if (ri->ptr[1] == ')') { |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
77 ri->ptr++; |
67
4842ca2cf8ee
print character
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
66
diff
changeset
|
78 } |
4842ca2cf8ee
print character
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
66
diff
changeset
|
79 return; |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
80 } else if (ri->ptr[0] == ')') { |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
81 ri->ptr++; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
82 ri->tokenType = ')'; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
83 ri->tokenValue = ri->ptr[0]; |
74 | 84 return; |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
85 } else if (ri->ptr[0] == '[') { |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
86 ri->ptr++; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
87 ri->tokenType = '['; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
88 ri->tokenValue = ri->ptr[0]; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
89 if (ri->ptr[1] == ']') { |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
90 ri->ptr++; |
63 | 91 } |
92 return; | |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
93 } else if (ri->ptr[0] == '|'){ |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
94 ri->ptr++; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
95 ri->tokenType = '|'; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
96 ri->tokenValue = 0; |
63 | 97 return; |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
98 } else if (ri->ptr[0] == '*'){ |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
99 ri->ptr++; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
100 ri->tokenType = '*'; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
101 ri->tokenValue = 0; |
63 | 102 return; |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
103 } else if (ri->ptr[0] == '\\'){ |
73 | 104 // need more proccesing |
105 /* | |
106 \277 | |
107 \0xa5 | |
108 \[ | |
109 \\ | |
110 \utf-8 etc... | |
111 */ | |
112 } else { | |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
113 ri->tokenType = 'a'; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
114 ri->tokenValue = ri->ptr[0]; |
73 | 115 return; |
56
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
116 } |
55 | 117 } |
71
58d2b10988c9
move ptr++ in token()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
118 |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
119 ri->tokenType = 0; |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
120 ri->tokenValue = 0; |
71
58d2b10988c9
move ptr++ in token()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
121 return; |
55 | 122 } |
123 | |
64
e0ad6c145f89
remove some errors
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
124 // <regexAtom> ::= <literal>|<charClass>|<group> |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
125 NodePtr regexAtom(RegexInfoPtr ri) { |
64
e0ad6c145f89
remove some errors
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
126 |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
127 token(ri); |
64
e0ad6c145f89
remove some errors
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
128 NodePtr n = NULL; |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
129 if (ri->tokenType == 'a') n = literal(ri); |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
130 else if (ri->tokenType == '[') n = charClass(ri); |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
131 else if (ri->tokenType == '(') n = group(ri); |
64
e0ad6c145f89
remove some errors
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
132 |
e0ad6c145f89
remove some errors
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
133 return n; |
e0ad6c145f89
remove some errors
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
134 } |
e0ad6c145f89
remove some errors
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
135 |
e0ad6c145f89
remove some errors
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
136 // <regex> ::= <regexAtom>|<regexAtom>'*'|<regexAtom>'|'<regex>|<regexAtom><regex> |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
137 NodePtr regex(RegexInfoPtr ri) { |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
138 NodePtr n = regexAtom(ri); |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
139 while (ri->ptr[0]) { |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
140 token(ri); |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
141 if (ri->tokenType == '*') { |
71
58d2b10988c9
move ptr++ in token()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
70
diff
changeset
|
142 n = createNode('*',n,0); |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
143 } else if (ri->tokenType == '|') { |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
144 NodePtr n1 = regex(ri); |
64
e0ad6c145f89
remove some errors
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
145 n = createNode('|',n,n1); |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
146 } else if (ri->tokenType == ')') { |
74 | 147 return n; |
64
e0ad6c145f89
remove some errors
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
148 } else { |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
149 NodePtr n1 = regex(ri); |
64
e0ad6c145f89
remove some errors
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
150 n = createNode('+',n,n1); |
e0ad6c145f89
remove some errors
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
151 } |
67
4842ca2cf8ee
print character
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
66
diff
changeset
|
152 } return n; |
68
d27b3af1fe75
remove string()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
67
diff
changeset
|
153 } |
d27b3af1fe75
remove string()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
67
diff
changeset
|
154 |
66
f8fb3b463f70
fix when '|' come procces
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
65
diff
changeset
|
155 |
62
a49b4a8b8c14
implement isLiteral
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
61
diff
changeset
|
156 int main(int argc, char **argv) |
55 | 157 { |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
158 RegexInfoPtr ri = (RegexInfoPtr)malloc(sizeof(RegexInfo)); |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
159 |
56
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
160 for (int i = 1; i < argc; i++) { |
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
161 if (strcmp(argv[i],"-regex") == 0) { |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
162 ri->ptr = (unsigned char*)argv[i+1]; i++; |
56
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
163 } |
8901bc071d33
implement string() and literal()
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
164 } |
55 | 165 |
80
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
166 printf("regex : %s\n",ri->ptr); |
0a452d69f0e2
remove global variable in main.cc
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents:
79
diff
changeset
|
167 NodePtr n = regex(ri); |
66
f8fb3b463f70
fix when '|' come procces
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
65
diff
changeset
|
168 printTree(n); |
45 | 169 return 0; |
170 } |