删除嵌套注释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; %% (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |