编译技术图式(第四章 语法分析)01文法和语法的定义

编译技术图式(第四章 语法分析)01文法和语法的定义

1、基本概念



1)词法规则: 哪些字符串合法或者不合法

  字母表:语言允许使用字符的集合

  词汇:由字符组成的有限串(字符串) 

  标识符:函数名,变量名等

2)语法规则:

  句子:一个“词汇序列”

  确定句子在形式上是否合法

  提供句子的结构: if ( 表达式 ) 语句 else 语句

3)语法的表示:

  (1)自然语言描述

  (2)形式化描述(BNF)

  (3)转换图(语法图)

2、形式化描述



终结符、非终结符、产生式

1)定义

2)产生式的表示

               

3)产生式的约定

(1)非终结符,用英文大写字母表示

(2)开始符号,仅有1个,第一个产生式的左边符号

4)文法的表示

5)文法的分类

(1)0型文法(无限制文法)

(2)1型文法(上下文有关文法)

(3)2型文法(上下文无关文法)

(4)3型文法(正则文法,右线性文法)

6)推导和规约

(1)由句型到句子,把产生式左边替换为右边,由抽象到具体

(2)由句子到句型,把产生式右边替换为左边,由具体到抽象

7)句型和句子

句型:由开始符号推导出的任意符号串

句子:某个句型仅由终结符组成,只含终结符的句型

8)文法G产生的语言

G产生的所有句子的集合, 记为L(G)

3、推导树(语法树)



用图展示一个句型(句子)的推导过程

倒立的树

  • 根在上、叶在下
  • 开始符号为“树根”

 推导树总结

原文地址:https://www.cnblogs.com/ggotransfromation/p/11616652.html

时间: 2024-09-29 05:07:09

编译技术图式(第四章 语法分析)01文法和语法的定义的相关文章

编译技术图式(第三章 词法分析)

编译技术图式(第三章 词法分析) 1.词法分析概述 2.词法分析器和语法分析器的关系 (1)词法分析作为单独的一遍 (2)词法分析作为子程序 3.词法分析器的输出 二元式 (单词类别<整数编码>,单词属性) 依赖于所对应的程序设计语言 关键字“一字一码” 标点符号“一字一码” 对标识符.常数.字符串等“一类一码” 丢弃其它不相关字符 (注释.空白符等) 4.词法分析器的实现 1)正则表达式:一种用来描述字符串集合的工具 2)字母表:一个有限的符号集合 集合{0, 1}是二进制字母表 3)字母表

编译技术图示(第一章 编译概述)

编译技术图示(第一章 编译概述) 源程序——>机器代码 分析(前端):分成小部分,找出小部分属性,包括:词法分析.语法分析.语义分析.中间代码生成 合成(后端),包括:中间代码优化.目标代码生成.目标代码优化 1.词法分析:识别.删除单词符号.词法检查 输入:源代码,输出:二元式<单词类别,单词属性> 2.语法分析 输出:抽象语法树(AST),从下向上看 3.语义分析 有限,大部分都是类型(运算)检查 4.中间代码生成 eg:x=a+b —> t1=a+b x=t1 为什么分为两个

第四章-语法分析之认识树节点

上一章我们得到了Token序列,而语法分析就是根据Token序列构造抽象语法树的过程,抽象语法树是一种用来描述程序代码语法 结构的树形表示方式,这种结构化的表示方式将为后面语义分析.代码生成阶段提供极大的便利.语法树的每一个节点都代表了程序代码中的一个语法结构,如包.类型.修饰符.运算符.接口.返回值甚至代码注释等都可以是一个语法结构.Javac中,每个语法树节点都对应着一个具体的实现类,这一章将重点介绍抽象语法树上的各个语法树节点,只有认清了抽象语法树上的构造节点才能根据根据一定规则将toke

《数据挖掘概念与技术》——第四章 数据仓库与联机分析处理

一.基本概念 1.宽泛概念:数据仓库是一种数据库,它与的那位的操作数据库分别维护.数据仓库系统允许将各种应用系统集成在一起,为同一的历史数据分析提供坚实的平台,对信息处理提供支持. 另一种说法: 数据仓库是一个面向主题的.集成的.时变的.非易失的数据集合,支持管理者的决策过程. 1)面向主题的:数据仓库围绕一些重要的主题,如顾客.供应商.产品和销售组织.关注点是决策者的数据建模与分析,不是在日常操作和事务处理上. 2)集成的:构造数据仓库是将多个易购数据源,如关系数据库.一般文件.联机事务处理记

软件工程基础图式(第四章 系统设计)

软件工程基础图式(第四章 系统设计) 学习目标 1)软件设计过程 2)软件设计的概念和原则 3)设计技术 4)面向过程的系统设计 5)面向对象的系统设计 系统设计目标:将需求分析转化为软件内部结构 1.好的设计的三个特点 (1)包含所有明确要求(要实现什么,不要实现什么)满足客户所期望的所有隐含要求 (2)编码测试.维护人员可读可理解 (3)完整视图(概要图) 2.设计指导原则 1)模块化 2)含数据.体系结构.接口.组件 3)可重复使用 4)正确清楚 3.设计质量属性 1)功能性 2)易用性

软件工程基础图式(第四章 系统设计-面向过程的系统设计)

软件工程基础图式(第四章 系统设计-面向过程的系统设计) 1.结构化设计方法 2.在系统结构图中的模块 3.变换型系统结构图 4.事务型系统结构图 5.变换分析 例子1:将下图的DFD/数据流图转换为软件/控制结构图(有误,看模式) 例子2:将下列数据流图转换为控制结构图 变换分析注意事项 ① 在选择模块设计的次序时,必须对一个模块的 全部直接下 属模块都设 计完成之后, 才能转向另 一个模块的 下层模块的 设计. ② 在设计下层模块时,应考虑模块的耦合和内聚问题,以提高初始结构图的质量. ③

第四章:源代码的下载和编译的学习笔记

第四章:源代码的下载和编译 本章主要是学习使用GIT下载两套源代码,学习如何下载和编译Android源代码和Linux 内核源代码. 一.下载.编译和测试Android源代码 (1)配置Android源代码下载环境: 1.创建一个用于存放下载脚本文件(repo)的目录(可将该脚本文件一放在任何目录下,在这里使用~/bin). 2.下载repo脚本文件(用于下载Android源代码) 3.创建用于存放Android源代码的目录(可放在其他目录中) # mkdir android-source #

Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记

Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记     本章学习了使用git下载两套源代码并搭建两个开发环境.分别为Android源代码和Linux内核源代码.Android源代码中包含了HAL(即硬件抽象层) 的代码,并学习了如何搭建这两种开发环境. Android 的移植的本质就是Linux内核的移植,Linux内核的移植主要是Linux驱动的移植.而开发和测试Linux驱动就需要安装以上两个开发环境. 搭建两套环境的具体步骤如下: 一.下载编译和测试A

淘宝技术这十年 第三章 第四章

到 2004 年上半年,淘宝决定更换开发语言,将PHP更改为JAVA: ? ? 到07年,淘宝已经用上了 IBM 的小型机.Oracle 的数据库.EMC 的存储 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 第四章 ? ? 07年之后,淘宝就开始了真正的壮大之路,走上了创造技术的大道: ? ? 07年之前,图片存储使用的是NetAPP的文件存储系统,但未对小文件存储进行有针对的优化 ,且扩容成本高昂,网络连接数经常达到极限: ? ? ? ? 在这种背景下,淘宝