怎样实现的?
  • 怎样实现的?
  • 简介
  • 怎样实现的?
    • 用Mastodon搭建自己的Twitter
    • 用Cumulusclips搭建自己的YouTube
    • 用bookStack搭建团队知识平台
    • 用Duplicati实现计划备份
    • 用FreeNAS搭建网络存储服务器
    • Ovirt4.2搭建流程
    • 使用Rancher光速搭建K8s集群
    • CentOS7不重启扩展根分区磁盘空间
    • 搭建团队文档协作平台(OnlyOffice)
    • 使用TF-Hub进行迁移学习(图像分类)
    • 用EVE-NG做仿真网络实验
    • 用docsite生成企业站点
    • 使用Harbor搭建自己的docker镜像仓库
    • 使用OpenSTF同时操作多台手机
    • 使用LDX创建管理基于容器的虚拟机
    • 调整Linux内核参数
    • ProxmoxVE高可用集群搭建并集成Ceph
    • Ceph集群的搭建与运维
    • Nextcloud搭建自己的云盘
    • Centos7搭建单节点OpenShift(OKD)
    • 使用Fuel快速搭建OpenStack
    • CentOS7搭建DNS服务器
    • 微信的语音段传输
    • 用Python写MT4自动交易策略来炒外汇
    • WebAR
    • 用BadUSB物理入侵别人的电脑
    • 用Tensorflow.js和摄像头玩俄罗斯方块
    • 开发以太坊DAPP--水果机
    • 表达式是怎样被解析的呢
    • Airtest基于图像识别的UI自动化测试工具
    • 滑动拼图验证码的JS实现
    • 内网穿透--TCP打洞
    • 一致性哈希算法的理解与实践
Powered by GitBook
On this page
  • 原理
  • 代码实现
  1. 怎样实现的?

表达式是怎样被解析的呢

原理

  1. 将表达式进行过滤,替换字符等预处理成可以识别的格式

  2. 将格式字符串生成抽象语法树AST

  3. 遍历这颗树,执行对应的解析方法

代码实现

# 目标表达式
# a + 3 * b

# 类型的定义
# 数字类型
Num = lambda env, n: n 
# 变量类型
Var = lambda env, x: env[x] 
# 加号类型
Add = lambda env, a, b: _eval(env, a) + _eval(env, b) 
# 乘号类型
Mul = lambda env, a, b: _eval(env, a) * _eval(env, b) 
 
 
# 解析AST树的方法
_eval = lambda env, expr: expr[0](env, *expr[1:]) 
 
# 传入的变量 
env = {'a':2, 'b':5} 
# AST语法树
tree = (Add, (Var, 'a'), 
       (Mul, (Num, 3), 
          (Var, 'b'))) 

# 解析并得出结果,17 
print(_eval(env, tree))
Previous开发以太坊DAPP--水果机NextAirtest基于图像识别的UI自动化测试工具

Last updated 6 years ago