diff options
Diffstat (limited to 'glcpp-lex.l')
-rw-r--r-- | glcpp-lex.l | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/glcpp-lex.l b/glcpp-lex.l index a220fef76b..f1a3560779 100644 --- a/glcpp-lex.l +++ b/glcpp-lex.l @@ -36,22 +36,40 @@ SPACE [[:space:]] NONSPACE [^[:space:]] -NOTNEWLINE [^\n] +NEWLINE [\n] HSPACE [ \t] HASH ^{HSPACE}*# IDENTIFIER [_a-zA-Z][_a-zA-Z0-9]* -DEFVAL {NONSPACE}{NOTNEWLINE}* +TOKEN {NONSPACE}+ + %% -{HASH}define { BEGIN ST_DEFINE; return DEFINE; } +{HASH}define{HSPACE}* { + BEGIN ST_DEFINE; + return DEFINE; +} + +<ST_DEFINE>{IDENTIFIER} { + yylval.str = strdup (yytext); + return IDENTIFIER; +} + +<ST_DEFINE>{TOKEN} { + yylval.str = strdup (yytext); + return TOKEN; +} -<ST_DEFINE>{HSPACE}+ -<ST_DEFINE>{IDENTIFIER} { BEGIN ST_DEFVAL; yylval = strdup (yytext); return IDENTIFIER; } +<ST_DEFINE>\n { + BEGIN INITIAL; + return NEWLINE; +} -<ST_DEFVAL>{SPACE}+ -<ST_DEFVAL>{DEFVAL} { BEGIN INITIAL; yylval = strdup (yytext); return DEFVAL; } +<ST_DEFINE>{SPACE}+ /* Anything we don't specifically recognize is a stream of tokens */ -{NONSPACE}+ { yylval = strdup (yytext); return TOKEN; } +{NONSPACE}+ { + yylval.str = strdup (yytext); + return TOKEN; +} %% |