`
mirguest
  • 浏览: 3200 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

表示算术表达式的树

阅读更多

今天看了一遍《C++沉思录》的第八章,作者使用c++实现了表示算术表达式的树。

就是像 (-3)*(3+3)的树就是:



然后,我就用python实现了一下。因为python与C++不同,(作者使用了句柄类),我这里就没考虑这么多。

下面是实现:

# -*- coding:utf-8 -*-
class One_node(object):
    def __init__(self,n):
        self.n=n
    def __str__(self):
        return str(self.n)

class Unary_node(object):
    def __init__(self,op,n):
        self.op=op
        self.n=n
    def __str__(self):
        return "("+self.op+str(self.n)+")"
class Binary_node(object):
    def __init__(self,op,left,right):
        self.op=op
        self.left=left
        self.right=right
    def __str__(self):
        return "("+str(self.left)+self.op+str(self.right)+")"
class Ternary_node(object):
    def __init__(self,left,middle,right):
        self.left=left
        self.middle=middle
        self.right=right
    def __str__(self):
        return "("+str(self.left)+"?"+str(self.middle)+":"+str(self.right)+")"

def Expr(*argc):
    if len(argc)==1:
        return One_node(*argc)
    elif len(argc)==2:
        return Unary_node(*argc)
    elif len(argc)==3:
        return Binary_node(*argc)

if __name__=="__main__":
    x=Expr(10)
    print x
    x=Expr("-",10)
    print x
    x=Expr("*",2,10)
    print x
    x=Expr("*",Expr(10),Expr("-",3))
    print x
    x=Expr("*",x,x)
    print x
    x=Ternary_node(x,x,x)
    print x


可以看到,非常方便。
  • 大小: 7.8 KB
0
1
分享到:
评论

相关推荐

    二叉树表示的算术表达式

    在数据结构课程设计中,"二叉树表示的算术表达式"是一个常见的主题,它涉及到计算机科学的基础概念,特别是二叉树、数据结构以及如何用它们来解析和操作算术表达式。在这个项目中,我们将深入探讨这些知识点,并了解...

    这是数据结构课程设计,二叉树表示的算术表达式

    在计算领域,二叉树可以用来表示算术表达式。这种表示方式称为二叉表达树(或运算符优先树)。每个内部节点代表一个运算符,而叶节点则代表操作数。例如,对于表达式 "A + B * C",对应的二叉树将有一个加号节点作为...

    数据结构算术表达式

    算术表达式常见的表示方式有前缀(prefix)、中缀(infix)和后缀(postfix)表示法。中缀是我们最常见的形式,如2 + 3 * 4。前缀表示法使用运算符在操作数前面,如+ 2 3 * 4。后缀表示法,也称为逆波兰表示法,...

    使用Lex, Yacc开发的算术表达式解析器,以及算术表达式的计算器

    接着,Yacc(Yet Another Compiler-Compiler)是一个语法分析器生成器,它根据一套语法规则(通常以巴科斯范式或扩展巴科斯范式表示)来解析由Lex生成的tokens,构建抽象语法树(AST),并执行必要的计算。...

    数据结构课程设计—算术表达式的求解—很完整。

    在实际编程中,我们可能需要构建一个二叉树来表示给定的算术表达式,然后实现后序遍历算法进行求值。这个过程中会涉及到字符串解析,识别运算符和操作数,以及构建合适的二叉树结构。此外,还需要考虑处理括号,因为...

    算术表达式的LR翻译器

    本项目是基于C++实现的“算术表达式的LR翻译器”,它包含了LR分析树和分析表的生成过程,这些都是编译器设计的关键组成部分。以下是关于这个主题的详细知识解释: **LR分析器**: LR分析器(Left-to-right, ...

    编译原理 将算术表达式转换成四元式的程序实现

    四元式是一种表示算术或逻辑运算的抽象语法树(AST)的简单形式,它以四元组的形式存储每个操作,通常包括操作符、操作数以及相关的属性。这个过程涉及到词法分析、语法分析和语义分析等编译阶段。 首先,我们需要...

    算术表达式的词法分析

    本主题“算术表达式的词法分析”聚焦于如何处理包含算术运算的源代码片段。 词法分析器,也被称为扫描器或词法分析器,它的主要任务是从源代码中识别出符合语法规则的最小单元,例如数字、运算符、标识符、关键字和...

    数据结构试验 算术表达式

    2. **语法分析**:依据算术表达式的语法规则(如BODMAS规则:括号优先、指数次方、乘除、加减),构建一个抽象语法树(AST)。AST是一种数据结构,它以树的形式表示了表达式的结构,每个节点代表一个操作或值。 3. ...

    java解释算术表达式

    例如,"2 + 3 * 4"就是一个简单的算术表达式,它表示2加上3与4的乘积。 在Java中,解析算术表达式通常涉及以下几个关键步骤: 1. **词法分析**:也称为扫描,是将输入的字符串(算术表达式)分解为一系列的标记...

    算术表达式求值演示1

    在IT领域,算术表达式的求值是一项基础且重要的任务,尤其在编程语言如C和C++中。本文将深入探讨算术表达式求值的原理、方法以及相关的编程实践,以"算术表达式求值演示1"为例,解析其中涉及到的知识点。 首先,...

    算术表达式翻译成对应的后缀表达式

    本项目是一个基于Yacc(Yet Another Compiler-Compiler)的程序,用于将用户输入的中缀算术表达式转化为等价的后缀表达式,也被称为逆波兰表示法。Yacc是一种自顶向下、递归下降的解析器生成器,通常与词法分析器...

    编译原理实验报告 熟悉算术表达式的语法分析与中间代码生成原理

    实验报告的主题是“编译原理”,具体关注算术表达式的语法分析与中间代码生成原理。在编译器设计中,这个阶段通常被称为词法分析、语法分析和代码生成。 一、算术表达式四元式翻译文法 四元式是一种用于表示中间...

    简单的LISP算术表达式计算器

    标题 "简单的LISP算术表达式计算器" 涉及的核心技术是LISP语言和计算器的设计,这通常是一个计算机科学教育中的课程设计项目。LISP(LISt Processing)是一种古老而强大的编程语言,以其独特的括号表示法和对递归的...

    以二叉树结构存储算术表达式并计算结果

    2. **前缀、中缀和后缀表达式**:算术表达式在二叉树中的表示通常与前缀(逆波兰)、中缀(常规)和后缀(波兰)表达式有关。前缀表达式将运算符放在操作数前面,后缀表达式将运算符放在操作数后面,而中缀表达式是...

    C++版数据结构的算术表达式与二叉树

    三、二叉树表示算术表达式的构建 1. 前缀表示(Prefix notation):运算符位于操作数之前,如“*+234”,适合用递归定义的二叉树表示。 2. 后缀表示(Postfix notation):运算符位于操作数之后,如“23*4+”,同样...

    算术表达式的词法、语法分析。

    总的来说,这次课程设计旨在让学生掌握编译原理的基本概念,特别是词法分析和语法分析,通过实现LR分析器处理算术表达式,并使用四元式来表示和简化表达式结构。这样的实践有助于理解编译器的工作原理,对未来的软件...

    【数据结构】算术表达式求值演示

    本文将深入探讨一个特定的主题——"算术表达式求值",这是数据结构应用的一个实例,主要涉及编译原理、解析器设计以及C++编程语言。 算术表达式求值是指对包含加、减、乘、除等运算符的数学表达式的计算过程。在...

    算术表达式求值演示2

    2. **语法分析**:根据算术表达式的语法规则,将符号序列转换为抽象语法树(AST)。AST以树形结构表示了表达式的结构,便于后续操作。 3. **计算**:从AST的根节点开始,进行前序遍历或者后序遍历,执行相应的运算...

    java版数据结构的 算术表达式与二叉树源码

    在数据结构的学习中,算术表达式与二叉树的关系是一个重要的主题。Java作为一种流行的编程语言,被广泛用于实现各种数据结构,包括二叉树。本篇将详细讲解基于Java的算术表达式与二叉树相关的知识点。 一、算术...

Global site tag (gtag.js) - Google Analytics