Warning, /games/kmuddy/libs/flex-input.lex is written in an unsupported language. File is not indexed.

0001 %option noyywrap
0002 %option nounput
0003 %{
0004 /*
0005 Copyright 2005-2011 Tomas Mecir <kmuddy@kmuddy.com>
0006 Copyright 2005 Alex Bache <alexbache@ntlworld.com>
0007 
0008 This program is free software; you can redistribute it and/or
0009 modify it under the terms of the GNU General Public License as
0010 published by the Free Software Foundation; either version 2 of 
0011 the License, or (at your option) any later version.
0012 
0013 This program is distributed in the hope that it will be useful,
0014 but WITHOUT ANY WARRANTY; without even the implied warranty of
0015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0016 GNU General Public License for more details.
0017 
0018 You should have received a copy of the GNU General Public License
0019 along with this program.  If not, see <http://www.gnu.org/licenses/>.
0020 */
0021     #include "cvalue.h"
0022     #include "bison-input.tab.hpp"
0023    
0024    void yyerror(char *);
0025    
0026    using namespace std;
0027    
0028    // Use global variables from Bison module
0029    extern const char *source;
0030    extern bool        new_source;
0031    extern bool        token_error;
0032 %}
0033 
0034 DIGIT [0-9]
0035 LETTER [A-Za-z_]
0036 SPACE [ ]
0037 
0038 %%
0039 
0040    if (new_source)
0041    {
0042       // cout << "Switching to new buffer\n";
0043       // cout.flush();
0044       
0045       yy_delete_buffer(YY_CURRENT_BUFFER);
0046       yy_switch_to_buffer(yy_scan_string(source));
0047       new_source = false;
0048    }
0049    
0050 
0051 {DIGIT}+  {
0052              // Integer
0053              yylval.int_val = atoi(yytext); 
0054              return INTEGER;
0055           }
0056 
0057 {DIGIT}+"."{DIGIT}+  {
0058                         // Double
0059                         yylval.double_val = QString(yytext).toDouble();
0060                         return DOUBLE_V;
0061                      }
0062 
0063 ${LETTER}({LETTER}|{DIGIT})*  {  
0064                                  // variable name
0065                                  yylval.string_val = strdup(yytext+1); 
0066                                  return STRING_V;
0067                               }
0068 ${DIGIT}+                     {  
0069                                  // variable name looking like $number
0070                                  yylval.string_val = strdup(yytext+1); 
0071                                  return STRING_V;
0072                               }
0073 
0074 {LETTER}({LETTER}|{DIGIT})*{SPACE}*\(   {  
0075                                    // Function name
0076                                    // strip the parenthesis
0077                                    yytext[yyleng-1]  = '\0';
0078                                    int len = yyleng-2;
0079                                    // strip the spaces too
0080                                    for (; len >= 0; --len)
0081                                      if (yytext[len] == ' ')
0082                                        yytext[len] = '\0';
0083                                      else
0084                                        break;
0085                                    yylval.string_val = strdup(yytext);
0086                                    return FUNCTION_NAME;
0087                                 }
0088 
0089 \"[^"]*\"  {
0090               // String literal
0091               yytext[yyleng-1] = '\0';
0092               
0093               yylval.string_val = strdup(yytext+1);
0094               return STRING_LITERAL;
0095            }
0096                               
0097 "(int)"    { return INT_TYPECAST;    }
0098 "(double)" { return DOUBLE_TYPECAST; }
0099 "(string)" { return STRING_TYPECAST; }
0100 
0101 "&&" { return AND; }
0102 "||" { return OR;  }
0103 ">"  { return GT;  }
0104 ">=" { return GE;  }
0105 "<"  { return LT;  }
0106 "<=" { return LE;  }
0107 "==" { return EQ;  }
0108 "!=" { return NE;  }
0109 
0110 [-+*/()\.,!]  { return *yytext; }
0111 
0112 [ \t\n]    ;
0113 
0114 .          { token_error = true; yyterminate(); }
0115 
0116 %%