use*_*772 5 comments lex lexical-analysis flex-lexer
如何在lex(或flex)中编程以从文本中删除嵌套注释并仅打印不在注释中的文本?我应该以某种方式识别我在评论时的状态以及块评论的起始"标签"的数量.
让我们有规则:1.
阻止评论
/*
block comment
*/
Run Code Online (Sandbox Code Playgroud)
线评论
// line comment
Run Code Online (Sandbox Code Playgroud)
3.评论可以嵌套.
例1
show /* comment /* comment */ comment */ show
Run Code Online (Sandbox Code Playgroud)
输出:
show show
Run Code Online (Sandbox Code Playgroud)
例2
show /* // comment
comment
*/
show
Run Code Online (Sandbox Code Playgroud)
输出:
show
show
Run Code Online (Sandbox Code Playgroud)
例3
show
///* comment
comment
// /*
comment
//*/ comment
//
comment */
show
Run Code Online (Sandbox Code Playgroud)
输出:
show
show
Run Code Online (Sandbox Code Playgroud)
你的理论是正确的.这是一个简单的实现; 可以改进.
%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;
%%
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2488 次 |
| 最近记录: |