到目前为止,我已经阅读了很多关于 (F)Lex 的内容,但我找不到答案。 其实我有 2 个问题,得到一个答案就足够了。
我有这样的字符串:
TOTO 123 CD123 RGF 32/FDS HGGH
对于我找到的每个标记,我将其放入一个 vector 中。例如,对于这个字符串,我得到一个这样的 vector :
vector = TOTO, whitespace, CD, 123, whitespace, RGF, whitespace, 32, FDS, whitespace, HGGH
“/”不匹配任何规则,但我仍然想在到达它时将它放入我的 vector 中并得到:
vector = TOTO, whitespace, CD, 123, whitespace, RGF, whitespace, 32, /, FDS, whitespace, HGGH
所以我的问题是:
1) 当输入不匹配任何规则时,是否有可能修改默认操作? (而不是在标准输出上打印?)
2) 如果不可能,如何捕获它?因为在这里,“/”是一个示例,但它可以是所有内容(不符合我的规则的 % 、C、3、Blabblabla 等),我不能放
.* { else(); }
因为 Flex 使用匹配最长字符串的正则表达式。我希望我的规则被“排序”,而“.*”将排在最后,就像更改 Flex 的“首选项”一样。
有什么想法吗?
最佳答案
通常的方法是制定类似这样的规则
. { do_something_with_extra_char(*yytext); }
在规则的末尾。这将匹配任何不匹配任何其他规则的单个字符(除了换行符——你还需要一个匹配换行符的规则)。如果您有多个不匹配的字符,此规则将触发多次,但通常没问题。
关于c++ - (F)莱克斯 : get text not matched by rules/get default output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22177413/