~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/execute/scanner.l

Merge in partial for VJ

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
 
2
 * 
 
3
 *  Drizzle Execute Parser
 
4
 *
 
5
 *  Copyright (C) 2011 Data Differential, http://datadifferential.com/
 
6
 *  All rights reserved.
 
7
 *
 
8
 *  Redistribution and use in source and binary forms, with or without
 
9
 *  modification, are permitted provided that the following conditions are
 
10
 *  met:
 
11
 *
 
12
 *      * Redistributions of source code must retain the above copyright
 
13
 *  notice, this list of conditions and the following disclaimer.
 
14
 *
 
15
 *      * Redistributions in binary form must reproduce the above
 
16
 *  copyright notice, this list of conditions and the following disclaimer
 
17
 *  in the documentation and/or other materials provided with the
 
18
 *  distribution.
 
19
 *
 
20
 *      * The names of its contributors may not be used to endorse or
 
21
 *  promote products derived from this software without specific prior
 
22
 *  written permission.
 
23
 *
 
24
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 
25
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 
26
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 
27
 *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 
28
 *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 
29
 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 
30
 *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 
31
 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 
32
 *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
33
 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
34
 *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
35
 *
 
36
 */
 
37
 
 
38
%top{
 
39
 
 
40
#pragma GCC diagnostic ignored "-Wold-style-cast"
 
41
#pragma GCC diagnostic ignored "-Wsign-compare"
 
42
#pragma GCC diagnostic ignored "-Wunused-parameter"
 
43
 
 
44
#define YY_EXTRA_TYPE Context*
 
45
 
 
46
}
 
47
 
 
48
 
 
49
%{
 
50
#include <cstdlib>
 
51
#include <cstring>
 
52
 
 
53
#define PARAM yyget_extra(yyscanner)
 
54
 
 
55
#define get_lex_chars(buffer, result, max_size, context) \
 
56
{ \
 
57
  if (context->pos >= context->length) \
 
58
  { \
 
59
    result= YY_NULL; \
 
60
  } \
 
61
  else \
 
62
  { \
 
63
    result= (int)(context->length - context->pos); \
 
64
    (size_t)result > (size_t)max_size ? result= max_size : 0; \
 
65
    memcpy(buffer, context->buf + context->pos, result); \
 
66
    context->pos += result; \
 
67
  } \
 
68
}
 
69
 
 
70
 
 
71
#define YY_INPUT(buffer, result, max_size) get_lex_chars(buffer, result, max_size, PARAM)
 
72
 
 
73
%}
 
74
 
 
75
%option 8bit
 
76
%option bison-bridge
 
77
%option case-insensitive
 
78
%option debug
 
79
%option nounput
 
80
%option noyywrap
 
81
%option outfile="drizzled/execute/scanner.cc" header-file="drizzled/execute/scanner.h"
 
82
%option perf-report
 
83
%option prefix="execute_"
 
84
%option reentrant
 
85
 
 
86
%%
 
87
 
 
88
 
 
89
[\t\r\n] ; /* skip whitespace */
 
90
 
 
91
[[:alnum:]]["."[:alnum:]_-]+[[:alnum:]] {
 
92
      yylval->string.c_str = yytext;
 
93
      yylval->string.length = yyleng;
 
94
 
 
95
      return STRING;
 
96
    }
 
97
 
 
98
.   {
 
99
      yyextra->begin= yytext;
 
100
      return UNKNOWN;
 
101
    }
 
102
 
 
103
%%
 
104
 
 
105
namespace drizzled {
 
106
namespace execute {
 
107
 
 
108
void Context::init_scanner()
 
109
{
 
110
  yylex_init(&scanner);
 
111
  yyset_extra(this, scanner);
 
112
}
 
113
 
 
114
void Context::destroy_scanner()
 
115
{
 
116
  yylex_destroy(scanner);
 
117
}
 
118
 
 
119
} // namespace execute
 
120
} // namespace drizzled
 
121