上篇笔记介绍了语法分析相关的一些基础概念,本篇笔记根据龙书第2.5节的内容实现一个针对简单表达式的后缀式语法翻译器Demo。
备注:原书中的demo是java实例,我给出的将是逻辑一致的Python版本的实现。
在简单后缀翻译器代码实现之前,还需要介绍几个基本概念。
1. 自顶向下分析法(top-down parsing)
顾名思义,top-down分析法的思路是推导产生式时,以产生式开始符号作为root节点,从上至下依次构建其子节点,最终构造出语法分析树。在具体实现时,它会把输入字符串从左到右依次扫描一遍,在扫描过程中构建分析树。
假设现有下面的一组文法产生式:
再假设现在要推导的输入字符串为:
for ( ; expr; expr; ) other
则top-down分析法的推导过程如下图所示:
采用的算法步骤为:
1) 以产生式开始符号(即非终结符号"stmt")作为root节点
2) 在标号为非终结符A的节点N上,选择A的一个产生式(在上述示例中,输入的是for语句,故选择for语句对应的产生式),并为该产生式体中的各个符号构造出N的子节点
3) 寻找下一个节点来构造子树,通常选的是语法分析树最左边的尚未扩展的非终结符
4) 重复第2-3步,直至输入串扫描完毕
在算法实现时,有一个重要的约定术语叫做lookahead symbol,它是指输入串中当前正在被扫描的终结符
【龙书笔记】用Python实现一个简单数学表达式从中缀到后缀语法的翻译器(采用递归下降分析法)
最新推荐文章于 2022-10-21 17:27:12 发布