编译原理(二)文法和语言、符号和符号串、文法的类型、语法树
要点:
- 符号和符号串的相关概念
- 文法和语言的形式定义
- 文法的类型
- 上下文无关文法及其语法树
- 上下文无关文法的句型分析
- 有关文法实用中的一些说明
目的:
掌握文法和语言的相关概念,为以后的词法分析、语法分析、语义分析等做出准备。
2.1 文法的直观概念
语言:
是由句子组成的集合,是一组记号所构成的集合。
汉语—— 所有符合汉语语法的句子的全体
英语 —— 所有符合英语语法的句子的全体
程序设计语言 —— 所有该语言的程序的全体
形式语言和文法
如果不考虑语义和语用,只从语法这一侧面来看语言,这种意义下的语言称作形式语言。
形式语言抽象地定义为一个数学系统。
“形式”是指:语言的所有规则只以什么符号串能出现的方式来陈述。
形式语言理论是对符号串集合的表示法、结构及其特性的研究。是程序设计语言语法分析研究的基础。
文法:描述词法、语法规则的工具。用一组规则严格定义句子的结构,即对含有“无穷句子”的语言进行“有穷的表示”。
2.2 符号和符号串
2.3 文法和语言的形式定义
文法的定义
推导的定义
句型、句子
语言
2.4 文法的类型
2.5 上下文无关文法及其语法树
二义文法
- 若一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。
- 或者,若一个文法存在某个句子有两个不同的最左(右)推导,则称这个文法是二义的。
产生某上下文无关语言的每一个文法都是二义的,则称此语言是先天二义的。
注:程序设计语言的文法不要二义!
2.6 句型的分析
一般画出语法树来判断
判断方法:一个句型的语法树中任一子树叶结点所组成的符号串都是该句型的短语;
当子树中不包含其他更小的子树时,该子树叶结点所组成的字符串就是该句型的直接(简单)短语;
一个句型的最左直接短语称为该句型的句柄。
每棵语法树的叶子结点从左到右排列构成一个句型
每棵语法树的子树的叶子结点从左到右排列构成一个短语
每棵语法树的简单子树(只有父子两层结点)的叶子结点从左到右排列构成一个简单(直接)短语
2.7 有关文法实用中的一些说明
练习
答案:B
答案:(1) 3 (2)1010,0110,1001,0101
答案:BCD
答案:
短语:E+T、(E+T)、F、 F*(E+T)、E+F*(E+T)
直接短语:F、E+T
句柄:F
答案:
(1)终结符:if, then, else,,x,-,(,)
非终结符:S,A,B,C,D
(2)短语:if x+x then xx else –x,x+x,x*x, –x,x
直接短语:x
句柄:x
答案:B
答案:D
总结:
(1) 优先级最低的VT,出现在开始符号的产生式中
(2) 优先级越低,VT离S越近
(3) 右向左结合——左递归
左向右结合——右递归
编译原理(二)文法和语言、符号和符号串、文法的类型、语法树相关推荐
- 编译原理——第二章-最左推导、最右推导以及语法树
**** 题目 令文法为E->T|E+T|E-T T->F|T*F|T/F F->(E)|i (1)给出i+i*i的最左推导和最右推导 (2)给出i+i*i的语法树 解题过程 最左推 ...
- 编译原理课程作业-Cminus语言的词法及语法分析器实现
Cminus Compiler 编译原理课程作业-Cminus语言的词法及语法分析器实现 设计思想 词法分析 使用确定有限态自动机(DFA)实现与Lex自动分析两种方式实现. 语法分析 使用递归下降方 ...
- 【20200422】编译原理课程课业打卡十七之求解文法FirstVTLastVT构造文法算符优先关系表
[20200422]编译原理课程课业打卡十七之求解文法FirstVT&LastVT&构造文法算符优先关系表 一.课业打卡十七之求解文法FirstVT&LastVT&构造 ...
- 编译原理大作业-PL0语言编译器
编译原理大作业-PL0语言编译器 一.实验目的 二.源码说明 1.头文件pl0.h (1 词法分析主要数据结构(通过enum symbol类实现) 1.保留字(13+4个): 2.运算符及界符(16+ ...
- c语言实现编译器编译原理,编译原理课程设计--C语言编译器实现.doc
编译原理课程设计--C语言编译器实现 甘肃政法学院 编译原理课程设计 题 目 C语言编译器实现 计算机科学学院计算机科学与技术专业10 级 计本 班 学 号: 201081010137 姓 名: 杨青 ...
- 【编译原理】-- 第二章(三)(文法的化简改造、无用产生式、产生式的消除、文法的其他表示方法、例题)
目录 一.文法的化简与改造 1.文法的实用限制 (1)不含无用产生式 (2)不含有害规则 (3)无用符号和无用产生式的消除 2.产生式的消除 算法3: 算法4:ε不属于L(G) 算法5:ε属于L(G) ...
- 中山大学编译原理实验——实现PL0语言的编译程序(无坑有缩进版)
PL0-Compiler 代码传送门 ps:吐槽一下,老师给的代码实在是太烂了.又没缩进又多编译错误,除此之外还有很多细节漏掉关键字,总之就很多坑,所以这里发一个无坑带缩进版,方便大家学习. 中山大学 ...
- 编译原理:高级程序设计语言的语法描述
true beginning 高级程序设计语言的语法描述 文法:描述语言的语法结构的形式规则 比如在自然语言中 <句子> → <主语><谓语><直接宾语> ...
- 【编译原理学习笔记】1:符号和符号串,文法和语言,文法的类型
符号和符号串 字母表(符号集):元素的非空有穷集合. 符号:字母表中的元素. 符号串:由字母表中的符号组成的任何有穷序列. 头:如符号串z=xy中的x. 尾:如符号串z=xy中的y. 固有头:符号串的 ...
- 编译原理lr(0)c语言,关于编译原理:LR(1)LR(0)文法判断?
"编译原理"是大学计算机类专业的一门主干课程.设置本课程的目的,在于系统的向学生讲述编译系统的结构.工程流程以及编译程序各组成部分的设计原理和实现技术,使学生通过本课程的学习,既掌 ...
最新文章
- RDKit | 基于随机森林的化合物活性二分类模型
- matlab复杂网络仿真,matlab在复杂网络上的应用
- Window10上使用Git与Github远程仓库互连
- Linux netfilter hook源码分析(基于内核代码版本4.18.0-80)
- Mybatis(1)----------简介及第一开发程序
- 5个免费GitHub最强前端学习资源 程序员不花一分钱也能变很强
- vue3+ts+vite 路径别名配置
- PHPStorm设置Ctrl+滚轮调整字体大小
- 用计算机看影碟是数字化过程,2012年上海市高中《信息科技》学业水平考试1-5(含答案)...
- 暗影精灵双系统(win10和Ubuntu16.04)安装+Cuda和tensorflow安装-深度学习环境配置
- 关于少儿编程编程语言的选择,python还是c++
- Vue中使用vue-video-player视频播放器
- 计算机基础 -- 硬件篇
- 隐马尔可夫模型与语音识别
- Keepalived+LVS+MariaDB Galera Cluster10.0高可用负载均衡多主复制
- 美团点评王兴:有爱、有钱、有耐心丨Xtecher 观察
- 大疆精灵4多光谱 辐射定标 Metashape(原photoscan)
- 防抖函数:多次触发后只执行第一次或者最后一次的函数
- jsp70150宠物寄领养系统
- 陈志武:教育不转型,国家只能卖苦力