LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 945|回复: 4

好奇怪,Lolita看看好吗?

[复制链接]
发表于 2006-3-30 20:41:27 | 显示全部楼层 |阅读模式
我规则部分定义的有

  1. %%
  2. A{2,4}  { printf("2 to 4 A read:%s\n",yytext); }
  3. ({char}({char}|{digit})*)/{blank}      printf("get word:%s\n",yytext);

  4. ({digit})+/{blank}                   printf("get number:%s\n",yytext);

  5. {blank}
  6. .                            printf("unrecognized character:%c\n",*yytext);


  7. %%
复制代码


但是我的AAAA得不到辨认,辨认的是get word! 不是先定义先匹配吗?




全部代码在这里:
  1. %{

  2. #include<stdio.h>

  3. %}

  4. char [a-zA-Z\_]
  5. digit [0-9]
  6. blank [(\ )|(\n)|(\t)]

  7. %%
  8. A{2,4}  { printf("2 to 4 A read:%s\n",yytext); }
  9. ({char}({char}|{digit})*)/{blank}      printf("get word:%s\n",yytext);

  10. ({digit})+/{blank}                   printf("get number:%s\n",yytext);

  11. {blank}
  12. .                            printf("unrecognized character:%c\n",*yytext);


  13. %%

  14. extern FILE* yyin;


  15. int main(int args,char* argv[])
  16. {
  17.         if(args<=1 || (NULL==(yyin=fopen(argv[1],"rt"))))
  18.         {
  19.                 printf("Specify the input file please\n");
  20.                 return 1;
  21.         }
  22.         yylex();

  23.         fclose(yyin);

  24.         return 0;
  25. }

  26. int yywrap()
  27. { return 2; }
复制代码
 楼主| 发表于 2006-3-30 20:44:57 | 显示全部楼层
补充一个:

原来你说过在 yacc文件在定义段里面声明宏的话就不用手动的去copy了,但是好象不行啊,显示是错误啊。是要用%define 吗?但是这样也不行啊
举个例子好吗?
回复 支持 反对

使用道具 举报

发表于 2006-3-31 00:16:13 | 显示全部楼层
lex 遵循的最长匹配原则,你用二进制方式打开你要读的文件,因为行末有个 '\n', 所以就匹配了这条规则
({char}({char}|{digit})*)/{blank}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-31 11:32:16 | 显示全部楼层
谢谢斑竹!太粗心了:beat
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-31 11:33:14 | 显示全部楼层
谢谢斑竹!太粗心了:beat  斑竹好渊博啊。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表