忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 331 | 回复: 1

lex编译我的一个语法程序,报错说是含有不能识别的规则,帮我看一下! [复制链接]

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 10:16:532015元宵节徽章
日期:2015-03-06 15:53:22
发表于 2016-09-15 23:28 |显示全部楼层
我有一个很简单的lex程序,来自<<编译原理>>,清华版的

  1. $ cat -n my.lex
  2.      1    %{
  3.      2    #include<stdio.h>
  4.      3    #include"code.h"
  5.      4    #include"symbol.h"
  6.      5    #include"y.tab.h"
  7.      6    extern int level;
  8.      7    int cc=0;
  9.      8    %}
  10.      9    IDENT [a-zA-Z][a-zA-Z0-9]*
  11.     10    NUMBER [0-9][0-9]*
  12.     11    %%
  13.     12    " "  {cc++;}
  14.     13    "\t" {tablize();}
  15.     14    "\n" {cc=0;line_copy();}
  16.     15    "<" {cc++;return LT;}
  17.     16    ">" {cc++;return GR;}
  18.     17    "=" {cc++;return EQ;}
  19.     18    "#" {cc++;return NE;}
  20.     19    "," {cc++;return colon;}
  21.     20    "." {cc++;return Period;}
  22.     21    "(" {cc++;return Lparen;}
  23.     22    ")" {cc++;return Rparen;}
  24.     23    "<=" {cc+=2;return LE;}
  25.     24    ">=" {cc+=2;return GE;}
  26.     25    ":=" {cc+=2;return ASGN;}
  27.     26    ";" {cc++;return Semicolon;}
  28.     27    {NUMBER}{
  29.     28      int n;
  30.     29      cc+=yyleng;
  31.     30      sscanf(yytext,"%d",&n);
  32.     31      yylval.number=n;
  33.     32      return NUMBER;
  34.     33    }
  35.     34    {IDENT}{
  36.     35      Symbol *s;
  37.     36      cc+=yyleng;
  38.     37      if((s=lookup(yytext))==0)
  39.     38        s=install(yytext,VARIABLE,level,0);
  40.     39      if(s->type==C)
  41.     40        yylval.number=s->adr;
  42.     41      else
  43.     42        yylval.sym=s;
  44.     43      return s->type;
  45.     44    }
  46.     45    %%
  47.     46    yywrap(){----
  48.     47            };

  49. $ lex my.lex
  50. my.lex:27: 不能识别的规则
  51. my.lex:27: 不能识别的规则
  52. my.lex:33: 不能识别的规则
  53. my.lex:33: 不能识别的规则
  54. my.lex:34: 不能识别的规则
  55. my.lex:34: 不能识别的规则
  56. my.lex:44: 不能识别的规则
  57. my.lex:44: 不能识别的规则
复制代码

我的程序哪里有错误呢,应该怎么改?


论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2016-09-18 21:37 |显示全部楼层
回复 1# cdsfiui

语法错误,把  {NUMBER}{ 改成  {NUMBER} {,也即添加额外空格;其余类似。

评分

参与人数 1信誉积分 +10 收起 理由
cdsfiui + 10 很给力!

查看全部评分

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

本版积分规则

  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP