Let's clean up the block comment parsing to be a bit more lex-like.
This commit was SVN r6695.
Этот коммит содержится в:
родитель
50545ef082
Коммит
0c32f34cb7
@ -46,42 +46,22 @@ WHITE [\f\t\v ]
|
||||
CHAR [A-Za-z0-9_\-\.]
|
||||
|
||||
%x VALUE
|
||||
%x comment
|
||||
|
||||
%%
|
||||
|
||||
{WHITE}*\n { mca_base_yynewlines++; return MCA_BASE_PARSE_NEWLINE; }
|
||||
#.*\n { mca_base_yynewlines++; return MCA_BASE_PARSE_NEWLINE; }
|
||||
"//".*\n { mca_base_yynewlines++; return MCA_BASE_PARSE_NEWLINE; }
|
||||
"/*" {
|
||||
register int c;
|
||||
for ( ; ; ) {
|
||||
/* Eat up characters till we hit the
|
||||
* end of file or *
|
||||
*/
|
||||
while ( (c = input()) != '*' && c != EOF){
|
||||
if(c == '\n')
|
||||
mca_base_yynewlines++;
|
||||
}
|
||||
|
||||
/* If we reach a *, then look for the
|
||||
* matching /
|
||||
*/
|
||||
if ( c == '*') {
|
||||
while ( (c = input()) == '*' ) {
|
||||
if(c == '\n')
|
||||
mca_base_yynewlines++;
|
||||
}
|
||||
|
||||
if ( c == '/' )
|
||||
break; /* End of Comment */
|
||||
}
|
||||
else if ( c == EOF ) {
|
||||
/* EOF in comment :( */
|
||||
break;
|
||||
}
|
||||
}
|
||||
return MCA_BASE_PARSE_NEWLINE;
|
||||
}
|
||||
"/*" { BEGIN(comment);
|
||||
return MCA_BASE_PARSE_NEWLINE; }
|
||||
<comment>[^*\n]* ; /* Eat up non '*'s */
|
||||
<comment>"*"+[^*/\n]* ; /* Eat '*'s not followed by a '/' */
|
||||
<comment>\n { mca_base_yynewlines++;
|
||||
return MCA_BASE_PARSE_NEWLINE; }
|
||||
<comment>"*"+"/" { BEGIN(INITIAL); /* Done with Block Comment */
|
||||
return MCA_BASE_PARSE_NEWLINE; }
|
||||
|
||||
{WHITE}*"="{WHITE}* { BEGIN(VALUE); return MCA_BASE_PARSE_EQUAL; }
|
||||
{WHITE}+ ; /* whitespace */
|
||||
|
@ -39,6 +39,8 @@ bool orte_rds_hostfile_done = false;
|
||||
|
||||
WHITE [\f\t\v ]
|
||||
|
||||
%x comment
|
||||
|
||||
%%
|
||||
|
||||
{WHITE}*\n { orte_rds_hostfile_line++;
|
||||
@ -47,36 +49,15 @@ WHITE [\f\t\v ]
|
||||
return ORTE_RDS_HOSTFILE_NEWLINE; }
|
||||
"//".*\n { orte_rds_hostfile_line++;
|
||||
return ORTE_RDS_HOSTFILE_NEWLINE; }
|
||||
"/*" {
|
||||
register int c;
|
||||
for ( ; ; ) {
|
||||
/* Eat up characters till we hit the
|
||||
* end of file or *
|
||||
*/
|
||||
while ( (c = input()) != '*' && c != EOF){
|
||||
if(c == '\n')
|
||||
orte_rds_hostfile_line++;
|
||||
}
|
||||
|
||||
/* If we reach a *, then look for the
|
||||
* matching /
|
||||
*/
|
||||
if ( c == '*') {
|
||||
while ( (c = input()) == '*' ) {
|
||||
if(c == '\n')
|
||||
orte_rds_hostfile_line++;
|
||||
}
|
||||
|
||||
if ( c == '/' )
|
||||
break; /* End of Comment */
|
||||
}
|
||||
else if ( c == EOF ) {
|
||||
/* EOF in comment :( */
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ORTE_RDS_HOSTFILE_NEWLINE;
|
||||
}
|
||||
"/*" { BEGIN(comment);
|
||||
return ORTE_RDS_HOSTFILE_NEWLINE; }
|
||||
<comment>[^*\n]* ; /* Eat up non '*'s */
|
||||
<comment>"*"+[^*/\n]* ; /* Eat '*'s not followed by a '/' */
|
||||
<comment>\n { orte_rds_hostfile_line++;
|
||||
return ORTE_RDS_HOSTFILE_NEWLINE; }
|
||||
<comment>"*"+"/" { BEGIN(INITIAL); /* Done with Block Comment */
|
||||
return ORTE_RDS_HOSTFILE_NEWLINE; }
|
||||
|
||||
\"[^\"]*\" { orte_rds_hostfile_value.sval = yytext;
|
||||
return ORTE_RDS_HOSTFILE_QUOTED_STRING; }
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user