%{
+/*
+ * ctf-lexer.l
+ *
+ * Common Trace Formal Lexer
+ *
+ * Copyright 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ */
+
#include <stdio.h>
#include "ctf-scanner.h"
#include "ctf-parser.h"
#include "ctf-ast.h"
-extern void setstring(struct ctf_scanner *scanner, YYSTYPE *lvalp, const char *src);
+extern
+void setstring(struct ctf_scanner *scanner, YYSTYPE *lvalp, const char *src);
+
+static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner)
+ __attribute__((unused));
+static int input (yyscan_t yyscanner) __attribute__((unused));
-#define printf_dbg(fmt, args...) fprintf(stderr, "%s: " fmt, __func__, args)
-#define printf_dbg_noarg(fmt) fprintf(stderr, "%s: " fmt, __func__)
+#define printf_dbg(fmt, args...) fprintf(stderr, "%s: " fmt, __func__, ##args)
%}
<char_const,string_lit>ESCSEQ return ESCSEQ;
<char_const,string_lit>\n ; /* ignore */
-<char_const,string_lit>. return CHAR_STRING_TOKEN;
+<char_const,string_lit>. setstring(yyextra, yylval, yytext); return CHAR_STRING_TOKEN;
"[" return LSBRAC;
"]" return RSBRAC;
"." return DOT;
= return EQUAL;
"," return COMMA;
-const return CONST;
-char return CHAR;
-double return DOUBLE;
-enum return ENUM;
-event return EVENT;
-floating_point return FLOATING_POINT;
-float return FLOAT;
-integer return INTEGER;
-int return INT;
-long return LONG;
-short return SHORT;
-signed return SIGNED;
-stream return STREAM;
-string return STRING;
-struct return STRUCT;
-trace return TRACE;
-typealias return TYPEALIAS;
-typedef return TYPEDEF;
-unsigned return UNSIGNED;
-variant return VARIANT;
-void return VOID;
-_Bool return _BOOL;
-_Complex return _COMPLEX;
-_Imaginary return _IMAGINARY;
-[1-9]{DIGIT}*{INTEGER_SUFFIX}? return DECIMAL_CONSTANT;
-0{OCTALDIGIT}*{INTEGER_SUFFIX}? return OCTAL_CONSTANT;
-0[xX]{HEXDIGIT}+{INTEGER_SUFFIX}? return HEXADECIMAL_CONSTANT;
+const setstring(yyextra, yylval, yytext); return CONST;
+char setstring(yyextra, yylval, yytext); return CHAR;
+double setstring(yyextra, yylval, yytext); return DOUBLE;
+enum setstring(yyextra, yylval, yytext); return ENUM;
+event setstring(yyextra, yylval, yytext); return EVENT;
+floating_point setstring(yyextra, yylval, yytext); return FLOATING_POINT;
+float setstring(yyextra, yylval, yytext); return FLOAT;
+integer setstring(yyextra, yylval, yytext); return INTEGER;
+int setstring(yyextra, yylval, yytext); return INT;
+long setstring(yyextra, yylval, yytext); return LONG;
+short setstring(yyextra, yylval, yytext); return SHORT;
+signed setstring(yyextra, yylval, yytext); return SIGNED;
+stream setstring(yyextra, yylval, yytext); return STREAM;
+string setstring(yyextra, yylval, yytext); return STRING;
+struct setstring(yyextra, yylval, yytext); return STRUCT;
+trace setstring(yyextra, yylval, yytext); return TRACE;
+typealias setstring(yyextra, yylval, yytext); return TYPEALIAS;
+typedef setstring(yyextra, yylval, yytext); return TYPEDEF;
+unsigned setstring(yyextra, yylval, yytext); return UNSIGNED;
+variant setstring(yyextra, yylval, yytext); return VARIANT;
+void setstring(yyextra, yylval, yytext); return VOID;
+_Bool setstring(yyextra, yylval, yytext); return _BOOL;
+_Complex setstring(yyextra, yylval, yytext); return _COMPLEX;
+_Imaginary setstring(yyextra, yylval, yytext); return _IMAGINARY;
+[1-9]{DIGIT}*{INTEGER_SUFFIX}? setstring(yyextra, yylval, yytext); return DECIMAL_CONSTANT;
+0{OCTALDIGIT}*{INTEGER_SUFFIX}? setstring(yyextra, yylval, yytext); return OCTAL_CONSTANT;
+0[xX]{HEXDIGIT}+{INTEGER_SUFFIX}? setstring(yyextra, yylval, yytext); return HEXADECIMAL_CONSTANT;
{IDENTIFIER} printf_dbg("<IDENTIFIER %s>\n", yytext); setstring(yyextra, yylval, yytext); if (is_type(yyextra, yytext)) return ID_TYPE; else return IDENTIFIER;
[ \t\n]+ ; /* ignore */
. return ERROR;