(file) Return to cimmof.l CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Compiler

  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); }

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2