编译原理(文法、符号表)
文法
在计算机科学中,文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法(文法是用于描述语言的语法结构的形式规则)。
1个文法 G 是一个四元组 G = (VN , VT , S, P), 其中
VN :非终结符的有限集合
VT :终结符的有限集合
S: 起始符号
P :产生式(推导式)的集合。用终结符替代非终结符的规则。形如F —>a
文法的分类
0型文法(无限制文法 / 短语结构文法)
1型文法(上下文有关文法)
2型文法(上下文无关文法)
3型文法(正规文法)
这几类文法的差别在于对产生式施加不同的限制。多数程序设计语言使用的是2型文法(上下文无关文法)。
2型文法(上下文无关文法)
G = ({a,b} , {T,F} , S, P) 中,
终结符为a,b
非终结符为T,F
起始符为S
推导式为P。
注意:G的四元组中的顺序不是一定的,VN 与 VT 可能会互换。一般来说,终结符都是小写字母(或数字,部分终结符还包括+,-,*)。终结符以题干说明为准。
符号表
符号表:在计算机科学中,符号表是一种用于语言翻译器(例如编译器和解释器)中的数据结构。
在符号表中,程序源代码中的每个标识符都和它的声明或使用信息绑定在一起,比如其数据类型、作用域以及内存地址。
符号表是贯穿编译 / 解释 全部过程的。符号表的作用如下:
① 收集符号属性;(词法分析)
② 上下文语义的合法性检查的依据;(语法分析)
③ 作为目标代码生成阶段地址分配的依据;(语义分析)
实现符号表的常用数据结构
• 一般的线性表:如:数组,链表,等
• 有序表:查询较无序表快,如可以采用折半查找
• 二叉搜索树
• Hash表
符号表也会用于追溯软件的动态错误原因。因为符号表是贯穿编译 / 解释 全部过程的,参与动态执行。例如,腾讯Bugly是通过Android、IOS上传的符号表文件追溯软件崩溃的原因。
编译原理(文法、符号表)相关推荐
- 【编译原理】符号表的实现C语言
最近在学习编译原理这门课.实验课老师让我们完成简易的符号表.内容是读出源程序中的标识符,并在符号表中进行查找,若存在则输出该标识符及其编号和位置.否则将其填入符号表,并分配编号,确定位置,输出标识符表 ...
- 编译原理复习——符号表
符号表作为编译系统的重要组成部分,贯穿于 文 法分析 . 检查 和 语义处理 的编译全过程 在编译程序中符号表用来存放源程序中出现的 有 关名字的属性信息 ,这些信息集中反映了 名字的 语义特征属性 ...
- 编译原理课设---表驱动LL(1)语法分析器的设计
前言:表驱动LL(1)语法分析程序是本人在大三上学期的<编译原理>这门课程的课程设计选做题目,在这次的课程设计中,主要实现判断给定文法是否为LL(1)文法,若是,则给出其预测分析表及对给定 ...
- #编译原理# 文法和内容(二)
文法和内容 编译原理笔记第二部分,内容参考:北航软院教师邵兵课堂课件及内容.张莉著<编译原理及编译程序构造>.国防工业出版社的<编译原理--学习指导与典型题解析>.AlvinZ ...
- 编译原理——文法的基本概念
文法的概念 每一种自然语言或者是编程语言都需要文法来描述,文法相当于语言学的语义分析,即分析每一句话所表示的含义,编译器需要利用文法来完成其语法分析和语义分析. 在目前编程语言领域,上下文无关文法作为 ...
- 编译原理 第六章 语义分析和符号表 作业
一.单选题(共20题,70.0分) 1 下列哪项工作属于语义分析的范畴? A. 单词拼写错误检查 B. 括号不匹配 C. 加法运算两个操作数的类型不兼容 D. 寄存器分配 正确答案: C 我的答案:C ...
- 编译原理实验c语言cfg文法,编译原理
地址在符号表中引入指针previous,来连接上一个符号的首地址运行时存储空间组织活动记录用于管理函数变量的信息栈式存储过程进入和返回通过变更top和sp指针,实现活动记录的栈式处理静态链实现局部变量 ...
- 编译原理-正则文法与正则表达式的相互转化
正则文法与正则表达式的相互转化 前言 一.正则文法 1.定义 2.例子 二.正则表达式 1.定义 2.例子 三.转换规则 1.正则文法转换为正则表达式 2.正则表达式转换为正则文法 四.转换例子 1. ...
- BugTags配置自动上传符号表
我们项目中bug收集工具用的是Bugtags,如果你们项目集成的 也是Bugtags iOS SDK 版本 >= 1.1.2,将可以配置自动上传符号表功能,方法如下: 进入项目对应的 Targe ...
- 关于腾讯buglly符号表问题
众所周知, Bugly是一个比较优秀的异常上报工具, java上层的崩溃和底层的崩溃都可以收集得到,在市面上得到了非常广泛的应用,但是对于一些ndk开发方面, 却一直就存在一个比较头疼的问题, 就是b ...
最新文章
- 一个狠招|如何高效学习3D视觉
- CentOS 6.x安装配置MongoDB 3.4.x
- Leetcode 125. 验证回文串 (每日一题 20210816)
- 拖链电缆 机器人电缆_洞头高柔性拖链网线标柔电缆
- 图论 —— 最短路 —— Floyd 算法
- 使用axis2 services.xml 发布web service
- python3.5安装步骤-pycharm安装步骤
- 3842开关电源完整原理图_开关电源的电路看不懂怎么办?看完本篇就简单了
- 对外技术合作,一定要提供一个DEMO供别人参考
- Centos 7安装和配置 ElasticSearch入门小白
- SQL中 decode()函数的应用和一些特殊的传值方法
- 支教日记软件测试,教学实习每周工作计划精选 .doc
- GPIO输入输出模式原理(八种工作方式附电路图详解)
- 市场调研-全球与中国旋转阻尼器市场现状及未来发展趋势
- 一起看 I/O | 全新 Google Play SDK 索引助您为应用选择合适的 SDK
- 软件工程—团队作业1(三人行)
- 赠与今年的大学毕业生 (二)
- 特效行者app手机版制作飞天特效视频的教程
- 51SCM_AD模块CS5550学习心得
- 【Java】获取当前时间(毫秒级)