my3157
V2EX  ›  算法

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

  •  
  •   my3157 · Aug 21, 2017 · 3244 views
    This topic created in 3231 days ago, the information mentioned may be changed or developed.

    优雅 + 高效

    其中, arch os id 为变量

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

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

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

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

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

    len(os)=5 // 字符串 os 长度为 5
    
    3 replies    2017-08-21 16:01:08 +08:00
    my3157
        1
    my3157  
    OP
       Aug 21, 2017
    有做过类似的功能的童鞋么? 给个思路
    Kilerd
        2
    Kilerd  
       Aug 21, 2017 via iPhone
    请复习编译原理等相关课程。

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

    ```
    type Express struct {
    Left *Express
    Operation Operation
    Right *Express
    }
    ```
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1032 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:21 · PVG 02:21 · LAX 11:21 · JFK 14:21
    ♥ Do have faith in what you're doing.