estr 数据格式

原创
2016/10/01 11:51
阅读数 77

estr 数据结构用于描述语法树,本质是字符串,能在许多语言中有很好的性能表现,够快也够简洁:

	atom :  [:str atom at]
	atoms:  [[:str atom at] [:str atom at]]

语法树是一个树形结构,在动态语言中很容易描述,嵌套的数组。为什么不用嵌套的 Hash 呢? 因为顺序,数组有顺序,因为代码是有顺序的,还要写回去,所以要保证解析的顺序:

	['nodeName', Node/Nodes, position]

解析字符串生成的数据结构,可能是失败 Fail, 也可能是陈宫 Succ, 但没有返回值,也可能是字符串 String, 这些都是最简单的情况,通常都会返回一个数据结构,最基本的数据结构描述节点的名字 name, 描述节点的内容 content, 描述节点的位置 at: [name, content, at].

而节点的内容可能是字符串,也可能是另外一个数据结构:[name, [name, content, at], at], 也可能是两个节点的数组:

	[ [name-one content-one at-one], [name-two content-two at-two] ]

这种数据结构在动态语言 Python,Ruby,JavaScript 中很容易处理,因为它们自带的 Array 就有这个能力,而且函数不检测返回值,Fail,Succ,String,Atom,Atoms 都可以由一个函数返回,但在静态语言中,就有点麻烦了,要设计一个复杂的数据结构,才能保证能描述语法树的各种数据,为了能在静态语言和动态语言中都能通用一个算法,于是设计了 Estr 这种数据结构:

	[ |string |string |string ]
	FAIL SUCC EIN QSTR OUT 是 5 个不可见字符,分别代表失败,成功,节点开始,字符串开始,节点结束标记

本质上,Estr 是字符串,不管是描述何种状态的节点,都可以用字符串来处理,相关的迭代,遍历函数实质上是处理字符串,因为字符串是几乎所有语言通用的数据结构。

判断 Estr: is-str is-estr is-fail is-succ is-atom is-atoms 合并 estr epush eunshift eappend 遍历 atoms name value

通用的数据结构和算法可以在许多语言中方便的适用,相同的接口,相同的表现形式,可以内置到自己熟悉的语言中,设计自己的内置语言,编写能写代码的语言。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部