我正在使用Lex和Yacc来设计解析器并遇到一些关于评论的问题。
我使用以下Lex规则。
'#'[^('\r'|'\n')]* { /* do nothing */ }
它可以工作,但在执行结束时,所有注释都会打印到标准输出。有办法清除吗?谢谢你的建议。
答案 0 :(得分:1)
字符'
,|
,(
和)
在[]
中没有特殊含义,因此您只匹配(并放弃)不包含它们的评论。此外,在lex '
的大多数版本中根本没有特殊含义 - 只有"
可用于引用文字字符串。你可能想要的是:
"#"[^\r\n]* { /* do nothing */ }
此外,#
也没有特殊含义,所以没有必要引用它。
通常,如果你使用lex(或flex)作为解析器的输入,你永远不会想要默认的回显行为,所以最好在最后添加一个“catch-all”规则:
.|\n { fprintf(stderr, "Unexpected character '%c' in input\n", *yytext); }