如何使用未处理的字符串?

时间:2012-09-11 18:34:01

标签: yacc lex

我正在使用Lex和Yacc来设计解析器并遇到一些关于评论的问题。

我使用以下Lex规则。

'#'[^('\r'|'\n')]*    { /* do nothing */ }

它可以工作,但在执行结束时,所有注释都会打印到标准输出。有办法清除吗?谢谢你的建议。

1 个答案:

答案 0 :(得分:1)

字符'|()[]中没有特殊含义,因此您只匹配(并放弃)不包含它们的评论。此外,在lex '的大多数版本中根本没有特殊含义 - 只有"可用于引用文字字符串。你可能想要的是:

"#"[^\r\n]*     { /* do nothing */ }

此外,#也没有特殊含义,所以没有必要引用它。

通常,如果你使用lex(或flex)作为解析器的输入,你永远不会想要默认的回显行为,所以最好在最后添加一个“catch-all”规则:

.|\n            { fprintf(stderr, "Unexpected character '%c' in input\n", *yytext); }