1 karl 1.14 /*//%2006//////////////////////////////////////////////////////////////////////
|
2 karl 1.8 //
3 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
6 // IBM Corp.; EMC Corporation, The Open Group.
7 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
9 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
|
11 karl 1.13 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
12 // EMC Corporation; Symantec Corporation; The Open Group.
|
13 karl 1.8 //
14 // Permission is hereby granted, free of charge, to any person obtaining a copy
15 // of this software and associated documentation files (the "Software"), to
16 // deal in the Software without restriction, including without limitation the
17 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
18 // sell copies of the Software, and to permit persons to whom the Software is
19 // furnished to do so, subject to the following conditions:
|
20 karl 1.14 //
|
21 karl 1.8 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
22 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
23 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
24 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
25 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
26 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
|
30 karl 1.13 //============================================================================*/
|
31 karl 1.10
|
32 bob 1.1 %option never-interactive
|
33 e.boden 1.7 %option stack
34 %option yylineno
|
35 karl 1.14 %{
|
36 bob 1.1
|
37 karl 1.14 /* NOCHKSRC */
|
38 bob 1.1 #include "cimmofParser.h"
39 #include "memobjs.h"
40 #include "cimmof_tab.h"
41
|
42 e.boden 1.7 /* */
43 /* 7/27/2004: bug 1330, support for slash* comments, E Boden, IBM */
44 /* 8/14/2004: bug 544, support for string escape characters, E Boden */
45 /* */
46 /* */
47 /* */
|
48 dj.gorey 1.6
|
49 kumpf 1.16 /* Avoid warn_unused_result warnings in Linux RPM build */
|
50 kumpf 1.17 #ifndef ECHO
51 # define ECHO do { size_t ignored = fwrite(yytext, yyleng, 1, yyout); } while(0)
52 #endif
|
53 kumpf 1.16
|
54 bob 1.1 /*---------------------------------------------------------------*/
55 /* These routines wrap certain flex functions, keeping down the */
56 /* number of external dependencies */
57 /*---------------------------------------------------------------*/
58 int get_yy_buf_size_wrapper() { return YY_BUF_SIZE; }
59
|
60 karl 1.14 void * get_cimmof__current_buffer_wrapper() {
61 return (void *)YY_CURRENT_BUFFER;
|
62 bob 1.1 }
63
64 void * create_cimmof_buffer_wrapper(const FILE *f, int size) {
65 return (void *)yy_create_buffer((FILE *)f, size);
66 }
67
|
68 kumpf 1.5 int switch_to_buffer_wrapper(void *buffstate, Boolean closeCurrent) {
69 if (closeCurrent)
70 {
71 if (yyin != NULL)
72 {
73 fflush(yyin);
74 fclose(yyin);
75 yyin = NULL;
76 }
77 yy_delete_buffer(YY_CURRENT_BUFFER);
78 }
|
79 bob 1.1 yy_switch_to_buffer((YY_BUFFER_STATE)buffstate);
80 return 0;
81 }
82
|
83 e.boden 1.7 char strbuf[1024], *strbuf_p, slashx[2];
|
84 bob 1.1
85
86 %}
87
88
|
89 gs.keenan 1.9 %x myStr myHex
|
90 bob 1.1 %%
91
92
|
93 karl 1.14 \n { cimmofParser::Instance()->increment_lineno(); }
94 \/\/.*[\r\n]? { cimmofParser::Instance()->increment_lineno(); }
95 [ \t\r] { /* skip white space */ }
96 class { return(TOK_CLASS); }
97 \{ { return(TOK_LEFTCURLYBRACE); }
98 \} { return(TOK_RIGHTCURLYBRACE); }
99 \[ { return(TOK_LEFTSQUAREBRACKET); }
100 \] { return(TOK_RIGHTSQUAREBRACKET); }
101 \( { return(TOK_LEFTPAREN); }
102 \) { return(TOK_RIGHTPAREN); }
103 \: { return(TOK_COLON); }
104 ; { return(TOK_SEMICOLON); }
|
105 kumpf 1.15 [+-]?[0-9]*\.[0-9]+([eE][+-]?[0-9]+)? {
|
106 karl 1.14 cimmof_lval.strval = new String(yytext);
107 return(TOK_REAL_VALUE); }
|
108 kumpf 1.15 [+-]?0[0-7]+ { cimmof_lval.strval = new String(yytext);
|
109 karl 1.14 return(TOK_OCTAL_VALUE); }
|
110 kumpf 1.15 [+-]?0x[0-9A-Fa-f]+ { cimmof_lval.strval = new String(yytext);
|
111 karl 1.14 return(TOK_HEX_VALUE); }
|
112 kumpf 1.15 [+-]?[01]+[Bb] { cimmof_lval.strval = new String(yytext);
|
113 karl 1.14 return(TOK_BINARY_VALUE); }
|
114 kumpf 1.15 [1-9][0-9]* { cimmof_lval.strval = new String(yytext);
|
115 karl 1.14 return(TOK_POSITIVE_DECIMAL_VALUE); }
|
116 kumpf 1.15 [+-]?[0-9]+ { /* Note: All non-zero unsigned integers are handled above */
117 cimmof_lval.strval = new String(yytext);
|
118 karl 1.14 return(TOK_SIGNED_DECIMAL_VALUE); }
119 \= { return(TOK_EQUAL); }
120 , { return(TOK_COMMA); }
121 \'.+\' { cimmof_lval.strval = new String(yytext);
122 return(TOK_CHAR_VALUE); }
123
124 /*--- bugzilla 544 fix; handle string escapes ---
125
126 an impl. decision: invalid escape sequences
127 are simply ignored, and left in the string.
128
129 an impl. decision: yyleng is set to the len
130 of resulting string, not the len of the matched
131 token(s), since they are different, with escapes.
132 (but note; cimmof.y does not use yyleng!)
133
134 an impl. req't: strings are returned to parser
135 with [no kidding!] enclosing "s.
136 */
137
138 \" { BEGIN(myStr); strbuf_p = strbuf;
139 karl 1.14 /**strbuf_p++ = '"';*/ }
140 <myStr>\" { BEGIN(INITIAL);
141 /**strbuf_p++ = '"';*/ *strbuf_p = '\0';
142 cimmof_leng = strbuf_p - strbuf;
143 cimmof_lval.strval = new String(strbuf);
144 return TOK_STRING_VALUE; }
145 <myStr><<EOF>> |
146 <myStr>\n { BEGIN(INITIAL);
147 /**strbuf_p++ = '"';*/ *strbuf_p = '\0';
148 cimmof_leng = strbuf_p - strbuf;
149 cimmof_lval.strval = new String(strbuf);
150 return TOK_UNEXPECTED_CHAR; }
151 <myStr>\\b { /* backspace */ *strbuf_p++ = '\b'; }
152 <myStr>\\f { /* form feed */ *strbuf_p++ = '\f'; }
153 <myStr>\\n { /* line feed */ *strbuf_p++ = '\n'; }
154 <myStr>\\r { /* carriage return */ *strbuf_p++ = '\r'; }
155 <myStr>\\t { /* horizontal tab */ *strbuf_p++ = '\t'; }
156 <myStr>\\' { /* single quote */ *strbuf_p++ = '\''; }
157 <myStr>\\\" { /* double quote */ *strbuf_p++ = '"'; }
158 <myStr>\\\\ { /* backslash */ *strbuf_p++ = '\\'; }
159 <myStr>\\[xX] { yy_push_state(myHex);
160 karl 1.14 memcpy(slashx,yytext,2);
161 }
162 <myStr>\\(.|\n) { *strbuf_p++ = '\\';
163 *strbuf_p++ = yytext[1]; }
164 <myStr>[^\\\n\"]+ { char *t = yytext;
165 while( *t ) *strbuf_p++ = *t++;
166 *strbuf_p = '\0'; }
167 <myHex>[0-9A-Fa-f]{1,4} { /* get escaped hex digits */
168 char hexfmt[4]; unsigned int n;
169 sprintf( hexfmt, "%%%dx", yyleng );
170 sscanf(yytext, hexfmt, &n);
171 if (n>255) {
172 memcpy(strbuf_p,slashx,2);
173 strbuf_p += 2;
174 char *t = yytext;
175 while( *t ) *strbuf_p++ = *t++;
176 }
177 else *strbuf_p++ = (char)n;
178 yy_pop_state();
179 }
180 <myHex>. { memcpy(strbuf_p,slashx,2);
181 karl 1.14 strbuf_p += 2;
182 *strbuf_p++ = *yytext;
183 yy_pop_state();
184 }
185 /* --- end of bugzilla 544 fix --- */
186
187
188
189 \/\* { int c1=0, c2=yyinput();
190 for(;;) {
191 if (c2==EOF) break;
192 if (c1=='*' && c2=='/') break;
193 c1=c2;
194 c2=yyinput();
195 }
196 }
197 <<EOF>> { yyterminate(); }
198 [Nn][Uu][Ll][Ll] { return(TOK_NULL_VALUE); }
199 [Tt][Rr][Uu][Ee] { return(TOK_TRUE); }
200 [Ff][Aa][Ll][Ss][Ee] { return(TOK_FALSE); }
201 \. { return(TOK_PERIOD); }
202 karl 1.14 \#[Pp][Rr][Aa][Gg][Mm][Aa] { return(TOK_PRAGMA); }
203 [Ii][Nn][Ss][Tt][Aa][Nn][Cc][Ee] { return(TOK_INSTANCE); }
204 [Oo][Ff] { return(TOK_OF); }
|
205 bob 1.1 [Qq][Uu][Aa][Ll][Ii][Ff][Ii][Ee][Rr] {return(TOK_QUALIFIER); }
|
206 karl 1.14 [Ss][Cc][Oo][Pp][Ee] { return(TOK_SCOPE); }
207 [Ss][Cc][Hh][Ee][Mm][Aa] { return(TOK_SCHEMA); }
208 [Aa][Ss][Ss][Oo][Cc][Ii][Aa][Tt][Ii][Oo][Nn] {return(TOK_ASSOCIATION); }
209 [Ii][Nn][Dd][Ii][Cc][Aa][Tt][Ii][Oo][Nn] { return(TOK_INDICATION); }
210 [Pp][Rr][Oo][Pp][Ee][Rr][Tt][Yy] { return(TOK_PROPERTY); }
|
211 bob 1.1 [Rr][Ee][Ff][Ee][Rr][Ee][Nn][Cc][Ee] { return(TOK_REFERENCE); }
|
212 karl 1.14 [Mm][Ee][Tt][Hh][Oo][Dd] { return(TOK_METHOD); }
|
213 bob 1.1 [Pp][Aa][Rr][Aa][Mm][Ee][Tt][Ee][Rr] {return(TOK_PARAMETER); }
|
214 karl 1.14 [Aa][Nn][Yy] { return(TOK_ANY); }
215 [Rr][Ee][Ff] { return(TOK_REF); }
216 [Ff][Ll][Aa][Vv][Oo][Rr] { return(TOK_FLAVOR); }
|
217 bob 1.1 [Ee][Nn][Aa][Bb][Ll][Ee][Oo][Vv][Ee][Rr][Rr][Ii][Dd][Ee] {
|
218 karl 1.14 return(TOK_ENABLEOVERRIDE); }
|
219 bob 1.1 [Dd][Ii][Ss][Aa][Bb][Ll][Ee][Oo][Vv][Ee][Rr][Rr][Ii][Dd][Ee] {
|
220 karl 1.14 return(TOK_DISABLEOVERRIDE); }
221 [Rr][Ee][Ss][Tt][Rr][Ii][Cc][Tt][Ee][Dd] { return(TOK_RESTRICTED); }
222 [Tt][Oo][Ss][Uu][Bb][Cc][Ll][Aa][Ss][Ss] { return(TOK_TOSUBCLASS); }
223 [Tt][Rr][Aa][Nn][Ss][Ll][Aa][Tt][Aa][Bb][Ll][Ee] { return(TOK_TRANSLATABLE); }
224 [Ii][Nn][Cc][Ll][Uu][Dd][Ee] { return(TOK_INCLUDE); }
225 $[_$0-9a-zA-Z]+ { cimmof_lval.strval = new String(yytext);
226 return TOK_ALIAS_IDENTIFIER; }
227 [Aa][Ss] { return TOK_AS; }
228 [Ss][Tt][Rr][Ii][Nn][Gg] { return(TOK_DT_STR); }
229 [Bb][Oo][Oo][Ll][Ee][Aa][Nn] { return(TOK_DT_BOOL); }
230 [Dd][Aa][Tt][Ee][Tt][Ii][Mm][Ee] { return(TOK_DT_DATETIME); }
231 [Uu][Ii][Nn][Tt]8 { return(TOK_DT_UINT8); }
232 [Uu][Ii][Nn][Tt]16 { return(TOK_DT_UINT16); }
233 [Uu][Ii][Nn][Tt]32 { return(TOK_DT_UINT32); }
234 [Uu][Ii][Nn][Tt]64 { return(TOK_DT_UINT64); }
235 [Ss][Ii][Nn][Tt]8 { return(TOK_DT_SINT8); }
236 [Ss][Ii][Nn][Tt]16 { return(TOK_DT_SINT16); }
237 [Ss][Ii][Nn][Tt]32 { return(TOK_DT_SINT32); }
238 [Ss][Ii][Nn][Tt]64 { return(TOK_DT_SINT64); }
239 [Rr][Ee][Aa][Ll]32 { return(TOK_DT_REAL32); }
240 [Rr][Ee][Aa][Ll]64 { return(TOK_DT_REAL64); }
241 karl 1.14 [Cc][Hh][Aa][Rr]8 { return(TOK_DT_CHAR8); }
242 [Cc][Hh][Aa][Rr]16 { return(TOK_DT_CHAR16); }
243 [_a-zA-Z][_$0-9a-zA-Z]* { cimmof_lval.strval = new String(yytext);
244 return(TOK_SIMPLE_IDENTIFIER); }
245 . { cimmof_lval.strval = new String(yytext);
246 return(TOK_UNEXPECTED_CHAR); }
|
247 bob 1.1
248 %%
249
|
250 e.boden 1.7 void cimmof_yy_less(int n) { yyless(n); }
|