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

  1 martin 1.18 /*
  2             //%LICENSE////////////////////////////////////////////////////////////////
  3 martin 1.19 //
  4 martin 1.18 // Licensed to The Open Group (TOG) under one or more contributor license
  5             // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
  6             // this work for additional information regarding copyright ownership.
  7             // Each contributor licenses this file to you under the OpenPegasus Open
  8             // Source License; you may not use this file except in compliance with the
  9             // License.
 10 martin 1.19 //
 11 martin 1.18 // Permission is hereby granted, free of charge, to any person obtaining a
 12             // copy of this software and associated documentation files (the "Software"),
 13             // to deal in the Software without restriction, including without limitation
 14             // the rights to use, copy, modify, merge, publish, distribute, sublicense,
 15             // and/or sell copies of the Software, and to permit persons to whom the
 16             // Software is furnished to do so, subject to the following conditions:
 17 martin 1.19 //
 18 martin 1.18 // The above copyright notice and this permission notice shall be included
 19             // in all copies or substantial portions of the Software.
 20 martin 1.19 //
 21 martin 1.18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 22 martin 1.19 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 23 martin 1.18 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 24             // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 25             // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 26             // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 27             // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 28 martin 1.19 //
 29 martin 1.18 //////////////////////////////////////////////////////////////////////////
 30             */
 31 karl   1.10 
 32 bob    1.1  %option never-interactive
 33 karl   1.20.8.2 %option nounput
 34                 %option noyy_top_state
 35 e.boden 1.7      %option stack
 36                  %option yylineno
 37 karl    1.14     %{
 38 bob     1.1      
 39 karl    1.20     
 40 bob     1.1      #include "cimmofParser.h"
 41                  #include "memobjs.h"
 42                  #include "cimmof_tab.h"
 43                  
 44 kumpf   1.16     /* Avoid warn_unused_result warnings in Linux RPM build */
 45 kumpf   1.17     #ifndef ECHO
 46 karl    1.20.8.1 # define ECHO do { fwrite(yytext, yyleng, 1, yyout); } while(0)
 47 kumpf   1.17     #endif
 48 kumpf   1.16     
 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 karl    1.20.8.1 /* Pointer to name for metaQualifiers communicated between lexer and parser */
 81                  char * metaQualifierName;
 82                  
 83 bob     1.1      
 84                  %}
 85                  
 86                  
 87 gs.keenan 1.9      %x myStr myHex
 88 bob       1.1      %%
 89                    
 90                    
 91 karl      1.14     \n             { cimmofParser::Instance()->increment_lineno(); }
 92                    \/\/.*[\r\n]?  { cimmofParser::Instance()->increment_lineno(); }
 93                    [ \t\r]        { /* skip white space */ }
 94                    class          { return(TOK_CLASS); }
 95                    \{             { return(TOK_LEFTCURLYBRACE); }
 96                    \}             { return(TOK_RIGHTCURLYBRACE); }
 97                    \[             { return(TOK_LEFTSQUAREBRACKET); }
 98                    \]             { return(TOK_RIGHTSQUAREBRACKET); }
 99                    \(             { return(TOK_LEFTPAREN); }
100                    \)             { return(TOK_RIGHTPAREN); }
101                    \:             { return(TOK_COLON); }
102                    ;              { return(TOK_SEMICOLON); }
103 kumpf     1.15     [+-]?[0-9]*\.[0-9]+([eE][+-]?[0-9]+)? {
104 karl      1.14                        cimmof_lval.strval = new String(yytext);
105                                       return(TOK_REAL_VALUE); }
106 kumpf     1.15     [+-]?0[0-7]+   { cimmof_lval.strval = new String(yytext);
107 karl      1.14                        return(TOK_OCTAL_VALUE); }
108 kumpf     1.15     [+-]?0x[0-9A-Fa-f]+ { cimmof_lval.strval = new String(yytext);
109 karl      1.14                        return(TOK_HEX_VALUE); }
110 kumpf     1.15     [+-]?[01]+[Bb] { cimmof_lval.strval = new String(yytext);
111 karl      1.14                        return(TOK_BINARY_VALUE); }
112 kumpf     1.15     [1-9][0-9]*    { cimmof_lval.strval = new String(yytext);
113 karl      1.14                        return(TOK_POSITIVE_DECIMAL_VALUE); }
114 kumpf     1.15     [+-]?[0-9]+    { /* Note: All non-zero unsigned integers are handled above */
115                                     cimmof_lval.strval = new String(yytext);
116 karl      1.14                        return(TOK_SIGNED_DECIMAL_VALUE); }
117                    \=             { return(TOK_EQUAL); }
118                    ,              { return(TOK_COMMA); }
119                    \'.+\'         { cimmof_lval.strval = new String(yytext);
120                                       return(TOK_CHAR_VALUE); }
121                    
122                        /*--- bugzilla 544 fix; handle string escapes ---
123                    
124                           an impl. decision: invalid escape sequences
125                           are simply ignored, and left in the string.
126                    
127                           an impl. decision: yyleng is set to the len
128                           of resulting string, not the len of the matched
129                           token(s), since they are different, with escapes.
130                           (but note; cimmof.y does not use yyleng!)
131                    
132                           an impl. req't: strings are returned to parser
133 karl      1.20.8.1        with enclosing "s.
134 karl      1.14         */
135                    
136                    \"             { BEGIN(myStr); strbuf_p = strbuf;
137                                   /**strbuf_p++ = '"';*/ }
138                    <myStr>\"      { BEGIN(INITIAL);
139                                   /**strbuf_p++ = '"';*/  *strbuf_p = '\0';
140                                      cimmof_leng = strbuf_p - strbuf;
141                                      cimmof_lval.strval = new String(strbuf);
142                                      return TOK_STRING_VALUE; }
143                    <myStr><<EOF>> |
144                    <myStr>\n      { BEGIN(INITIAL);
145                                   /**strbuf_p++ = '"';*/  *strbuf_p = '\0';
146                                      cimmof_leng = strbuf_p - strbuf;
147                                      cimmof_lval.strval = new String(strbuf);
148                                      return TOK_UNEXPECTED_CHAR; }
149                    <myStr>\\b     { /* backspace */        *strbuf_p++ = '\b'; }
150                    <myStr>\\f     { /* form feed */        *strbuf_p++ = '\f'; }
151                    <myStr>\\n     { /* line feed */        *strbuf_p++ = '\n'; }
152                    <myStr>\\r     { /* carriage return */  *strbuf_p++ = '\r'; }
153                    <myStr>\\t     { /* horizontal tab */   *strbuf_p++ = '\t'; }
154                    <myStr>\\'     { /* single quote */     *strbuf_p++ = '\''; }
155 karl      1.14     <myStr>\\\"    { /* double quote */     *strbuf_p++ = '"';  }
156                    <myStr>\\\\    { /* backslash */        *strbuf_p++ = '\\'; }
157                    <myStr>\\[xX]  { yy_push_state(myHex);
158                                      memcpy(slashx,yytext,2);
159                                   }
160                    <myStr>\\(.|\n)         { *strbuf_p++ = '\\';
161                                            *strbuf_p++ = yytext[1]; }
162                    <myStr>[^\\\n\"]+       { char *t = yytext;
163                                                while( *t ) *strbuf_p++ = *t++;
164                                                *strbuf_p = '\0'; }
165                    <myHex>[0-9A-Fa-f]{1,4} { /* get escaped hex digits */
166                                                char  hexfmt[4];   unsigned int n;
167                                                sprintf( hexfmt, "%%%dx", yyleng );
168                                                sscanf(yytext, hexfmt, &n);
169                                                if (n>255) {
170                                                    memcpy(strbuf_p,slashx,2);
171                                                    strbuf_p += 2;
172                                                    char *t = yytext;
173                                                    while( *t ) *strbuf_p++ = *t++;
174                                                }
175                                                else *strbuf_p++ = (char)n;
176 karl      1.14                                     yy_pop_state();
177                                            }
178                    <myHex>.                { memcpy(strbuf_p,slashx,2);
179                                                  strbuf_p += 2;
180                                                  *strbuf_p++ = *yytext;
181                                                  yy_pop_state();
182                                            }
183                                            /* --- end of bugzilla 544 fix --- */
184                    
185                    
186                    \/\*                    {   int c1=0, c2=yyinput();
187                                                    for(;;) {
188                                                         if (c2==EOF) break;
189                                                         if (c1=='*' && c2=='/') break;
190                                                         c1=c2;
191                                                         c2=yyinput();
192                                                    }
193                                            }
194                    <<EOF>>                              { yyterminate(); }
195                    [Nn][Uu][Ll][Ll]                     { return(TOK_NULL_VALUE); }
196                    [Tt][Rr][Uu][Ee]                     { return(TOK_TRUE); }
197 karl      1.14     [Ff][Aa][Ll][Ss][Ee]                 { return(TOK_FALSE); }
198                    \.                                   { return(TOK_PERIOD); }
199                    \#[Pp][Rr][Aa][Gg][Mm][Aa]           { return(TOK_PRAGMA); }
200                    [Ii][Nn][Ss][Tt][Aa][Nn][Cc][Ee]     { return(TOK_INSTANCE); }
201                    [Oo][Ff]                             { return(TOK_OF); }
202 bob       1.1      [Qq][Uu][Aa][Ll][Ii][Ff][Ii][Ee][Rr] {return(TOK_QUALIFIER); }
203 karl      1.14     [Ss][Cc][Oo][Pp][Ee]                 { return(TOK_SCOPE); }
204 karl      1.20.8.1 
205                    [Aa][Ss][Ss][Oo][Cc][Ii][Aa][Tt][Ii][Oo][Nn] {
206                                                           metaQualifierName = strdup(yytext);
207                                                           return(TOK_ASSOCIATION); }
208                    [Ii][Nn][Dd][Ii][Cc][Aa][Tt][Ii][Oo][Nn] {
209                                                           metaQualifierName = strdup(yytext);
210                                                           return(TOK_INDICATION); }
211                    
212 karl      1.14     [Pp][Rr][Oo][Pp][Ee][Rr][Tt][Yy]     { return(TOK_PROPERTY); }
213 bob       1.1      [Rr][Ee][Ff][Ee][Rr][Ee][Nn][Cc][Ee] { return(TOK_REFERENCE); }
214 karl      1.14     [Mm][Ee][Tt][Hh][Oo][Dd]             { return(TOK_METHOD); }
215 bob       1.1      [Pp][Aa][Rr][Aa][Mm][Ee][Tt][Ee][Rr] {return(TOK_PARAMETER); }
216 karl      1.14     [Aa][Nn][Yy]                         { return(TOK_ANY); }
217 karl      1.20.8.1 
218 karl      1.14     [Rr][Ee][Ff]                         { return(TOK_REF); }
219                    [Ff][Ll][Aa][Vv][Oo][Rr]             { return(TOK_FLAVOR); }
220 bob       1.1      [Ee][Nn][Aa][Bb][Ll][Ee][Oo][Vv][Ee][Rr][Rr][Ii][Dd][Ee] {
221 karl      1.14                                              return(TOK_ENABLEOVERRIDE); }
222 bob       1.1      [Dd][Ii][Ss][Aa][Bb][Ll][Ee][Oo][Vv][Ee][Rr][Rr][Ii][Dd][Ee] {
223 karl      1.14                                              return(TOK_DISABLEOVERRIDE); }
224                    [Rr][Ee][Ss][Tt][Rr][Ii][Cc][Tt][Ee][Dd] { return(TOK_RESTRICTED); }
225                    [Tt][Oo][Ss][Uu][Bb][Cc][Ll][Aa][Ss][Ss] { return(TOK_TOSUBCLASS); }
226                    [Tt][Rr][Aa][Nn][Ss][Ll][Aa][Tt][Aa][Bb][Ll][Ee] { return(TOK_TRANSLATABLE); }
227                    [Ii][Nn][Cc][Ll][Uu][Dd][Ee]         { return(TOK_INCLUDE); }
228                    $[_$0-9a-zA-Z]+                      { cimmof_lval.strval = new String(yytext);
229                                                           return TOK_ALIAS_IDENTIFIER; }
230                    [Aa][Ss]                             { return TOK_AS; }
231                    [Ss][Tt][Rr][Ii][Nn][Gg]             { return(TOK_DT_STR); }
232                    [Bb][Oo][Oo][Ll][Ee][Aa][Nn]         { return(TOK_DT_BOOL); }
233                    [Dd][Aa][Tt][Ee][Tt][Ii][Mm][Ee]     { return(TOK_DT_DATETIME); }
234                    [Uu][Ii][Nn][Tt]8                    { return(TOK_DT_UINT8); }
235                    [Uu][Ii][Nn][Tt]16                   { return(TOK_DT_UINT16); }
236                    [Uu][Ii][Nn][Tt]32                   { return(TOK_DT_UINT32); }
237                    [Uu][Ii][Nn][Tt]64                   { return(TOK_DT_UINT64); }
238                    [Ss][Ii][Nn][Tt]8                    { return(TOK_DT_SINT8); }
239                    [Ss][Ii][Nn][Tt]16                   { return(TOK_DT_SINT16); }
240                    [Ss][Ii][Nn][Tt]32                   { return(TOK_DT_SINT32); }
241                    [Ss][Ii][Nn][Tt]64                   { return(TOK_DT_SINT64); }
242                    [Rr][Ee][Aa][Ll]32                   { return(TOK_DT_REAL32); }
243                    [Rr][Ee][Aa][Ll]64                   { return(TOK_DT_REAL64); }
244 karl      1.14     [Cc][Hh][Aa][Rr]8                    { return(TOK_DT_CHAR8); }
245                    [Cc][Hh][Aa][Rr]16                   { return(TOK_DT_CHAR16); }
246                    [_a-zA-Z][_$0-9a-zA-Z]*              { cimmof_lval.strval = new String(yytext);
247                                                             return(TOK_SIMPLE_IDENTIFIER); }
248                    .                                    { cimmof_lval.strval = new String(yytext);
249                                                             return(TOK_UNEXPECTED_CHAR); }
250 bob       1.1      
251                    %%
252                    
253 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