From 2a03155c384c6f613a951a6571263ff21d66abaa Mon Sep 17 00:00:00 2001 From: estomm Date: Thu, 2 Jan 2020 21:05:31 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E8=AE=BE=E8=AE=A1=E8=AF=AD?= =?UTF-8?q?=E8=A8=80=E5=8E=9F=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Algorithm/旅行商问题.md | 13 + 概率论与数理统计/第16节 一元线性回归.md | 4 +- 概率论与数理统计/第17节 多元线性回归.md | 10 +- 程序设计语言原理/image/chomsky文法的关系.png | Bin 0 -> 12640 bytes 程序设计语言原理/image/语法分析图.png | Bin 0 -> 71876 bytes 程序设计语言原理/第0章 概论.md | 17 +- 程序设计语言原理/第1章 历史.md | 67 +++++- .../第2章 程序设计语言设计概述.md | 227 +++++++++++++++++- 程序设计语言原理/第3章 过程式程序设计语言.md | 19 ++ 9 files changed, 336 insertions(+), 21 deletions(-) create mode 100644 Algorithm/旅行商问题.md create mode 100644 程序设计语言原理/image/chomsky文法的关系.png create mode 100644 程序设计语言原理/image/语法分析图.png diff --git a/Algorithm/旅行商问题.md b/Algorithm/旅行商问题.md new file mode 100644 index 00000000..23f954ce --- /dev/null +++ b/Algorithm/旅行商问题.md @@ -0,0 +1,13 @@ +# 旅行商问题 + + +## 1 贪心算法 + +## 2 邻域搜索 + + +## 3 + +## 4 遗传算法 + +## 5 蚁群算法 \ No newline at end of file diff --git a/概率论与数理统计/第16节 一元线性回归.md b/概率论与数理统计/第16节 一元线性回归.md index 389ac12d..7e68a215 100644 --- a/概率论与数理统计/第16节 一元线性回归.md +++ b/概率论与数理统计/第16节 一元线性回归.md @@ -136,12 +136,12 @@ $$ * $\hat{a},\hat{b}$也是极大似然估计 * $\hat{a}\sim N(a,(\frac{1}{n}+\frac{\overline{x}^2}{L_{xx}})\sigma^2)$ -* $\hat{b}\sim N(b,\frac{\sigma^2}{L_{xx}}$ +* $\hat{b}\sim N(b,\frac{\sigma^2}{L_{xx}})$ * $\overline{y}与\hat{b}相互独立$ ## 3.3 $\sigma^2$的无偏估计 ### 定理:$\sigma^2$的无偏估计 -$Q(\hat{a},\hat{b})=\sum(y_i-\hat{y_i}^2$称为残差平方和。 +$Q(\hat{a},\hat{b})=\sum(y_i-\hat{y_i}^2)$称为残差平方和。 $$ E(Q)=(n-2)\sigma^2\\ \sigma^2=E(\frac{Q}{n-2})是\sigma^2的一个无偏估计 diff --git a/概率论与数理统计/第17节 多元线性回归.md b/概率论与数理统计/第17节 多元线性回归.md index d2db0b61..9e3aa4c3 100644 --- a/概率论与数理统计/第17节 多元线性回归.md +++ b/概率论与数理统计/第17节 多元线性回归.md @@ -144,10 +144,12 @@ $$ $$ ## 5 预测控制 -> 未涉及内容: -> # 可化为线性回归的曲线回归 -> # 自变量选择与“最优”回归方程选择 -> # 异常情况的诊断处理 +> 未涉及内容: +> #可化为线性回归的曲线回归 +> #自变量选择与“最优”回归方程选择 +> #异常情况的诊断处理 + + 状态转移方程 $$ diff --git a/程序设计语言原理/image/chomsky文法的关系.png b/程序设计语言原理/image/chomsky文法的关系.png new file mode 100644 index 0000000000000000000000000000000000000000..2df35d01816e7d4adeecd1eb2c1a99acbeb9674a GIT binary patch literal 12640 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 literal 0 HcmV?d00001 diff --git a/程序设计语言原理/image/语法分析图.png b/程序设计语言原理/image/语法分析图.png new file mode 100644 index 0000000000000000000000000000000000000000..00947c81fcf0586e8a3e6949d65039d369adc8c4 GIT binary patch literal 71876 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 literal 0 HcmV?d00001 diff --git a/程序设计语言原理/第0章 概论.md b/程序设计语言原理/第0章 概论.md index 3681bb67..08e55d02 100644 --- a/程序设计语言原理/第0章 概论.md +++ b/程序设计语言原理/第0章 概论.md @@ -11,15 +11,22 @@ ### 程序设计语言的特性 -* 人工语言 -* 对象是机器 +* 程序设计语言是人工语言 +* 主要通信对象是机器 * 用于表达软件 -### 程序设计语言的作用 +### 程序设计语言的作用(为什么研究) + +* 计算机软硬件技术的窗口 +* 人们研究计算表达的形势 +* 它和计算机理论研究联系最为密切 +* 研究有利于与提高软件开发人员的素质 +* 有利于开发专用用语言或界面语言 +* 有利于新领域语言的发展 +* 有利于通用语言的标准化规范化 -* ## 2 程序设计语言的定义与处理器 - +> 一个程序设计语言的实际存在是《语言规格说明书》。一个程序设计语言的实际存在是改语言程序的处理器。 ### 解释器 解释器读入一段相对完整源代码(多数情况下是一句)翻译为目标代码后,立即解释执行。 diff --git a/程序设计语言原理/第1章 历史.md b/程序设计语言原理/第1章 历史.md index 8a4f53fe..55bde9f6 100644 --- a/程序设计语言原理/第1章 历史.md +++ b/程序设计语言原理/第1章 历史.md @@ -1,20 +1,68 @@ # 发展与分类 ## 1 历史 - - ![](\image/发展历史.png) +### 程序设计语言简史 +* 1945 ENIAC 真空管计算机 +* 1946 冯诺依曼机构UNIVAC-1计算机 +* 50年代 FORTRAN ALGOL COBOL +* 60年代 APL SNOBOL LOGO PASCAL +* 70年代 C LISP Perlog Edison +* 80年代 面向对象Smalltalk C++ SQL + ## 2 分类 ### 对机器依赖程度 -* 低级语言 -* 中级语言 -* 高级语言 +* 低级语言:机器语言和汇编语言 +* 中级语言:编程操纵机器硬件,不涉及地址码和操作码。 +* 高级语言:独立于机器 ### 应用领域 +* 商用语言 +* 科学计算 +* 系统程序设计 +* 模拟预演 +* 正文处理 +* 实时处理 +* 嵌入式应用 +* 人工智能应用 +* 查询和命令语言 +* 教学语言 +* 打印专用 +* 专用与某种数据结构 +``` +/* +引入外部文件进行构建 +能够定义文本的名字,实现文本与排版的分离 +能够进行文本与文本的嵌套,支持嵌套处理 +能够使用反斜杠转义特殊符号 +支持链式处理 +全局默认控制对象env +定义新的处理函数默认一个文本输入对象,默认一个文本输出对象。前边的函数可以覆盖处理前边的函数。内部函数的优先级更高。 +能够定义函数所处的模块。 +自顶向下的设计过程。从全局到局部。所以后边可以覆盖前边,细节覆盖总体布局。 +链式处理,是对原来文本的处理,不是生成新的文本 +定义引用,引用编号,自动引用 +*/ +import another_name.pp +import another_progrom.pp +//paper 模块的leftboder函数 +env.paper.leftborder(29) + +textname={i am a good man} +textname.fix(delete) +text1,text2,text3.fix() +pic1,pic2.middle() + +{zhesh 'pic.hello()' iwe\alpha nben}.hello(middle,big).world(45size).print() + +def newp(hello,txt): + this is content +enddef +``` ### 实现计算方式 * 编译型语言 * 解释型语言 @@ -24,9 +72,7 @@ * 非交互式语言 ### 程序设计范型 -> 单范型语言、多范型语言 - - +单范型语言:程序组织和实现计算的模式 * 命令式语言 * 面向对象语言 * 数据流语言 @@ -34,6 +80,11 @@ * 逻辑式语言 * 并发程序设计语言 +多范型语言: +包含多种范型的程序设计语言。 + + + ### 断代 diff --git a/程序设计语言原理/第2章 程序设计语言设计概述.md b/程序设计语言原理/第2章 程序设计语言设计概述.md index 7f62ab77..a8530fed 100644 --- a/程序设计语言原理/第2章 程序设计语言设计概述.md +++ b/程序设计语言原理/第2章 程序设计语言设计概述.md @@ -1,14 +1,26 @@ # 设计概述 ## 1 表示与抽象 - -自然语言描述、高级语言表示、汇编语言表示、机器语言表示,是同一个程序在不同抽象层次上的表示。 +### 表达与抽象的概念 +* 表示是对事物抽象的表达。 +* 抽象是对论题本质的提取。 +* 同一个事物在不同抽象层次上的表示。自然语言描述、高级语言表示、汇编语言表示、机器语言表示。 +* 上层抽象可以用多种下层抽象的实现。 ### 不同抽象层次 * 客观世界自然语言描述 * 数学模型数学语言描述 * 程序设计程序语言描述 * 机器指令机器语言描述 + +### 显示表示和隐式表示 +* 显示表示float n=3.14指明n的类型。 +* 隐式表示 n=3.14缺省为浮点类型。 + +### 聚合表示和分散表示。 +* 分散表示。整型,浮点型等数据之间的+运算使用不同的运算符。 +* 聚合表示。所有类型的+运算都可以使用+运算符实现。或者同一个函数实现。 + ## 2 设计目标 ### 具体目标 @@ -49,3 +61,214 @@ ## 4 规格说明 +### 概述 + +规格说明用来定义一个语言文本的语法和语义。用于表达程序设计语言的的语言成为元语言。 +* 形式语法:以形式结构规则的语言元素组合规则。 +* 微语法:词法Lexicon +* 宏语法:定义特征规则 + +### 字符集 +* 允许出现在语言的程序里出现的字符的全体 + + +### 词法分析 + +由程序的字符序列得到词法元素序列的过程就是词法分析。编译器处理表示源程序的字符序列,根据词法规则做词法分析,将 源程序切分为符合词法的段,识别出源程序的有意义单词(token) 。词法分析得到一个(表达被分析的源程序的)单词流,流中各单词 标明了词法类别。词法分析中抛弃所有无保留价值的分隔符(如空白符)和噪声词。 + +词法分析通常采用最长可能原则,确定可能成为单词的最长字符串。 + +词法分类主要包括以下内容 +* 标识符:文字形式的词法对象,用于表示程序对象的名字。 +* 关键字:语言规定了特殊意义的标识符 +* 运算符:有预定义意义的特殊字符或特殊字符序列 +* 分隔符:用于分隔程序里的不同词法元素的特殊符号或标识符。空格,换行和制表符等,通常作为语法元素的分隔符。 + +### 语法分析 + +* 语法分析定义 + +语法规定位于词法层次之上的程序结构。 + +语法用于确定一个输入序列是否合法的程序。程序存在多个不同层次的合法性问题: +– 局部结构 例:C程序里的if 之后是不是左括号,括号是否配对 +– 上下文关系 例:变量使用前是否有定义,使用是否符合类型的要求 +– 深层问题 例:使用变量的值之前,变量是否已经初始化 + +* 语法分析图 + +![](image/语法分析图.png) + +其中方框为非终结符,圆和椭圆形为终结符。箭头指向构造流向。每个非终结符又可开始一个语法图(一条产生式规则) 。与EBNF完全对应,[ ]以'短路'绕道表示,{ }以迥环表示,小圆弧是有意义的,表示流向。有的语法图在环线上注上数字表示最多转几次。 + +* 语法分析分类 + * “自顶向下” 释义则从文法的起始符开始,按可能产生的表达式寻 找语句相同的结构匹配。每一步都产生下一个可能的源符号串,找到再 往下走。 + * “由底向上”释义则相反,它先查找源代码的各个符号串,看它能 否匹配归结为产生式左边的非终结符,如果有含混则向前多读入k个符 号串,为此归约下去,一个短语一个短语,最后到达起始符号串,归约 的过程就形成了释义树。 + + +### 语义分析 +> 在最后再详细补充 + +程序通常要在计算机上执行,因此按照程序的运行步骤或操作来说明程序设计语言是很自然的,这就是所谓的操作语义学。大多数程序设计语言的非形式化语义都是用这种方式说明的。例如 Pascal中while命令的操作语义可说明如下: +``` +执行命令while E do C,其步骤为: + (1) 对表达式E求值,产生一个真假值。 + (2) 如果值为true,则执行命令C,然后从(1)开始重复。 + (3) 如果值为false,终止。 +``` + + +* 指称语义。为每个程序短语指派一数学实体(指称)为其意义。典型情况是将其输入映射为输出的函数。例如,一个表达式的指称是将环境和存储映射为值的函数。一个命令的指称是将环境、初始存储映射为最终存储的函数。 +``` + execute 〖while E do C〗 = + let execute-while env sto = + let truth-value tr=evaluate〖E〗 env sto in + if tr + then execute-while env (execute 〖C〗 env sto) + else sto + in + execute-while +``` +* 公理语义。它只定义证明规则(公理及推理规则),以此证明程序的某些性质。这些证明规则在某种意义上就是抽象的语义。公理语义主要用于程序验证,语言理解,语言规范/标准化等方面,对编译 、解释器的 没有直接的作用。把语言的公理描述看作是该语言的一个理论,该理论由三部分组成: + * 公理集 元语言描述的不加证明的公理集如:|- 0 succ 0 即自然数0的后继大于0是一个定理(由|-表示)也是一条公理。 + * 语法规划集 以它来确定什么是合式公式。 + * 推理规则集 从已确立的定理演绎新定理。 + +* 代数语义。代数语义把语义模型的集合看成是一个代数结构,模型簇 对应为代数系统。 + + +## 5 上下文无关文法 + +### 文法(Grammar) +文法可导出该语言所有可能的句子,形式地,一个文法G是一个四元组: +$$ +G=(S,N,T,P) +$$ +* 其中,T是终结符号串的有限集。 +* N是非终结符号串的有限集,是文法中提供的成分概念,相当于英语动词短语、名词短语或定语从句等句子成分的符号表示。 +* T∩N = Φ,即它们是不相交的。 +* S是起始符号串,S∈N。 +* P是产生式,一般形式是:α→β α,β∈(T∪N)*。“→”表示左端可推导出右端,如α→β,α→Υ,α→δ则可写为: α→β|Υ|δ + + +如果产生式将语言的非终结符中的每一个标记都推得为终结符号,则这一组产生式集即为该语言的全部文法。 + +### 文法的递归表示 + +文法的递归表示在形式文法中是必须的。例2-1 整数的产生式表示法: +``` +→0|1|2|3|4|5|6|7|8|9 + 一位数字是整数 + 两位数字也是整数 + n位数字也是整数 +可以写成: +|| +``` +> α→αβ是左递归产生式,而α→βα是右递归产生式,也叫尾递归的。不同型式的产生式决定了不同型式的文法。 + +### Chomsky文法 +> 希腊字母是终结符。大写字母是非终结符。 + +* **0型文法**如果对产生式α→β左端和右端不加任何限制: +``` +α∈(N∪T) ,β∈(N∪T)* +``` +这种文法对应的语言是递归可枚举语言。在编译理论中,图灵机(或双向下推机)可以识别这种语言。 + +* **1型文法**如果产生式形如: +``` +αAβ→αBβ α,β∈(N∪T)*, A∈N, B∈(N∪T) +``` +则叫做上下文相关文法,对应的语言是上下文敏感语言。线性有界自动机可识别这种语言。(因为左端含有非终结符,每一个推导式与左右两边的非终结符有关,所以是上下文有关文法) + +* **2型文法**如果产生式形如: +``` +A→α α∈ (N∪T)*, A∈N +``` +左端不含终结符且只有一个非终结符。这种文法叫上下文无关文法。对应的语言即上下文无关语言。非确定下推机能识别这种语言。 + +* 3型文法 如果产生式形如: +``` +A→ αB|Bα α∈T*, A,B ∈N +``` +左端不含终结符且只有一个非终结符。右端最多也只有一个非终结符且不在最左就在最右端。这种文法叫做正则文法,对应为正则语言。有限自动机可识别这种语言。显然,这种文法经置换可消除右端非终结符,使每一产生式均可用一终结符的正则表达式表达。 +例2-2 所有产生式的非终结符均可置换为终结符表达式。 +``` +设产生式是: +N={S,R, Q}, T={a,b,c} +P={S→Ra, S→Q, R→Qb, Q→c} +则有: +S→Ra→Qba→cba|S→Q→c +R→Qb→cb +Q→c +``` +![](image/chomsky文法的关系.png) + +### BNF和EBNF + +BNF就是上下文无关文法的表示法。 + +* ::= '定义为',即产生式中的“→”符号。 +* < > 表示所括符号串是非终结符号串。 +* | '或者'表示左右两边符号串序列是可替换的。终结符、关键字、标点符号直接写在产生式中。 + +BNF示例 +``` + ::= + | + ::= + + |- + | + ::= + | < digit> + | +``` + +增加更多内容 + +* "[ ]"表示括号内的内容是可选的。 +* "{ }"表示括号内的内容可重复0至多次。 +* "*"是指可以重复多次。 +* "+"是指可以出现多次 +* "?"意思是操作符左边的符号(或括号中的一组符号)是可选项(可以出现0到多次)。 +``` + ::= [ +|-] + ::= { | } + ::= + ::= { | < letter>}* +``` + +EBNF将BNF与正则表达式结合起来 + +* 其元语符号变动是: 增加[ ]、{ } 、( )(表示成组)、.(表示产生式终结)。[ ] 、{ } 意义同前,旨在消除或减少递归表达。 +* 取消非终结符的尖括号,至少是产生式左端,为此符号串中空白用'_'连接。 +* 为区别元符号和程序符号(程序中也有[ ]、 、()、.),程序中的终结符加引号,如'(', ')', '.'。 + +``` +program ::= ';' '.'. +program_heading ::= 'program' [ '(' ')']. +program_parameters ::= . +identifier_list ::= {',' } . +program_block ::= . +block ::= + + . +variable_declaration_part ::= ['var' ';' + { ';' }]. +variable_declaration ::= ';' . +statement_part ::= compound_statement. +compound_statement ::= 'begin' 'end'. +statement_sequence ::= {';' }. +statement::=[