blob: d212d58ab1941040c763ac6ebe7351eb80502cab (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
%option batch
%option c++
%option noyywrap
%option 8bit
%option stack
%option yylineno
%option yyclass="Slicer::UnpackPqTextArray"
%option prefix="pqBase"
%{
#include "unpackPqTextArray.h"
#include <boost/algorithm/string/trim.hpp>
#pragma GCC diagnostic ignored "-Wconversion"
#pragma GCC diagnostic ignored "-Wsign-compare"
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
#pragma GCC diagnostic ignored "-Wold-style-cast"
#if __clang__
#pragma GCC diagnostic ignored "-Wnull-conversion"
#else
#pragma GCC diagnostic ignored "-Wuseless-cast"
#endif
%}
begin "{"
end "}"
comma ,
unquoted [^,\"}]+
quote \"
esc \\.
char [^"]
%x FIRST
%x AFTER
%x NEXT
%x QUOTED
%%
{begin} {
yy_push_state(FIRST);
}
<FIRST,AFTER>{end} {
yy_pop_state();
}
<FIRST,NEXT>{unquoted} {
consume(YYText());
BEGIN(AFTER);
}
<FIRST,NEXT>{quote} {
buffer.clear();
BEGIN(QUOTED);
}
<AFTER>{comma} {
BEGIN(NEXT);
}
<QUOTED>{quote} {
consume(buffer);
BEGIN(AFTER);
}
<QUOTED>{esc} {
buffer.push_back(*(YYText() + 1));
}
<QUOTED>{char} {
buffer.append(YYText());
}
%%
namespace Slicer {
UnpackPqTextArray::UnpackPqTextArray(std::istream & f) :
yyFlexLexer(&f, NULL)
{
}
void
UnpackPqTextArray::LexerError(const char * msg)
{
throw std::runtime_error(msg);
}
}
|