算术表达式的validation

2023-10-28

经典的基于单调栈的表达式求值算法是没有validate表达式是否正确的,1+2, 1 2 +都是可以evaluate出来的,因为它们的op栈和operand栈都是一样的。


和json validator一样,框架都是都是输入字符驱动的状态转移。

合法的主要是保证:

1)运算符和值交替出现,注意运算符可以首先出现但必须是+-,作为正负号

2)最后必须是值

值有2种:数和括号

定义4个状态:

EMPTY:当前表达式目前是空的

IN_VALUE:当前处在一个值的scope中,还没确定结束

AFTER_VALUE:当前处在一个值的后面,这个值已经确定结束

AFTER_OP:当前处在运算符后面,前面是一个运算符

还有一个左括号个数的计数leftParenthese

def validExpression(exp):
    EMPTY, IN_VALUE, AFTER_VALUE, AFTER_OP = range(4)
    state, leftParenthese = EMPTY, 0
    for c in exp:
        if c.isdigit():
            if state == AFTER_VALUE: return False # adjacent oprand
            elif state in [AFTER_OP, EMPTY]: state = IN_VALUE
        elif c == ' ':
            if state == IN_VALUE: state = AFTER_VALUE
        elif c in '+-*/':
            if state == AFTER_OP: return False # adjacent operator
            if c in '*/' and state == EMPTY: return False # exp couldn't start by /*
            state = AFTER_OP
        elif c == '(':
            if state in (AFTER_VALUE, IN_VALUE): return False
            state, leftParenthese = EMPTY, leftParenthese + 1
        elif c == ')':
            # not allowed: ends with op, emtpy parenthese, unmatched right parenthese
            if state in (EMPTY, AFTER_OP) or leftParenthese == 0: return False
            state, leftParenthese = AFTER_VALUE, leftParenthese - 1
        else: return False # invalid character
    return state in (IN_VALUE, AFTER_VALUE) and leftParenthese == 0






本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算术表达式的validation 的相关文章

  • Error: Failed to load parser ‘babel-eslint‘ declared in

    解决办法 xff1a 使用手动安装 babel eslint npm i D babel eslint
  • args = parser.parse_args() SystemExit: 2 解决方案

    问题描述 今天运行程序 xff0c 突然报错 xff1a args 61 parser parse args args 61 SystemExit 2 查阅网上解决方案无果 xff0c 于是自己检查了错误信息 xff0c 哦 xff0c 原
  • http-parser解析http报文详解

    转载自 xff1a https blog csdn net zzhongcy article details 41981855 http parser解析http报文详解 zzhongcy 2014 12 17 15 16 33 22490
  • Http_parser报文解析(转载)

    转载自 xff1a https blog csdn net qq 36482772 article details 80174358
  • python中html.parser_python模块之HTMLParser简介

    html parser是一个非常简单和实用的库 xff0c 它的核心是HTMLParser类 工作的流程是 xff1a 当你feed给它一个类似HTML格式的字符串时 xff0c 它会调用goahead方法向前迭代各个标签 xff0c 并调
  • 【slighttpd】基于lighttpd架构的Server项目实战(7)—http-parser

    转载地址 https blog csdn net jiange zh article details 50639178 对于http服务器 xff0c http request的解析是比较麻烦的 xff0c 由于我们的重点并不在这上面 xf
  • http-parser解析http报文详解

    说明 项目里用到力http parser xff0c 在这里简单说明一下其用法吧 下载地址 xff1a https github com joyent http parser 其使用说明很详细 开源用例 开源tcpflow 1 4 4中使用
  • Http_parser报文解析

    http协议 1 超文本传输协议 2 网站等大部分都使用的是http协议 3 客户端发出http协议请求数据包 服务器返回http协议响应数据包 请求 响应格式 1 http请求 span class hljs tag lt span cl
  • 开源HTTP解析器---http-parser和fast-http

    转载自 xff1a https www cnblogs com arnoldlu p 6497837 html 开源HTTP解析器 http parser和fast http 由于项目中遇到需要发送http请求 xff0c 然后再解析接收到
  • Lucene Query Parser 语法

    lucene的组合条件语法 xff0c 看了网上很多文章 xff0c 真的都太差了 还是官网清晰明了一点 SKIP NAVIGATION LINKS OVERVIEWPACKAGECLASSUSETREEDEPRECATEDHELP PRE
  • http-parser用法

    头文件说明 xff1a 解析类型定义 xff1a enum http parser type HTTP REQUEST HTTP RESPONSE HTTP BOTH 解析函数声明 xff1a void http parser init h
  • 【slighttpd】基于lighttpd架构的Server项目实战(7)—http-parser

    对于http服务器 xff0c http request的解析是比较麻烦的 xff0c 由于我们的重点并不在这上面 xff0c 所以这一部分不打算自己编写 xff0c 而是使用开源的http parser库 xff0c 下面我们将使用该库来
  • http解析库http-parser

    一 http parser简介 1 简介 http parser是一个用C编写的HTTP消息解析器 xff0c 可以解析请求和响应 xff0c 被设计用于高性能HTTP应用程序 它不会进行任何系统调用及内存分配 xff0c 它不会缓冲数据
  • http_parser

    最近读了 http parser 的源码 xff0c 记录下 有意思的地方 xff1a 1 协议解析可以不完全解析完 xff0c 但是当前 parser 会记录解析状态 xff0c 这样可以继续解析 2 协议解析首要还是要了解协议本身 xf
  • Cannot find module ‘body-parser‘

    node modules下模块缺失 解决方案 xff1a npm install span class token operator span save body span class token operator span parser
  • 【slighttpd】基于lighttpd架构的Server项目实战(7)—http-parser

    对于http服务器 xff0c http request的解析是比较麻烦的 xff0c 由于我们的重点并不在这上面 xff0c 所以这一部分不打算自己编写 xff0c 而是使用开源的http parser库 xff0c 下面我们将使用该库来
  • 爬虫中网页分析的几种技术

    一般来说我们只抓取网页中的特定数据 比如抓取某人所有的blog 我们就只关心list 页面中文章列表那部分的链接和title 有几种技术可以用来分析网页 1 正则匹配 2 一般字符串匹配content substring pattern s
  • 算术表达式的validation

    经典的基于单调栈的表达式求值算法是没有validate表达式是否正确的 1 2 1 2 都是可以evaluate出来的 因为它们的op栈和operand栈都是一样的 和json validator一样 框架都是都是输入字符驱动的状态转移 合
  • stream, parser, 文法的一些概念

    stream就是个Iterable
  • Regular Expression实现

    主要分2大块 核心部分 就是一个NFA 只支持标准正则的操作 concatenation union iteration 限定上限的iteration 对应的meta character只有 upper 扩展部分 这部分是把扩展正则表达式转

随机推荐

  • Transform 基础知识

    Transform 变换 是场景中最常打交道的类 用于控制物体的位移 旋转 缩放等功能 Transform Class inherits from Component IEnumerable Position rotation and sc
  • HJ41 称砝码

    题目 HJ41 称砝码 题解 import java util 注意类名必须为 Main 不要有任何 package xxx 信息 public class Main public static void main String args
  • RBAC详解

    RBAC详解 1 RBAC模型的工作原理 2 RBAC模型的实现 3 总结 RBAC模型是一种基于角色的访问控制模型 它定义了一些规则和机制来控制用户对系统资源的访问 在本文中 我们将详细讨论RBAC模型的工作原理 并使用一个数据库示例来说
  • 剑指Offer - 面试题49:丑数

    题目 我们把只包含因子2 3 5的数称为丑数 Ugly Number 求按照从小到大的顺序的第1500个丑数 例如 6 8都是丑数 但14不是 因为它包含因子7 习惯上我们把1当作第一个丑数 分析 暴力法 从1开始每个数字都判断 若是丑数
  • 代码实现 —— 基于 STM32 的可见光通信系统课程设计

    目前课设已完成 2m距离 传输10000个连续数字 每个数字两字节大小 即总共20000个字节160000bit 用时7s 大约2 3万bit s 即22 4kB s 误码率为0 视频演示链接 另外 自己写了一个基于QT的串口上位机 结合U
  • 前端面试题汇总(vue+html基础)最新最全

    一 HTML基础部分 1 什么是盒子模型 重要 在网页中 一个元素占有空间的大小由几个部分构成 其中包括元素的内容 content 元素的内边距 padding 元素的边框 border 元素的外边距 margin 四个部分 这四个部分占有
  • FDbus

    文章目录 介绍 背景 特点 FDBus 中间件模型 FDBus 寻址和组网 Server地址 Server命名和地址分配 name server使用如下规则分配server地址 多主机组网 host server的工作原理 client 与
  • 时序分解

    时序分解 Matlab实现CEEMD互补集合经验模态分解时间序列信号分解 目录 时序分解 Matlab实现CEEMD互补集合经验模态分解时间序列信号分解 效果一览 基本介绍 程序设计 参考资料 效果一览 基本介绍 Matlab实现CEEMD
  • Spring源码之事件监听机制(下)

    文章目录 前言 一 手写事件监听机制框架 1 准备 2 事件监听接口 3 事件管理器 4 事件发布器 5 需求 6 编码 二 观察者模式 1 概述 2 UML图 3 Coding验证 小结 前言 这篇文章接的是上篇文章Spring源码之事件
  • java 抓取网页_JAVA使用爬虫抓取网站网页内容的方法

    本文实例讲述了JAVA使用爬虫抓取网站网页内容的方法 分享给大家供大家参考 具体如下 最近在用JAVA研究下爬网技术 呵呵 入了个门 把自己的心得和大家分享下 以下提供二种方法 一种是用apache提供的包 另一种是用JAVA自带的 代码如
  • 函数齐次性

    比如一个系统 输入为x 其响应为f x 当输入为ax 其响应为af x 即 f ax af x 则称系统具有一次齐次性 其中a为任意常数 一般地 在数学里面 如果一个函数的自变量乘以一个系数 那么这个函数将乘以这个系数的k次方 我们称这个函
  • Win10聚焦锁屏壁纸保存

    前言 Win10聚焦锁屏每天都会推荐新的壁纸 其中有些质量超高的优秀壁纸 用户自然想下载保存下来 下文介绍如何保存 若用户仅想保存当天的聚焦锁屏壁纸 则推荐方法1 若用户想保存以前的聚焦锁屏壁纸 则推荐方法2 方法1 从微软商店下载软件 注
  • 51单片机OLED收银电子秤称重计价清零去皮金额累计HX711

    实践制作DIY GC0061 收银电子秤称重计价清零去皮金额累计 一 功能说明 基于51单片机设计 收银电子秤称重计价清零去皮金额累计 二 功能介绍 STC89C52单片机 AT89C51 52 OLED HX711 5Kg电子秤 4 4矩
  • 解决ubuntu进行远程连接时出现密码认证失败的问题

    问题描述 1 当我们将mobaxterm 新建会话时 如果用户名设置为root超级用户 我们会发现 root用户登陆不进去 他会跳出来一个窗口 说是ssh服务器拒绝了密码 2 这个问题就困扰到我了 找了很多帖子 都说要改 etc ssh s
  • ps 和 kill 命令详解

    1 作用kill命令用来中止一个进程 2 格式kill s signal p a pid kill l signal 3 参数 s 指定发送的信号 p 模拟发送信号 l 指定信号的名称列表 pid 要中止进程的ID号 Signal 表示信号
  • 第一章 网络子系统初始化--基于Linux3.10

    下载地址 http download csdn net detail shichaog 8620701 网络初始化函数调用顺序 Linux系统启动那些事 基于Linux 3 10内核 提到系统启动时会调用一系列的初始化函数 初始化函数使用i
  • JavaEE学习记录day10 IO流01 File类、字节流

    1 File类 1 1File类概述和构造方法 应用 File类介绍 它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的 对于File而言 其封装的并不是一个真正存在的文件 仅仅是一个路径名而已 它可以是存在的 也可以
  • shell在while循环中使用ssh命令提前退出的问题

    我想编写一个xcall sh脚本 用于快速向集群中的所有节点执行相同的命令 集群的节点信息放在hosts文件中 root localhost cat hosts 10 4 7 81 root 10 4 7 82 root 10 4 7 83
  • elementUI el-table表格列排序的三种方法

    1 官方排序
  • 算术表达式的validation

    经典的基于单调栈的表达式求值算法是没有validate表达式是否正确的 1 2 1 2 都是可以evaluate出来的 因为它们的op栈和operand栈都是一样的 和json validator一样 框架都是都是输入字符驱动的状态转移 合