BISONunaryminuswithmodulooperations
创始人
2024-12-19 07:31:36
0

在BISON中,对于带有模运算符的一元负号表达式,会出现语法错误。例如,以下代码:

%{
#include 
%}

%token NUMBER
%left '+' '-'
%left '*' '/'
%right UMINUS
%left '%'

%%

expr: expr '+' expr
    | expr '-' expr
    | expr '*' expr
    | expr '/' expr
    | '-' expr %prec UMINUS
    | expr '%' expr
    | NUMBER
    ;

%%

int main()
{
    yyparse();
    return 0;
}

int yyerror(char* error)
{
    printf("Error: %s\n", error);
    return 0;
}

int yylex()
{
    ...
}

当输入类似于"-5 % 2"的表达式时,会提示以下错误:

Error: syntax error, unexpected %token, expecting UMINUS

为了解决这个问题,我们需要修改BISON规则。具体来说,需要使用一个额外的符号来表示一元负号和模运算符的结合。然后,在语法规则和代码中将其解析为相应的操作符。

修改后的代码如下所示:

%{
#include 
%}

%token NUMBER
%left '+' '-'
%left '*' '/'
%right UMINUS
%left '%'
%token NEG_MOD

%%

expr: expr '+' expr
    | expr '-' expr
    | expr '*' expr
    | expr '/' expr
    | '-' expr %prec UMINUS
    | expr NEG_MOD expr
    | NUMBER
    ;

%%

int main()
{
    yyparse();
    return 0;
}

int yyerror(char* error)
{
    printf("Error: %s\n", error);
    return 0;
}

int yylex()
{
    ...
}

int yyparse()
{
    ...
    {
        case NEG_MOD:
            printf(" % % ");
            break;
        ...
    }
}

现在,可以通过输入"-5 % 2"的表达式来解析一元负号

相关内容

热门资讯

玩家爆料!微信泉州麻将有挂的吗... 玩家爆料!微信泉州麻将有挂的吗(透视)原来是真的有挂(2023已更新)(哔哩哔哩)该软件可以轻松地帮...
2024教程!快玩炸翻天app... 2024教程!快玩炸翻天app辅助(透明挂)总是真的有挂(2020已更新)(哔哩哔哩);1、完成快玩...
发现玩家!白金岛跑胡子怎么搞胜... 发现玩家!白金岛跑胡子怎么搞胜率(透视)果然真的是有挂(2020已更新)(哔哩哔哩);1、用户打开应...
专业讨论!赣牌圈的隐藏机制(透... 专业讨论!赣牌圈的隐藏机制(透视辅助)一直存在有挂(2023已更新)(哔哩哔哩)1、构建自己的赣牌圈...
玩家科普!大凉山生活号有没有挂... 玩家科普!大凉山生活号有没有挂(辅助挂)竟然有挂(2024已更新)(哔哩哔哩)1、完成大凉山生活号有...
必看攻略!决战棋牌有挂吗(透视... 必看攻略!决战棋牌有挂吗(透视)切实真的有挂(2020已更新)(哔哩哔哩)1)决战棋牌有挂吗辅助挂:...
一分钟揭秘!老友互娱外 挂(透... 一分钟揭秘!老友互娱外 挂(透明挂)确实真的有挂(2025已更新)(哔哩哔哩);1、在老友互娱外 挂...
玩家必看!中至赣牌圈小程序怎么... 玩家必看!中至赣牌圈小程序怎么能摸好牌(辅助挂)切实真的有挂(2021已更新)(哔哩哔哩)1、玩家必...
推荐一款!中至上饶打炸提高好牌... 推荐一款!中至上饶打炸提高好牌几率(透视辅助)都是是真的有挂(2023已更新)(哔哩哔哩);1、用户...
每日必看教程!德州ai辅助软件... 每日必看教程!德州ai辅助软件(辅助挂)都是存在有挂(2020已更新)(哔哩哔哩)1、用户打开应用后...