游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1453|回复: 3

请教有关lex和yacc的问题

[复制链接]

3

主题

67

帖子

111

积分

注册会员

Rank: 2

积分
111
发表于 2006-9-1 23:12:00 | 显示全部楼层 |阅读模式
由flex导出词法分析文件lex.yy.c,由bison导出语法分析文件h330_tab.c和h330_tab.h
下面分别是导出前的词法分析文件h330.l和语法分析文件h330.y
-------------------------------h330.l---------------------------------
%{
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
%}
ALPHABET [A-Za-z]
NUMBER [0-9]
SPACE [" "\n\t]
%%
{ALPHABET}({ALPHABET}|{NUMBER})*        {return C_IDENTIFIER;}
{SPACE}                {;}
%%

int yywrap()
{
    return 1;
}

-------------------------------h330.y---------------------------------
%{

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
void yyerror(char* err);
%}
%union
{
   int    _ival;
   char*  _string;
}

%token <_string> C_IDENTIFIER
%type <_string> ID

%start ID

%%
ID : C_IDENTIFIER              { $$ = $1;}
;
%%
#include "lex.yy.c"

void yyerror(char* err)
{
}

将导出后的c语言源代码加入到工程后编译出错,第一个错误的出错提示为C_IDENTIFIER未定义,错误点在h330.l文件的return C_IDENTIFIER那里.
请问接触过脚本引擎的各位,你们是如何将词法分析文件和语法分析文件整合到工程当中的?

16

主题

83

帖子

103

积分

注册会员

Rank: 2

积分
103
QQ
发表于 2006-9-3 22:49:00 | 显示全部楼层

Re:请教有关lex和yacc的问题

你得在h330.l文件最上面加入#include "h330_y.h",这个文件是BISON生成的,它有每个TOKEN的定义.
把生成的两个.C和一个.H文件用于工程中就可以了.BISON生成的语义文件要用到工程中定义的数据结构,所以要在这个文件中包一个我们自定义的文件,
建议LZ看一下GEMS3上的一篇文章《使用LEX和YACC分析自定义数据文件》

0

主题

202

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
发表于 2006-9-4 00:48:00 | 显示全部楼层

Re:请教有关lex和yacc的问题

include

3

主题

67

帖子

111

积分

注册会员

Rank: 2

积分
111
 楼主| 发表于 2006-9-4 10:23:00 | 显示全部楼层

Re:请教有关lex和yacc的问题

thank you!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 07:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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