gpt4 book ai didi

检查 flex 中未完成的评论

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

我是 flex 的新手。我刚刚编写了一个示例代码来使用 flex 程序检测多行注释。现在我想改进代码。我想检测代码中未完成和格式错误的注释。例如:以/* 开头但没有结尾 */的注释是未完成的注释,格式错误的注释是指注释格式不正确,例如,注释中出现 EOF 等。我必须在代码中添加的内容检查这些东西?我的示例代码如下:

%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();
}

最佳答案

flex manual section on using <<EOF>> 非常有用,因为它以您的案例为例,而且他们的代码也可以逐字复制到您的 flex 程序中。

正如它所解释的,当使用 <<EOF>> 时您不能将它放在普通的正则表达式 模式中。它只能以州名开头。在您的代码中,您使用状态来指示您在评论中。这个状态叫做COMMENT_MULTI .你所要做的就是把它放在 <<EOF>> 前面标记并给它一个 Action :

<COMMENT_MULTI><<EOF>> {printf("Unterminated Comment: %s\n", yytext); 
yyterminate();}

特殊 Action 函数yyterminate()告诉 flex 你已经认出了 <<EOF>>并且它标志着您程序的输入结束。

我已经对此进行了测试,它在您的代码中有效。 (还有多行字符串)。

关于检查 flex 中未完成的评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29991073/

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