空符号串:无任何符号的符号串,记为ε1.符号串的长度:|abc|=3 |abcc|=42.符号串的相等:依次相等(有序),符号串x和符号串y相等,记作x=y3.符号串的前缀和后缀前缀,从后删除。 后缀是:abc,bc,c,ε4.子串前缀+后缀,去掉重复的5.字符串的连接:按序连接6.字符串集合A与B的乘积:依次排序,不重不漏。 7.符号串的幂运算:即把x重复写n次,记作z=x^n^8.集合的幂运算:跟符号串的幂运算相对比,注意,集合得排列,符号串不需要。 4.语法树语法树能更直观的理解文法结点分为非终结符号和终结符号,如<动词>就是非终结符号,我就是终结符号2.2.1 文法形式定义定义:文法G定义为一个四元组,G=(V~n~,V~t~,P,Z)V~n~: 元符号|,如:<数字>→0|1|2|3|4|5|6|7|8|9元符号< >,表示多个非终结符或多个字母组成的符号,如:<数字>元符号{ },表示可重复连接,{t}^m^~n~,表示符号串t可连接n-m次
如E(表达式)、T(项)、F(因子) C:文法符号 ① 字母表中排在后面的大写字母(如X、Y、Z) D:终结符号串 ① 字母表中排在后面的小写字母(u、v、…、z) (包括空串) E:文法符号串 (2) 句型和句子 一个开始符号 S 通过若干步,可以推导出 α,则称 α 是G的一个句型 α 是一个文法符号串 如果 α 中的每一个 都是终结符,经过若干部可以推导出一个终结符号串 w,称 w 是 … 说明其定义为数字,同理L为字母 而T的定义,可以是 L(字母)、D(数字)、TL、TD,通过右侧的推导(一直替代T)可得,最后的形式是一个字母数字串 而 S 可推出,是一个字母开头的字母数字串 (4) 那么这棵子树的边缘称为该句型的一个直接短语 举个例子: (3) 二义性文法 如果一个文法可以为某个句子生成多棵分析树,则称这个文法是二义性的 (4) 二义性文法的判定 (五) 例题 1、文法G[S]:S ( ) 正确答案(D) A. ab0 B. a0b01 C. a0b0a D. bc10 4、文法G产生的( )的全体是该文法描述的语言 正确答案(D) A.
文法的直观概念 以定义描述英语句子的文法为例:He gave me a book 文法的规则如下: (1)<句子>→<主语><谓语><间接宾语><直接宾语> (2)<主语>→<代词> (3)<谓语>→<动词> (4) C语言是C程序的集合,C程序是在C基本字符集上定义的,按一定规则构成的符号串。 2.2 符号串 定义:由字母表中的符号所组成的任何有穷序列称为该字母表上的符号串。 空串: (ε—空字) 长度为0的符号串,|ε|=0。 2.2.2 字符串集合 定义:若集合A中的一切元素都是某字母表上的符号串,则称A为该字母表上的符号串的集合。 符号串集V的闭包 V^+ =V^1 ∪ V^2 ∪ V^3 ∪… ,,即 V 上的所有非空符号串(包括空字ε)的集合。
语义分析和中间代码生成 4. 优化 5. 目标代码生成 6. 表格管理和错误处理 1. 运算符 *,+,- … 4. 分界符 (,{,[, ],},)… 5. 数值型常量 10,3,… 2. -四元式:(运算符,左操作数,右操作数,结果) 4. 优化 输入中间代码进行等价变换 输出更高效的中间代码。 5. * 注意符号串中符号的顺序是重要的,110不同于011。 符号串的长度:符号串中符号的个数。 * 例x=001110,则x长度|x|=6。 空串ε:长度为0的符号串,|ε|=0。 符号串集合:集合中的一切元素都是某字母表上的符号串。
P是生成式的有穷集合,生成式的基本形式是:A→β,其中A和β都是由变元和终结符组成的符号串,但A至少含有一个非终结符 。 定义 符号串由字母表中的符号组成的序列 例如abc就是上述字母表V上的一个符号串,它的长度为3,例如ɑ=abc,那么用|ɑ|=3表示该符号串的长度。 空符号串,口语表述经常为空串:不含任何符号的字符串通常用ɛ表示,显然|ɛ|=0。 “连接"运算"∘” 当然,这只是一种连接表达,你用别的符号表达也行,这里先这么写。 v-由v中长度为1的符号串的集合。 v2-由v中长度为2的符号串的集合。 句型是由终极符串和非终极符串组成的符号串 推导 推导是从开始符号开始,按照产生式进行推导,直到产生终极符串为止。
1.2 符号串 相关定义: 符号串是对于字母表来说的一个概念,字母表的符号串指的就是由字母表中各个字符组成的一个有穷序列。 符号串的长度指的是符号串符号的个数,以 m = 000 为例,|m|= 3。 空符号串 ε 长度为 0,表示不包含任何符号,类似于编程中的空字符串 ""。所以有 εm = mε= m。 以上面为例,P = { <句子> → <主语> <谓语>,<主语> → <代词> | <名词>,<谓语> → <动词> } (4)S: S 即 start symbol,指的是开始符号(识别符号)。 4. 文法类型 乔姆斯基把文法划分为四种类型(从 0 型到 1型),这四种类型层层增强,越到后面限制越大。 (1) 0 型文法 0 型文法也叫短语文法。 (4) 3 型文法 在 3 型文法的基础上加以限制,规定对于每一个 α→β,要么必须满足 A→ α | αB(右线性),要么必须满足 A→ α | Bα(左线性)。这里的 AB 代表非终极符号。
另一台设备的 能力 3、引入不确定性:设备做出任意选择的能力 下推自动机:1、这些设备与语法有关,它们描述了编程(和自然)语言的结构 形式语言:语言是有限长度的句子的集合,1、所有句子均由有限的符号构成的符号串 2、所有符号都来自于一个有限的字母表 3、语法是枚举语言中所有句子的装置 4、如果一个句子属于该语言,则一定可以枚举出来 5、如果枚举出一个句子,则一定属于该语言 课程大纲 有穷自动机和正则语言 有穷自动机 语言到DFA,举例构造{0,1}上DFA接受所有已101结尾的符号串 解法1:构建所有状态,选取指定的状态作为终态 ---- 有穷自动机引论 什么·是FA? states (Q, typically) 2、字母表:An input alphabet(Σ, typically) 3、转移函数:A transition function(δ, typically) 4、 4、形式化: L(A) = 满足δ(q0, w)属于F的符号串w 的集合 正则语言 一个语言L能被DFA接受,则称他是正则的(此DFA无法识别非L中字符,且正则无法识别无穷数列) 证明题:证明一个语言非正则
2.3 空符号串 我们已经消除了左递归和回溯,这样文法是不是就真的确定了呢?其实不是,因为我们还得考虑空符号串的问题。 ② 空符号串的处理 有没有注意到 Follow 集的定义刚好与我们谈到的空符号串的处理有相关的地方? 假定有文法: S → aA|d A → bAS|ε 若输入符号串为 abd,尝试推导该符号串是否符合给定的文法: 第一个输入符号是 a,程序经过判断,决定使用 S → aA 开始构造语法树,这样就处理了第一个输入符号 4. 递归下降分析程序 这一节没有重点讲解,可以略过。 当一个文法满足 LL(1) 条件时,我们可以选择构造一个不带回溯的自上而下分析程序。 假设给定如下文法和输入符号串: // 文法 E → E + T|T T → T * F|F F → i|(E) // 输入符号串 i + i * i 符号串是否符合给定文法呢?
Brian Kernighan 算法 4. lowbit操作 一、位运算基本概念 1. 汉明重量 汉明重量是一串符号中非零符号的个数。因此它等同于同样长度的全零符号串的汉明距离。 在最为常见的数据位符号串中,它是1的个数。 2. 例题:LeetCode201、LeetCode461 4. lowbit操作 用于保留原二进制数字的最后一位1对应的数字,常用于树状数组。 算法:x & (-x)。
2.3.1 直接推导/直接规约简言之,一步直接退换例如:有文法GS:S→0S1,S→01有直接推导 0S1⇒0011有直接推导 0S1⇒00S11有直接推导S⇒0S12.3.2 推导/规约若存在直接推导序列,符号串一直进行直接推导 ,直到没有非终结符号时,推导就必须终止推导例题:2.3.3 规范推导规范推导也叫最右推导,每步只变换符号串中最右边的非终结符,直到推导结束2.4 句型和句子1.句型 有文法GZ,若Z 0步以上推导出x, 00001111G的句型S,0S1,00S11,000S111,00001111等G的句子00001111等识别符号是句型注意:1.句子是特殊的句型2.规范推导产生的句型为规范句型3.每个句子都有一个规范推导4. 如上小节给出语法树中,包含根节点S,S1,S2,S3,S4的五棵子树注意叶子结点不算子树短语短语是相对一个句型的,一个句型对应多个短语。短语就是该句型子树的叶子结点如何寻找一个句型短语? 1.画出句型语法树2.找出所有子树3.子树叶子结点组成的符号串为该句型针对子树根节点的短语4.去掉重复的短语找短语的关键还是找子树简单短语与句柄所有短语中,一步推导得来的即为简单短语。
符号串的前缀是指该符号串的任意首部,包括空串ε。例如,对于符号串abc,其前缀有ε,a,ab,abc。如果输入串没有错误的话,一个规范句型的活前缀是该句型的一个前缀,但它不含句柄之后的任何符号。 (3)A→.β 刻划没有句柄的任何符号在栈顶,此时期望A→β的右部所推出的符号串。 (4)对于A→ε的LR(0)项目只有A→.。 (4)待约项目: 表现形式:A→α.Bβ (BVN) 这类LR(0)项目表示分析栈中是不完全包含句柄的活前缀,为构成恰好有句柄的活前缀,应把当前输入字符串中的相应内容先归约到B。 (4)若状态i为待约项目(设X→α·Aβ),则从状态i引ε弧到所有A→·r的状态。 为了使“接受”状态易于识别,我们通常将文法G进行拓广。 若GO (Ik, A)= Ij, A为非终结符,则置GOTO[k, A]=j; (5)分析表中凡不能用上述1至4填入信息的空白格均置上“出错标志”。
如果 M 的初态结点同时也是终态结点,那么就说空符号串可以被 M 所识别。 DFA M 可以识别的字的全体记为 L(M)。 这样的符号串的特点是,中间要么是 aa ,要么是 bb,所以首先确定中间是 (aa|bb)。 由于 aa 和 bb 都可以独立存在,说明 (aa|bb)的前面和后面必须可以是空符号串,说到空符号串,我们会想到闭包,所以它的前面后面必定会分别出现一个闭包。 (因为输入符号来自于集合闭包,所以输入符号接受空符号串 ε) 看下面的例子: 假设有非确定有限自动机 NFA M=({0,1,2,3,4},{a,b},δ,{0},{2,4}),其中, δ(0,a)={ 这样的集合,因为 A 自由组合形成的符号串是可以用一个 A 的自循环来表示的,所以中间有一个自循环,而 ε 则可以用 εε 来表示,所以考虑在前后各加一个 ε,对于 A 的符号串不影响。
image-20210917104940523.png 二、 单词的描述工具(理解) 正规集(正规语言):某字母表上,我们感兴趣的符号串的集合。 3.3.3 NFA确定为DFA的原因 使用NFA判定某个输入符号串的时候,可能出现不确定的情况:不知道下面选择哪个状态。如果选择不好,该输入符号串可能不能到达终止状态。 但是,我们不能说该输入符号串不能被该NFA接受。如果通过尝试的方法,不断试探来确定输入符号串是否可被接受,那么判定的效率将降低。解决的方法是将NFA转换为等价的DFA。 考察处理{0,2}:{0,2}_a={1} {0,2}_b={2,4} 2和4可区别{0,2}细分成{0}{2}。 最终共分成4组:{0}{1}{2} {3,4,5,6}。 保留一组中的任意一个,比如保留3,删除4,5,6,2经b到4 改为2经b到3,4经b到4 改为3经b到3,其它重复以上修改。
sum) ^{n-1}\sum(∑)n−1∑} 例如:{0,1}的3次方={0,1}{0,1}{0,1}={000,001,010,011,100,101,110,111} 字母表中的n次幂:长度为n的符号串构成的集合 字母表的正闭包:长度正数的符号串构成的集合 字母表的克林闭包 (∑)∗=(∑)0U(∑)U(∑)2U(∑)3.... 字母表的克林闭包:任意符号串(长度可以为0)构成的集合。 串 设∑\sum∑是一个字母表,对于任意的x属于(∑)∗(\sum)^*(∑)∗,x称为是∑\sum∑上的一个串。 A就是非终结符 3型文法 w是终结符号串,A,B都是非终结符 四种文法的关系 上下文无关文法(CFG)分析树 短语 给定一个句型,其分析树中的每一棵子树的边缘称为该句型的一个短语。
例:求下述二元函数的最大值: (1) 个体编码 遗传算法的运算对象是表示个体的符号串,所以必须把变量 x1, x2 编码为一种 符号串。 本题中。 本例中,群体规模的大小取为4,即群体由4个个体组成。每一个个体可通过随机 方法产生。 (4) 选择运算 选择运算(或称为复制运算)把当前群体中适应度较高的个体按某种规则或模型遗传到下一代群体中。
image-20210903112514512.png 2.1.2 语法分析 输入单词符号串 根据语言的语法规则对单词符号串进行扫描和分解 识别出各类语法单位 语法单位内部表示:语法树 image ,左操作数,右操作数,存储位置) (1) (inttofloat, 10, _, T1 ) (2) ( *, count,T1,T2 ) (3) ( +, first,T2,T3 ) (4)
练习:给定LR分析表和文法,分析((a))方法步骤:初始化,状态栈为0,符号栈为#,输入符号串为(题目待分析字符串,以#结束)紧盯状态栈和输入符号串栈顶,通过状态栈和符号串栈顶来查表一般来说查表结果有三个 S或R或ACC,当查表是S什么时,需要进行移进操作,将输入符号串栈顶元素放入符号栈中,将S的下标数字压入状态栈,再进行下一步.若是R,就是规约操作,规约操作需要我们填写goto这一项,根据R下标的值,看对应的文法
例:求下述二元函数的最大值: (1) 个体编码 遗传算法的运算对象是表示个体的符号串,所以必须把变量 x1, x2 编码为一种 符号串。 本例中,群体规模的大小取为4,即群体由4个个体组成,每一个个体可通过随机 方法产生。 (4) 选择运算 选择运算(或称为复制运算)把当前群体中适应度较高的个体按某种规则或模型遗传到下一代群体中。
没有被空格间开的符号串,都算作单词。 输入一行单词序列,最少1个单词,最多300个单词,单词之间用至少1个空格间隔。单词序列总长度不超过1000。输出依次输出对应单词的长度,之间以逗号间隔。 样例输出 3,3,4,2,10,3,4,7,5 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath
例:求下述二元函数的最大值: (1) 个体编码 遗传算法的运算对象是表示个体的符号串,所以必须把变量 x1, x2 编码为一种 符号串。 本例中,群体规模的大小取为4,即群体由4个个体组成,每个个体可通过随机 方法产生。 (4) 选择运算 选择运算(或称为复制运算)把当前群体中适应度较高的个体按某种规则或模型遗传到下一代群体中。