ANTLR3完全参考指南读书笔记[08]】的更多相关文章

前言 不要让用户被那些“专业术语”吓住! 用心设计的提示和反馈信息是软件设计者的“职业良心”.   内容 1 存在哪些错误? 2 美化错误提示 3 错误恢复策略   1 存在哪些错误? 在DSL语言开发周期内,首先需要设计文法,根据文法生成翻译器,然后输入语言样本测试翻译器的效果,以及根据存在的翻译问题调整翻译策略.这其中就可能存在两类错误:文法错误和语言样本错误. 在Parr将一些错误拉出来游街,以及盛赞ANTLR在错误提示和恢复方面的优异表现的描述中,可以观察到一些错误提示和恢复的策略和惯例…
引用 Terence Parr. The Definitive ANTLR Reference, Building Domain Specific Languages(antlr3 version).   前言 [1]为什么有了lex/yacc(flex/bison),为什Parr还要写个ANTLR? C语言是拿着剃须刀在滑冰,Java是“隐藏”了指针的支持OO的C语言族中相对简单的语言,随着Martin的DSL概念深入人心,不管怎样,还是印证了那句话:模仿是最大的恭维.尽管这对有10+编译器方…
前言 这段时间在公司忙的跟狗似的,但忙的是没多少技术含量的活儿. 终于将AST IR和tree grammar过了一遍,计划明天写完这部分的读书笔记.   内容 1 内部表示AST构建 2 树文法     1 内部表示AST构建 内部表示(intermediate form, IR)的引入理由 分治策略,通常翻译程序语言的工作无法在单一步骤内完成,将其划分为一系列相互关联的步骤,如识别token.填充数据结构(符号表等).提交输出: 有do one thing, do one thing wel…
前言 程序语言是什么? 用wiki上的描述,程序语言是一种人工设计的语言,用于通过指令与机器交互:程序语言是编程程序的标记,而程序是一种计算或算法的描述.详细介绍和背景信息参考: Programming_language(http://en.wikipedia.org/wiki/Programming_language) Programming_language_generations(http://en.wikipedia.org/wiki/Programming_language_gener…
前言 真正意义上的程序员都很懒,懒的连多余的一行代码也不写. 如果能将底层满手油污的活儿都可以交给别人去做,自己就扮演个智囊团成员的角色,生活会比想象中的还要惬意. 严格的按照指令执行长时间不知疲倦的计算是计算机所擅长的事情,那么给它一个代码模板,留些运行时它可以获取的值的占位符,再揉进一些固定套路的指令,程序员的生活也可以很美好. 尽管如此,但工具永远不是软件工程中的银弹(看看人月神话吧),适可而止,让富有攻击性的洞察力指引前进的方向,而在实际工作中持适当的保守性态度.   内容 1 Stri…
前言 仅生成给出true/false的识别器是没有多大用处的,自然的就有在识别过程中遇到某一结构时执行一段代码.存储该结构中信息的想法. ANTLR提供了在文法中嵌入属性和动作超级混合“文法”,可以生成内部表示AST或模板:当然如果直接输出部分结构识别结果的话动作也可以应付.   内容 基本与原文第6章一致 属性和动作 1 文法动作 2 Token属性 3 预定义规则属性 4 属性作用域 5 在动作中引用属性   属性和动作 用几个实例予以说明,动作中语言均是Java. [ex1]动作可以在规则…
前言 学习框架或第三方库的方法是什么 (1)少量的浏览manual或tutoral,只关注程序所需的特征,再完善其详细内容和特征的认识? (2)花大量的时间研究详细内容,再考虑程序实现? 这是个先有鸡还是先有蛋的问题,因这是私底下的项目,我倾向于后者.   当前已对ANTLR文法有了一些了解,这篇是概览性知识的最后一部分. 初步将ANTLR的涉及的面向应用的内容划分了一下: [1]文法:lexer, parser, tree parser [2]动作和属性 [3]内部表示:AST [4]模板语言…
前言 文中第4章内容有点多,有点枯燥,但不坚持一下,之前所做的工作就白做了. 再次确认一下总体目标: protege4编辑器中Class Definition中语法解析和错误提示: Java虚拟机规范7版中描述符和签名语法的解析器.   内容 按照文中章节组织,记录重要知识点. 这部分内容需要在后面的学习过程中回来再做理解.   4 ANTLR Grammars 4.1 Describing Languages with Formal Grammars 4.2 Overall ANTLR Gra…
HTTP权威指南笔记 读书有两种境界,第一种境界是将书读薄,另一种是读厚.本篇文章就是HTTP权威指南的读书笔记,算是读书的第一重境界,将厚书读薄.文章对HTTP的一些关键概念做了比较详细的概述,通读一遍之后,会对HTTP有个总体认识.然后你可以根据文章中的关键点,去查找更详细的细节.这就是读书的第二重境界,将书读厚. HTTP(hypertext transfer protocol,超文本传输协议)是万维网进行通信时所使用的协议方案.HTTP有很多应用,但最著名的是用于Web浏览器和Web服务…
今天翻手机,翻到了许久之前看css权威指南时的笔记,遂移到博客中来. 1.属性选择器p.one class名为one的p元素p[class][name] 含有class和name属性的p元素p[class="one"][name="two"] class属性为one且name属性为two的p元素p[class~="one"] class属性包含one的p元素p[class^="one"] class属性以one开头p[clas…
新生代.老年代.永久代的概念不多说,这三个空间中任何一个不能满足内存分配请求时,就会发生垃圾收集. 新生代不满足内存分配请求时,发生Minor GC,老年代.永久代不满足内存分配请求时,发生Full GC,Minor GC比Full GC持续的时间要短很多. 所以内存空间设置的不合理就会频繁引起垃圾收集,以及OutOfMemoryError错误,严重影响程序性能. Java堆大小计算法则 若你的应用部署在单独的服务器,且该服务器上只有这一个应用,那Java堆肯定是越大越好,但这种情况比较少. J…
概述:JVM性能调优没有一个非常固定的设置,比如堆大小设置多少,老年代设置多少.而是要根据实际的应用程序的系统需求,实际的活跃内存等确定.正文: JVM调优工作流程 整个调优过程是不断重复的一个迭代,后面的步骤有可能影响前面的配置,可能需要重新调优. 应用程序的系统需求 确定应用程序的系统需求是性能调优的基础,后面的调优都会依赖这个要求.一个应用不会无休止地调优下去. 1.可用性 2.可管理性 3.启动时间 4.吞吐量 TPS: 每秒多少次事务 QPS: 每秒多少次查询 5.延迟 比如关键请求必…
一:CPU 1. 用户态CPU是指执行应用程序代码的时间占总CPU时间的百分比. 系统态CPU是指应用执行操作系统调用的时间占总CPU时间的百分比.系统态CPU高意味着共享资源有竞争或者I/O设备之间有大量的交互. 提高应用性能和扩展性的一个目标就是尽可能降低系统态CPU使用率. 2. CPU运行队列就是那些已经准备好运行.正等待可用CPU的轻量级进程. 当运行队列长度达到处理器的4倍或者更多时,系统的相应就非常迟缓了. 解决运行队列长有两种办法: 1). 增加CPU以分担负载: 2). 分析系…
最近读了这本IBM出的<A Practical Guide to Distributed Scrum>(分布式Scrum的实用指南),书中的章节结构比较清楚,是针对Scrum项目进行,一个阶段一个阶段来介绍的,既包含Scrum的做法,也包含了分布式团队可能遇到的问题和一些建议.这里我先根据书籍目录,做个大致的介绍和提要,最后做一个自己的总结. 一.提要 Chapter 1 The Evolution of Scrum Core Principles of Scrum - 介绍Scrum框架和一…
web性能权威指南 page 203 经典的性能优化最佳实践 无论什么网络,也不管所用网络协议是什么版本,所有应用都应该致力于消除或减 少不必要的网络延迟,将需要传输的数据压缩至最少.这两条标准是经典的性能优 化最佳实践,是其他数十条性能准则的出发点. 减少DNS查找 每一次主机名解析都需要一次网络往返,从而增加请求的延迟时间,同时还会阻 塞后续请求. 重用TCP连接 尽可能使用持久连接,以消除 TCP 握手和慢启动延迟;参见 2.2.2 节“慢启动”. 减少HTTP重定向 HTTP 重定向极费…
1. 概述 kylin 是 OLAP 引擎,采用多维立方体预计算技术,可将大数据的 SQL 查询速度提升到亚秒级别. 需求: 虽然像 spark,hive 等使用 MPP 大规模并行处理和列式存储的方式,可以将 Hadoop 的 SQL查询提高到了分钟级别, 但是仍然不能满足数据分析师的要求.在面对超大规模的数据集时,分析师不要讲更多的精力花在等待查询结果上, 而不是更加重要的建立领域模型上. kylin 就是要打破查询时间随着数据量成线性增长的规律,采用的思路就是 “预计算” 它会尽量的预先计…
这一章看了之后真是豁然开朗,之前虽然写了圣杯布局和双飞翼布局,有些地方也是模糊的,现在打算总结之后再写一遍. 以下都是从<css权威指南>中摘抄的我认为很有用的说明. 浮动元素 一个元素浮动时,其他内容会环绕该元素.浮动元素会生成一个块级框,不论这个元素本身是什么.并且浮动元素周围的外边距不会合并.如果要浮动一个非替换元素,必须显式声明width. 浮动元素的几条规则: 1)      浮动元素的左(右)外边界不能超出其包含块(包含快是其最近的块级祖先元素)的左(右)边界.但是负外边距或者浮动…
本书中提到的Hadoop项目简述 Common:一组分布式文件系统和通用I/O的组件与接口(序列化.javaRPC和持久化数据结构). Avro:一种支持高效.跨语言的RPC以及永久存储数据的序列化系统. MapReduce:分布式数据处理模型和执行环境,执行于大型商业集群. HDFS:分布式文件系统,执行于大型商用机集群. Pig:一种数据流语言和执行环境,用以检索很大的数据集. Pig执行在MapReduce和HDFS的集群上. Hive:一个分布式.按列存储的数据仓库.Hive管理HDFS…
分阶段事件驱动架构 SEDASEDA(Staged Event-Driven Architecture)的核心思想是把一个请求处理过程分成几个Stage,不同资源消耗的Stage使用不同数量的线程来处理,Stage间使用事件驱动的异步通信模式.更进一步,在每个Stage中可以动态配置自己的线程数,在超载时降级运行(如输出纯文字页面)或拒绝服务.(参考百度百科)一般一些工作单元会在一个线程池中完成.不过cassandra使用SEDA,所以一个操作可能在一个线程池开始,然后把工作移交给别的线程池.移…
结构 集群-->数据中心-->机架-->节点. cassandra尽可能将数据副本存在多个数据中心,然后读取(查询路由到)尽可能在本地数据中心. 为了去中心化和分区容错性,使用gossip协议.允许各个节点跟踪其他节点的状态信息. cassandra gossip详情可以参考: https://blog.csdn.net/weixin_38916872/article/details/81334014 https://zhaoyanblog.com/archives/1017.html…
JavaScript 1.变量 变量是一个表示值的符号,是一个名字,他的本质是值: var x; //----声明一个变量: 值通过等号“=”赋给变量,x = 16; 对象是名/值对的集合,或字符串到值映射的集合: var book = { //对象用花括号包起来 topic:"JavaScript", //属性topic的值是JavaScript,多个名/值对用逗号分隔: fat:true //属性fat的值是true; }; //分号表示定义变量结束: 通过"."…
2013-08-21 13:56:23 3.3 IP路由选择 1. IP路由选择有两种情况.(1)如果目的主机与源主机直接相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么IP数据报就直接到达目的主机.(2)如果目的主机和源主机不直接相连,则主机把数据报发往一默认的路由器上,由路由器来转发该数据报. 2. IP层既可以配置成路由器的功能,也可以配置成主机的功能.本质上的区别在于主机从不把数据从一个接口转发到另外一个接口,而路由器则要转发数据报.内含路由器功能的主机应该从不转发数据…
吞吐量是指,应用程序的TPS: 每秒多少次事务,QPS: 每秒多少次查询等性能指标. 吞吐量调优就是减少垃圾收集器消耗的CPU周期数,从而将更多的CPU周期用于执行应用程序. CMS吞吐调优 CMS包括Minor GC所带来的开销应该小于10%,如果垃圾收集的开销在3%或更少,说明通过调优吞吐量,提升性能的空间就极其有限了. 可用的调优方法如下: 1. 增大新生代空间,以降低Minor GC频率,减少CPU周期占用: 2. 增加老年代空间,以降低CMS频率,并可以减少老年代内存碎片: 3. 优化…
延迟指服务器处理一个请求所花费的时间,单位一般是ms.s. 本文主要讲降低延迟可以做的服务器端JVM优化. JVM延迟优化 新生代 新生代大小决定了应用平均延迟 如果平均Minor GC持续时间大于应用程序平均延迟性要求,可以适当减小新生代空间大小: 如果Minor GC频率大于应用程序平均延迟性要求,可以适当增大新生代空间: 老年代 老年代大小决定了应用最差延迟 FullGC频率大于应用程序最大FullGC频率要求,可以适当增大老年代空间大小: FullGC持续时间大于应用程序最差延迟性要求,…
1 数据库和MapReduce对比 2 hadoop 包含的内容…
<script type="text/javascript"> //数组与object的关系 var obj = { name: "刘建伟", Age: 12, Height: 22 }; console.log(obj["name"]); var a = { 0: "12", 1: "34", 2: "56" }; var a = [12, 34, 56];//数组是对象演…
第一章 Android应用初体验 1.4用户界面设计 <?xml version="1.0" encoding="utf-8"?> ADT21开发版以后,Android布局文件已不需要该行代码. 1.4.1视图结构层级(view hierarchy) 继承至View的ViewGroup组件:LinearLayout/FrameLayout/RelativeLayout 1.4.3 字符串资源 一般默认被命名为strings.xml,也可自定义命名,但是这…
function是一个函数对象的“容器”,概念上像是c/c++中函数指针类型的泛化,是一种“智能函数指针”.它以对象的形式封装了原始的函数指针或函数对象,能够容纳任意符合函数签名的可调用对象. 因此,它可以被用于回调机制,暂时保管函数或函数对象,在之后需要的时机再调用,使回调机制拥有更多的弹性. 1.function的声明 比如使用function<int(doublea, double b)> func; 这就是声明了一个function对象,返回值为int,有两个参数都为double 2.…
asio库基于操作系统提供的异步机制,采用前摄器设计模式(Proactor)实现了可移植的异步(或者同步)IO操作,而且并不要求多线程和锁定,有效地避免了多线程编程带来的诸多有害副作用. 目前asio主要关注于网络通信方面,使用大量的类和函数封装了socket API,支持TCP.TCMP.UDP等网络通信协议.但asio的异步操作并不局限于网络编程,它还支持串口读写.定时器.SSL等功能,而且asio是一个很好的富有弹性的框架,可以扩展到其他有异步操作需要的领域 概述 asio库基于前摄器模式…
网络通信 asio库支持TCP.UDP.ICMP通信协议,它在名字空间boost::asio::ip里提供了大量的网络通信方面的函数和类,很好地封装了原始的Berkeley Socket Api,展现给asio用户一个方便易用且健壮的网络通信库. ip::tcp类是asio网络通信(TCP)部分主要的类,但它本身并没有太多的功能,而是定义了数个用于TCP通信的typedef类型,用来协作完成网络通信.这些typedef包括端点类endpoint.套接字类socket.流类iostream,以及接…