diff options
author | Kenneth Graunke <kenneth@whitecape.org> | 2010-06-16 17:41:12 -0700 |
---|---|---|
committer | Kenneth Graunke <kenneth@whitecape.org> | 2010-06-21 11:31:56 -0700 |
commit | db938103c7d22a3bd4b14202f7f69f273840f2cc (patch) | |
tree | 3e56d3e3d50936b6af207a1bb85988a0c3cfeca2 /glcpp | |
parent | 465e03ee07b778ed4edc24a810b9795409bcdbf9 (diff) |
glcpp: Set line locations in the lexer.
Diffstat (limited to 'glcpp')
-rw-r--r-- | glcpp/glcpp-lex.l | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/glcpp/glcpp-lex.l b/glcpp/glcpp-lex.l index f17336974e..3703ad90fe 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; } |