Chinaunix
标题:
lex能否表达"不包含某个字串"或者"匹配的优先级"?
[打印本页]
作者:
cdsfiui
时间:
2016-09-21 14:38
标题:
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");}
[A-Za-z]* {printf("content\n");}
%%
复制代码
其实我的第三个表达式有问题,它不包含数字,所以实际的输出是:
head
content
2content
3content
tail
复制代码
可是如果我把第三个式子改成
.* {printf("content\n");}
复制代码
那么lex产生的代码似乎就贪婪匹配,结果只是打印一个单一的
content
复制代码
其实我希望的是.*解析"其他情况",优先级要第一点。lex可以指定匹配的有限级吗?
这都不符合我的要求。如写表达"不包含12或者34的字符串"呢? 或者说,指定".*"的优先级最低?
谢谢。
作者:
windoze
时间:
2016-09-21 22:11
lex只是词法分析,你要的东西显然是语法分析。所以你要用yacc,不能光用lex。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2