%code top命令在parser.tab.h文件中不包含其内容(应该这样做,对吧?)。野牛版是2.4.1。这个(简化的)代码有什么问题?
%{
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <io.h>
#define YYDEBUG 0
int errors;
%}
%code top {
struct DICT
{
char *Name;
int Offs;
int Size;
struct DICT *Next;
};
typedef struct DICT DICT;
struct NODE
{
int ID;
int Value;
DICT *Var;
struct NODE *Left;
struct NODE *Right;
};
typedef struct NODE NODE;
}
%{
NODE *Tree = 0;
NODE *Node(int ID, int Value, DICT *Var, NODE *Left, NODE *Right);
void yyerror(char *s)
{
errors++;
printf("%s\n", s);
}
%}
%no_lines
%union
{
int Value;
char *ID;
NODE *Node;
}
编辑: “%code requires”问题得到了解决,但又出现了另一个问题:
parser.tab.h:40:错误:重新定义'struct DICT'
parser.tab.h:47:错误:重新定义typedef'DICT'
parser.tab.c:145:错误:之前的'DICT'声明就在这里
答案 0 :(得分:1)
使用%code top
不会将代码插入标题中,而只会插入源文件中。它是well documented here。
我猜%code provides
(或%code requires
)会更合适,因为它会在源文件和头文件中插入定义。