C 检查flex中未完成的注释
我是个新手。我刚刚编写了一个使用flex程序检测多行注释的示例代码。现在我想改进代码。我想检测代码中未完成和格式错误的注释。例如:以/*开头但不以*/结尾的注释是未完成的注释,我所说的格式错误的注释是指注释的格式不正确,例如,注释中出现EOF等。我必须在代码中添加什么来检查这些内容?我的示例代码如下:C 检查flex中未完成的注释,c,flex-lexer,lex,lexical-analysis,C,Flex Lexer,Lex,Lexical Analysis,我是个新手。我刚刚编写了一个使用flex程序检测多行注释的示例代码。现在我想改进代码。我想检测代码中未完成和格式错误的注释。例如:以/*开头但不以*/结尾的注释是未完成的注释,我所说的格式错误的注释是指注释的格式不正确,例如,注释中出现EOF等。我必须在代码中添加什么来检查这些内容?我的示例代码如下: %x COMMENT_MULTI_LINE %{ char* commentStart; %} %% [\n\t\r ]+ { /* ignore whitespace */ } &
%x COMMENT_MULTI_LINE
%{
char* commentStart;
%}
%%
[\n\t\r ]+ {
/* ignore whitespace */ }
<INITIAL>"/*" {
commentStart = yytext;
BEGIN(COMMENT_MULTI_LINE);
}
<COMMENT_MULTI_LINE>"*/" {
char* comment = strndup(commentStart, yytext + 2 - commentStart);
printf("'%s': was a multi-line comment\n", comment);
free(comment);
BEGIN(INITIAL);
}
<COMMENT_MULTI_LINE>. {
}
<COMMENT_MULTI_LINE>\n {
}
%%
int main(int argc, char *argv[]){
yylex();
}
%x注释\u多行
%{
char*commentStart;
%}
%%
[\n\t\r]+{
/*忽略空白*/}
"/*" {
commentStart=yytext;
开始(注释多行);
}
"*/" {
char*comment=strndup(commentStart,yytext+2-commentStart);
printf(“%s”:是多行注释\n”,注释);
免费(评论);
开始(首字母);
}
. {
}
\n{
}
%%
intmain(intargc,char*argv[]){
yylex();
}
非常有用,因为它以您的案例为例,它们的代码也可以逐字复制到您的flex程序中
正如它所解释的,当使用
时,不能将其置于正常的正则表达式模式中。它只能以一个国家的名义进行。在您的代码中,您使用一个状态来表示您在注释中。此状态称为COMMENT\u MULTI
。你所要做的就是把它放在
标记的前面,并给它一个动作:
<COMMENT_MULTI><<EOF>> {printf("Unterminated Comment: %s\n", yytext);
yyterminate();}
{printf(“未终止的注释:%s\n”,yytext);
yyterminate();}
特殊操作函数yyterminate()
告诉flex您已经识别了
,并且它标志着程序输入的结束
我已经对此进行了测试,它可以在您的代码中运行。(也可以使用多行字符串)