-->

检查未完成的弯曲评论(checking unfinished comments in flex)

2019-10-22 21:54发布

我是一个新的弯曲。 我刚写了一个示例代码来检测使用柔性程序的多行注释。 现在我想改善的代码。 我想,以检测未完成的代码和虐待形成意见。 例如:评论开头没有一个结局* /是一个未完成的注释并形成不良评论我的意思是注释不正确形成/ *,比方说,一个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();         
}

Answer 1:

在使用柔性手动节<<EOF>>是非常有帮助的,因为它具有完全相同的情况下,作为一个例子,他们的代码也可以逐字复制到你的Flex程序。

因为它解释,使用时<<EOF>>你不能把它在一个正常的正则表达式模式。 它只能由一个国家的名义进行。 在你的代码使用状态来指示你是一个注释中。 这种状态称为COMMENT_MULTI 。 所有你需要做的就是把那个在前面<<EOF>>标记,并给它一个动作做的事:

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

专项行动功能yyterminate()告诉弯曲你已经认识到<<EOF>> ,它标志着程序的结束输入。

我已经进行了测试,它在你的代码工作。 (和多线串也)。



文章来源: checking unfinished comments in flex