运算符的优先级(规矩是人定的)

这篇具有很好参考价值的文章主要介绍了运算符的优先级(规矩是人定的)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

运算符的优先级(规矩是人定的)

什么是经典?经典就是理论不随时间变迁而变化。《东方不败》中的很多台词让人时不时想起来振聋发聩。比如

运算符的优先级(规矩是人定的),编译原理,c语言,汇编
运算符的优先级(规矩是人定的),编译原理,c语言,汇编

运算符的优先级(规矩是人定的),编译原理,c语言,汇编
很多事情不是自己想的那样,规矩是人定的。

舔狗和有思想

从小到大,我们都学过数学运算时要先乘除后加减,谁定的?

舔狗说:“老师讲的都是对的,所以这样!”有思想的人会说:“真的这样?”

一张升学试卷决定人生,舔狗继续升学,有思想的人如果不妥协就不会再有机会深造,但是,心中的疑问解决了吗?

怎么定义先乘除后加减

先乘除后加减的本质就是运算符的结合性

9+5*2
等价于
9+(5*2)

这里要注意一个问题,无论是+,-,*,/都是左结合的。

因此加减法的产生式为

list -> list + digit | list - digit | digit
digit -> 0|1|2|3|4|5|6|7|8|9

乘除法的产生式为

list -> list * digit | list / digit | digit
digit -> 0|1|2|3|4|5|6|7|8|9

现在问题是如何把上述两个产生式混合在一起,并且符合先乘除后加减

改造产生式

首先,我们要把list分开表示。比如,

对于加减法的产生式改造为

expr -> expr + digit | expr - digit | digit
digit -> 0|1|2|3|4|5|6|7|8|9

对于乘除法的产生式改造为

term -> term * digit | term / digit | digit
digit -> 0|1|2|3|4|5|6|7|8|9

合并产生式

对于加减法产生式进一步改造为运算符的右操作数可为乘除法或者数字的。

expr -> expr + term | expr - term | term

发现了吗?现在这样的产生式可以描述这样一个表达式了

9-5*2

而且,term必须优先于expr,即先乘除后加减

终结版

除了先乘除后加减之外,我们还要考虑加减法在使用括号时可以先加减后乘除,因此改造上述的产生式为

expr -> expr + term | expr - term | term
term -> term * factor | term / factor | factor
factor -> digit | (expr)
digit -> 0|1|2|3|4|5|6|7|8|9

规律

为了完成优先级计算,考虑上述的产生式用到了factortermexpr三个非终结符,我们在三者中找一下规律

  • factor

    factor不能被任何运算符分开,只能放在运算符的左侧或右侧。如果用括号括起来则表示不被其分开

  • term

    只能被高优先级运算符分开,不能被低优先级运算符分开文章来源地址https://www.toymoban.com/news/detail-773995.html

到了这里,关于运算符的优先级(规矩是人定的)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言:运算符优先级

    一、优先级(常使用的运算符) 见表格 二、注意 总体原则:算术运算符 关系运算符 逻辑运算符 赋值运算符 同一级别下的运算符的运算次序由表达式的结合方向决定 运算符 注释 级别 ( ) 圆括号 1 [ ] 数组下标 1 后置++ 后置++ 2 后置-- 后置-- 2 前置++ 前置++ 3 前置-- 前置-- 3

    2024年02月11日
    浏览(45)
  • C#常用运算符的优先级

    运算符在C#编程语言中扮演着重要的角色,用于执行各种计算和操作。了解运算符的优先级是编写高效和正确代码的关键。本文将深入探讨C#中38个常用运算符的优先级划分和理解,并提供详细的说明和示例,以帮助读者更好地理解运算符的使用。 算术运算符用于执行基本的数

    2024年02月05日
    浏览(44)
  • C语言运算符优先级(大全)

    🔺按照运算符的操作对象(变量或常量)的个数分为三类: 单目运算符 ; 双目运算符 ; 三目运算符 🔺注意:当优先级相同时,按结合方向来进行计算 1.(后缀运算符) 运算符 名称 [] 数组下标 () 圆括号 . 成员选择 - 成员选择 🔴结合方向从左到右 “.” 和 \\\"-\\\"多用在结构

    2024年02月06日
    浏览(43)
  • C++所有运算符及其优先级表格

    运算符 运算符介绍 优先级 :: 范围解析 1 () [] - . 圆括号、方括号、箭头、点号 2 ++ -- 后缀递增、后缀递减 2 typeid const_cast dynamic_cast reinterpret_cast static_cast 类型名称、常量类型转换、动态类型转换、重新解释的类型转换、静态类型转换 2 ! ~ ++ -- + - * (type) sizeof new delete 非、按位

    2024年02月13日
    浏览(38)
  • 【从零学习python 】08.Python了解位运算符, 运算符优先级

    按位运算符是把数字看作是二进制来进行计算的。 下表中变量 a 为 60, b 为 13,二进制格式如下: a b = 0000 1100 a | b = 0011 1101 a ^ b = 0011 0001 ~a = 1100 0011 位运算 描述 示例 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a b) 输出结果 12 ,

    2024年02月10日
    浏览(42)
  • C语言操作符详解+运算符优先级表格

       目录  前言 一、操作符是什么? 二、操作符的分类 三、算术操作符 四、逻辑操作符 五、比较操作符 六、位操作符 七、赋值操作符 八、其他操作符  九、运算符优先级表格 总结 在编写程序时,最常用到的就是操作符,本文将详细的介绍我们在编写程序时需要用到的操

    2024年01月18日
    浏览(53)
  • C语言--C运算符的优先级与结合性

             优先级 运算符 含义 运算类型 结合方向 1 ()   [ ]   -    . ++ -- 圆括号、函数参数表 数组元素下标 指向结构体成员 引用结构体成员 后缀增1、后缀减1 —— 自左向右 2 ! ~ ++  -- - * (类型标识符) sizeof 逻辑非 按位取反 前缀增1、前缀减1 取负 间接寻址运算符

    2024年02月16日
    浏览(37)
  • 正则表达式 运算符优先级与匹配规则 | 一看就懂!!!(四)

    目录 一、正则表达式 - 运算符优先级 (一)正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。 (二)相同优先级的从左到右进行运算,不同优先级的运算先高后低。 (三)下表从最高到最低说明了各种正则表达式运算符的优先级顺序:  二、正

    2024年02月12日
    浏览(41)
  • 快来看看Python运算符优先级和结合性一览表

    优先级和结合性是 Python 表达式中比较重要的两个概念,它们决定了先执行表达式中的哪一部分。 所谓优先级,就是当多个运算符同时出现在一个表达式中时,先执行哪个运算符。 例如对于表达式 a + b * c ,Python 会先计算乘法再计算加法; b * c 的结果为 8, a + 8 的结果为

    2024年02月09日
    浏览(38)
  • Java语言中运算符号优先级

    算术运算符:+,-,*,/,%,++,-- 赋值运算符:= 扩展后的赋值运算符:+=,-=,*=,/=,%=,=,|=,^=,=,=,= 关系比较运算符:,=,,=,== 逻辑运算符:,,||,|,!,^ 位运算符:,|,~,^,,, 其他运算符(三目运算符):? : (1)+(加法) int a = 3; int b = 2; in sum =

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包