Chinaunix

标题: lex能否表达"不包含某个字串"或者"匹配的优先级"? [打印本页]

作者: cdsfiui    时间: 2016-09-21 14:38
标题: lex能否表达"不包含某个字串"或者"匹配的优先级"?
本帖最后由 cdsfiui 于 2016-09-21 14:40 编辑

我想用lex来表达一个需求,"12"代表Head,"34"代表Tail,其他的代表content。
那么12sdf2dfsd3sd34作为输入,我期待输出是
  1. head
  2. content
  3. tail
复制代码
于是lex文件如下:
  1. $ cat b.l
  2. %{
  3. #include<stdio.h>
  4. %}
  5. %%
  6. 12 {printf("head\n");}
  7. 34 {printf("tail\n");}
  8. [A-Za-z]*  {printf("content\n");}
  9. %%
复制代码
其实我的第三个表达式有问题,它不包含数字,所以实际的输出是:
  1. head
  2. content
  3. 2content
  4. 3content
  5. tail
复制代码
可是如果我把第三个式子改成
  1. .*  {printf("content\n");}
复制代码
那么lex产生的代码似乎就贪婪匹配,结果只是打印一个单一的
  1. content
复制代码
其实我希望的是.*解析"其他情况",优先级要第一点。lex可以指定匹配的有限级吗?
这都不符合我的要求。如写表达"不包含12或者34的字符串"呢? 或者说,指定".*"的优先级最低?
谢谢。




作者: windoze    时间: 2016-09-21 22:11
lex只是词法分析,你要的东西显然是语法分析。所以你要用yacc,不能光用lex。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2