Skip to Main Content
Go程序设计语言
book

Go程序设计语言

by 艾伦A. A.多诺万, 布莱恩W. 柯尼汉
August 2021
Beginner to intermediate content levelBeginner to intermediate
450 pages
6h 1m
Chinese
Pearson
Content preview from Go程序设计语言

7.9 示例:表达式求值器

在本节中,我们将创建简单算术表达式的一个求值器。我们将使用一个接口Expr来代表这种语言中的任意一个表达式。现在,这个接口没有任何方法,但稍后我们会逐个添加。

我们的表达式语言包括浮点数字面量,二元操作符+、-、*、/,一元操作符–x和+x,函数调用pow(x,y)、sin(x)和sqrt(x),变量(比如x和pi),当然,还有圆括号和标准的操作符优先级。所有的值都是float64类型。下面是几个示例表达式:

下面5种具体类型代表特定类型的表达式。Var代表变量应用(很快我们将了解到为什么这个类型需要导出)。literal代表浮点数常量。unary和binary类型代表有一个或者两个操作数的操作符表达式,而操作数则可以任意的Expr。call代表函数调用,这里限制它的fn字段只能是pow、sin和sqrt。

要对包含变量的表达式进行求值,需要一个上下文(environment)来把变量映射到数值:

我们还需要为每种类型的表达式定义一个Eval方法来返回表达式在一个给定上下文下的值。既然每个表达式都必须提供这个方法,那么可以把它加到Expr接口中。这个包只导出了类型Expr、Env和Var。客户端可以在不接触其他表达式类型的情况下使用这个求值器。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
Go语言编程

Go语言编程

威廉·肯尼迪

Publisher Resources

ISBN: 9787111558422