LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: minus273

怎样编译lex程序

[复制链接]
 楼主| 发表于 2003-7-3 22:32:31 | 显示全部楼层
又出问题了,我想哭了!

  1. [sandy@localhost lex&yacc]$ gcc -o calc y.tab.c lex.yy.c -ll -lm
  2. /tmp/ccIGLRqu.o: In function `yyparse':
  3. /tmp/ccIGLRqu.o(.text+0x4d6): undefined reference to `yyerror'
  4. /tmp/ccIGLRqu.o(.text+0x637): undefined reference to `yyerror'
  5. /tmp/ccIGLRqu.o(.text+0x77b): undefined reference to `yyerror'
  6. /tmp/cchsnUMc.o: In function `yylex':
  7. /tmp/cchsnUMc.o(.text+0x34c): undefined reference to `yywrap'
  8. /tmp/cchsnUMc.o: In function `input':
  9. /tmp/cchsnUMc.o(.text+0xa8e): undefined reference to `yywrap'
  10. collect2: ld returned 1 exit status
复制代码

lex文件
%{
#include"y.tab.h"
#include<math.h>
extern double vbltable[26];
%}
%%
[ \t] ;
[0-9]+(\.[0-9]+)? {
yylval.dval=atof(yytext);
return NUMBER;}
[a-z] {yylval.vblno=yytext[0]-'a';
return NAME;}
"//".*\n ;
. |
\n return yytext[0];
%%

yacc文件
%{
extern double vbltable[26];
double vbltable[26];
%}

%union{
        double dval;
        int vblno;
}

%token <vblno> NAME
%token <dval> NUMBER
%left '-' '+'
%left '*' '/'
%nonassoc UMINUS

%type <dval> exp
%%
input:  stmt '\n'
|      input stmt '\n'
;
stmt:   NAME '=' exp    {vbltable[$1]=$3;}
|      exp             {printf("=%g\n",$1);}
;
exp:    exp '+' exp     {$$=$1+$3;}
|      exp '-' exp     {$$=$1-$3;}
|      exp '*' exp     {$$=$1*$3;}
|      exp '/' exp     {if($3==0.0)yyerror("零不能作除数的嘛!");
                        else $$=$1/$3;}
|      '-' exp %prec UMINUS    {$$=-$2;}
|      '(' exp ')'     {$$=$2;}
|      NUMBER
|      NAME            {$$=vbltable[$1];}
;
%%
发表于 2003-7-4 11:36:07 | 显示全部楼层
在yacc文件最后加上#include "yyl.lex.c"
`试一试
发表于 2003-7-4 12:14:01 | 显示全部楼层
你真的如你说明档中写的那样只有12岁?

很难想象一个12岁的中(小)学生会写lex程序。。。。。

建议你来报考科大少年班
发表于 2003-7-5 01:16:14 | 显示全部楼层
自古英雄出少年啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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