实现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个基本单位中的一个了。修改之前的文法后的结果如下:

实现pascal解释器(5)

1.介绍

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

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

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

2. 优先级和语法图

2.1 优先级

associativiy表示左结合

优先级表格构建文法规则:

为每个优先级定义一个非终结符。非终结符所在产生式的主体应......

实现pascal解释器(4)

1.介绍

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

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

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

2. 文法

2.1 上下文相关和上下文无关

在本节中作者提了文法相关的内容。这里的文法均指的是上下文无关文法。上下文相关可以用两个句子对比来理解:

本来我是来得及看电影的,被你浪费了这么多时间去不了啦

2.我有一本来自国外的书

以上两个句子都有 本来这个词,但是显然这个是上下文有关的,在不同的上下文中有不同的含义

2.1 文法的用处

......