61 |
ALPHANUM [a-zA-Z_\x80-\xff0-9] |
ALPHANUM [a-zA-Z_\x80-\xff0-9] |
62 |
WORD {ALPHA}{ALPHANUM}* |
WORD {ALPHA}{ALPHANUM}* |
63 |
|
|
64 |
%start CPP C_COMMENT CPP_COMMENT SHELL_COMMENT STRING LITERAL PREPROCESSING_DIRECTIVE |
%start CPP C_COMMENT CPP_COMMENT SHELL_COMMENT STRING LITERAL PREPROCESSOR_LINE |
65 |
%option 8bit noyywrap noyy_top_state stack prefix="cpp" |
%option 8bit noyywrap noyy_top_state stack prefix="cpp" |
66 |
%% |
%% |
67 |
/* Backslash-newline */ |
/* Backslash-newline */ |
68 |
\\\n DEFAULT_BACKSLASH_NEWLINE_ACTION |
\\\n DEFAULT_BACKSLASH_NEWLINE_ACTION |
69 |
|
|
70 |
/* Comment */ |
/* Comment */ |
71 |
<CPP,PREPROCESSING_DIRECTIVE>"/*" { echos(comment_begin); ECHO; yy_push_state(C_COMMENT); } |
<CPP,PREPROCESSOR_LINE>"/*" { echos(comment_begin); ECHO; yy_push_state(C_COMMENT); } |
72 |
<C_COMMENT>"*/" { ECHO; echos(comment_end); yy_pop_state(); } |
<C_COMMENT>"*/" { ECHO; echos(comment_end); yy_pop_state(); } |
73 |
<C_COMMENT>. { put_char(LEXTEXT[0]); } |
<C_COMMENT>. { put_char(LEXTEXT[0]); } |
74 |
<C_COMMENT><<EOF>> { |
<C_COMMENT><<EOF>> { |
76 |
unexpected_eof(LINENO); |
unexpected_eof(LINENO); |
77 |
yyterminate(); |
yyterminate(); |
78 |
} |
} |
79 |
<CPP,PREPROCESSING_DIRECTIVE>"//" { echos(comment_begin); ECHO; yy_push_state(CPP_COMMENT); } |
<CPP,PREPROCESSOR_LINE>"//" { echos(comment_begin); ECHO; yy_push_state(CPP_COMMENT); } |
80 |
|
|
81 |
/* String */ |
/* String */ |
82 |
<CPP,PREPROCESSING_DIRECTIVE>\" { ECHO; yy_push_state(STRING); } |
<CPP,PREPROCESSOR_LINE>\" { ECHO; yy_push_state(STRING); } |
83 |
<STRING>\" { ECHO; yy_pop_state(); } |
<STRING>\" { ECHO; yy_pop_state(); } |
84 |
<STRING>\\. { put_char(LEXTEXT[0]); put_char(LEXTEXT[1]); } |
<STRING>\\. { put_char(LEXTEXT[0]); put_char(LEXTEXT[1]); } |
85 |
|
|
86 |
/* Literal */ |
/* Literal */ |
87 |
<CPP,PREPROCESSING_DIRECTIVE>\' { ECHO; yy_push_state(LITERAL); } |
<CPP,PREPROCESSOR_LINE>\' { ECHO; yy_push_state(LITERAL); } |
88 |
<LITERAL>\' { ECHO; yy_pop_state(); } |
<LITERAL>\' { ECHO; yy_pop_state(); } |
89 |
<LITERAL>\\. { put_char(LEXTEXT[0]); put_char(LEXTEXT[1]); } |
<LITERAL>\\. { put_char(LEXTEXT[0]); put_char(LEXTEXT[1]); } |
90 |
|
|
167 |
if (wflag) |
if (wflag) |
168 |
unknown_preprocessing_directive(p, LINENO); |
unknown_preprocessing_directive(p, LINENO); |
169 |
} |
} |
170 |
yy_push_state(PREPROCESSING_DIRECTIVE); |
yy_push_state(PREPROCESSOR_LINE); |
171 |
} |
} |
172 |
/* Null directive */ |
/* Null directive */ |
173 |
<CPP>^[ \t]*\# { put_macro(LEXTEXT); } |
<CPP>^[ \t]*\# { put_macro(LEXTEXT); } |
174 |
|
|
175 |
<CPP,PREPROCESSING_DIRECTIVE>{NUMBER} ECHO; |
<CPP,PREPROCESSOR_LINE>{NUMBER} ECHO; |
176 |
<CPP,PREPROCESSING_DIRECTIVE>{WORD} { |
<CPP,PREPROCESSOR_LINE>{WORD} { |
177 |
if (reserved_word(LEXTEXT, LEXLENG)) |
if (reserved_word(LEXTEXT, LEXLENG)) |
178 |
put_reserved_word(LEXTEXT); |
put_reserved_word(LEXTEXT); |
179 |
else if (YY_START == PREPROCESSING_DIRECTIVE |
else if (YY_START == PREPROCESSOR_LINE |
180 |
&& (last_directive == SHARP_IF || last_directive == SHARP_ELIF) |
&& (last_directive == SHARP_IF || last_directive == SHARP_ELIF) |
181 |
&& strcmp(LEXTEXT, "defined") == 0) |
&& strcmp(LEXTEXT, "defined") == 0) |
182 |
put_reserved_word(LEXTEXT); |
put_reserved_word(LEXTEXT); |
190 |
} |
} |
191 |
} |
} |
192 |
} |
} |
193 |
<CPP,PREPROCESSING_DIRECTIVE>[{}] { put_brace(LEXTEXT); } |
<CPP,PREPROCESSOR_LINE>[{}] { put_brace(LEXTEXT); } |
194 |
/* New line */ |
/* New line */ |
195 |
\n C_FAMILY_END_OF_LINE_ACTION |
\n C_FAMILY_END_OF_LINE_ACTION |
196 |
. { put_char(LEXTEXT[0]); } |
. { put_char(LEXTEXT[0]); } |