加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

删除嵌套注释bz lex

发布时间:2020-12-15 01:48:03 所属栏目:百科 来源:网络整理
导读:如何在lex(或flex)中编程以从文本中删除嵌套注释并仅打印不在注释中的文本? 我应该以某种方式识别我在评论时的状态以及块评论的起始“标签”的数量. 让我们有规则: 阻止评论 /*block comment*/ 线评论 // line comment 3.评论可以嵌套. 例1 show /* commen
如何在lex(或flex)中编程以从文本中删除嵌套注释并仅打印不在注释中的文本?
我应该以某种方式识别我在评论时的状态以及块评论的起始“标签”的数量.

让我们有规则:
阻止评论

/*
block comment
*/

线评论

// line comment

3.评论可以嵌套.

例1

show /* comment /* comment */ comment */ show

输出:

show  show

例2

show /* // comment
comment
*/
show

输出:

show 
show

例3

show
///* comment
comment
// /*
comment
//*/ comment
//
comment */
show

输出:

show
show

解决方法

你的理论是正确的.这是一个简单的实现;可以改进.

%x COMMENT
%%
%{
   int comment_nesting = 0;
%}

"/*"            BEGIN(COMMENT); ++comment_nesting;
"//".*          /* // comments to end of line */

<COMMENT>[^*/]* /* Eat non-comment delimiters */
<COMMENT>"/*"   ++comment_nesting;
<COMMENT>"*/"   if (--comment_nesting == 0) BEGIN(INITIAL);
<COMMENT>[*/]   /* Eat a / or * if it doesn't match comment sequence */

  /* Could have been .|n ECHO,but this is more efficient. */
([^/]*([/][^/*])*)* ECHO;  
%%

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读