实现pascal解释器(8)

1.介绍

本系列文章参照该教程学习总结,欢迎查看原文。我个人的学习代码已经放到我的github

词法分析、语法分析、语义分析等定义请参考编译器解释器中的词法分析、语法分析、语义分析

英文原作者所有源代码查看

2. 更多的AST

本节作者继续深化前一章的内容,增加一些一元操作。

这里再来复习下一元操作符和二元操作符的概念:

一元运算符:一元运算符只对一个表达式执行操作,该表达式可以是数值数据类型类别中的任何一种数据类型。例如一元的 '-'表示对表达式取反

二元运算符:二元运算是由两个元素形成第三个元素的一种规则。例如数的加法及乘法;更一般地,由......

实现pascal解释器(7)

1.介绍

本系列文章参照该教程学习总结,欢迎查看原文。我个人的学习代码已经放到我的github

词法分析、语法分析、语义分析等定义请参考编译器解释器中的词法分析、语法分析、语义分析

英文原作者所有源代码查看

2. 抽象语法树(abstract syntax tree)和分析树(parser tree or concrete syntax tree)

使用树这样的数据结构来表达中间表达式

下图用一个树结构来表达2*7+3

实现pascal解释器(6)

1.介绍

本系列文章参照该教程学习总结,欢迎查看原文。我个人的学习代码已经放到我的github

词法分析、语法分析、语义分析等定义请参考编译器解释器中的词法分析、语法分析、语义分析

英文原作者所有源代码查看

2. 表达式中引入括号

之前的factor规则是表达式的基本单位,这次将引入另一个基本单位,即括号表达式。也就是说,factor规则可以得到2个基本单位中的一个了。修改之前的文法后的结果如下: