无法通过%define指令获得简单的Bison语法文件语法错误

时间:2013-10-12 10:20:53

标签: c bison

我正在使用Bison 2.4.1和Flex 2.5.35来创建语言解析器。但是我被Bison困住了,它已经给了我同样的错误3个小时,我不明白原因。

我有这个Bison语法文件mylang.y

%{
#include <stdio.h>
#include <stdlib.h>
#include <glib/gtree.h>
#include <glib/gnode.h>
#include "ast.h"
%}

%code requires {
struct my_value {
  enum {
    is_int, 
    is_str
  } kind;
  union {
    int ival;
    char *sval;
  } u;
};
}
%define api.value.type {struct my_value}

%token KEYWORD
%token <u.sval> ID
%token <y.ival> NUM
...
%%
... 
// Rules following, but still defining no action at all.
%%
// Nothing more

正如您所看到的,我正在尝试定义语法和语法语义。并不像我自己编写所有内容,我遵循了Bison Docs - %define directive中报告的示例。

在语义之前,一切正常:另请注意,我的语法规则到目前为止还没有定义任何操作。所以它们只是一堆非常简单的规则。此外,在添加语义之前,我通过Bison解析器生成器处理了文件,一切顺利。

当我试图将这件事通过Bison时:

bison  -vd --report=state,itemset --graph  mylang.y

我收到此错误:

  

mylang.y:20.24-40:语法错误,意外{...}

错误中报告的行是%define指令所在的行。 我不明白如何通过这个。我究竟做错了什么? 谢谢。

1 个答案:

答案 0 :(得分:1)

  

我正在使用Bison 2.4.1和Flex 2.5.35来创建语言解析器。

您正在尝试使用的功能已添加到Bison 3.0中。

  

历史:在Bison 3.0中引入。仅在2.3b中引入Java作为stype。

您可以下载Bison 3.0 from here