python语法详解_Python的语法分析(一)

Python的语法分析(一)

老铁们对不住,最近太忙了,恢复更新了

上次我们分析完了Python的词法分析部分,今天让我们进入下一个大的板块:Python的语法分析。

在进入语法分析前,我们首先要了解清楚语法分析的作用是什么。如果说词法分析是为了从纯文本中提取符合需求的token流的话,那么语法分析的作用就是通过这些token,构建一颗符合对应编程语言的文法定义的结构化数据-语法树。

因此,我们先从文法定义上着手分析。

文法定义

何为文法?个人看来,文法就是规定一个编程语言语法静态格式的描述。

比如,在某些语言里,我们定义一个整型变量int a = 100;;而在另一些语言中,可能需要var a:Int = 3

备注:我们这里不关注这两条语句的语义是否完全相同。

当编译器进行语法分析的时候,会尝试判断上述语句经过词法分析后它们是否符合特定的模式,然后把这些模式与函数调用,变量调用,数学运算之类的表达式关联起来。

上述语句中提及的模式,就是文法。

从本质上来说,不仅仅是语法分析中涉及了文法,词法分析中也存在文法。有大量语言的词法分析可以通过正则表达式进行表征解析,这种文法属于所谓的3型文法,即正则(规)文法。

而除了正则文法,还有其余三种文法,我们分别来介绍一下:

0型文法,最没有限制的文法。只要定义的集合中的非终结符有一个出现在推导式的左边,就可以。

1型文法(上下文有关文法),它在0型文法的基础之上,只添加了一个要求:右边的长度>=左边的长度(终结符或非终结符的个数)。

2型文法(上下文无关文法),它在1型文法的基础上,有增加了一个要求:左边必须是非终结符(个数不限)。

3型文法,它是在2型的基础上提出了要么一个非终结符推出一个终结符,要么一个非终结符推出一个终结符并且带一个非终结符。3型文法包含了左线性和右线性两种。

看来了定义,是不是很晦涩,我们来逐一剖析其中的困惑之处。

首先我们需要了解什么是终结符,什么是非终结符。假设我们现在有一门语言,支持int, char, float三种基本类型。

那么我们在词法分析的时候就会定义对应的TOKEN标示,诸如:INT,CHAR,FLOAT。而在解析语法的时候,我们会定义类似如下的结构:

-> INT | CHAR | FLOAT

其中,就是对三种类型的抽象描述。因此,其是一个非终结符。-> 表征为推导式,而INT, CHAR, FLOAT则分别独立表征为终结符。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值