Parsing Bison语法文件中的一个或多个实例

Parsing Bison语法文件中的一个或多个实例,parsing,compiler-construction,bison,Parsing,Compiler Construction,Bison,我需要解析的程序的格式应为: 程序:[声明]+ ; 这意味着:程序由一个或多个声明组成。 当然,轮到它的声明也是以类似的方式定义的,等等 目前,我从Bison解析器得到了一个关于+的错误。 如何正确定义野牛的一个或多个条件?显然 Bison不支持+或*符号来表示这些东西 我是如何解决的: 程序:声明 ; 声明:声明声明 |声明 ; 一个或多个: declarations : declaration | declarations declaration ; 零或更多:

我需要解析的程序的格式应为:

程序:[声明]+
;
这意味着:程序由一个或多个声明组成。 当然,轮到它的声明也是以类似的方式定义的,等等

目前,我从Bison解析器得到了一个关于+的错误。 如何正确定义野牛的一个或多个条件?

显然

Bison不支持+或*符号来表示这些东西

我是如何解决的:

程序:声明
;
声明:声明声明
|声明
;
一个或多个:

declarations
    : declaration
    | declarations declaration
    ;
零或更多:

declarations
    : /* empty */
    | declarations declaration
    ;

这不是一个或多个,而是零个或多个。对于一个或多个要用声明替换的
/*empty*/
。此解决方案是正确的递归解决方案,这不是使用LALR(1)解析器的正确方法。它应该是左递归的。