1
1

Let's clean up the block comment parsing to be a bit more lex-like.

This commit was SVN r6695.
Этот коммит содержится в:
Josh Hursey 2005-08-01 22:25:47 +00:00
родитель 50545ef082
Коммит 0c32f34cb7
2 изменённых файлов: 19 добавлений и 58 удалений

Просмотреть файл

@ -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; }