看回答发现其实被编译解释后的语法树什么结构都有,有的编译后是线性表结构(如xml之类的语言),有的编译后是树结构(绝大多数语言),有的编译后是图结构(如数据库)。 原因是什么?我猜是因为编译解释后的语法结构必须比代码本身低一个维度。由于现实世界的映射——代码一般是图结构的,代码转为语法树时最好是低一个维度,就变成树结构了。像html之类本来就是树结构的代码,转下一层时就会直接转为线性表。数据库为什么低一层还是图结构?不理解。 看了各位的回答,发现我以为最不靠谱的原因,居然是真的。 语法树之所以是树不是语法线性表也不是语法图,就是因为表太简单图太复杂,树刚刚好o(╥﹏╥)o。这个刚刚好的意思是 树结构相比其他结构是唯一的人容易理解电脑也容易遍历的 最复杂的数据结构了。如果将来教育上去了,硬件发达了,以后的编程语言用的语法树可能就是图结构的了。 就像普通人日常处理数据之所以用表格(二维结构),不用列表(一维)也不用json(多维),原因可能也仅仅是因为”表格是普通人能学会使用的最复杂数据结构“了。 看了lisp有个疑问,编程本质是用语言构造一种层级分支的”树“结构,树的节点有些是数据,有些是操作数据的操作符(算法)。程序解释编译就是将编码转换为”语法树“的过程。 程序为什么一定要转为语法树,而不是转为一维的”语法列表“,或更多维的”语法图“?如果说列表是一维的能容纳的信息相比树结构太少的话,那图结构相比树明显能容纳更大数据,为何不将编码转为”语法图“结构? 有说之所以程序转为语法树是因为递归结构转化后自然是树结构。这不算是解释,很明显递归也能转为列表或图结构。因为本质上树是图的特殊情况,而且树遍历时最终也变成了列表。 还有说除了编程语言,自然语言通过语法分析也能变成”语法树“,这又是为什么?自然的东西不应该是图结构的吗?
程序为什么要编译为语法树而不是语法列表或语法图?
请登录之后再进行评论
登录