符号计算

编译原理——正规式转DFA算法概述

让人想犯罪 __ 提交于 2020-03-11 19:05:21
一、概念概述 给定一个单词,判断该单词是否满足我们给定的单词描述规则,需要用到编译原理中词法分析的相关知识,其中涉及到的两个很重要的概念就是正规式(Regular Expression)和有穷自动机(Finite Automata)。正规式是描述单词规则的工具,首先要明确的一点是所有单词组成的是一个无穷的集合,而正规式正是描述这种无穷集合的一个工具;有穷自动机则是识别正规式的一个有效的工具,它分为确定的有穷自动机(Deterministic Finite Automata,DFA)和不确定的有穷自动机(Nondeterministic Finite Automata,NFA)。对于任意的一个单词,将其输入正规式的初始状态,自动机每次读入一个字母,根据单词的字母进行自动机中状态的转换,若其能够准确的到达自动机的终止状态,就说明该单词能够被自动机识别,也就满足了正规式所定义的规则。而DFA与NFA之间的差异就是对于某一个状态S,输入一个字符a,DFA能够到达的下一个状态有且仅有一个,即为确定的概念,而NFA所能到达的状态个数大于或等于一个,即不确定的概念。因为NFA为不确定的,我们无法准确的判断下一个状态是哪一个,因此识别一个正规式的最好的方式是DFA。那么,如何为一个正规式构造DFA就成了主要矛盾,解决了这个问题,词法分析器就已经构造完成。从正规式到DFA需要通过两个过程来完成:  

(转载)与调试器共舞

瘦欲@ 提交于 2020-03-10 16:46:26
你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? NSNumber *n = @7; // 实际应该调用这个函数:Foo(); 或者短路一个逻辑检查? if (1 || theBooleanAtStake) { ... } 或者伪造一个函数实现? int calculateTheTrickyValue { return 9; /* 先这么着 ... } 并且每次必须重新编译,从头开始? 构建软件是复杂的,并且 Bug 总会出现。一个常见的修复周期就是修改代码,编译,重新运行,并且祈祷出现最好的结果。 但是不一定要这么做。你可以使用调试器。而且即使你已经知道如何使用调试器检查变量,它可以做的还有很多。 这篇文章将试图挑战你对调试的认知,并详细地解释一些你可能还不了解的基本原理,然后展示一系列有趣的例子。现在就让我们开始与调试器共舞一曲华尔兹,看看最后能达到怎样的高度。 LLDB LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的 开源 调试器。LLDB 绑定在 Xcode 内部,存在于主窗口底部的控制台中。调试器允许你在程序运行的特定时暂停它,你可以查看变量的值,执行自定的指令,并且按照你所认为合适的步骤来操作程序的进展。( 这里

C++冒险攻略(持续更新中。。。)

大憨熊 提交于 2020-03-09 17:40:49
我的C++冒险之旅 绪论 计算机系统基本概念 计算机硬件 计算机程序语言 计算机解决问题是 程序控制 的 程序就是 操作步骤 程序要使用 语言来表达 机器语言 计算机 能识别 的是机器语言 机器语言指令是由0和1编码的 例如:加法指令可能是"0001" 计算机指令系统 机器硬件能够识别的语言(机器语言)的 集合 ; 它是软件和硬件的主要界面。 计算软件 是一系列按照特定顺序组织的计算机数据和指令的集合。一般来讲软件被划分为 系统软件、应用软件 和介于这两者之间的 中间件 ; 软件包括程序和 文档 。 编写大型程序时,尤其要注意编写文档 计算机程序 指令的序列; 描述解决问题的方法和数据。 计算机语言和程序设计方法 最初的计算机语言——机器语言 由二进制代码构成 计算机硬件可以识别 可以表示简单的操作 例如:加法、减法、数据移动等等 汇编语言 将机器指令映射为助记符 如ADD、SUB、mov等; 抽象层次低,需要考虑机器细节。 高级语言 关键字、语句容易理解; 有含义的数据命名和算式; 抽象层次较高; 例如,算式:a+b+c/d 屏蔽了机器的细节: 例如,这样显示计算结果: cout << a + b + c / d C++语言 是高级语言 支持面向对象的观点和方法 将客观事物看做对象 对象间通过消息传送进行沟通 支持分类和抽象 面向过程的程序设计方法 机器语言、汇编语言

操作系统

我只是一个虾纸丫 提交于 2020-03-08 16:47:19
一些微小的细节,虽然90%的时间你用不上: 1.溢出 2.舍掉小很多的数 本门课虽然用到汇编,但并不是为了写汇编,而是要读懂c编译后的汇编 本门课的核心是直到怎样利用好分层存储系统,从程序角度了解性能 c没有任何内存保护,因此可能导致不好的bug,需要明白怎样运作 32位机器意味着地址也是32位,64位同理 !、||、&&的特点: 1.将0视为false,任何非0视为true 2.总是返回0或1 3.调用会提前终止 4.这三个都和真正的位计算(~,|,&)不一样 左移<<,右移>>: 算术右移:首位是0,右移后高位填充的就是0,如果是1那就填充1 逻辑右移:高位填充的永远是0 大部分机器做的是算术移位 对于C,无符号数做的是逻辑移位 整数 补码与原码: 对于4、3、2、1、0位,原码(无符号数)对应的是16、8、4、2、1,补码对应的是-16、8、4、2、1(即最高位取相反数),利用这个技巧进行十进制和二进制的转换。同时,据此可以知道n位能表示的十进制数的从负(Tmin)到正(Tmax)的范围,也可以据此知道为什么一个很大的正数突然变成一个负数 该点在java和python不会用到,而c中unsigned是一个明确的数据类型,因此可以在c中声明unsigned long之类的数据类型 这一点用在for循环中极其重要。如果for循环中使用到了unsigned(例如

字符串和格式化输入输出

人盡茶涼 提交于 2020-03-07 22:18:06
第四章 字符串和格式化输入/输出 4.1 前导程序 4.2 字符串简介 字符串(character string)是一个由一个或多个字符的序列,例如 "Good luck!" 其中双引号不是字符串的一部分,它用来告诉编译器它括起来的是字符串 4.2.1 char类型数组和null字符 C语言没有专门储存字符串的变量类型,字符串都被储存在 char 类型的数组中。数组是同类型元素的有序序列。 例如 G o o d l u c k ! \0 数组末尾的字符 \0 是空字符(null),C语言用它标记字符串的结束,它是非打印字符,它的ASCII码是0.C语言字符串一定以null结尾,意味着数组容量至少比待存储的字符数多1。 计算机在其中 自动处理 的细节有 创建数组 把字符串中的字符逐个放入数组 在末尾加上一个 \0 4.2.2 使用字符串 根据 %s 转换说明, scanf() 在遇到第一个空白(空格,制表符或换行符)时就自动停止,它只能读取一个单词,而非一整句话。 字符串和字符 字符’x’是基本类型 char ,由一个字符组成 x 字符串"x"是派生类型 char 数组,由两个字符组成 x \0 4.2.3 strlen() 函数 strlen() 和 sizeof 运算符的区别 sizeof 运算符,以字节为单位给出对象; strlen() 函数给出字符串中的字符长度,空字符不计入

学习java 第三天

橙三吉。 提交于 2020-03-07 17:36:58
运算符分类 编辑 运算符指明对操作数的运算方式。组成表达式的Java 操作符 有很多种。运算符按照其要求的操作数数目来分,可以有 单目运算符 、 双目运算 符和 三目运算符 ,它们分别对应于1个、2个、3个操作数。运算符按其功能来分,有 算术运算符 、 赋值运算符 、 关系运算符 、 逻辑运算符 、 位运算符 和其他运算符。 [1] 算术 单目:+(取正)-(取负) ++(自增1) - -(自减1) 双目:+ - * / %(取余) 三目:a>b?true:false 说明:当a大于b的时候,为true(也就是冒号之前的值),否则为false;这整个 运算符 包括一个 关系运算符 (可以是“>”"<""!="等等),一个“?”,一个“:”,冒号前后需要有两个 表达式 或者是值或者是对象。 关系 等于符号 : ==,不等于符号 : != ,大于符号 : >, 小于符号 : <,大于等于符号 : >= ,小于等于符号 : <= 。 位与逻辑 位 运算符  与(&)、非(~)、或(|)、异或(^) &:双目运算符,运算时均把运算数转换为二进制再做比较,规则:当相同的位上均为1时结果为1,否则结 果为0.如:1010&1101,转为二进制:10001001101&1111110010比较结果为:1000000转为十进制: 64所以1010&1101=64; | :当两边 操作数

补码运算练习

▼魔方 西西 提交于 2020-03-07 04:02:20
1 【单选题】 补码加/减法是指_________。 (5.0分) A、 操作数用补码表示, 两尾数相加/减, 符号位单独处理; B、 操作数用补码表示, 符号位和尾数一起参加运算, 结果的符号与加/减数相同; C、 操作数用补码表示, 连同符号位直接相加,减某数用加某数的机器负数代替,结果的符号在运算中形成; D、 操作数用补码表示, 由数符决定两尾数的操作, 符号位单独处理。 正确答案: C 2 【单选题】 8位补码10010011等值扩展为16位后,其机器数为 。 (5.0分) A、 1111111110010011 B、 0000000010010011 C、 1000000010010011 D、 1111111101101101 正确答案: A 3 【单选题】 在定点二进制运算器中,减法运算一般通过______来实现。 (5.0分) A、 原码运算的二进制减法器 B、 补码运算的二进制减法器 C、 补码运算的十进制加法器 D、 补码运算的二进制加法器 正确答案: D 4 【单选题】 在双符号位判别溢出的方案中,出现正溢出时,双符号位应当为________。 (5.0分) A、 00 B、 01 C、 10 D、 11 正确答案: B 5 【单选题】 当定点运算发生溢出时,应进行_______ 。 (5.0分) A、 向左规格化 B、 向右规格化 C、 发出出错信息 D、

小数在内存中是如何存储的?

旧城冷巷雨未停 提交于 2020-03-06 17:56:35
小数在内存中是如何存储的? 文本关键字:小数、float、double、浮点数、精度 一、IEEE 754(二进制浮点数算术标准) 在学习进制转换时,我们了解到:我们经常使用的十进制数是转换为二进制进行存储的,只需要按照顺序将转换后的结果放在对应的位置上就行了。其实小数的存储也是基于二进制的,不过由于小数由整数部分和小数部分组成,为了方便表示和比较,会使用另外的方式来存储。 IEEE 754是最广泛使用的浮点数运算标准,在标准中规定了四种表示浮点数值的方式: 单精度:32位 - 4字节 双精度:64位 - 8字节 延伸单精度:43+ 延伸双精度:79+ 对于进制转换不清楚的同学可以进传送门: 进制之间如何转换? 1. 存储结构 小数在内存中的存储由三部分组成,分别是符号、阶码(或称指数)、尾数。符号位我们很熟悉,只占一位,并且出现在最高位,0为正,1为负。 单精度:符号1位,阶码8位,尾数23位 双精度:符号1位,阶码11位,尾数52位 延伸精度很少使用,不做介绍 2. 存储方式 一个十进制的小数在进行存储时,首先要将整数部分与小数部分都转换为二进制,然后再整理成类似科学技术法的形式,即:移动小数点,使得小数点的左边只有一位,并且只可能为1(因为是二进制),小数点右侧的部分即为尾数部分,移动小数点的位数将会被记录在指数部分中。为了能够透彻的理解十进制小数转化存储在内容中的过程

行列式及其应用

吃可爱长大的小学妹 提交于 2020-03-06 15:50:19
行列式 注意   本文参照 M I T MIT M I T 公开课, 可以看成是笔记。 什么是行列式   一个矩阵通常包括很多信息, 比如是否可逆等等。而对于每一个方阵, 都有一个数能够表示关于矩阵的很多信息, 这个数就叫做行列式。(本文从性质入手讲, 推导并不严谨, 不过这些性质都是经过严格证明了的)行列式也可以看做是从矩阵到实数的一个映射。要注意的是只有方阵才有行列式!!! 行列式的表示法   若 A A A 为方阵, 则其行列式可表示为: d e t ( A ) 或 ∣ A ∣ det(A)或\\ \left| A \right| d e t ( A ) 或 ∣ A ∣ 行列式的基本性质   行列式的基本性质有3条, 并且从这三条基本性质能够推出其他性质以及行列式的表达式。下面给出三条基本性质。    ① 单 位 矩 阵 的 行 列 式 为 1 ①单位矩阵的行列式为1 ① 单 位 矩 阵 的 行 列 式 为 1   对于这条性质没有过多的解释, 有点类似于定义, 将单位矩阵映射成为实数中的1, 也符合简便性。    ② 交 换 矩 阵 中 的 任 意 两 行 , 所 得 的 矩 阵 的 行 列 式 符 号 变 号 ②交换矩阵中的任意两行, 所得的矩阵的行列式符号变号 ② 交 换 矩 阵 中 的 任 意 两 行 , 所 得 的 矩 阵 的 行 列 式 符 号 变 号  

小数在内存中是如何存储的?

烈酒焚心 提交于 2020-03-06 10:01:36
写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成,愿将昔日所获与大家交流一二,希望对学习路上的你有所助益。同时,博主也想通过此次尝试打造一个完善的技术图书馆,任何与文章技术点有关的异常、错误、注意事项均会在末尾列出,欢迎大家通过各种方式提供素材。 对于文章中出现的任何错误请大家批评指出,一定及时修改。 有任何想要讨论和学习的问题可联系我:zhuyc@vip.163.com。 发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。 小数在内存中是如何存储的? 文本关键字:小数、float、double、浮点数、精度 文章目录 小数在内存中是如何存储的? 一、IEEE 754(二进制浮点数算术标准) 1. 存储结构 2. 存储方式 二、阶码(指数) 1. 定义 2. 为什么小数被称作浮点数? 3. 移码 三、小数的进制转换 1. 十进制转二进制 2. 二进制转十进制 3. 小数在内存中的存储表示 四、float与double 1. 精度范围 2. 解决精度不足 3. 与长整型的比较 一、IEEE 754(二进制浮点数算术标准) 在学习进制转换时,我们了解到:我们经常使用的十进制数是转换为二进制进行存储的