这里的%prec是什么意思

发布于 2022-09-05 21:20:26 字数 59 浏览 9 评论 9

bit_expr '+' bit_expr %prec '+'

这里的%prec是什么意思?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

绝不放开 2022-09-19 05:40:07

我记得我有贴过<LEX&YACC>

流星番茄 2022-09-19 03:31:56

查手册吧

忘东忘西忘不掉你 2022-09-18 21:06:39

忘了提来源了

是mysql 5.1.28rc中sql目录下sql_yacc.y中的语法

bit_expr:
          bit_expr '|' bit_expr %prec '|'
          {
            $$= new (YYTHD->mem_root) Item_func_bit_or($1,$3);
            if ($$ == NULL)
              MYSQL_YYABORT;
          }
        | bit_expr '&' bit_expr %prec '&'
          {
            $$= new (YYTHD->mem_root) Item_func_bit_and($1,$3);
            if ($$ == NULL)
              MYSQL_YYABORT;
          }
        | bit_expr SHIFT_LEFT bit_expr %prec SHIFT_LEFT
          {
            $$= new (YYTHD->mem_root) Item_func_shift_left($1,$3);
            if ($$ == NULL)
              MYSQL_YYABORT;
          }
        | bit_expr SHIFT_RIGHT bit_expr %prec SHIFT_RIGHT
          {
            $$= new (YYTHD->mem_root) Item_func_shift_right($1,$3);
            if ($$ == NULL)
              MYSQL_YYABORT;
          }
        | bit_expr '+' bit_expr %prec '+'
          {
            $$= new (YYTHD->mem_root) Item_func_plus($1,$3);
            if ($$ == NULL)
              MYSQL_YYABORT;
          }
        | bit_expr '-' bit_expr %prec '-'
          {
            $$= new (YYTHD->mem_root) Item_func_minus($1,$3);
            if ($$ == NULL)
              MYSQL_YYABORT;
          }
        | bit_expr '+' INTERVAL_SYM expr interval %prec '+'
          {
            $$= new (YYTHD->mem_root) Item_date_add_interval($1,$4,$5,0);
            if ($$ == NULL)
              MYSQL_YYABORT;
          }
        | bit_expr '-' INTERVAL_SYM expr interval %prec '-'
          {
            $$= new (YYTHD->mem_root) Item_date_add_interval($1,$4,$5,1);
            if ($$ == NULL)
              MYSQL_YYABORT;
          }
        | bit_expr '*' bit_expr %prec '*'
          {
            $$= new (YYTHD->mem_root) Item_func_mul($1,$3);
            if ($$ == NULL)
              MYSQL_YYABORT;
          }
        | bit_expr '/' bit_expr %prec '/'
          {
            $$= new (YYTHD->mem_root) Item_func_div($1,$3);
            if ($$ == NULL)
              MYSQL_YYABORT;
          }
        | bit_expr '%' bit_expr %prec '%'
          {
            $$= new (YYTHD->mem_root) Item_func_mod($1,$3);
            if ($$ == NULL)
              MYSQL_YYABORT;
          }
        | bit_expr DIV_SYM bit_expr %prec DIV_SYM
          {
            $$= new (YYTHD->mem_root) Item_func_int_div($1,$3);
            if ($$ == NULL)
              MYSQL_YYABORT;
          }
        | bit_expr MOD_SYM bit_expr %prec MOD_SYM
          {
            $$= new (YYTHD->mem_root) Item_func_mod($1,$3);
            if ($$ == NULL)
              MYSQL_YYABORT;
          }
        | bit_expr '^' bit_expr
          {
            $$= new (YYTHD->mem_root) Item_func_bit_xor($1,$3);
            if ($$ == NULL)
              MYSQL_YYABORT;
          }
        | simple_expr
        ;

岁月流歌 2022-09-18 14:14:44

定义优先级,为后面的'+'
cjaizss 发表于 2011-01-26 00:11

    但这个用法似乎有点奇怪
  一般定义了一个优先级、结合性,然后%prec

此生挚爱伱 2022-09-18 07:21:17

yacc有些忘了,回去有空看一下再解决
cjaizss 发表于 2011-01-25 17:00

    定义优先级,为后面的'+'

愁以何悠 2022-09-18 06:05:17

产生式的优先级默认值是最后一个终结符的优先级(所以你给的例子%prec是多余的)
但是可以显示改变,从而影响分析器解决冲突的方式
比如byacc中的例子有一个规则
| '-' expr %prec UMINUS
            { $$ = - $2; }

前段时间写过一个笔记,可以参考一下

http://blogold.chinaunix.net/u/20830/

郁金香雨 2022-09-17 23:45:57

这个版问题的类型比较杂,你得首先把你这个问题是关于什么的说清楚.
   应该是关于yacc的
cjaizss 发表于 2011-01-25 16:55

    yacc有些忘了,回去有空看一下再解决

爱格式化 2022-09-16 03:49:54

bit_expr '+' bit_expr %prec '+'

这里的%prec是什么意思?
qtdszws 发表于 2011-01-19 16:59

    这个版问题的类型比较杂,你得首先把你这个问题是关于什么的说清楚.
   应该是关于yacc的

水染的天色ゝ 2022-09-10 08:02:11

题目都没看懂

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文