gpt4 book ai didi

c - 了解用于检测 C 风格注释的状态机

转载 作者:太空宇宙 更新时间:2023-11-04 04:03:02 25 4
gpt4 key购买 nike

除了处理嵌套评论输入的方式外,我已经了解该程序的全部功能。我不清楚 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();
}

最佳答案

这是为了处理这样的输入:

blah /* comment **/ blah
^

如果您在我标记的位置恢复到 COMMENT,那么您将不会寻找 / 以恢复到 PROGRAM。您需要留在 STAR

关于c - 了解用于检测 C 风格注释的状态机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9549091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com