【编译原理】关于文法形式化定义的探索

1 文法的概念

每一种自然语言或者是编程语言都需要文法来描述,文法相当于语言学的语义分析,即分析每一句话所表示的含义,编译器需要利用文法来完成其语法分析和语义分析。

在目前编程语言领域,上下文无关文法作为程序语言的描述工具,比如a = b + c是一个合法的赋值语句。

2 符号和符号串的定义

每个程序都可以看成是一个“基本符号”串,如果有一个基本符号集,那么C语言等编程语言可以看成是在这个基本符号集上定义的、按照一定规则构成的一切基本符号串组成的集合。

字母表是元素的非空有穷集合,字母表中的元素称之为符号,因此字母表也称之为符号集。例如C语言中的字母表由字母、数字、关键字等组成。

符号串就是由符号集中的元素组成的序列。例如给定符号集{a,b,c},那么abc、abb、ac就是由该符号集组成的符号串。

3 文法的形式化定义

G可以是正则文法
在这里插入图片描述

3.1 终结符

何为终结符?在编程语言中,终结符可以理解为不能再进行拆分的基本符号,例如C语言中的if、else、while关键字,也可以是一个变量名、数字。

3.2 非终结符

和终结符相反,非终结符就是可以再进行拆分的符号,它可以推出其它的语法成分。如果要对一个非终结符进行语法分析,就需要对它需要进行递归分析。在C语言的if-else文法中,if或者else后面跟着的代码块可以看成是非终结符。

3.3 P&&S

在这里插入图片描述

发布了877 篇原创文章 · 获赞 237 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/weixin_43838785/article/details/104982143