如何在Bison中自己编译多个指令?

时间:2018-05-01 17:32:56

标签: compiler-construction bison flex-lexer

我正在尝试在我的编译器中实现多个指令。 为了简单起见,我只举一个小例子。 工作原理:

expr1;

什么行不通:

expr1; expr2;

语法看起来像这样:

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

1 个答案:

答案 0 :(得分:1)

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

statements
    : statements statement
    | /* empty */
    ;

匹配零个或多个语句。如果您想要至少需要一个,则应将空案例替换为statement