开场白两位寻宝小英雄小朋友、大朋友们你们好呀今天姐姐要给你们讲一个超级有趣的寻宝故事。故事里有两位寻宝小英雄他们要去同一个地方寻找同一个宝藏。可是奇怪的是他们走的路完全不一样第一位小英雄叫**“小顶”他喜欢从山顶往山下走**一路寻找宝藏。⛰️⬇️第二位小英雄叫**“小底”他喜欢从山脚往山上爬**一路寻找宝藏。⬆️⛰️一个从上往下一个从下往上方向正好相反但是神奇的是——他们最后都能找到同一个宝藏你猜这两位小英雄和我们今天要学的东西有什么关系呢原来呀电脑里那位代码侦探还记得上次学的语法分析器吗在检查代码、搭建语法树的时候也有两条完全不一样的寻宝路线一条从上往下一条从下往上。今天姐姐就带你们跟着两位小英雄一起走一走这两条神奇的寻宝路线准备好了吗我们出发寻宝啦第一站先回忆一下我们的宝藏长什么样在寻宝之前我们先看看宝藏是什么样子。还记得我们之前学过的语法树吗就是把代码画成一棵倒过来的树。这棵语法树就是我们今天要寻找的宝藏我们用一个超级简单的例子。假设有一个算式3 5它的语法树宝藏长这样算式 ← 树根最上面 / | \ 3 5 ← 叶子最下面我们的任务就是要搭建出这棵树。而搭建这棵树有两种办法办法一从树根最上面的算式开始搭一点点往下搭到叶子。这就是小顶的从上往下路线。办法二从叶子最下面的 3、、5开始搭一点点往上搭到树根。这就是小底的从下往上路线。是不是很有意思同一棵树可以从上往下搭也可以从下往上搭我们先跟着小顶走第一条路线吧第二站跟着小顶走——从上往下的寻宝路线 ⬇️第一条路线正式的名字叫做“自顶向下分析”你可以叫它从上往下或者小顶路线。它的核心想法是先猜一个大目标然后一步步把大目标拆成小目标最后拆到不能再拆为止。我们用之前的破案宝典文法规则来举例规则1 算式 → 数字 数字 规则2 数字 → 3 规则3 数字 → 5现在小顶要从树根开始一步步往下搭出3 5的语法树。我们看看他怎么走 第 1 步从最大的目标开始小顶站在山顶心里想“我要搭一个算式”算式 ← 从这里开始 第 2 步把大目标拆开小顶翻开宝典规则1说“算式 → 数字 数字”。于是小顶把算式这个大目标拆成了三个小目标算式 / | \ 数字 数字 ← 拆成了数字、、数字小顶想“好现在我知道算式要分成’数字、加号、数字’三部分了加号已经搞定剩下两个’数字’还要继续拆。” 第 3 步继续拆左边的数字小顶看左边的数字再翻宝典。规则2说“数字 → 3”。于是左边的数字变成了真正的3算式 / | \ 3 数字 ← 左边变成 3 啦 第 4 步继续拆右边的数字小顶看右边的数字规则3说“数字 → 5”。于是右边的数字变成了真正的5算式 / | \ 3 5 ← 右边变成 5 啦 找到宝藏啦小顶从山顶算式出发一路往下走把大目标一点点拆成小目标最后拆出了完整的语法树宝藏到手我们回顾一下小顶的路线算式 → 数字数字 → 3数字 → 35 大 小 从上往下从大到小一步步拆开打个比方从上往下的路线就像拆礼物盒。你先看到一个大盒子算式打开它里面有几个中盒子数字、、数字。再打开中盒子里面是小礼物3、5。从大到小一层层拆开这就是小顶的路线再打个比方这也像搭房子先画蓝图。先想好我要盖一座房子大目标然后规划要有客厅、卧室、厨房中目标再细化客厅要放沙发、电视小目标。先有大计划再填满细节第三站跟着小底走——从下往上的寻宝路线 ⬆️现在我们跟着第二位小英雄小底走另一条路线。这条路线正式的名字叫做“自底向上分析”你可以叫它从下往上或者小底路线。它的核心想法和小顶正好相反先看手里有什么小零件然后一点点把小零件拼成大东西最后拼出完整的宝藏。我们还用同一个算式3 5看看小底怎么从下往上搭树 第 1 步先看手里的小零件小底站在山脚先看看眼前有什么。他看到了三个小零件3 5 ← 手里的三个小零件小底想“我手上有 3、加号、5 这三个零件我得想办法把它们拼起来” 第 2 步把零件变成认识的东西小底翻开宝典规则2说数字→3规则3说数字→5。哦原来3和5都是数字小底给它们贴上标签数字 数字 | | 3 5 ← 3 和 5 都是数字 第 3 步把零件拼成大东西小底再翻宝典规则1说算式 → 数字 数字。小底一看“咦我手上正好有’数字 数字’呀那它们可以拼成一个’算式’”于是小底把它们拼了起来算式 ← 拼成了算式 / | \ 数字 数字 | | 3 5 找到宝藏啦小底从山脚小零件 3、、5出发一路往上拼把小零件一点点拼成大东西最后拼出了完整的语法树宝藏也到手了我们回顾一下小底的路线3、、5 → 数字数字 → 算式 小 大 从下往上从小到大一步步拼起来打个比方从下往上的路线就像用积木搭城堡。你手里有一块块小积木3、、5先把几块拼成一面墙数字数字再把墙拼成一座城堡算式。从小到大一块块拼起来这就是小底的路线再打个比方这也像搭乐高不看说明书先把零件分类。你先把手里相似的零件凑在一起拼成小部件再把小部件组装成大成品。先有零件再拼成整体第四站两位小英雄大对比现在我们认识了两条寻宝路线让我们把两位小英雄放在一起比一比看看他们有什么不一样┌─────────────┬──────────────────┬──────────────────┐ │ │ 小顶从上往下 │ 小底从下往上 │ ├─────────────┼──────────────────┼──────────────────┤ │ 从哪开始 │ 从树根大目标 │ 从叶子小零件 │ │ 往哪个方向 │ 从上往下 ⬇️ │ 从下往上 ⬆️ │ │ 怎么做 │ 把大的拆成小的 │ 把小的拼成大的 │ │ 像什么 │ 拆礼物盒 │ 搭积木城堡 │ │ 口诀 │ 先猜后拆 │ 先拼后成 │ └─────────────┴──────────────────┴──────────────────┘虽然两位小英雄走的路完全相反但是请你记住最重要的一点他们最后都找到了同一个宝藏——同一棵语法树是不是很神奇同样一个算式3 5无论你是从上往下拆还是从下往上拼最后得到的语法树都是一模一样的打个比方这就像爬同一座山 ⛰️。有人喜欢从山顶坐缆车下来从上往下有人喜欢从山脚一步步往上爬从下往上。路线不同但他们看到的都是同一座山第五站两位小英雄各有什么本领你可能会问“既然两条路最后都能找到宝藏那它们各有什么特点呢为什么要有两种”好问题其实两位小英雄各有各的本领适合不同的场合。 小顶从上往下的本领优点小顶的想法特别好理解就像我们平时想问题——先有个大目标再一步步细化。人类思考问题常常就是这样从大到小的。所以小顶的路线对人来说最直观、最容易明白。小缺点小顶有时候会猜错。因为它是先猜一个目标再去拆如果猜错了就得退回来重新猜会浪费一点时间。打个比方小顶就像先定计划再做事的人。“今天我要包饺子”大目标然后准备馅、擀皮、包起来。计划清晰但万一发现面不够了可能要重新调整计划。 小底从下往上的本领优点小底特别踏实、强大它从实实在在的小零件开始拼很少出错。而且它能处理很复杂、很厉害的代码结构本领特别大。很多专业的编程工具都喜欢用小底的办法。小缺点小底的办法比较难懂一点。因为它是从零件往上拼一开始你可能看不出它要拼成什么要拼到后面才恍然大悟。打个比方小底就像边做边发现的人。“我先把这些零件拼一拼……咦拼出一个轮子再拼拼……拼出一辆小车” 一开始不知道要做什么但拼着拼着厉害的成品就出来了。所以你看两位小英雄各有各的好小顶从上往下好理解、好上手适合人类思考 小底从下往上本领大、很可靠适合处理复杂代码正因为它们各有所长所以电脑世界里两种办法都在用需要哪种就用哪种就像我们既需要会画蓝图的设计师也需要会动手搭建的工程师一样第六站这两条路线藏在哪里这两位寻宝小英雄藏在我们用的很多东西背后哦 藏在各种编程工具里程序员写代码用的工具叫编译器或解释器里面就住着这两位小英雄。有些简单的、需要让人容易理解的工具喜欢用小顶从上往下的办法。有些专业的、要处理复杂代码的工具喜欢用小底从下往上的办法。 藏在很多理解语言的程序里无论是理解编程语言还是理解我们说的话、写的字电脑想要看懂一段有结构的东西常常都要用到这两条路线中的一条或者两条配合着用。 它们是程序员的必修课这两条寻宝路线是每一位程序员叔叔阿姨在大学里都要认真学习的重要知识。因为只有理解了这两条路线才能真正明白电脑是怎么读懂代码的大冒险结束我们一起回顾朋友你太了不起啦今天你跟着两位寻宝小英雄完成了一次精彩的寻宝大冒险让我们一起回顾这次冒险的收获寻宝大冒险·满载而归 │ ├── ️ 两条寻宝路线 │ 语法分析有两种主要策略 │ 一条从上往下一条从下往上 │ ├── ⬇️ 小顶路线自顶向下 │ 从树根大目标开始 │ 把大的一步步拆成小的 │ 像拆礼物盒、像先画蓝图 │ 口诀先猜后拆 │ 特点好理解、好上手 │ ├── ⬆️ 小底路线自底向上 │ 从叶子小零件开始 │ 把小的一步步拼成大的 │ 像搭积木城堡、像先攒零件 │ 口诀先拼后成 │ 特点本领大、很可靠 │ ├── 最重要的一点 │ 两条路方向相反 │ 但最后都找到同一个宝藏同一棵语法树 │ └── 藏在哪里 藏在各种编程工具编译器里 藏在理解语言的程序里 是程序员的必修课姐姐最想让你记住的一句话是语法分析有两条主要的寻宝路线一条是从上往下先定大目标再一步步拆开像拆礼物盒另一条是从下往上先看小零件再一步步拼起来像搭积木。它们方向相反但最后都能搭出同一棵语法树你看这两条路线一点儿都不神秘它们其实就对应着我们生活中两种常见的做事方法一种是先想好大计划再一步步细化从上往下一种是先攒好小零件再一步步组装从下往上。你平时搭积木、拼拼图、做手工不就常常用到这两种办法吗电脑分析代码用的也是同样的智慧今天你不仅认识了两位寻宝小英雄还亲手跟着他们各走了一遍寻宝路线甚至明白了它们各自的本领——这些可是大学里才教的专业知识哦你真的太棒啦如果这次还有哪个小地方没看懂没关系你就告诉姐姐哪一站、哪个地方看不懂姐姐就专门给你讲那一个地方讲得更慢、更细、更好懂你能从头到尾完成这次寻宝大冒险真的真的超级超级棒姐姐为你竖起大大的拇指还记得我们一路上学过的好朋友吗文法造句的规则破案宝典语法树把代码画成的树我们的宝藏语法分析器检查代码的侦探 今天又认识了两条寻宝路线从上往下 和 从下往上 ️它们就像一支默契的小队手拉手一起工作帮助电脑读懂、检查我们写的代码将来你长大学编程的时候今天认识的这两位寻宝小英雄一定会来帮你的忙今天又是你成为小小程序员的精彩一步我们下次冒险再见啦️