Я понял всю функциональность этой программы, за исключением того, как она обрабатывает ввод вложенных комментариев. Функциональность State Star мне неясна. Что означает c!='*'
?
Предположим, что вводом является haha /* hello /*world */
, затем после первой звезды, если появляется косая черта, элемент управления переходит в состояние PROGRAM
. Однако почему это составляет c!='*'
?
#include<stdio.h>
#include<conio.h>
void main()
{
enum{ /*Enum construct declares states */
PROGRAM,
SLASH,
STAR,
QUOTE,
COMMENT,
LITERAL
}state;
/* If state is quote then its either " or '*/
state = PROGRAM;
for(;;)
{
int c = getchar();
int quote = 0 ;
switch(state) {
case SLASH:
/* Program text following a slash */
if (c == '*') {
state = COMMENT;
break;
}
putchar('/');
state = PROGRAM;
case PROGRAM:
/*Program Text*/
if (c == '\''||c == '"') {
state = QUOTE;
quote = c;
putchar(quote);
}
else if (c == '/')
state = SLASH;
else
putchar(c);
break;
case COMMENT:
/* Comment */
if (c == '*')
state = STAR;
break;
case STAR:
/*Comment following a Star */
if (c == '/')
state = PROGRAM;
else if (c != '*') {
state = COMMENT;
putchar(' ');
}
break;
case QUOTE:
/*Within a quote or a string */
putchar(c);
if (c == '\\')
state = LITERAL;
else if (c == quote)
state = PROGRAM;
break;
case LITERAL:
/*Within a literal having /*/
putchar(c);
state = QUOTE;
break;
}
}
printf("Can it handle this /* I wonder */");
getch();
}