如何在 Bison 自己的编译器中制作多条指令?

How to make multiple instructions in own compiler in Bison?

我正在尝试在我的编译器中执行多条指令。 为了简单起见,我只举一个小例子。 什么是工作:

expr1;

什么不起作用:

expr1; expr2;

语法看起来像这样:

%start expression
%%
expression
    : first ';'
    ;
first
    : first '+' second
    | first '-' second
    | second
    ;
second
    : second '*' number
    | second '/' number
    | number
number
    : NUM_INT
    ;

您需要一个匹配多个语句的规则,您可以像这样使用递归来定义它:

statements
    : statements statement
    | /* empty */
    ;

这匹配零个或多个语句。如果你想至少需要一个,你应该用 statement.

替换空的 case