LinuxSir.cn,穿越时空的Linuxsir!

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

lex和yacc怎么用?

[复制链接]
发表于 2004-7-12 11:40:43 | 显示全部楼层 |阅读模式
下面的都是树上的例子,
$yacc name.y     说第1行有语法错误

$flex name.lex    说最后一行premature EOF
????

yacc文件:
        %

        typedef char* string;

        #define YYSTYPE string

        %}

        %token NAME EQ AGE

        %%

        file : record file

        | record

        ;

        record : NAME EQ AGE {
        printf("%s is %s years old!!!\n", $1, $3); }

        ;

        %%

        int main()

        {

        yyparse();

        return 0;

        }

        int yyerror(char *msg)

        {

        printf("Error encountered: %s \n", msg);
        }


lex文件:
  %{

        #include "y.tab.h"
        
        #include <stdio.h>

        #include <string.h>

        extern char* yylval;

        %}

        char [A-Za-z]

        num [0-9]

        eq [=]

        name {char}+

        age {num}+

        %%

        {name} { yylval = strdup(yytext);
        return NAME; }

        {eq} { return EQ; }

        {age} { yylval = strdup(yytext);
        return AGE; }

        %%

        int yywrap()

        {

        return 1;

        }
发表于 2004-7-12 13:02:55 | 显示全部楼层
name.y显然第一行少个{啊
lex是不是直接考了以后粘贴的啊,可能有些无法显示的字符也被粘贴到文件里面了?试试把最后几行手写一下
发表于 2004-7-12 14:54:49 | 显示全部楼层
楼主最好用[code]功能整理一下,不然代码看起来太乱。
 楼主| 发表于 2004-7-12 14:57:32 | 显示全部楼层

不好意思

一直想用,可惜不知道如何弄。
 楼主| 发表于 2004-7-12 15:29:11 | 显示全部楼层
那个.lex文件还是调试不通过,而且报错的行根本不存在.
我的文件一共38行,报错的是39行,premature EOF
 楼主| 发表于 2004-7-12 15:52:55 | 显示全部楼层
重写了一篇,终于好了,
现在生成了两个c文件,不知道接下去该怎么作?
发表于 2004-7-12 15:55:36 | 显示全部楼层
make那两个文件啊,没有makefile就写个。或者手动来也成啊。书上应该写了吧
 楼主| 发表于 2004-7-12 16:11:53 | 显示全部楼层
就是让这两个c文件生成可执行文件.这个已经生成了

我是想直接让这两个文件跟我的源文件一起编译,不知道这样可以不?
发表于 2004-7-12 16:15:32 | 显示全部楼层
改makefile,增加yacc和lex处理的部分就行
发表于 2004-7-12 19:24:38 | 显示全部楼层

回复: 不好意思

最初由 johnhhj 发表
一直想用,可惜不知道如何弄。

http://www.linuxsir.cn/forum.php?mod=viewthread&tid=40274
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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