Update the flex scanner to use a stack for its start conditions

This is the first step in reducing the number of shared rules between the
different start conditions.

Signed-off-by: John Johansen <john.johansen@canonical.com>
Acked-by: Kees Cook <kees@ubuntu.com>
This commit is contained in:
John Johansen 2012-01-02 16:48:24 -08:00
parent 98f196506a
commit 49142c74a5

View file

@ -23,6 +23,7 @@
/* eliminates need to link with libfl */
%option noyywrap
%option nounput
%option stack
%{
#include <stdio.h>
@ -221,7 +222,7 @@ LT_EQUAL <=
filename[strlen(filename) - 1] = '\0';
include_filename(filename + 1, 1);
free(filename);
BEGIN(INITIAL);
yy_pop_state();
}
\"([^\" \t\n]+)\" { /* "filename" */
@ -229,12 +230,12 @@ LT_EQUAL <=
filename[strlen(filename) - 1] = '\0';
include_filename(filename + 1, 0);
free(filename);
BEGIN(INITIAL);
yy_pop_state();
}
[^\<\>\"{WS}]+ { /* filename */
include_filename(yytext, 0);
BEGIN(INITIAL);
yy_pop_state();
}
}
@ -257,7 +258,7 @@ LT_EQUAL <=
DUMP_PREPROCESS;
yylval.id = processunquoted(yytext, yyleng);
PDEBUG("Found sub name: \"%s\"\n", yylval.id);
BEGIN(INITIAL);
yy_pop_state();
return TOK_ID;
}
{QUOTED_ID} {
@ -271,7 +272,7 @@ LT_EQUAL <=
DUMP_PREPROCESS;
yylval.id = processquoted(yytext, yyleng);
PDEBUG("Found sub name: \"%s\"\n", yylval.id);
BEGIN(INITIAL);
yy_pop_state();
return TOK_ID;
}
@ -294,7 +295,7 @@ LT_EQUAL <=
DUMP_PREPROCESS;
yylval.id = processunquoted(yytext, yyleng);
PDEBUG("Found sub name: \"%s\"\n", yylval.id);
BEGIN(INITIAL);
yy_pop_state();
return TOK_ID;
}
{QUOTED_ID} {
@ -308,7 +309,7 @@ LT_EQUAL <=
DUMP_PREPROCESS;
yylval.id = processquoted(yytext, yyleng);
PDEBUG("Found sub name: \"%s\"\n", yylval.id);
BEGIN(INITIAL);
yy_pop_state();
return TOK_ID;
}
@ -329,7 +330,7 @@ LT_EQUAL <=
{FLAGCLOSE_PAREN} {
DUMP_PREPROCESS;
PDEBUG("Flag )\n");
BEGIN(INITIAL);
yy_pop_state();
return TOK_FLAG_CLOSEPAREN;
}
@ -388,7 +389,7 @@ LT_EQUAL <=
\r?\n {
DUMP_PREPROCESS;
current_lineno++;
BEGIN(INITIAL);
yy_pop_state();
}
[^\n] {
DUMP_PREPROCESS;
@ -407,7 +408,7 @@ LT_EQUAL <=
}
{END_OF_RULE} {
DUMP_PREPROCESS;
BEGIN(INITIAL);
yy_pop_state();
return TOK_END_OF_RULE;
}
[^\n] {
@ -441,7 +442,7 @@ LT_EQUAL <=
DUMP_PREPROCESS;
yylval.id = processunquoted(yytext, yyleng);
PDEBUG("Found change profile name: \"%s\"\n", yylval.id);
BEGIN(INITIAL);
yy_pop_state();
return TOK_ID;
}
{QUOTED_ID} {
@ -455,7 +456,7 @@ LT_EQUAL <=
DUMP_PREPROCESS;
yylval.id = processquoted(yytext, yyleng);
PDEBUG("Found change profile quoted name: \"%s\"\n", yylval.id);
BEGIN(INITIAL);
yy_pop_state();
return TOK_ID;
}
@ -489,26 +490,26 @@ LT_EQUAL <=
{END_OF_RULE} {
DUMP_PREPROCESS;
BEGIN(INITIAL);
yy_pop_state();
return TOK_END_OF_RULE;
}
\\\n {
DUMP_PREPROCESS;
current_lineno++;
BEGIN(INITIAL);
yy_pop_state();
}
\r?\n {
DUMP_PREPROCESS;
current_lineno++;
BEGIN(INITIAL);
yy_pop_state();
}
}
#include/.*\r?\n { /* include */
PDEBUG("Matched #include\n");
BEGIN(INCLUDE);
yy_push_state(INCLUDE);
}
#.*\r?\n { /* normal comment */
@ -522,7 +523,7 @@ LT_EQUAL <=
{SEPARATOR} {
DUMP_PREPROCESS;
PDEBUG("Matched a separator\n");
BEGIN(SUB_NAME);
yy_push_state(SUB_NAME);
return TOK_SEP;
}
{ARROW} {
@ -533,13 +534,13 @@ LT_EQUAL <=
{EQUALS} {
DUMP_PREPROCESS;
PDEBUG("Matched equals for assignment\n");
BEGIN(ASSIGN_MODE);
yy_push_state(ASSIGN_MODE);
return TOK_EQUALS;
}
{ADD_ASSIGN} {
DUMP_PREPROCESS;
PDEBUG("Matched additive value assignment\n");
BEGIN(ASSIGN_MODE);
yy_push_state(ASSIGN_MODE);
return TOK_ADD_ASSIGN;
}
{SET_VARIABLE} {
@ -590,7 +591,7 @@ LT_EQUAL <=
{HAT} {
DUMP_PREPROCESS;
BEGIN(SUB_NAME2);
yy_push_state(SUB_NAME2);
return TOK_HAT;
}
@ -603,7 +604,7 @@ LT_EQUAL <=
{FLAGOPEN_PAREN} {
DUMP_PREPROCESS;
PDEBUG("FLag (\n");
BEGIN(FLAGS_MODE);
yy_push_state(FLAGS_MODE);
return TOK_FLAG_OPENPAREN;
}
@ -620,19 +621,19 @@ LT_EQUAL <=
return TOK_ID;
break;
case TOK_PROFILE:
BEGIN(SUB_NAME2);
yy_push_state(SUB_NAME2);
break;
case TOK_FLAGS:
BEGIN(FLAGS_MODE);
yy_push_state(FLAGS_MODE);
break;
case TOK_RLIMIT:
BEGIN(RLIMIT_MODE);
yy_push_state(RLIMIT_MODE);
break;
case TOK_NETWORK:
BEGIN(NETWORK_MODE);
yy_push_state(NETWORK_MODE);
break;
case TOK_CHANGE_PROFILE:
BEGIN(CHANGE_PROFILE_MODE);
yy_push_state(CHANGE_PROFILE_MODE);
break;
default: /* nothing */
break;