技术经验解读:作业4文法和语言总结与梳理

简介: 技术经验解读:作业4文法和语言总结与梳理

1.梳理第二章内容,写一篇理解与总结。


一、文法和语言的形式与定义。


(1)什么是文法?文法是对语言结构的定义与描述,即从形式上描述和规定语言结构,也称为语法。任何一个文法都可以表示为一个四元组G=(VN,VT,P,S)。


VN是一个非空的有限集合,它的每个元素称为非终结符号。


VT是一个非空的有限集合,的每个元素称为终结符号。


P是一个非空的有限集合,它的每个元素称为产生式。


S是一个特殊的非终结符号,称为文法的开始符号。


(2)什么是语言?在某一确定字母表上的特定符号串的集合。


(3)语法规则。通过产生一组规则(产生式),来描述句子的语法结构。


(4)由产生式推导句子。推导方法:从一个要识别的符号开始推导,即用相应产生式的右部来代替产生式的左部,每次仅用一条产生式进行推导。


(5)句型。由起始符推导出来的符号串。


(6)句子。仅含有终结符合的句型。


(7)语言。句子的集合。


二、符号和符号串


(1)字母表. 符号的非空有限集合。典型的符号是字母、数字、各种标点和运算符等。


(2)符号串.定义在某一字母表上,由该字母表中的符号组成的有限符号序列。


(3)符号串有关的几个概念。


①长度。符号串a的长度是指a中出现的符号的个数,记作|α|。


②空串。长度为0的符号串,常用ε表示。|α|=0


③前缀(头)。符号串α的前缀是指从符号串α的末尾删除0个或多个符号后得到的符号串。如:univ 是 university 的前缀。


④后缀(尾)。符号串α的后缀是指从符号串α的开头删除0个或多个符号后得到的符号串。如:sity 是 university 的后缀。


⑤子串。符号串α的子串是指删除了α的前缀和/或后缀后得到的符号串。如:ver 是 university 的子串。


⑥真前缀、真后缀、真子串 。如果非空符号串β是α的前缀、后缀或子串,并且β不等于α,则称b是α的真前缀、真后缀、或真子串。


⑦子序列。符号串α的子序列是指从α中删除0个或多个符号(这些符号可以是不连续的)后得到的符号串。如:nvst。


(4)符号串运算。


①连接。符号串α和符号串β的连接αβ是把符号串β加在符号串α之后得到的符号串,若α=ab,β=cd,则αβ=abcd,βα=cdba。对任何符号串α来说,都有εα=αε=α。


②幂。若α是符号串,α的n次幂是αn 。当n=0时,α0是空串。e假如α=ab,则有:α0=ε、α1=ab、α2=abab、α3=...


三、文法类型和语法树。


(1)文法分类。


①0型文法/无限制文法:α->β,其中α∈(Vn∪Vt)且至少含有一个非终结符,β∈(Vn∪Vt)


②1型文法/上下文有关文法:αAβ->αuβ,其中A∈Vn,α,β∈(Vn∪Vt),u∈(Vn∪Vt)+。


③2型文法/上下文无关文法:A->β,其中A∈Vn,β∈(Vn∪Vt)。常用于句法分析。


④3型文法/正规文法:常用于词法分析。


右线性文法:只能对推出式的右边展开,A->αB|α,A,B∈Vn,α∈Vt


左线性文法:只能对推出式的左边展开,A->Bα|α,A,B∈Vn,α∈Vt


(2)语法树。


①短语。是句型中的某个非终结符所能推出的符号串。


②直接短语。不能再推导出其他式子的符号串


③句柄。最左的直接短语。


④最左推导。每个推导过程都是从最左边的非终结符号的替换开始。


⑤最右推导。每个推导过程都是从最右边的非终结符号的替换开始。


(3)文法的二义性。如果一个文法的某个句子有不止一棵分析树,则这个句子是二义性的句子。含有二义性句子的文法是二义性的文法。


2. 尝试写出PL/0 语言的文法。


整数n


n :: = 【-】{[span style="font-family: 宋体">非零数字数字

[span style="font-family: 宋体">非零数字

[span style="font-family: 宋体">数字

标识符i


i::=[span style="font-family: 宋体">字母字母数字

[span style="font-family: 宋体">字母

[span style="font-family: 宋体">数字

表达式e


e ::= 【+|-】[span style="font-family: 宋体">项加减运算符项

[span style="font-family: 宋体">项因子乘除运算符因子

[span style="font-family: 宋体">加减运符

[span style="font-family: 宋体">因子标识符无符号整数表达式

[span style="font-family: 宋体">乘除运算符

[span style="font-family: 宋体">标识符字母字母数字

[span style="font-family: 宋体">无符号整数数字数字

[span style="font-family: 宋体">数字

[span style="font-family: 宋体">字母

条件语句


[span //代码效果参考:http://www.jhylw.com.cn/212028435.html

style="font-family: 宋体">条件语句条件语句

[span style="font-family: 宋体">条件表达式关系运算符表达式表达式

[span style="font-family: 宋体">表达式项加减运算符项

[span style="font-family: 宋体">项因子乘除运算符因子

[span style="font-family: 宋体">加减运符

[span style="font-family: 宋体">因子标识符无符号整数表达式

[span style="font-family: 宋体">乘除运算符

[span style="font-family: 宋体">标识符字母字母数字

[span style="font-family: 宋体">字母

[span style="font-family: 宋体">无符号整数数字数字

[span style="font-family: 宋体">数字

[span style="font-family: 宋体">关系运算符=


[span style="font-family: 宋体">语句赋值语句条件语句当型循环语句过程调用语句读语句写语句复合语句空语句

[span style="font-family: 宋体">赋值语句标识符表达式

[span style="font-family: 宋体">当型循环语句条件语句

[span style="font-family: 宋体">过程调用语句标识符

[span style="font-family: 宋体">读语句标识符标识符

[span style="font-family: 宋体">写语句表达式表达式

[span style="font-family: 宋体">复合语句语句语句

[span style="font-family: 宋体">空语句

赋值语句、复合语句如上所述。


函数


[span style="font-family: 宋体">函数类型说明函数名复合语句

程序


[span style="font-family: 宋体">程序分程序

[span style="font-family: 宋体">分程序常量说明部分变量说明部分过程说明部分语句

[span style="font-family: 宋体">常量说明部分常量定义常量定义

[span style="font-family: 宋体">常量定义标识符无符号整数

[span style="font-family: 宋体">变量说明部分标识符标识符

[span style="font-family: 宋体">过程说明部分::=[/span>过程首部分程序过程说明部分

[span style="font-family: 宋体">过程首部标识符

相关文章
|
6月前
|
XML 分布式计算 监控
Oozie工作流管理系统设计与实践:面试经验与必备知识点解析
【4月更文挑战第9天】本文详述了Oozie工作流管理系统的核心概念,包括安装配置、Workflow XML、Action、Coordinator和Bundle XML定义。此外,讨论了工作流设计实践,如监控调试、自动化运维,并对比了Oozie与其他工作流工具的差异。文中还分享了面试经验及解决实际项目挑战的方法,同时展望了Oozie的未来发展趋势。通过学习,读者能提升Oozie技术能力,为面试做好充分准备。
139 0
|
6月前
|
运维 前端开发 JavaScript
平台设计-概念澄清说明
平台所说模块一般指一个独立部署的前端项目
|
6月前
|
存储 算法 Java
【底层服务/编程功底系列】「手把手教学系列」带你打造一个属于自己的规则引擎服务,打破任何业务难题(逻辑模型和API设计)(一)
【底层服务/编程功底系列】「手把手教学系列」带你打造一个属于自己的规则引擎服务,打破任何业务难题(逻辑模型和API设计)
100 1
|
6月前
|
Java API
【底层服务/编程功底系列】「手把手教学系列」带你打造一个属于自己的规则引擎服务,打破任何业务难题(逻辑模型和API设计)(三)
【底层服务/编程功底系列】「手把手教学系列」带你打造一个属于自己的规则引擎服务,打破任何业务难题(逻辑模型和API设计)
89 0
|
6月前
|
存储 设计模式 监控
【底层服务/编程功底系列】「手把手教学系列」带你打造一个属于自己的规则引擎服务,打破任何业务难题(逻辑模型和API设计)(二)
【底层服务/编程功底系列】「手把手教学系列」带你打造一个属于自己的规则引擎服务,打破任何业务难题(逻辑模型和API设计)
90 0
|
6月前
|
存储 C语言
深入浅出 C 语言:学变量、掌控流程、玩指针,全方位掌握 C 编程技能
C 语言介绍 C 语言的特性 C 语言相对于其他语言的优势 C 程序的编译 C 中的 Hello World 程序
77 2
|
敏捷开发 算法 安全
如何写出高质量代码:特征、编程实践技巧和软件工程方法论
如何写出高质量代码:特征、编程实践技巧和软件工程方法论
|
测试技术
【解决方案 二十一】系统专业名词梳理及释义
【解决方案 二十一】系统专业名词梳理及释义
124 0
|
监控 数据可视化 测试技术
软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型
软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型
273 0
软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型
|
测试技术
软件测试面试题:自动化中有哪三类等待?他们有什么特点?
软件测试面试题:自动化中有哪三类等待?他们有什么特点?
175 0
下一篇
无影云桌面