PL真有意思(四):控制流】的更多相关文章

前言 对大多数计算模型而言,顺序都是基本的东西,它确定了为完成所期望的某种工作,什么事情应该最先做,什么事应该随后做,我们可以将语言规定顺序的机制分为几个类别: 顺序执行 选择 迭代 过程抽象 递归 并发 异常处理和推断 非确定性 对于不同类别的语言对不同类别的控制流的重要性也不尽相同,比如顺序执行相比于函数式对于命令式则更加重要.而命令式中更倾向用迭代,函数则更强调递归 表达式求值 在讨论控制流之前先讨论下表达式的问题,先明确两个概念:运算符通常是指那些采用特殊语法形式的内部函数(比如+-*/…
前言 虽然标题是程序语言的语法,但是讲的是对词法和语法的解析,其实关于这个前面那个写编译器系列的描述会更清楚,有关语言语法的部分应该是穿插在整个设计当中的,也看语言设计者的心情了 和英语汉语这些自然语言不一样,计算机语言必须是精确的,它们的语法和语义都必须保证没有歧义,这当然也让语法分析更加简单 所以对于编译器一项很重要的任务就是时别程序设计语言的结构规则,要完成这个目标就需要两个要求: 完成对语法规则的描述 确定给定程序是否按照这些规则构造起来,也就是符合语法规则 第一个要求主要由正则表达式和…
前言 这两篇写了词法分析和语法分析,比较偏向实践.这一篇来看一下语言设计里一个比较重要的部分:名字.在大部分语言里,名字就是标识符,如果从抽象层面来看名字就是对更低一级的内存之类的概念的一层抽象.但是名字还有其它相关的比如它的约束时间和生存周期等等 约束时间 约束就是两个东西之间的一种关联,例如一个名字和它所命名的事物,约束时间就是指创建约束的时间.有关的约束可以在许多不同的时间作出 语言设计时 语言实现时 编写程序时 编译时 链接时 装入时 运行时 这就是为什么基于编译的语言实现通常会比基于解…
前言 在之前几篇我们讨论的语法.语义.命名.类型和抽象适用于所有语言.然而我们的注意力都主要集中在命令式语言上,现在这篇来看看其它范式的语言.函数式和逻辑式语言是最主要的非命令式语言. 函数式语言 命名和作用域问题出现在各种模型中,还有类型.表达式和选择与递归等控制流概念等等.所有语言都必须经过扫描.语法分析和语义分析, 函数式程序设计的概念 函数式程序设计将一个程序的输出定义为其输入的一个数学函数,在其中没有内部状态的概念,因此也没有副作用.函数式提供了一下特征,其中许多都是命令式语言中没有的…
前言 断断续续学编译原理到之前发过写一个编译器和正则表达式引擎系列文章也有一段时间了,然后最近看完PLP这本书,这本书应该算是入门书,但是对我这种半吊子收获很大.所以为了弥补最近学操作系统和接外包摸的鱼,就想写写看完这本书的收获.(为拙劣的标题道歉 程序设计语言的谱系 现在的新语言都是一撮一撮的出来,但是基本都可以用他们的计算模型来分成两类,一类是更关心计算机做什么的说明式,一类是更关心计算机怎么做的命令式 一般认为像函数式逻辑式语言都算是说明式,而冯诺依曼式和面向对象的都被认为是命令式 函数式…
前言 现在大多数程序设计语言中都有表达式和/或对象的类型概念.类型起着两种主要作用: 为许多操作提供了隐含的上下文信息,使程序员可以在许多情况下不必显示的描述这种上下文.比如int类型的两个对象相加就是整数相加.两个字符串类型的对象相加就是拼接字符串.在Java和C#中new object()隐含在背后的就是要分配内存返回对象的引用等等. 类型描述了其对象上一些合法的可以执行的操作集合.类型系统将不允许程序员去做一个字符和一个记录的加法.编译器可以使用这个合法的集合进行错误检查,好的类型系统能够…
前言 在之前我们把抽象定义为一种过程,程序员可以通过它将一个名字与一段可能很复杂的程序片段关联起来.抽象最大的意义就在于,我们可以从功能和用途的角度来考虑它,而不是实现. 在大多数程序设计语言中,子程序是最主要的控制抽象的方法.大多数子程序都是参数化的,即通过传递一些参数来影响子程序的行为. 回顾栈的布局 当一个子程序被调用的时候,在栈的顶部将给它一个新的栈帧或称为活动记录.这个栈帧可能包含实际参数和/或返回值.簿记信息(包含返回地址和保存的寄存器).局部变量和/或各种临时量.当子程序返回时,栈…
前言 在之前的名字.作用域那篇提到模块类型,它使程序员可以从一个给定抽象出发,通过实例化产生多个实例:再后面是类,它使程序员可以定义一族相关的抽象. 在这一篇里,我们会来看一下面向对象程序设计及其三个基本概念.动态方法约束.多重继承等等 面向对象程序设计 随着软件变得越来越复杂,数据抽象已经变成了软件工程中最重要的部分.由模块和模块类型提供的这种抽象至少带来了如下三个好处: 它可以减少程序员必须同时考虑的细节量,减少了人的概念负担 它起到一种故障遏制作用,可以防止程序员以不适当的方式使用程序的各…
呵呵,作数据分析是数据监控后的动作. 思路是用监控系统产生数据, 如果监控本身提供统计最好,如果不提供,则可以用R来作分析统计和预测. 如果数据不符合规范,则用PYTHON进行处理转换. ~~~~~~~~~~~~~~…
-- 学习where语句 -- 1.学会where子句中使用常规比较符 -- 常规比较操作符:=,<>(不等于),!=,>=,<=,>,< -- 当区分大小写时,可以使用转换函数(LOWER或UPPER)进行转换 SELECT UPPER('hello') FROM dual; SELECT LOWER('HELLo') FROM dual; SELECT ename,job,sal FROM emp WHERE job='MANAGER'; SELECT ename,…
项目冲刺情况 进展 前端:完成了差不多一半,小程序部分界面基本完工,WEB端也完成了一部分 后端:也完成了大半了 问题 后端文件上传还没解决 心得 进度还行,团队配合都还不错 今日会议内容 黄少勇 今日进展 完成缴费模块,实现查看费用清单,详细费用及缴费功能 存在问题 对mybatis的mapper配置不熟练 明日安排 完成报修和投诉模块 心得体会 对mybatis的mapper配置有了一定的了解 黄种鑫 今日进展 完成费用页.工单页 存在问题 小程序按钮默认样式去除不干净 明日安排 大致完成所…
一.泛型的本质 泛型是参数化类型的应用,操作的数据类型不限定于特定类型,可以根据实际需要设置不同的数据类型,以实现代码复用. 二.Java泛型 Java 泛型是Java1.5新增的特性,JVM并不支持. 实现原理:Java源代码里面类型提供实现泛型功能,而编译后Class文件类型就变成原生类型(即类型被擦除掉),而在引用处插入强制类型转换以实现JVM对泛型的支持.本质是Java泛型只是Java提供的一个语法糖,底层 的JVM并不提供支持,Java中的泛型属于伪泛型. 但是编译后的字节码通过反射后…
要理解JavaScript,你得首先放下对象和类的概念,回到数据和代码的本原.前面说过,编程世界只有数据和代码两种基本元素,而这两种元素又有着纠缠不清的关系.JavaScript就是把数据和代码都简化到最原始的程度.    JavaScript中的数据很简洁的.简单数据只有 undefined, null, boolean, number和string这五种,而复杂数据只有一种,即object.这就好比中国古典的朴素唯物思想,把世界最基本的元素归为金木水火土,其他复杂的物质都是由这五种基本元素组…
引子 编程世界里只存在两种基本元素,一个是数据,一个是代码.编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力. 数据天生就是文静的,总想保持自己固有的本色:而代码却天生活泼,总想改变这个世界.    你看,数据代码间的关系与物质能量间的关系有着惊人的相似.数据也是有惯性的,如果没有代码来施加外力,她总保持自己原来的状态.而代码就象能量,他存在 的唯一目的,就是要努力改变数据原来的状态.在代码改变数据的同时,也会因为数据的抗拒而反过来影响或改变代码原有的趋势.甚至在某些情况下,数据可…
从今天开始要做一个2d游戏,由于之前都是做cocos2dx的,然后接触了一段时间的unity3d,都是做3D方面的东西,得知要做2d游戏还是有点开心的,或许因为不想丢失之前的2d游戏的一些思想,然后接触到unity3d的一个2d插件——2dtoolkit,我感觉还是蛮强大的,虽然是一个插件,完全感觉跟cocos2dx引擎有的一比,他们的思想也很类似,我个人感觉有点区别的无非就是unity有丰富的可视化界面,而cocos2dx都是自己代码来布局界面,当然也可以用cocosstudio,可能是我没怎…
概述 redis 内部有一个小型的事件驱动,它和 libevent 网络库的事件驱动一样,都是依托 I/O 多路复用技术支撑起来的. 利用 I/O 多路复用技术,监听感兴趣的文件 I/O 事件,例如读事件,写事件等,同时也要维护一个以文件描述符为主键,数据为某个预设函数的事件表,这里其实就是一个数组或者链表 .当事件触发时,比如某个文件描述符可读,系统会返回文件描述符值,用这个值在事件表中找到相应的数据项,从而实现回调.同样的,定时事件也是可以实现的,因为系统提供的 I/O 多路复用技术中的函数…
原文:http://blog.sina.com.cn/s/blog_b86c61490102v56t.html 第一季第一集 主人公弗兰克的出场,是以对待一只邻家将死之狗的态度展开的,充分显示了主人公的做事作风立场:(以小喻大)残忍,果断,决绝,对无用之物毫不怜悯,正是一个深通权谋的政客(不是政治家)应具有的品格.此时也出现了第一次弗兰克的镜头旁白,全剧多处充斥着主人公的镜头旁白,多为了解释弗兰克的性格作风等等,以及向不懂权谋术的观众解释权谋术的应用. 今夜弗兰克心情大好,亲呢地为妻子拉衣链赞美…
<白手起家Win32SDK应用程序> 目 录 <白手起家Win32SDK应用程序> 第一篇.预备知识 第二篇.创建Win32工程和主函数 第三篇.增加一个回调函数 第四篇.注册一个窗口类 第五篇.利用已注册的窗口类来创建一个窗口 第六篇.显示你创建的窗口 第七篇.获取消息及对消息缺省处理 第八篇.关闭窗口的同时退出程序 第九篇.窗口标题栏上显示自定义图标(手动编辑代码) 第一篇.预备知识 白云小飞1 说在前面    由于VC6及MFC的特点,我们许多人从标准C++学习到VC6MFC…
看字幕.再也看不下去.自己翻译的位 评价的探讨 1 00:01:58,452 --> 00:02:02,088 人工增雨 期限为32分钟16第二 2 00:02:02,089 --> 00:02:06,292 在10秒内将 人工强降雨 3 00:02:14,534 --> 00:02:18,537 雨水的酸度预计值为8.4 4 00:02:22,476 --> 00:02:25,678 中心周边东南部天气晴 5 00:06:03,864 --> 00:06:05,965 你知…
首先说明,这是别人写的一篇文章,写得很好,对理解JavaScript很有好处,所以转帖过来. 引子    编程世界里只存在两种基本元素,一个是数据,一个是代码.编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力. 数据天生就是文静的,总想保持自己固有的本色:而代码却天生活泼,总想改变这个世界.    你看,数据代码间的关系与物质能量间的关系有着惊人的相似.数据也是有惯性的,如果没有代码来施加外力,她总保持自己原来的状态.而代码就象能量,他存在的唯一目的,就是要努力改变数据原来的状态.…
JavaScript以其强大灵活的特点,被广泛运用于各种类型的网站上.一直以来都没怎么好好学JS,只是略懂皮毛,看这篇文章时有读<PHP圣经>的感觉,作者深入浅出.生动形象地用各种实例给我们分析了JavaScript的数据结构,让人有一种豁然开朗的感觉. 全文如下: 编程世界里只存在两种基本元素,一个是数据,一个是代码.编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力. 数据天生就是文静的,总想保持自己固有的本色:而代码却天生活泼,总想改变这个世界. 你看,数据代码间的关系与物质…
败者之低语 WC 2019 游记 Day -1 看了一圈PKU和THU的题,感觉图像识别真有意思... 感觉非常讲道理,pku还是比thu简单一点的... 听说高二414在thu没有进面试? 震惊!(果然,我是去不上的.jpg Day 0 还行,飞机没晚点,在飞机上打了一会儿Ra2,然后发现电脑电量不够了,然后就开始写课件... 果然,学习就没那么费电! $20\min 70 <-> 70 \min 20$,所以颓什么颓,好好学习! 到了之后,似乎是来晚了,人家$6:00$就都走了... 胸牌…
回归简单 要理解JavaScript,你得首先放下对象和类的概念,回到数据和代码的本原.前面说过,编程世界只有数据和代码两种基本元素,而这两种元素又有着纠缠不清的关系.JavaScript就是把数据和代码都简化到最原始的程度. JavaScript中的数据很简洁的.简单数据只有 undefined, null, boolean, number和string这五种,而复杂数据只有一种,即object.这就好比中国古典的朴素唯物思想,把世界最基本的元素归为金木水火土,其他复杂的物质都是由这五种基本元…
noilinux@Capella:~$ cd /Memories/ noilinux@Capella:/Memories$ rm *SXOI* rm:是否删除有写保护的普通文件 "SXOI2018 游记.md"? Y rm: 无法删除"SXOI2018 游记.md": 权限不够 noilinux@Capella:/Memories$ ls *SXOI* SXOI2018 游记.md noilinux@Capella:/Memories$ cat SXOI2018\…
write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 一.   综述 <异常处理与MiniDump详解(1) C++异常>稍微回顾了下C++异常的语法及其类似于函数参数传递的抛出异常对象的copy,引用语义,但是有个问题没有详细讲,那就是C++异常的绝佳搭档,智能指针.在没有智能指针的时候会感觉C++的异常少了一个用于释放资源的finally语法,但是C++没有这样的语法是有理由的,因为C++的智能指针.假如不用智能指针仅仅使用异…
声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/alinx/p/3362790.html <FPGA那些事儿-Modelsim仿真技巧>完整版下载地址: http://www.heijin.org/forum.php?mod=viewthread&tid=25285 第六章 结束就是开始 6.1 不可仿真对象 6.2 超烦模块与不等比例缩放…
可以先看看这个视频: RSA_Encryption_Algorithm 公开密钥 Perwork: 私钥:Sender和Receiver预先约定加密和解密方案,向其他人保密. 这个实现比较难:向其他人保密.假如你是个商家,很多人要和你联络,发送者可能和你一点关系也没有,怎么保密. 需求:Sender素不相识,发送消息需求保密,加密方案必须公开.[就和信箱一样,所有人都可以向你公开的的信箱里投信件,但是只有你才有钥匙(私有的)取信件] 公钥:加密方案向所有人公开,解密方案只有Receiver知道,…
ios bits限制大概512bits 低端256bits mali 也是bits限制 2017年 Mali-T760 128bits adreno android显卡4 肯定可以 因为deferred 里面 shadowmask放第五张 这样有些机型不支持 我记得unity里面有判断的UNITY_ALLOWED_MRT_COUNT 它是這樣定義的 #if (defined(SHADER_API_GLES3) && !defined(SHADER_API_DESKTOP)) || defi…
引子 编程世界里只存在两种基本元素,一个是数据,一个是代码.编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力. 数据天生就是文静的,总想保持自己固有的本色:而代码却天生活泼,总想改变这个世界.    你看,数据代码间的关系与物质能量间的关系有着惊人的相似.数据也是有惯性的,如果没有代码来施加外力,她总保持自己原来的状态.而代码就象能量,他存在 的唯一目的,就是要努力改变数据原来的状态.在代码改变数据的同时,也会因为数据的抗拒而反过来影响或改变代码原有的趋势.甚至在某些情况下,数据可…
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 H*W 黑白格图,保证黑格四连通. 定义分形如下:0 级分形是一个 1*1 的黑格:通过将第 k 级分形中的白格替换成 H*W 的全白,黑格替换成题目所给的 H*W 格图得到第 k + 1 级分形. 求第 K 级分形中黑格的四连通块个数. 原题传送门. @solution@ 最好先特判 K = 0 的情况. 如果存在一行最左最右都是黑格,且存在一列最上…