cpp-common/bt2c/fmt.hpp: use `wise_enum::string_type` in `EnableIfIsWiseEnum` definition
[babeltrace.git] / src / plugins / ctf / common / src / metadata / tsdl / lexer.lpp
1 %{
2 /*
3 * SPDX-License-Identifier: MIT
4 *
5 * Copyright 2010 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
6 *
7 * Common Trace Formal Lexer
8 */
9
10 #include "plugins/ctf/common/src/metadata/tsdl/ast.hpp"
11 #include "plugins/ctf/common/src/metadata/tsdl/logging.hpp"
12 #include "plugins/ctf/common/src/metadata/tsdl/parser-wrap.hpp"
13 #include "plugins/ctf/common/src/metadata/tsdl/scanner.hpp"
14
15 #define YY_FATAL_ERROR(_msg) BT_CPPLOGF_STR_SPEC(currentCtfScanner->logger, _msg)
16
17 #define PARSE_INTEGER_LITERAL(base) \
18 do { \
19 errno = 0; \
20 yylval->ull = strtoull(yytext, NULL, base); \
21 if (errno) { \
22 _BT_CPPLOGE_APPEND_CAUSE_LINENO( \
23 currentCtfScanner->logger, \
24 yylineno, \
25 "Cannot parser constant integer: " \
26 "base={}, text=\"{}\"", base, yytext); \
27 return CTF_ERROR; \
28 } \
29 } while (0)
30
31 extern thread_local const ctf_scanner *const currentCtfScanner;
32 %}
33
34 %x comment_ml comment_sl string_lit char_const
35 %option reentrant yylineno noyywrap bison-bridge
36 %option extra-type="struct ctf_scanner *"
37 /* bison-locations */
38 INTEGER_SUFFIX (U|UL|ULL|LU|LLU|Ul|Ull|lU|llU|u|uL|uLL|Lu|LLu|ul|ull|lu|llu)
39 DIGIT [0-9]
40 NONDIGIT [a-zA-Z_]
41 HEXDIGIT [0-9A-Fa-f]
42 OCTALDIGIT [0-7]
43 UCHARLOWERCASE \\u{HEXDIGIT}{4}
44 UCHARUPPERCASE \\U{HEXDIGIT}{8}
45 ID_NONDIGIT {NONDIGIT}|{UCHARLOWERCASE}|{UCHARUPPERCASE}
46 IDENTIFIER {ID_NONDIGIT}({ID_NONDIGIT}|{DIGIT})*
47 %%
48
49 /*
50 * Using start conditions to deal with comments
51 * and strings.
52 */
53
54 "/*" BEGIN(comment_ml);
55 <comment_ml>[^*\n]* /* eat anything that's not a '*' */
56 <comment_ml>"*"+[^*/\n]* /* eat up '*'s not followed by '/'s */
57 <comment_ml>\n
58 <comment_ml>"*"+"/" BEGIN(INITIAL);
59
60 "//"[^\n]*\n /* skip comment */
61
62 L?\"(\\.|[^\\"])*\" { if (import_string(yyextra, yylval, yytext, '\"') < 0) return CTF_ERROR; else return CTF_STRING_LITERAL; }
63 L?\'(\\.|[^\\'])*\' { if (import_string(yyextra, yylval, yytext, '\'') < 0) return CTF_ERROR; else return CTF_CHARACTER_LITERAL; }
64
65 "[" return CTF_LSBRAC;
66 "]" return CTF_RSBRAC;
67 "(" return CTF_LPAREN;
68 ")" return CTF_RPAREN;
69 "{" return CTF_LBRAC;
70 "}" return CTF_RBRAC;
71 "->" return CTF_RARROW;
72 "*" return CTF_STAR;
73 "+" return CTF_PLUS;
74 "-" return CTF_MINUS;
75 "<" return CTF_LT;
76 ">" return CTF_GT;
77 := return CTF_TYPEASSIGN;
78 : return CTF_COLON;
79 ; return CTF_SEMICOLON;
80 "..." return CTF_DOTDOTDOT;
81 "." return CTF_DOT;
82 = return CTF_EQUAL;
83 "," return CTF_COMMA;
84 align setstring(yyextra, yylval, yytext); return CTF_TOK_ALIGN;
85 const setstring(yyextra, yylval, yytext); return CTF_CONST;
86 char setstring(yyextra, yylval, yytext); return CTF_CHAR;
87 clock setstring(yyextra, yylval, yytext); return CTF_CLOCK;
88 double setstring(yyextra, yylval, yytext); return CTF_DOUBLE;
89 enum setstring(yyextra, yylval, yytext); return CTF_ENUM;
90 env setstring(yyextra, yylval, yytext); return CTF_ENV;
91 event setstring(yyextra, yylval, yytext); return CTF_EVENT;
92 floating_point setstring(yyextra, yylval, yytext); return CTF_FLOATING_POINT;
93 float setstring(yyextra, yylval, yytext); return CTF_FLOAT;
94 integer setstring(yyextra, yylval, yytext); return CTF_INTEGER;
95 int setstring(yyextra, yylval, yytext); return CTF_INT;
96 long setstring(yyextra, yylval, yytext); return CTF_LONG;
97 short setstring(yyextra, yylval, yytext); return CTF_SHORT;
98 signed setstring(yyextra, yylval, yytext); return CTF_SIGNED;
99 stream setstring(yyextra, yylval, yytext); return CTF_STREAM;
100 string setstring(yyextra, yylval, yytext); return CTF_STRING;
101 struct setstring(yyextra, yylval, yytext); return CTF_STRUCT;
102 trace setstring(yyextra, yylval, yytext); return CTF_TRACE;
103 callsite setstring(yyextra, yylval, yytext); return CTF_CALLSITE;
104 typealias setstring(yyextra, yylval, yytext); return CTF_TYPEALIAS;
105 typedef setstring(yyextra, yylval, yytext); return CTF_TYPEDEF;
106 unsigned setstring(yyextra, yylval, yytext); return CTF_UNSIGNED;
107 variant setstring(yyextra, yylval, yytext); return CTF_VARIANT;
108 void setstring(yyextra, yylval, yytext); return CTF_VOID;
109 _Bool setstring(yyextra, yylval, yytext); return CTF_BOOL;
110 _Complex setstring(yyextra, yylval, yytext); return CTF_COMPLEX;
111 _Imaginary setstring(yyextra, yylval, yytext); return CTF_IMAGINARY;
112 [1-9]{DIGIT}*{INTEGER_SUFFIX}? PARSE_INTEGER_LITERAL(10); return CTF_INTEGER_LITERAL;
113 0{OCTALDIGIT}*{INTEGER_SUFFIX}? PARSE_INTEGER_LITERAL(8); return CTF_INTEGER_LITERAL;
114 0[xX]{HEXDIGIT}+{INTEGER_SUFFIX}? PARSE_INTEGER_LITERAL(16); return CTF_INTEGER_LITERAL;
115
116 {IDENTIFIER} BT_CPPLOGT_SPEC(currentCtfScanner->logger, "Got identifier: id=\"{}\"", yytext); setstring(yyextra, yylval, yytext); if (is_type(yyextra, yytext)) return ID_TYPE; else return IDENTIFIER;
117 [ \t\r\n] ; /* ignore */
118 . _BT_CPPLOGE_APPEND_CAUSE_LINENO(currentCtfScanner->logger, yylineno, "Invalid character: char=\"{}\", val={:#02x}", isprint((unsigned char) yytext[0]) ? yytext[0] : '\0', yytext[0]); return CTF_ERROR;
119 %%
This page took 0.03169 seconds and 4 git commands to generate.