编译原理(文法、符号表)

文法

在计算机科学中,文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法(文法是用于描述语言的语法结构的形式规则)。

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上传的符号表文件追溯软件崩溃的原因。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值