Add CTF metadata lexer/parser (lex/yacc)
[babeltrace.git] / formats / ctf / metadata / ctf-lexer.l
CommitLineData
8b9d5b5e
MD
1%{
2#include <stdio.h>
3#include "ctf-parser.h"
4#include "ctf-ast.h"
5
6extern YYSTYPE yylval;
7extern void setstring(const char *src);
8%}
9
10%x comment_ml comment_sl string_lit char_const
11INTEGER_SUFFIX [ \n\t]*(U|UL|ULL|LU|LLU|Ul|Ull|lU|llU|u|uL|uLL|Lu|LLu|ul|ull|lu|llu)
12DIGIT [0-9]
13NONDIGIT [a-zA-Z_]
14HEXDIGIT [0-9A-Fa-f]
15OCTALDIGIT [0-7]
16UCHARLOWERCASE \\u{HEXDIGIT}{4}
17UCHARUPPERCASE \\U{HEXDIGIT}{8}
18ID_NONDIGIT {NONDIGIT}|{UCHARLOWERCASE}|{UCHARUPPERCASE}
19IDENTIFIER {ID_NONDIGIT}({ID_NONDIGIT}|{DIGIT})*
20ESCSEQ \\(\'|\"|\?|\\|a|b|f|n|r|t|v|{OCTALDIGIT}{1,3}|u{HEXDIGIT}{4}|U{HEXDIGIT}{8}|x{HEXDIGIT}+)
21%%
22
23 /*
24 * Using start conditions to deal with comments
25 * and strings.
26 */
27
28"/*" BEGIN(comment_ml);
29<comment_ml>[^*\n]* /* eat anything that's not a '*' */
30<comment_ml>"*"+[^*/\n]* /* eat up '*'s not followed by '/'s */
31<comment_ml>\n ++yylineno;
32<comment_ml>"*"+"/" BEGIN(INITIAL);
33
34"//" BEGIN(comment_sl);
35<comment_sl>[^\n]*\n ++yylineno; BEGIN(INITIAL);
36
37L\' BEGIN(char_const); return CHARACTER_CONSTANT_START;
38\' BEGIN(char_const); return CHARACTER_CONSTANT_START;
39<char_const>\' BEGIN(INITIAL); return SQUOTE;
40
41L\" BEGIN(string_lit); return STRING_LITERAL_START;
42\" BEGIN(string_lit); return STRING_LITERAL_START;
43<string_lit>\" BEGIN(INITIAL); return DQUOTE;
44
45<char_const,string_lit>ESCSEQ return ESCSEQ;
46<char_const,string_lit>\n ; /* ignore */
47<char_const,string_lit>. return CHAR_STRING_TOKEN;
48
49"[" return LSBRAC;
50"]" return RSBRAC;
51"(" return LPAREN;
52")" return RPAREN;
53"{" return LBRAC;
54"}" return RBRAC;
55"->" return RARROW;
56"*" return STAR;
57"+" return PLUS;
58"-" return MINUS;
59"<" return LT;
60">" return GT;
61:= return TYPEASSIGN;
62: return COLON;
63; return SEMICOLON;
64"..." return DOTDOTDOT;
65"." return DOT;
66= return EQUAL;
67"," return COMMA;
68const return CONST;
69char return CHAR;
70double return DOUBLE;
71enum return ENUM;
72event return EVENT;
73floating_point return FLOATING_POINT;
74float return FLOAT;
75integer return INTEGER;
76int return INT;
77long return LONG;
78short return SHORT;
79signed return SIGNED;
80stream return STREAM;
81string return STRING;
82struct return STRUCT;
83trace return TRACE;
84typealias return TYPEALIAS;
85typedef return TYPEDEF;
86unsigned return UNSIGNED;
87variant return VARIANT;
88void return VOID;
89_Bool return _BOOL;
90_Complex return _COMPLEX;
91_Imaginary return _IMAGINARY;
92[1-9]{DIGIT}*{INTEGER_SUFFIX}? return DECIMAL_CONSTANT;
930{OCTALDIGIT}*{INTEGER_SUFFIX}? return OCTAL_CONSTANT;
940[xX]{HEXDIGIT}+{INTEGER_SUFFIX}? return HEXADECIMAL_CONSTANT;
95{IDENTIFIER} fprintf(stderr, "<IDENTIFIER %s>\n", yytext); setstring(yytext); if (is_type(yytext)) return ID_TYPE; else return IDENTIFIER;
96[ \t\n]+ ; /* ignore */
97. return ERROR;
98%%
This page took 0.025575 seconds and 4 git commands to generate.