优先级

LEX和YACC的使用三

我是研究僧i 提交于 2020-01-21 03:27:52
2.4.3 yacc解决二义性和冲突的方法 在2.3.8中已涉及到二义性和冲突的问题,这里再集中介绍一下,这在写Yacc源程序时会经常碰到。二义性会带来冲突。在2.3.8中我们介绍了yacc可以用为算符确定优先级和结合规则解决由二义性造成的冲突,但是有一些由二义性造成的冲突不易通过优先级方法解决, 如有名的例子: stat:IF bexp THEN stat |IF bexp THEN stat ELSE stat ; 对于这样的二义性造成的冲突和一些不是由二义性造成的冲突,Yacc提供了下面两条消除二义性的规则: A1.出现移进/归约冲突时,进行移进; A2. 出现归约/归约冲突时,按照产生式在yacc源程序中出现的次序,用先出现的产生式归约。 我们可以看出用这两条规则解决上面的IF语句二义性问题是合乎我们需要的。所以用户不必将上述文法改造成无二义性的。当Yacc用上述两条规则消除了二义性,它将给出相应信息。 下面再稍微严格地介绍一下Yacc如何利用优先级和结合性来解决冲突的。 Yacc源程序中的产生式也有一个优先级和结合性.这个优先级和结合性就是该产生式右部最后一个终结符或文字字符的优先级和结合性,当使用了%Prec子句时,该产生式的优先级和结合性由%Prec子句决定。当然如果产生式右部最后一个终结符或文字字符没有优先级或结合性,则该产生式也没有优先级或结合性。 根据终结符

操作系统OS总结/入门

﹥>﹥吖頭↗ 提交于 2020-01-21 00:57:06
一、综述: 1.OS特征:并发,共享,虚拟,异步 2.OS功能(任务): 存储管理,文件管理,设备管理,提供用户管理接口,处理机管理(进程作业相关:进程和作业调度,进程控制,进程通信,进程同步) 二、进程 1.基本概念: (1)进程定义 : 系统中正在运行的一个程序,程序一旦运行就是进程。可看成程序执行的实例 (2)区别线程 :线程是进程的一个实体,是进程的一条执行路径 【进程切换慢, 线程切换快】 【进程需通过IPC通信,线程可直接读写共享的进程空间通信】 【进程间地址空间和其他资源相互独立,同一进程下线程共享】 【追求更安全稳定用进程,追求速度快多机响应用线程】 (3)进程状态: (创建)、等待、就绪、运行、(结束) 转化图: (4)控制结构: PCB(processing control block )进程控制块是用来表示进程状态的数据结构。 OS根据PCB进行进程控制管理。 存放描述进程情况的全部信息: 程序计数器:程序中下一条即将执行的指令地址 进程标识符:进程的唯一标识 进程状态 内存指针:相关数据存放在哪儿 进程上下文:记录上下文防止在进车给切换时丢失现场数据 优先级:用来区别调度顺序 I/O信息:记录IO请求,分配的文件资源,外部设备 记账信息:时间限制、时间、记账号,方便记录管理 【PCB是进程在系统中的唯一标志】 2.进程控制: (1)进程调度: (补充: 饥饿

数据结构与算法(栈和队列)

Deadly 提交于 2020-01-20 05:04:35
首语 历经一个月的时间,自己终于搭建完成了个人网站,还在持续优化中,网站采用halo博客系统,功能非常强大!欢迎大家来我的网站逛逛。有什么建议可以留言! 网站地址: http://www.yanghujun.com 接下来我们开始第二节的数据结构学习,栈和队列。 栈 栈是限定仅在表尾进行插入和删除操作的线性表。 允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出 的线性表。 栈的顺序存储结构 如用数组实现,栈底是:下标为0的一端。 栈的链式存储结构 链栈的出入栈操作 链栈的入栈操作 s - > data = e ; s - > next = stack - > top ; stack - > top = s ; stack - > count ++ ; 链栈的出栈操作 p = stack - > top stack - > top = p - > next ; free ( p ) stack - > count -- ; 栈的经典实用(逆波兰表达式法) 标准四则运算表达式——中缀表达式 9+(3-1)*3+10/2 计算机采用——后缀表达式 9 3 1 - 3 * + 10 2 / + 中缀表达式转后缀表达式 数字输出,运算符进栈,括号匹配出栈,栈顶优先级低出栈。 代码实现 中缀表达式->后缀表达式 /** *

并行,串行,流水线,线程和进程傻傻分不清楚

那年仲夏 提交于 2020-01-20 03:35:56
漫谈并行,串行,流水线,线程和进程 在说并行串行流水线时,我们先要说一个概念双核四程,四核八程代表什么。 双核四程 指处理器中有两个核心, 但是利用了超线程技术,一个核心就有2个线程,所以两个核心就有4个线程。一般来说,两个核心就只有2线程。 超线程技术 就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率。因此支持Intel超线程技术的cpu,打开超线程设置,允许超线程运行后,在操作系统中看到的cpu数量是实际物理cpu数量的两倍,就是1个cpu可以看到两个,两个可以看到四个。有超线程技术的CPU需要芯片组、软件支持,才能比较理想的发挥该项技术的优势。 上述是一种减少命令执行时间的一种方式,Linux自从2.6内核开始,就会把不同的线程交给不同的核心去处理。Windows也从NT.4.0开始支持这一特性。 然后说下:并行,串行,流水线 并行: 时间片机制( 也有其他的机制,自己百度 ),让每个进程占用相同的cpu时间,在宏观上,可以实现多个进程同时完成。 串行: 一个进程完成,在执行下一个进程 流水线: 在A命令在执行时,B命令在解析,C命令在读取。这样子循环。 再说下线程和进程关系 我们开发应用程序,基本上分为2种进程:io消耗(文件读写);cpu消耗

C语言整理 二(运算符)

半腔热情 提交于 2020-01-20 03:06:38
关系运算符 符号 关系 < 小于 <= 小于或等于 > 大于 >= 大于或等于 == 等于 != 不等于 注:优先级低于算数运算符,高于赋值运算符,左结合性 关系表达式:用关系运算符将两个表达式连接起来进行关系运算的式子 注:关系运算的结果非“真”即“假”,(即关系表达式的值为1(真),0(假) 逻辑运算符 &&(与) 只有都为“真”时,结果为1,否则为0 ||(或) 只有都为“假”时,结果为0,否则为1 !(非) “真”---->0 ,“假”---->1 注:优先级为:!—>算数运算—>关系运算—>&&—>||—>赋值运算 , 左结合性 条件运算符和条件表达式"?:" C语言中唯一的三目运算符,含有条件运算符的表达式称为条件表达式 语法格式:表达式1?表达式2:表达式3 注: 1)当表达式1为真时,整个表达式的值为表达式2的值;表达式1为假时,整个表达式的值为表达式3的值 2)优先级高于赋值运算符,低于算数运算符、关系运算符、逻辑运算符 , 左结合性 逗号运算符和逗号表达式 C语言中,逗号可以用来作为运算,值为最后一个表达式的值 用逗号运算符连接的表达式,称为逗号表达式 注:优先级最低 , 左结合性。不是任何地方出现的逗号都是作为逗号运算符 来源: CSDN 作者: 我就是个普通人 链接: https://blog.csdn.net/weixin_45814435/article

Java多线程

懵懂的女人 提交于 2020-01-20 02:54:47
《Java核心技术》第十版笔记 概念 进程具有自己变量的完备集;线程则共享相同的数据。 抢占式调度:直接中断而不需要实现和 被中断程序 协商 协作式调度:只有在被中断程序同意交出控制权之后才能执行中断 多线程实现 方法一: class MyRunnable implements Runnable { public void run ( ) { . . . } } Runnable r = new MyRunnable ( ) ; Thread t = new Thread ( r ) ; t . start ( ) ; 方法二(不建议): class MyThread extends Thread { public void run ( ) { . . . } } Thread t = new MyThread ( ) ; t . start ( ) ; Thread类 sleep(t):static|线程暂停t毫秒,暂停当前线程的活动,会抛出 InterruptedException void run() void start() static Thread currentThread():返回代表当前执行线程的Thread对象 void interrupt():发送中断请求给一个线程,中断状态为true,如果线程当前被sleep调用阻塞

Redis(六)

筅森魡賤 提交于 2020-01-20 00:01:34
Redis主从复制 author:QYX 主从复制、就是主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 用处: 读写分离 性能扩展 容灾快速恢复 配从(服务器)不配(主服务器) 拷贝到多个redis.conf文件include 开启daemonize yes (主配置文件里有,可以省略) Pid文件名字pidfile (主配置文件里有,可以省略) 指定端口port Log文件名字 (主配置文件里有,可以省略) Dump.rdb名字dbfilename (必须更改,否则重名会被替换) Appendonly 关掉或者替换名字 (主配置文件里有,需要更改) 常用命令: info replication 打印主从复制的相关信息 slaveof <ip> <port> 成为某个实例的从服务器 例设置6379为主服务器 设置完成后,我们可以从服务器上使用info replication 查看主服务器的配置 主从复制测试: 主服务器设置的键值,从服务器也会有(保持数据一致性),但从服务器不可写,从服务器只有读的功能 以下为个人解答: 1、全都会被复制 2、从服务器只能读 3、原地待命等待主机上线 4、能顺利复制 5、能跟上 Redis主从复制之薪火相传 之前我配置的都是临时从服务器,从主服务器的redis

C语言之运算符基础----防备忘

孤人 提交于 2020-01-19 18:57:12
C语言之运算符基础----防备忘 优先级 运算符 备注 结合方向 1 ()、[ ] 、-> 、 . 优先级最高 2 !、 ~ 、++ 、-- 、- 、(类型强转) 、*、&、sizeof ①唯一单目运算符②!逻辑非运算符③~按位取反运算符④*指针运算符 自右至左 3 *、/、% 算数运算符 4 .+、- 算数运算符 5 <<、>> 左、右移运算符 6 <、<=、>、>= 关系运算符 7 ==、!= 关系运算符 8 & 按位与 运算符 9 ^ 按位异或 运算符 两位不同为1,两位相同为0 10 l 按位或 运算符 11 && 逻辑与 运算符 12 l l 逻辑或 运算符 13 ?: 条件运算符 自右至左 14 =、+=、-=、*=、/=、%=、>>=、<<=、&=、^= 赋值运算符 自右至左 13 , 逗号运算符(顺序求值运算符) 简洁的优先级表格【由上往下,优先级降低】 运算符 备注 ()、[ ]、->、 . 括号类的最高 !、~、剩余的全部单目运算符 注意!、~的含义 算符运算符 乘除余 > 加减 左、右移运算符 关系运算符 ==、!= 最低 & 按位与 ^ 按位异或 l 按位或 && 逻辑与 l l 逻辑或 ? : 条件运算符 赋值运算符 逗号运算符 来源: CSDN 作者: 秋山刀名鱼丶 链接: https://blog.csdn.net/qq_26039331

运算符

不打扰是莪最后的温柔 提交于 2020-01-19 16:08:32
1+2 数字之和 加 1-2 数字只差 减 2*3 数字的乘积 乘 5/2 数字的除法 除 5//2 数字除法取整 取整除 9%2 数字除法取余数 取余数 2**10 数字的指数运算 乘方运算 计算机运算时是有优先级的,可以用括号改变运算优先级 python 语言中只用()改变运算优先级 来源: https://www.cnblogs.com/LiChuYa/p/12213788.html

Java千问:学透Java自增(++)自减(--)运算符,看这一篇就够了!

删除回忆录丶 提交于 2020-01-19 13:28:17
同很多高级编程语言一样,Java语言的运算符系统当中也有自增(++)和自减(--)这两个运算符。很多小伙伴对这两个运算符都深感头疼,并且很多公司在面试的时候也经常会问到与之相关的问题,今天我们就通过一篇文章来深度解析一下这两个运算符,相信在看过这篇文章之后,你再也不会被自增(++)和自减(--)运算符难住。由于自增和自减运算符的原理完全相同,所以我们在讲解的时候仅以自增运算符举例。(预警:本文举例较多,篇幅较长,请耐心看完) 一、基本运算规则介绍 自增(++)和自减(--)运算符是对变量在原始值的基础上进行加1或减1的操作。它们都有前缀和后缀两种形式。前缀形式的运算规则可以概括为:”先自增(减),后引用”,而后缀形式的运算规则可以概括为:”先引用,后自增(减)”。这里所说的”引用”,指的是使用变量的值。另外,我们还要强调一个细节: 无论是前缀形式还是后缀形式,自增自减运算符的优先级要高于赋值运算符 。大家要记清楚这个细节,后文还会针对这个细节进行论述。下面我们就分为几种情况来研究++和--在不同场合下的运算效果。 二、语句中仅有++或-- 请看代码: 我们可以看到,这段代码中总共有3条语句,其中第2条语句中仅有一个后缀形式++操作,程序的输出结果是3。那么我们再来看另外一段代码: 这段代码与之前的那段代码基本一样,只是第2条语句中,后缀形式的++操作被换成了前缀形式