lex能否表达"不包含某个字串"或者"匹配的优先级"?
本帖最后由 cdsfiui 于 2016-09-21 14:40 编辑我想用lex来表达一个需求,"12"代表Head,"34"代表Tail,其他的代表content。
那么12sdf2dfsd3sd34作为输入,我期待输出是
head
content
tail
于是lex文件如下:
$ cat b.l
%{
#include<stdio.h>
%}
%%
12 {printf("head\n");}
34 {printf("tail\n");}
*{printf("content\n");}
%%
其实我的第三个表达式有问题,它不包含数字,所以实际的输出是:head
content
2content
3content
tail
可是如果我把第三个式子改成
.*{printf("content\n");}
那么lex产生的代码似乎就贪婪匹配,结果只是打印一个单一的
content
其实我希望的是.*解析"其他情况",优先级要第一点。lex可以指定匹配的有限级吗?
这都不符合我的要求。如写表达"不包含12或者34的字符串"呢? 或者说,指定".*"的优先级最低?
谢谢。
lex只是词法分析,你要的东西显然是语法分析。所以你要用yacc,不能光用lex。
页:
[1]