美文网首页
thinking in tree

thinking in tree

作者: golden_age | 来源:发表于2017-04-07 14:34 被阅读0次

    树,这可能是我们最经常面对的结构,它有很好的性质,我们表达树,分析树,转换树,似乎树也是非常适合人脑思考的一种模式。这里,我随想几个例子。

    1. parse过程,输入将符号流,根据一个BNF规则,翻译输出为语法树,
        1.1 BNF的表达
            token作为原子,
                        and, or 两种复合结点类型,表示顺序和选择,如果从复合结点连线到子结点,其实表示的是一个图,而我们把递归处的子结点收起来,表示成一颗树。
        1.2 语法树生成
            这里只讨论,最简单的递归向下算法,是自上而下,自左而右,遍历1.1 的树进行匹配,需要注意左递归问题,解决方法
                1.2.1
                    改写树,为非左递归,此处也可处理公共因子提取等优化
                1.2.2
                    递归结点加访问标记,是否符号流有step,决定是否匹配
                
    2.状态机
        我想抽象出一个可复合的状态机表示,类似于例1里的BNF,我们势必需要规定出,原子状态,复合状态,(这里我舍弃掉符号动作的问题,我用动作本身表示为状态) 
            持续结点(state)
                原子
                    goto
                                        eat
                并发状态(par)
                    比如说,人走路同时吃东西
                        par
                            walking
                            eating
                                            
                顺序状态(seq)
                    比如说,人先走到A点,然后走到B点,
                        seq
                            run2A
                            run2B
            
            将状态机理解成一个类的对象,每一个状态其实就是一个动作的发生,一个API的调用,如何结构化呢,
            
            增加一些可用的结点,
                决策结点(pred)
                    原子
                        是否到了A点,
                        
                    与(and)      
                    或(or)                   
                    非(not)
                    条件(if)
                
            这样我们足以表达一些这个带有逻辑的状态机
                我打算走到A,然后去到B,我一路吃完fa,接着吃fb,到达目的地我就不能够再进食,
                
                walking = 
                    seq
                        goto('A')
                        goto('B')
                        set_flag('stop_flag'))
                
                eating = 
                    if
                        not('stop_flag'), 
                        seq
                            eat('fa')
                            eat('fb')
                
                trip = 
                    par
                        walking
                        eating
            
            你说看的有点眼熟?对,这就是一种行为树

    相关文章

      网友评论

          本文标题:thinking in tree

          本文链接:https://www.haomeiwen.com/subject/tcjhattx.html