summaryrefslogtreecommitdiff
path: root/glcpp
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2010-06-16 17:41:12 -0700
committerKenneth Graunke <kenneth@whitecape.org>2010-06-21 11:31:56 -0700
commitdb938103c7d22a3bd4b14202f7f69f273840f2cc (patch)
tree3e56d3e3d50936b6af207a1bb85988a0c3cfeca2 /glcpp
parent465e03ee07b778ed4edc24a810b9795409bcdbf9 (diff)
glcpp: Set line locations in the lexer.
Diffstat (limited to 'glcpp')
-rw-r--r--glcpp/glcpp-lex.l25
1 files changed, 21 insertions, 4 deletions
diff --git a/glcpp/glcpp-lex.l b/glcpp/glcpp-lex.l
index f173369..3703ad9 100644
--- a/glcpp/glcpp-lex.l
+++ b/glcpp/glcpp-lex.l
@@ -27,13 +27,22 @@
#include "glcpp.h"
#include "glcpp-parse.h"
+
+#define YY_USER_ACTION \
+ do { \
+ yylloc->source = 0; \
+ yylloc->first_column = yycolumn + 1; \
+ yylloc->first_line = yylineno + 1; \
+ yycolumn += yyleng; \
+ } while(0);
%}
%option bison-bridge bison-locations reentrant noyywrap
%option extra-type="glcpp_parser_t *"
%option prefix="glcpp_"
+%option stack
-%x DONE
+%x DONE COMMENT
SPACE [[:space:]]
NONSPACE [^[:space:]]
@@ -48,17 +57,23 @@ DECIMAL_INTEGER [1-9][0-9]*[uU]?
OCTAL_INTEGER 0[0-7]*[uU]?
HEXADECIMAL_INTEGER 0[xX][0-9a-fA-F]+[uU]?
-NON_STARS_THEN_STARS [^*]*[*]+
-
%%
/* Single-line comments */
"//"[^\n]+\n {
+ yylineno++;
+ yycolumn = 0;
return NEWLINE;
}
/* Multi-line comments */
-"/*"({NON_STARS_THEN_STARS}[^*/])*{NON_STARS_THEN_STARS}"/" {
+"/*" { yy_push_state(COMMENT, yyscanner); }
+<COMMENT>[^*\n]*
+<COMMENT>[^*\n]*\n { yylineno++; yycolumn = 0; }
+<COMMENT>"*"+[^*/\n]*
+<COMMENT>"*"+[^*/\n]*\n { yylineno++; yycolumn = 0; }
+<COMMENT>"*"+"/" {
+ yy_pop_state(yyscanner);
if (yyextra->space_tokens)
return SPACE;
}
@@ -216,6 +231,8 @@ NON_STARS_THEN_STARS [^*]*[*]+
\n {
yyextra->lexing_if = 0;
+ yylineno++;
+ yycolumn = 0;
return NEWLINE;
}