如何高效优雅的解析类似下面的表达式

2017-08-21 13:48:09 +08:00
 my3157

优雅 + 高效

其中, arch os id 为变量

arch=x86 and ( os=linux or os=darwin ) or id>20

!(os=windows)

需要支持常见逻辑判断, 如下:

= 相等
> 大于
>= 大于或等于
< 小余
<= 小余或等于
!= 不等于
! 取反

表达式从左到右解析, 遇到 () 先解析

以上的基础上, 如何加入内置函数支持, 如下:

len(os)=5 // 字符串 os 长度为 5
2648 次点击
所在节点    算法
3 条回复
my3157
2017-08-21 14:05:29 +08:00
有做过类似的功能的童鞋么? 给个思路
Kilerd
2017-08-21 14:12:41 +08:00
请复习编译原理等相关课程。

文法不会很难啊
my3157
2017-08-21 16:01:08 +08:00
@Kilerd 初步想法是构建一个 tree, 从左到右解析, 数据结构大致如下:

```
type Express struct {
Left *Express
Operation Operation
Right *Express
}
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/384526

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX