(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 bob      1.1  /*---------------------------------------------------------------*/
 50               /* These routines wrap certain flex functions, keeping down the  */
 51               /* number of external dependencies                               */
 52               /*---------------------------------------------------------------*/
 53               int get_yy_buf_size_wrapper() { return YY_BUF_SIZE; }
 54               
 55 karl     1.14 void * get_cimmof__current_buffer_wrapper() {
 56                 return (void *)YY_CURRENT_BUFFER;
 57 bob      1.1  }
 58               
 59               void * create_cimmof_buffer_wrapper(const FILE *f, int size) {
 60                 return (void *)yy_create_buffer((FILE *)f, size);
 61               }
 62               
 63 kumpf    1.5  int switch_to_buffer_wrapper(void *buffstate, Boolean closeCurrent) {
 64                 if (closeCurrent)
 65                 {
 66                    if (yyin != NULL)
 67                    {
 68                       fflush(yyin);
 69                       fclose(yyin);
 70                       yyin = NULL;
 71                    }
 72                    yy_delete_buffer(YY_CURRENT_BUFFER);
 73                 }
 74 bob      1.1    yy_switch_to_buffer((YY_BUFFER_STATE)buffstate);
 75                 return 0;
 76               }
 77               
 78 e.boden  1.7  char  strbuf[1024], *strbuf_p, slashx[2];
 79 bob      1.1  
 80               
 81               %}
 82               
 83               
 84 gs.keenan 1.9  %x myStr myHex
 85 bob       1.1  %%
 86                
 87                
 88 karl      1.14 \n             { cimmofParser::Instance()->increment_lineno(); }
 89                \/\/.*[\r\n]?  { cimmofParser::Instance()->increment_lineno(); }
 90                [ \t\r]        { /* skip white space */ }
 91                class          { return(TOK_CLASS); }
 92                \{             { return(TOK_LEFTCURLYBRACE); }
 93                \}             { return(TOK_RIGHTCURLYBRACE); }
 94                \[             { return(TOK_LEFTSQUAREBRACKET); }
 95                \]             { return(TOK_RIGHTSQUAREBRACKET); }
 96                \(             { return(TOK_LEFTPAREN); }
 97                \)             { return(TOK_RIGHTPAREN); }
 98                \:             { return(TOK_COLON); }
 99                ;              { return(TOK_SEMICOLON); }
100 kumpf     1.15 [+-]?[0-9]*\.[0-9]+([eE][+-]?[0-9]+)? {
101 karl      1.14                    cimmof_lval.strval = new String(yytext);
102                                   return(TOK_REAL_VALUE); }
103 kumpf     1.15 [+-]?0[0-7]+   { cimmof_lval.strval = new String(yytext);
104 karl      1.14                    return(TOK_OCTAL_VALUE); }
105 kumpf     1.15 [+-]?0x[0-9A-Fa-f]+ { cimmof_lval.strval = new String(yytext);
106 karl      1.14                    return(TOK_HEX_VALUE); }
107 kumpf     1.15 [+-]?[01]+[Bb] { cimmof_lval.strval = new String(yytext);
108 karl      1.14                    return(TOK_BINARY_VALUE); }
109 kumpf     1.15 [1-9][0-9]*    { cimmof_lval.strval = new String(yytext);
110 karl      1.14                    return(TOK_POSITIVE_DECIMAL_VALUE); }
111 kumpf     1.15 [+-]?[0-9]+    { /* Note: All non-zero unsigned integers are handled above */
112                                 cimmof_lval.strval = new String(yytext);
113 karl      1.14                    return(TOK_SIGNED_DECIMAL_VALUE); }
114                \=             { return(TOK_EQUAL); }
115                ,              { return(TOK_COMMA); }
116                \'.+\'         { cimmof_lval.strval = new String(yytext);
117                                   return(TOK_CHAR_VALUE); }
118                
119                    /*--- bugzilla 544 fix; handle string escapes ---
120                
121                       an impl. decision: invalid escape sequences
122                       are simply ignored, and left in the string.
123                
124                       an impl. decision: yyleng is set to the len
125                       of resulting string, not the len of the matched
126                       token(s), since they are different, with escapes.
127                       (but note; cimmof.y does not use yyleng!)
128                
129                       an impl. req't: strings are returned to parser
130                       with [no kidding!] enclosing "s.
131                    */
132                
133                \"             { BEGIN(myStr); strbuf_p = strbuf;
134 karl      1.14                /**strbuf_p++ = '"';*/ }
135                <myStr>\"      { BEGIN(INITIAL);
136                               /**strbuf_p++ = '"';*/  *strbuf_p = '\0';
137                                  cimmof_leng = strbuf_p - strbuf;
138                                  cimmof_lval.strval = new String(strbuf);
139                                  return TOK_STRING_VALUE; }
140                <myStr><<EOF>> |
141                <myStr>\n      { BEGIN(INITIAL);
142                               /**strbuf_p++ = '"';*/  *strbuf_p = '\0';
143                                  cimmof_leng = strbuf_p - strbuf;
144                                  cimmof_lval.strval = new String(strbuf);
145                                  return TOK_UNEXPECTED_CHAR; }
146                <myStr>\\b     { /* backspace */        *strbuf_p++ = '\b'; }
147                <myStr>\\f     { /* form feed */        *strbuf_p++ = '\f'; }
148                <myStr>\\n     { /* line feed */        *strbuf_p++ = '\n'; }
149                <myStr>\\r     { /* carriage return */  *strbuf_p++ = '\r'; }
150                <myStr>\\t     { /* horizontal tab */   *strbuf_p++ = '\t'; }
151                <myStr>\\'     { /* single quote */     *strbuf_p++ = '\''; }
152                <myStr>\\\"    { /* double quote */     *strbuf_p++ = '"';  }
153                <myStr>\\\\    { /* backslash */        *strbuf_p++ = '\\'; }
154                <myStr>\\[xX]  { yy_push_state(myHex);
155 karl      1.14                   memcpy(slashx,yytext,2);
156                               }
157                <myStr>\\(.|\n)         { *strbuf_p++ = '\\';
158                                        *strbuf_p++ = yytext[1]; }
159                <myStr>[^\\\n\"]+       { char *t = yytext;
160                                            while( *t ) *strbuf_p++ = *t++;
161                                            *strbuf_p = '\0'; }
162                <myHex>[0-9A-Fa-f]{1,4} { /* get escaped hex digits */
163                                            char  hexfmt[4];   unsigned int n;
164                                            sprintf( hexfmt, "%%%dx", yyleng );
165                                            sscanf(yytext, hexfmt, &n);
166                                            if (n>255) {
167                                                memcpy(strbuf_p,slashx,2);
168                                                strbuf_p += 2;
169                                                char *t = yytext;
170                                                while( *t ) *strbuf_p++ = *t++;
171                                            }
172                                            else *strbuf_p++ = (char)n;
173                                                yy_pop_state();
174                                        }
175                <myHex>.                { memcpy(strbuf_p,slashx,2);
176 karl      1.14                               strbuf_p += 2;
177                                              *strbuf_p++ = *yytext;
178                                              yy_pop_state();
179                                        }
180                                        /* --- end of bugzilla 544 fix --- */
181                
182                
183                
184                \/\*                    {   int c1=0, c2=yyinput();
185                                                for(;;) {
186                                                     if (c2==EOF) break;
187                                                     if (c1=='*' && c2=='/') break;
188                                                     c1=c2;
189                                                     c2=yyinput();
190                                                }
191                                        }
192                <<EOF>>                              { yyterminate(); }
193                [Nn][Uu][Ll][Ll]                     { return(TOK_NULL_VALUE); }
194                [Tt][Rr][Uu][Ee]                     { return(TOK_TRUE); }
195                [Ff][Aa][Ll][Ss][Ee]                 { return(TOK_FALSE); }
196                \.                                   { return(TOK_PERIOD); }
197 karl      1.14 \#[Pp][Rr][Aa][Gg][Mm][Aa]           { return(TOK_PRAGMA); }
198                [Ii][Nn][Ss][Tt][Aa][Nn][Cc][Ee]     { return(TOK_INSTANCE); }
199                [Oo][Ff]                             { return(TOK_OF); }
200 bob       1.1  [Qq][Uu][Aa][Ll][Ii][Ff][Ii][Ee][Rr] {return(TOK_QUALIFIER); }
201 karl      1.14 [Ss][Cc][Oo][Pp][Ee]                 { return(TOK_SCOPE); }
202                [Ss][Cc][Hh][Ee][Mm][Aa]             { return(TOK_SCHEMA); }
203                [Aa][Ss][Ss][Oo][Cc][Ii][Aa][Tt][Ii][Oo][Nn] {return(TOK_ASSOCIATION); }
204                [Ii][Nn][Dd][Ii][Cc][Aa][Tt][Ii][Oo][Nn] { return(TOK_INDICATION); }
205                [Pp][Rr][Oo][Pp][Ee][Rr][Tt][Yy]     { return(TOK_PROPERTY); }
206 bob       1.1  [Rr][Ee][Ff][Ee][Rr][Ee][Nn][Cc][Ee] { return(TOK_REFERENCE); }
207 karl      1.14 [Mm][Ee][Tt][Hh][Oo][Dd]             { return(TOK_METHOD); }
208 bob       1.1  [Pp][Aa][Rr][Aa][Mm][Ee][Tt][Ee][Rr] {return(TOK_PARAMETER); }
209 karl      1.14 [Aa][Nn][Yy]                         { return(TOK_ANY); }
210                [Rr][Ee][Ff]                         { return(TOK_REF); }
211                [Ff][Ll][Aa][Vv][Oo][Rr]             { return(TOK_FLAVOR); }
212 bob       1.1  [Ee][Nn][Aa][Bb][Ll][Ee][Oo][Vv][Ee][Rr][Rr][Ii][Dd][Ee] {
213 karl      1.14                                          return(TOK_ENABLEOVERRIDE); }
214 bob       1.1  [Dd][Ii][Ss][Aa][Bb][Ll][Ee][Oo][Vv][Ee][Rr][Rr][Ii][Dd][Ee] {
215 karl      1.14                                          return(TOK_DISABLEOVERRIDE); }
216                [Rr][Ee][Ss][Tt][Rr][Ii][Cc][Tt][Ee][Dd] { return(TOK_RESTRICTED); }
217                [Tt][Oo][Ss][Uu][Bb][Cc][Ll][Aa][Ss][Ss] { return(TOK_TOSUBCLASS); }
218                [Tt][Rr][Aa][Nn][Ss][Ll][Aa][Tt][Aa][Bb][Ll][Ee] { return(TOK_TRANSLATABLE); }
219                [Ii][Nn][Cc][Ll][Uu][Dd][Ee]         { return(TOK_INCLUDE); }
220                $[_$0-9a-zA-Z]+                      { cimmof_lval.strval = new String(yytext);
221                                                       return TOK_ALIAS_IDENTIFIER; }
222                [Aa][Ss]                             { return TOK_AS; }
223                [Ss][Tt][Rr][Ii][Nn][Gg]             { return(TOK_DT_STR); }
224                [Bb][Oo][Oo][Ll][Ee][Aa][Nn]         { return(TOK_DT_BOOL); }
225                [Dd][Aa][Tt][Ee][Tt][Ii][Mm][Ee]     { return(TOK_DT_DATETIME); }
226                [Uu][Ii][Nn][Tt]8                    { return(TOK_DT_UINT8); }
227                [Uu][Ii][Nn][Tt]16                   { return(TOK_DT_UINT16); }
228                [Uu][Ii][Nn][Tt]32                   { return(TOK_DT_UINT32); }
229                [Uu][Ii][Nn][Tt]64                   { return(TOK_DT_UINT64); }
230                [Ss][Ii][Nn][Tt]8                    { return(TOK_DT_SINT8); }
231                [Ss][Ii][Nn][Tt]16                   { return(TOK_DT_SINT16); }
232                [Ss][Ii][Nn][Tt]32                   { return(TOK_DT_SINT32); }
233                [Ss][Ii][Nn][Tt]64                   { return(TOK_DT_SINT64); }
234                [Rr][Ee][Aa][Ll]32                   { return(TOK_DT_REAL32); }
235                [Rr][Ee][Aa][Ll]64                   { return(TOK_DT_REAL64); }
236 karl      1.14 [Cc][Hh][Aa][Rr]8                    { return(TOK_DT_CHAR8); }
237                [Cc][Hh][Aa][Rr]16                   { return(TOK_DT_CHAR16); }
238                [_a-zA-Z][_$0-9a-zA-Z]*              { cimmof_lval.strval = new String(yytext);
239                                                         return(TOK_SIMPLE_IDENTIFIER); }
240                .                                    { cimmof_lval.strval = new String(yytext);
241                                                         return(TOK_UNEXPECTED_CHAR); }
242 bob       1.1  
243                %%
244                
245 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