生成语法数生成,怎么生成?直接先通过 pass 上面呢?有一个叫做 pass 方法,直接把当前的这个结果传进去 cos 的 ast, 等于它把 code 传进去。 好,这个时候你就能够得到 ast。 来,我们来试一下,是不是能够得到 ast 呢?直接偏偏 build 执行回车,这里是不是打印了哦, ast 已经输出了,这个就是我们这一段代码的 ast 啊,它这里报了个错误,是 规范化的错误啊,就是模块化规范的错误。这个呢比较简单,我们每次都跟大家说过,所以我马上直接改过来,再来 build 一下,没有任何错误了啊,可以看到这就是我的标准的 a s t 的 对象,这个对象呢,就是我刚才给大家看到的,在这里的一样的啊,就这个对象,那这个对象跟这个对象是一样的, 两个对象对比着看。好,那这个对象既然一样,我们继续往后面走。第二步做什么呢?就去做加工,做代码的加工,怎么加工?加工就是要改它里面的内容,那这这第一步啊,第一步 生成语法树,第二步叫加工。语法树怎么加工呢?就比如说这个 a s t, 你 要去加工,它怎么加工? 一般情况下,一棵树的加工,同学们只要是有一定的算法基础,同学都知道树的加工就是树的便利, 对吧?那树的便利方式我们这个要随口就能够说出来啊,树的便利前中后序啊,当然我跟你说的是二叉树啊,二叉树的便利前中后序,层序, 对吧?这是基础的按序便利的这个结果啊,那如果是多差数呢?多差数的话,我们基本上一般都是按照程序来去做这个便利。好,那所以加工语法数就是对于数来进行便利。 好,便利的话,这个我需要给大家重点说一下啊。便利有两种方式,第一种叫做访问者 模式,两种模式啊,第一种访问者, 我们今天给大家讲呢,就讲访问者,访问者最好理解 visitor, 这是访问者访问谁,我们来看好了啊,这个地方同学们看到的每一个这个标识,它叫做节点,叫 node。 这个节点呢,就相当于是你在画一条线段的时候,你从这个节点到这个节点,再到这个节点啊,再然后到这个节点到这个节点啊,所以他在做便利的时候, 它是可以去访问到节点节点节点节点,节点,节点可以访问到,那这些节点就相当于是一个一个的大门,你有了这个大门,通过访问者模式就可以进到你的大门去查看,去参观,去拜访你。那比如说我这里看到的这个叫 variable decorator, 对 吧? variable decorator, 我 直接把它复制一下, variable declaration, 我 直接往这儿一粘。好,接下来我这个游历模式或者叫访问者模式就可以访问到它。访问到它以后我来打印一下啊,打印一下 console 点 lock 这个 pass 上面的 note 是 什么? 好,接下来我定义好以后,我们就直接把刚才我们安装的第二个包导进来,那个包叫什么呢?叫做 traverse, 那 traverse 导进来,这是第二步啊,好,导进来之后,那就直接 traverse 点啊,当然这个我们因为是要按照 default 的 方式来导入,这样导入之后把我们上面生成的 a s t 传进去。第二个参数呢,就是我这个 游历者模式,或者叫访问者模式,访问到它了就会去打印它,我们来看一下最终的结果能不能如愿。 可以,同学们看到没有,这个节点就是我访问的节点啊,有同学说看不清。好,我们把这里呢改一下,就是直接做 pass 点 node, 这样大家应该看得清了,再来执行一下,你看 pass 点 node 是 不是就是这个 node? 好, 那这个节点你都拿到了,你要想改一下,它不是小 case 吗?怎么改? 你来判断一下,同学们看到没有,这个地方, declare declarations 上面有一个节点,然后呢,它的类型,你只需要把这个 kind 换成 var 就 可以了,所以你接下来做一个判断, if pass 点 load 点 kind 等于 const 的 时候干什么呢?我就把 pass 点 load 点 kind 给它换成 var, 这就可以了。好,这个新的 a s t, 我 们就生成了新的 a s t。 生成以后,你在这来再打印一下,试试看新的 a s t, 你 发现没有,新的 a s t 下面它的 program 里面的内容已经变成了 const, 呃,变成了 var。
粉丝1672获赞1.1万

哈喽,大家好,我是你们的荷兰瓜。很多朋友看了我之前的视频,都方便的用上了 cloud code, 我 想可能有的朋友的感觉就跟我一次用上 cloud code 的 感觉一样,就是,我去,哎呀,现在都这么牛啦! 呃,我收到不少朋友私信来问,呃,怎么让 cloud code 改我项目里的文件,还有来问具体的点名操作到底怎么搞?如何让 ai 帮我找文档,找修改差异啊?所以今天这期视频,我就专门来聊聊在 cloud code 里如何优雅且高效地指名道姓让它干活 啊。在 cloud 里,让他帮你修改文件,首先得学会怎么点名。文件最基础的操作就是输入一个 at 符号,就是那个圆圈里面加了个 a 的 符号,在键盘的数字键二上面, 你在对话框里打个 at, 呃,他就会跳出文件列表,比如我想让他帮我检查我刚写的文档里有没有错别字,我就可以直接输入 at、 d、 o、 c、 s。 然后 cloud code 就 会列出所有以 doc 目录下的文件,然后按键盘的上下键,选中目标文件,再按回车,这个文件就会被引用到指令对话框里。 怎么样,这个操作是不是很黑客,很炫酷?其实吧,呵呵,我觉得 clog 的 脑子特别牛,但是性格实在有点轴。 之前我用 cloud code 帮学姐整理临床报告数据表的时候,几千个文件全是中文文件名啊,我键盘上的艾特键都被磨破皮了,结果学姐悠悠来了句,搞半天你们学计算机的还在开手动挡啊!这时候不得不说, cloud code 的 启动器真是贴心又好用。 这个启动器是在 cloud vip 点 c n 这个网站下载的,输入网址,按下载运行按钮就一步到位,可以使用 cloud code 了。 cloud code 启动器在窗口左边增加了一系列方便的操作面板,你只需要点击窗口左上角工具栏的第一个按钮,或者直接按快捷键 ctrl shift e, 就 可以打开项目文件面板。这个项目文件面板长得和 vs code 里的特别像,大家懂的都懂, 在项目文件面板里双击想引用的文件,它就会加到对话框里,方便啊,真是方便啊! 还有更赞的,比如我说你帮把这个项目里的文档互相加一下内链接,那么这些文档散在多个目录里怎么办呢?简单,文档树上面搜索框,鼠标点一下,输入 md, 它就会把所有的 mark 文档都列出来,然后鼠标点点就可以了。 那如果遇到文件又多又乱,还跨目录,文件名没规律,那怎么弄呢?很简单啦,随便选中一个文件,然后按键盘的上下左右方向键就可以导航了,跑到需要的文件上了,按回车键就可以直接添加到引用中。 好了,今天跟大家聊了在 curl code 里引用文件的几种方法,经典的操作是输入 at 符号,然后选中文件,如果嫌麻烦就打开项目文件面板,双击文件就可以引用。 在下一期视频我会教大家进阶玩法,如何让 curl code 完全听你的指挥。记得关注荷兰瓜,我们下期见!

看下这道面试题,如何将加速快普代码集成成抽象语法数。近期需要其他面试的同学请看下这份面试宝典,内容很多,题目也很全面,包括图层化、心灵优化、场景题和一些基础,把握需要的可以来领取一份。要将 cs 代码集成成 s t, 核心思路分为两步走,词法分析和语法分析。 语法分析,将元代码制务串拆解成一个个最小的语单元为托克。语法分析,将托克流按照语法规则组装成一个树状结构,即 a, s, t。 我 们先看第一步,词法分析。扫描器逐个制符,读取代码,利用有限状态机规则识别出关键字、标识符、运算符、数字制符串等。大家可以把它想象成一个切割的过程,把一整串长长的制务串分割成单个制符, 有 ctrl a 等于一机器一开始只看到制服 c, o, n, 直到读完 t 并发现后面这个空格,才知道这是一个关键字 cos 的。 这步结束,我们得到的就是一堆散落的制服。第二步是重格式语法分析。叠机器通常使用低 维下降算法,它会根据语言定义的上下文,无关文法,从根节点开始,不断调用程序来匹配托克,构建出父子关系。工作中一般是用现成的工具库,比如 有 babel password 的。 这里为了演示原理,学了一个极简版的设计方案,目标是解析 cons a 等于一。先扫一眼,这个结构分为 toconiser 和 password 两个大函数。看 toconiser 部分,核心就是一个邮标 print 在 字母上上跑,遇到制服它就开启一个小循环,把后面连着的制服 都推进去,拼成一个单词,拼完之后它需要做个判断,也是 cons 是 等关键字,还是普通的变量名,遇到等号数字也是 同理。最终 cos a 等于一,会变成一个数组, cos a 等于一,这个是托克流。接下来是 pass, 这里最关键的概念叫消费托克。我们定义了一个 word 函数,它看了一眼,当前的托克 是 cos 的, 而且你就有谱了,这肯定是一个变量声明语句。于是开始大胆地往后拿 token, 下一个肯定是变量名,下一个肯定等号。一边拿一边把这些信息填到一个对象里,这个对象就是 a s t。 节点之后返回这个树状对象就是能够被 bobo 识别的 a s t。

看本书的漫画简介是真抽象,配图是他小时候的照片,但文字没一句实话。比如我一年去法国找我祖母两次我寄予他的遗产,还有我在纽约跟华盛顿当律师,绝对会让被告背叛无罪。看到自己以前的照片,就会想起以前当童星时活跃的那段过往。更吹牛逼的是,我曾经徒步环绕日本一 州和我家有七座仓库,主打梦到哪句说哪句。搞笑的是,真有读者相信他的经纪人为此出面澄清,简介的话都不是真的。彭本书曾经忏悔自己吃掉了女朋友养的宠物鱼尸体,因为看到死去的鱼 被蚂蚁吃掉很可怜,所以自己把鱼吃了,吃完后闹肚子,他还不敢和女朋友讲实话,如此美丽的精神状态,都是被画画逼出来的。看本书磨练画技时期,想,如果不能成名就自我了结,但随着年龄长大,他不想自杀了,想的是如果努力四年还不能比他们画的好,就把比自己画的好的同学全杀了,为了不成为 杀人犯拼命画画,最终画技大成,便居然登上少年将。藤本树的家人也似乎习惯了他的臭相。据藤本树回忆,家里人曾非常担心他的未来,为此开过严肃的家庭会议,讨论主题是如果藤本树以后成了家里蹲,我们该怎么养活他,能不能养得起他?笑死,幸好现在的藤本树十分有钱。

前端面试关于 ai 的 问题啊,你了解过类似 curser 这种 it ai 编辑器,对吧?它的上下文档管理是通过什么手段或者原理实现的? 那这个答案也可以说一下吗?就是在实际开发中,像这种基于这种大模型的智能的编辑器,对吧?它想实现这种管理,它背后依赖是一整套工程啊。那么首先比如说第一种,它是本地代码的缩影,加上向量的切入, 也就是说 cursor 它在本地会对整个项目建立这种语义缩影啊,就是它会 通过一种解析器来构建抽象易法数,对吧?提取这些函数啊、类啊、变量等符号,对吧?然后把这些代码片段嵌入模型,对吧?转换成像量,然后存入本地的相册数据库, 对吧?就是比如说实际的感受,就是说你在聊天的时候,对吧?你说修改一下用户登录的逻辑啊,它自它自动能召回相关的文件,即使你没有打开它,对吧? 那第二种啊,就是这种多级的上下文选择的策略,你像这种大模型,他有长度限制, talk 限制,对吧?你整个项目塞进去的话,他有限制,所以说他会动态的 就是组合。嗯,构建这个,你目前比如说你聊天,你问他帮我修改下代码,帮我实现这功能,对吧?他会动态组合这种 上下文,对吧?就比如说你当前打开的编辑器的这个 tab 页,这这这个就是比较高优先级的,对吧?然后第二就是它可能会通过一些引用的关系静态分析,找出这些你代码里面前端代码里不是 import 吗?引入的一些依赖,对吧?它依赖到哪什么地方? 然后呢?包括还通过这种语义,对吧?就是你描述的最相关的一些代码片段啊,包括啊,去这个 get 里面进行一个呃查找, 就是它会动态地去选择一些上下文嘛,对吧?因为你说我要实现一个功能啊。第三呢,就是增量式的上下文的更新, 对吧?就是因为你每次跟他对话,让他帮你实现功能的时候,你要避免他全部重新去搜索一遍吧,他会监听这种文件的改变,然后,嗯,对吧?就是做一种增量的这种更新 啊。第四的话,他就是,嗯会通过结构化上下文的那种压缩,因为你比如说代码太多,你用的代码太多啊,会超过 top 的 话,他会 通过比如说摘药的一些压缩啊,符号的提取啊,方块儿的解锁,把你引用的一些上下文压缩压缩,对吧?就找到最相关那些东西。然后第五点呢,它会与根基深度的集成, 嗯, pos 二的话,它其实类似于一个 v s q 的 插件吧,对吧?它获取上下文的话,嗯, 依赖于这个 vsco 的 一些 extension 架构啊,就是它里面有一些一些一读取相关的 a p i。 那 比如说 vsco 的 点 window, 点 active text editor, 是 吧?它是获取当前文件和光标位置 啊。 webcoud work space, get work space, fl folder, 对 吧?获取项目的根路径就是它会,嗯,运用到 webcoud 的 里面提供那些 api 嘛?因为你 webcoud 的 本身它不是 ai 的 编辑器,但是它本身也能够实现某些功能,它去这个 呃集成了,对吧?就是它知道你在看哪个代码呀,光标又在哪,哪些文件又改过啊? 嗯,这个也是。呃,部分这种前端可能如果问到 ai 的 东西的话。嗯,会可能会问的问题,然后你只需要告诉他你了解一些东西,对吧?当然如果你需要钱的解决面复杂情况就可以报,你可以找我报名是付费的。

如何实现这种平滑的打字机效果并保证解析性能?如果最近有在前端面试或者准备前端面试的同学,可以来领取一份前端面试宝典。基础八股文工程化、性能优化、场景面试题等等都有非常详细的讲解和代码演示。 核心思路为双线并行与降级渲染,利用 request animation frame 接收或截取最新的字幕串,进行最轻量级的文本渲染, 保证视觉上字幕在平滑增加。不要在每一次字幕增加时都去执行高量和公式解析,采取节流策略,或者当文本分块到达时,将其交给后台现成,进行抽象语法术转换生成完整的 html。 通过局部 dom 替换或轻量级的 dom diff 工具将解析好的复杂 dom 更新到页面上。这背后的原理其实就是浏览器的事件循环和渲染流水线。 我们都知道 js 的 执行和页面的渲染是在同一个主线城里互斥的,如果你在主线城用很重的正则去匹配满屏的公式,一针的时间跑不完,打字机就会出现明显的卡顿。 这里给大家提供一个兼顾性能的轻量级原声方案,利用 r a f 控制输出,并用防抖节流的思想处理复杂解析, 第一步很简单,我们需要一段原始的 markdown 文本和一个展示内容的 d o m 节点。代码中定义了 role markdown 和 display d o m, 这是我们操作的基础数据和目标地。 第二步,把那些消耗性能的操作封装起来,比如 markdown 转换公式解析,在这个例子里,我们用 marked pass 模拟这个重度操作。 第三步是优化的核心,看这个 throttle render 函数,如果我们每个字打出来都掉一次, heavy pass 页面必卡。所以我们加了一个一百毫秒的定时器锁。这意味着不管你每秒钟打出多少个字, 复杂的 d, o, m 转换每秒最多只执行十次,大大解放了主线程。最后使用 request animation frame, 它会根据显示器的刷新率来稳定截取函数串,并调用我们的截流渲染函数,当函数截取完毕后,再做最后一次兜底的全量渲染。

好,什么叫抽象语法书呢?你做了这个语法,什么叫语法书呢?我们现在来看,我们现在用什么来看呢?用这个, 用最新的吧,对吧?既然这个有语虚,是吧?给了我们这样一个最近都搞搞了这么一个轰轰烈烈的公司,我们来看一看,紧跟时势啊,来看一下 o 叉 c, 它去转换的时候,它的这个性能,比如说体现在什么这个 语法分析上面,或者是独有这个 ast 上面,看它是怎么来实现的,我们通过这段代码大家就可以看到,当然这个还比较复杂,我甚至呢可以把它简化一下,简化成什么呢? const a, 等于一来,同学们看一下我右边这就是一个 ast, 因为我们在这个里面能够找到左边的内容的影子,朋友们看到了吗?这里有一个 program, program 就是 整个程序,程序中间有一个 body, body 就 表示的是程序体,程序体中间有一个 variable declaration, variable declaration 呢?是变量声明, 变量声明从哪里到哪里是声明,你看从零到十一是声明,那不就是这一句吗?这一句里面 declarations 里面又有对应的,比如说它的声明的修饰符是什么?叫 variable decorator 是 什么呢? const, 这 kind 啊, kind, const, 这是 const, 那 如果我把它变成否,看到吧,这个 kind 就 变成了否,如果我把它变成了 let, 这个 kind 就 变成了 let。 好,我用白色的吧,大家看的显眼一点。好,我怕大家看不清这是。 net, 那 我这个呢?变成 a, 我 们会发现这个 identifier 就是 我这个变量的名称。 identifier 身份标识嘛? id 嘛,比如说 id card 身份证, id card, id card identifier 好, 它同样也是有从哪儿到哪儿,你看为什么编辑器 a, s, t 这些学完之后,你对于 这个编辑器都有一定的深入的认识,为什么呢?因为它每个字母和字母 start, end, start, end, 这不就是你这个编辑器中间写的这些内容,它从哪里开头,到哪里结束,它整个字母有多长啊?不叫整整句啊,这整一句代码有多长, 都是由它来决定的啊,由它这里来显示出来的。好,那这个 elit 是 出使化的值,出使化值,我把它变成幺幺幺,那这里呢?你可以看到它的幺幺幺变化,它的原始值幺幺 value 呢? 幺幺幺也就意味着这个内容呢?本质,我们说了本质呢,都是自互串,本质都是自互串,但是它经过转换之后你会发现, 对吧?它这个呢,是 boolean literal, 那 如果我这里改成括号,这是 string literal, string literal 改成一二三叫 nemrik literal, nemrik literal, 你 看规律,什么叫规律?这叫规律。 所以任何的程序,任何的代码,任何的特性,你都能够用一个 json 来表示啊。同样,这句话我也送给大家啊,就是程序里面没有什么是不能用 json 来描述的,没有什么 特征吧,应该说没有什么特征是不能用 jason 来描述的啊。这个我们后面给大家还有公开课会讲什么呢? d 代码平台 d 代码平台里面的 jason 专门有个术语叫 d s l, 全称 domain domain specific specific language 呐, domain 叫领域特定语言,这是在 d 代码平台中间独有的 dsl domain specific language, 这也是 json, 那 在无代码平台里面同样也有啊,在代码里面它叫什么呢?刚才给大家看了,它叫 a s t, a s t, 叫 um abstract syntax trees, abstract syntax trees 啊, 嗯,实现公式解析也可以称之为 dsl。 是 的啊,因为因为刚才给大家演示的这个飞书的这个场景,它其实也算一点点这个低代码的场景啊,因为它会消费平台数据,这些呢,可以当做是平台数据 可以去消费啊。只是这一点,低代码平台代码里面 jason 去描述,当你有了这个观点以后, 你就会发现没有什么是不能够用 jason 来表示的。没有什么,比如说不管是代码还是低代码平台的物料,还是这个,这个,这个,比如说,呃,就是一个流程,对吧?流程我们之前给大家讲过那个 l l m 呃,大模型,对吧?当时讲大模型是在 ai 这一节课吧,这节课里面给大家说过,这个里面呢,有具体的落地场景啊,就告诉他。再去开发一个这种 ai 开发平台的时候,这个工作流程, rack 管道, agent 功能等等附加点的接入,这些其实都可以通过 json 来去描述。 在流程里面呢,它又把它称之为 node 加 h, 对 吧?节点和边啊,节点和边在代码里面呢,它是 code, 在 低代码物料中间呢,是 material 啊,或者说像飞书,像这些平台把它称之为 block, 像 notion 这样的文档平台把它称之为 block suite 等等等等,就是低代码物料 啊。所以 jason 在 不同的平台,不同场景,它有不同的业务术语,不管是代码里面的 a s t 还是 d 代码物料里面的这个描述,还是流程中间的 note 加 each 的 这种 flow 描述?好,好, 这是思想层面的一些内容,我分享给大家啊。好,然后我们再来看到这边,这个呢就是 a s t。 对 应的,我们这里呢可以把它等一个对象,这个对象里面呢叫 object expression。 好, 这个里面呢还可以去写东西,比如说 name, 一 二三,它就会一层一层的 往里面去描述,那它又是一个 identify, name, string, liter, 一 二三,一步一步地往里面。好,对于 a s t, 同学们理解没有?理解,同学在评论区来扣个一,对于 a s t, 理解同学在评论区来扣个一。好,然后呢我们再回头来去看一下理解这个 a s t。 之后 我们再来看刚才说的分词。为什么要分词?因为 a s t 里面的内容,比如说, net, 比如说 id card, 比如说这个对象,然后里面的 name, 然后里面的一二三,这些都是由我们前面分词得来的内容, 由前面这里分词得来的内容。所以第一步先分词,分完词,把一个一个词分好之后,再来去做语法分析,再来做语域分析,再生成对应的代码。

如何实现这种平滑的打字效果并保证性能? 如果最近有在前端面试或者准备前端面试同学,可以来领取一份前端面试宝典。基础八股工程化性能优化场景进行面试都有非常详细的讲解和代码演示。 核心思路为双线并行与战绩渲染。用 request animation frame 接收或截取最新的区块, 进行最轻量的完美渲染,保证视觉上区块在平滑增加。不要在每一次区块增加时都去执行高量和公式解析, 采取截流策略,或者当文本分块到达时,将其交给后台线层进行抽象语法数转换,生成完整的 atm 网络。 通过局部动物替换或轻量级的动物剔除工具,将解析好的复杂动物进行到页面上。这背后的原理其实就是浏览器的事件循环和渲染流水线。我们都知道 g s 的 执行和页面的渲染是在 同一个主线绳里互斥的,如果你在主线绳里用很重的正则去匹配满屏的公式,一直的时间跑不完,打字机就会出现明显的卡顿。 这里给大家提供一个兼顾性能的轻量级原生方案, 用 r f 控制输出,并用防止截流的思想处理。复杂解析,第一步很简单,我们需要一段原始的 markdown 文本和一个展示内容的动态节点, 那么最后定义了 markdown 和 display。 这里我们操作了基础数据和目的地。 第二步,把那些消耗性能的操作附装起来,比如 markdown 转换公式解析,在这个例子里,我们用 mark pass 模拟这个重度操作。第三步是优化的核心,看这个 sort 函数, rand 函数, 如果我们没打出字,都要调用一次 harry pass, 一 边闭卡。所以我们加了一个一百毫秒的定时器锁。这意味着不管你打多少字,复杂的 dom 转换每秒钟最多只执行十次到达解放主县城。 最后使用 request 浏览器 frame, 它要根据显示器的刷新率来稳定截取字幕串,并调用我们的截流渲染函数,当字幕串截取完毕后,再做最后一次兜底的全流渲染。

哎,讲一下文法,还有推导书,还有短语,然后先熟悉一些概念。呃,这些概念你现在看了肯定会一脸懵逼,但是没关系,我们先概念,然后例题,然后最后再回归一下概念,就是你现在先看个眼熟,呃,然后后续的话做完题之后再来看,你就能呃那个什么醒醒醒人呃什么恍然大悟。 ok, 然后挑战。好吧,全网讲的最清楚的一个教程。 ok, 好, 我们开始。呃,然后首先是句型,句子啊,句型是什么呢?就是由这个推导这个符号后面的这一串推导出的符号。串,就是这个这个箭头后面的这些符号串, e 加 t 啊, g 加 t 这些。那什么是句子呢?就是这种特征的最后一行啊,就是句子, 就是句型中只含有终结符。那么什么是终结符呢?这只包就就是小写字母,还有这些加减乘除啊,等于号啊,这些符号啊,看到没有?这些只含终结符,就是一些小写字母,还有一些符号之类的组成的。 然后什么是短语呢? ok, 我 们用一个动画来解释一下。 ok 啊,这是一棵树,然后它的概念,它的核心思想就是所有节点当作根节点, 然后把它的所有叶子节点从左到右找出来,然后把它连在一起。 ok, 那 我们看一下这个,我们先找这个,因为是所有节点当做根节点,我们可以先找这个 s 当做根节点,然后它的所有叶子节点啊,给它从左到右给它连起来。 ok, 然后我们点击短语,然后我们点击这个 s, 然后看到没有发光了,看到没有,这些所有的叶子节点从左到右,然后给它连起来,就是 v w 括号 a, 括号 b 啊,它的短语就是在玩。 然后什么是直接短语?他书上或者是一些教材,他可能的别名叫做简单短语。简单短语, 呃,他的核心思想就是高度唯一的父子结构就是,呃两个条件,一个是满足父子结构,然后另外一个条件是高度唯一,不管他是有一个孩子,还是说多个孩子的结构。呃,比如说你一个父亲只有一个孩子,还是说一个父亲有大孩子、二孩子、三孩子, 只要他是父子结构的啊,那他就满足第一个条件,然后并且他的高度为一啊。就好比这张图看到没有父子结构,然后不管他有多少个孩子,一个孩子也好,或者是三个孩子也好, ok, 我 们来看一下我们的动画直接短语,我们来看一下这个,呃,父子结构为一的高。呃,父子结构,然后高度为一,然后看一下父子结构是有哪些呢?看到没有?这个就只有父子结构,是吧?然后高度也是为一。我们点击它, 这个就是他的直接短语,这个啊,直接点这些所有孩子就是他的直接短语 v w 在 发光,看到没有?然后这个这个就不是因为他的父,他不是父子结构,他是爷爷爷孙子结构,因为你看到没有,他有爷爷爷爷辈的,还有孙子辈,就是他的高度是大于一的,所以他不是那个高度等于一的父子结构。 然后我们看一下这个啊,这个也是父子结构的关系,是吧?然后他的高度也是为一啊,我们点击,所以他的这个直接短语就是这个直接点他的孩子就是这个 b。 然后什么是锯柄呢?就是最左边的这个直接短语,最左边的直接短语,我们来看一下我们的动画啊,锯柄啊,我们刚才找出来的直接短语,是不是有这个父子结构为一,父子结构写高度为一的是吧?然后是这个有这个,然后我们要找锯柄呢,就找最左边的,看见没?这两个,哪个字最左边的啊?很明显写下意见就是这个,这个就是它的这个锯柄, 一键定位去比最左边的直接短语,就是这个 v w。 呃,然后什么是速短语呢?两个条件,他的核心是讲啊,一个是至少有一个终结符,然后且除自身外不含有更小的速短语。然后我们来看一个例子啊,这个, 这个是有一个终结符,是吧?但是除自身外不应该含有更小的速短语,你看自身是这个是吧?然后自身外呢?有个欠套关系,内部还有个小 a 啊,那他就不是除自身啊,没满足这个啊,解除自身外不含更小的速短语,因为它里面含有一个更小的速短语。第二个条件不满足,所以他不是速短语, 然后这个全是大写复成立,他至少要有一个终结符,所以这就是竖短语的这个概念。我们来看一下短语,我们看一下动画,这个好,我们来看一下这个,这个不是竖短语,因为他的这个短语这个东西包含了更小的短语 a, 竖短语 a 就是 这个括号, a 括号,他的更小竖短语就是这个 a 啊,因此他被淘汰了。然后的话,这个这个短语啊,他也是不是速短语,因为他的啊,这个短语全是大写字母,他不包含终结符。然后看一下这个啊,这个就是速短语,因为他是包含的终结符,至少有一个终结符,且内部没有更小的速短语。 呃,我们来看一下这个最左竖短语,就是最左边的竖短语,就是你把所有的竖短语找出来之后找最左边的啊,这个跟那个句柄是一样的,句柄是找最左边的直接短语,然后这个是找最左边的竖短语。然后我们再看一下什么是左右推导。最左最右推导,我们来看一段动画, 然后看动画前我们先理解一下它的概念,核心思想,我们先过瘾就是每次替换最左推导,就是每次替换最左边的非终结符,然后满足题目四指后向右继续替换。替换。 那么什么是非洲杰弗呢?就是他是一个,他的特征就是大写字母,然后可替换为其他值的。你可以想象成他是一块编程手表啊,那个小时候那个动画片是吧?那个边那个主角他有一块手表,他能根据那块手表去变成各种各样的野兽。那你也可以把他看成是一个万能牌, uno 里面的万能牌就是他一张牌可以变成其他类型。呃,差不多就。 然后最左推导是每次替换最左边的非终结符,那么最右的话,顾名思义就是每次替换最右边的终结符,然后直到满足题目四十。哎,我们也可以说啊,直到出现,直到出现终结符的时候,我们向左继续替换, 我们可以把这个满足四十。他的另外一个说法就是直到出现终结符,那么终结符我们刚说过是小写字母,还有一些符号,我们来看一下 小写字母,还有一些加减、乘除等,这些符号就是终结。 ok, 讲了这么多废话,我们来看一下他的动画演示,那么首先会有一这样的一个表,然后最左左边的这些东西也可以想象成就是我们该说的这个万能牌,还有小班 bennett 的 那个手表,然后右边就是我们对应要变成的野兽,或者是万能牌对应要转换成的那个牌的类型, 那我们来看一下这个啊,最左推导,首先他是替换最左边的这个非终结符,你看非终结符是不是大写字母,然后这个是不是小写字母就是我们的终结符,然后我们点击这个,下一步我们可以看到,我们可以看到替换最左边的非终结符,这个 a 亮起来了,是吧?然后下一步 你看 a 变成了 a c, a 变成了 a c, 他 是如何变成 a c 呢?因为 a 他 这个万能牌他可以变成 a c, 所以 这个 a 就 被替换成了 a c, 然后 b 的 话啊,然后接下来轮到 c, 每次替换最左边的这个非终结符,那么最左边现在是这个 c, 那 么 c 可以 变成什么呢?可以变成这个小写字母 c, 那 我们说替换最左边的非终结符,什么时候轮到下一个呢?就是直到出现满足式子,或者说是直到出现这一个终结符,你看到没有?这个我们刚出现了一个小 a 终结符,那么我们就不需要再把这个小 a 当做万能牌去替换成别的 别的这个牌的类型,或者是那个手表替换成那个别的野兽,我们只有这些大写的字啊,非终结符才是一个万能牌,一个编程手表才能换成别的这个,呃,野兽或者是牌的类型, ok, 那 我们每次替换最左边的非终结符,现在我们来替换最左边的这个 c, 然后 c 可以 变成小写字母 c, 我 们下一步 看到没有,他就变成了小写字母的 c, 那 接下来我们替换最左边的这个非终结符,我们把这个大 b 给替换成 d, 我 们点击下一步看到没有,他就变成了 d, 那 么我们这个 s 推 a 跟 b, 然后我们现在替换最右边的这个非终结符啊,这个 b, 然后 b 可以 变成 d, 我 们把它换掉,把它换成 d, 然后 a, a 的 话可以变成 a, c, 我 们把它换掉,然后依旧是最右边的非终结符,直到出现这一个,呃呃。终结符,小写字母,然后我们把这个 c 给它变成小写字母 c, 我 们现在, ok, 我 们接下来就可以推出来我们的这个啊结果,然后这两个操作就是我们的最左推导跟最右推导啊,听不懂没关系,后面我们做完题目,你再来就是把视频重新播放一遍吧,我后面不想讲, 你就能知道这些概念是什么意思,或者你也可以直接先跳到后面去看例题,然后再来看这些概念。但是无论先讲哪一个,你对这个概念或者是例题不清楚的话,你一定会懵逼,所以这个懵逼的阶段是你必然经历的一个阶段,所以不要啊,不要,不要,不要急, ok, 我 们后面啊讲完肯定啊,能够啊,恍然大悟 啊,为什么我们这么懂呢?因为只有学生才能有一个啊真实的感受,所以只有啊,跟你相同经历,或者是只有学生才能有一个啊真实的感受。所以只有啊,跟你相同经历的这个这个这个这个啊,这个说法我觉得挺厉害, 因为有些老师啊,虽然他很厉害,但是他不一定会教,因为他,他的角度,他的视角,他已经不是站在你的角度去讲,他已经站在一个他觉得没必要讲的东西去给你讲,然后我未来啊,我如果对这些很熟了之后,我再去讲这些东西的话,我也不会去讲这种费看起来很费话的东西。只有啊,刚开始理解的时候,他需要用 啊很多的这些啊比喻去给他举例子,他才能懂的快点。所以此时啊,就是这个初十阶段跟初十阶段的学习的观众啊,他们都是 就是切住点都是差不多啊,然后就是这个产生式啊,他的这个缩写也可以叫做 p, 然后他的全称也可以叫做 production 啊,产生嘛,他的全称叫做 production, ok, 然后你更好能记住这个 p 是 干嘛的。后面我们说的文法,我们刚才我们的题目是加文法,那现在文法还没出来,这是为什么?因为他需要一大堆前前提的概念铺垫,然后最后才能构成一个文法,到时候就会有这个产生式 p。 然后什么是产生是 p 呢?你可以想象一下,左边是 uolo 里面的万能牌变成某一张牌,然后这个产生式,还有变成某一张牌啊,这个动作,这个行为就是就是这个产生式 啊,不过这个万能牌是分类型的,这个是我之前记的笔记啊, a 万能牌只能变成排 a, 小 a b 万能牌只能变成排 p。 那 我们刚才看到的最左推导跟最推导,其实里面就有这个产生式,看到没有?这些就是我们的产生式,就是这些规则啊,这些啊,好比说是规则,好比说是转换规则啊,编程,你的 变成野兽的,呃,那个变换表,变换表, ok, 你 可以喜欢这样去记, ok, 然后这些就是我们的产生式,看到没有?这些都是一个个转换规则,或者是,呃,我们 binet 那 个手表变成我们具体的超超兽的一个变化规,变化规则表, 变化表,就是啊,你你点按一下,然后它就下一个,下一个野兽,按一下它就下一个野兽,然后这些下一个野兽,下一个野兽,这种对应关系啊,就相当于我们这些啊,这些东西。也可以把这些前面的这些万能牌啊,这些编程也想象成具体的某个手表,然后右边的话就是它这个手表能变成的某一个超兽, ok, 这个就是我们的文法规则,我们也可以叫做它是产生式 production。 呃,然后就是我们的开始符号,呃,它在立体里面一般都是最前面的这个东西,就是这个 g, 括号这个 e, 然后这个 g 的 话就是我们的文法,就是我们的 grammar。 我 们后面会讲,呃,就是一个 grammar 啊,英文翻译过来它就是一个语法的意思,然后 e 的 话就是我们的这个, 呃,开始符号啊,一般用我们这个 s 来代替,我们 s 用 start, 后面我们也会讲,所以先别急,然后我们来看一下这个开始符号,开始符号就是最最前面的这个东西, 呃,文法里面挂这个 e, 看见没?他是开始做一个起点啊,去向下推的。刚才我们的最左最右推导这个表里面,其实啊这个 s 最最就是第一个,你就记住是这个规则里面的第一个啊,第一条里面的第一个万能表,或者是万能牌,第一个编程手表啊,这个就是我们的开始符号,这个 s start, 然后接下来就是我们的非终结制服跟这个终结服啊,其实我应该把它放到前面的,但是啊,无所谓了,讲都讲,我们再听一遍,就是我们的大写字母就是非终结服就是这些 abcd, 然后小写字母就是我们的这个东西。然后我们刚才说的这个啊, grammar 啊,这个,这个十一,刚才我是啊,然后我们该讲这个开始符号的时候,其实有很多的这个啊, 书写,我们可以讲一下我们该说的非终结符,是吧?它一般都是用一个 v n 来表示的,然后 n 是 什么意思呢啊?就是 non 就是 非嘛。然后终结是什么? terminal, terminal 这个英文的全称,我们可以记一下,更好地去记忆一下它是什么意思。然后终结符的话,我们可以用 v t。 啊,什么意思呢?就是 terminal 啊,它的全称就是终结,翻译过来就是一个终结的意思,那样的话就是非的意思。然后这就是我们刚才说的一些例子,大写字母,还有终结符、小写字母。那接下来我们来说一下文法,文法的核心思想就是定义语言生成句子的一套规则 啊,它定义是这样子的,就是 v n u v n, v t, 就是 我们的 v n 是 什么?就这个非终结制符跟 v t 终结制符,还有 production, 就是 我们的 p production 这个产生式在哪里?在这里 p, 还有我们的这个 s, 就是 我们的该来的开始符号 s 组成的。 然后这里同样我们也举了一些例子,看见没?这是我们的常三式,其实别名也可以叫做规则啊,这是我们的开始符号,可以从 s 开始,然后这样子依次的一推下去, 然后的话就是我们的语言啊,语言的话是 l g 表示 language grammar 啊,它的全称就是由文法能推出来的所有句子的集合,就是这个是文法 啊,这是我们刚才上面说的文法能推出来的所有的句子,就是我们刚才说的这个啊,句型句子,这就是我们的句子,就是能从一个规则转化到最终的终结符去紫霞终结符的这个规则,这就是我们的句子,然后有多种可能,然后就这种多种可能构成的集合,就是我们的这个语言。来看一下终结符语言, 然后我们讲两道例题,来巩固一下我们的这个概念。那么首先例题一看见没,这就是我们的一个文法,这就是我们的机子符,就是我们刚才说的这个 s star 啊,开始符,我们该由它构成,是由这四个东西组成的嘛?然后接下来就是这个,就是我们的这一个规则,就是我们的 production, 就是 我们这个 p, 也就是我们刚才说了这一个啊,规则,规则,规则产生式, p, 就是 这个东西,这些东西。 ok, 我 们来接着说啊,然后的话 他给了规则,然后给了我们提示符,然后让我们证明这个东西是文法的一个句型,那我们就要推出啊这个句子,是啊这样的东西,然后我们就可以得证这个是他的一个句型,我们可以用最左推倒或者是最右推倒,其实说白了就是用啊,就是最后这些用这些规则去给他,最后变成啊转化成这个东西, 就是用啊小班变形手表的万能啊,就是变成最后的这样的一个野兽,然后需要通过其他的野兽其他的变形,就是他变成野兽,野兽手上也戴着一个啊变形手表啊,这样子去变构造成这样的一个啊句子,然后就能证明他是啊文法的一个句型。 ok, 我 们直接啊过程来带着大家过, 然后他的整体思路就是使用最左退,然后最右退的这个就是我笔记。我再讲一遍,跟我刚才说的差不多,就是用 banten 变成野兽,然后野兽那个也带了一块 banten, 然后就要构造出最后的最终我们要的野兽。 ok, 我 们从起始符开始,一,就是我们的起始符,看到没,在 g 括号里面的这个东西,就是我们的开始符,然后我们从开始符开始,然后他我们先,我们去购从,就是我们这项思维啊,我们第一步是啊,要找万能牌,要换这一张凑出啊这个正方形圆形的句子。 好,第一步的话我们要抽象化特征啊,我们可以把它抽象成啊一坨大便。 ok, 我 们来看一下这道题,那么首先的话,我们从这个开始符,你看 g 括号一,这里面就是我们的一个开始符啊,我去先把它擦掉,看见没?这个就是我们的开始符, 藏在这个中括号里面这个东西就是我们的 star 开始符啊,然后我们从这个一开始,我们需要从这个要证明的地方去给他抽象成一个大便,抽象化他的一个特征,那么我们用最左推导,就是啊,从最左边开始进行一个抽象化, ok, 我 们来抽象化啊,那么这个抽象化之后呢?我们可以看成是这坨大便,跟这坨大便给它相加相减,我们可以看成是这样啊,我们把它写在我们的这个 写我们右边吧,写在这里就是我们的第一步,我们先抽象化成这一坨大便,减去这一坨大便。那我们来看一下我们的规则,我们的变形变成野兽,谁能变成这个野兽呢?谁能变成这种抽象化这种特征的野兽呢?我们来看一下啊,我们可以看到是这个一减 t, 是 吧?那么可以的话啊,可以我们就由一推出一减 t, 一 减 t, ok, 然后的话我们继续抽象化,我们是最左推的,我们就从最左边开始进行抽象化啊,我们可以也可以说成一个大变化, ok, 我 们既然已经抽象化成了这个东西,然后我们什么时候停止呢?就是从最左边开始一直抽象化到右边,什么时候停止呢?啊?直到满足,这个题目是指 直到你看没,我们现在这个题目是指是一减,是吧? ok, 我 们的这个是不是一减就出来了?那么直到这个时候我们就停止,然后向右边继续进行抽象化这个大变, ok, 我 们刚才抽象化啊,这个已经 ok 了,是吧?那我们就进行抽象化这一坨大便, ok, 我 们这一坨大便是什么样呢?这坨大便就是这个啊,这个也可以用数学的这个换元的思想来进行一个做造题 啊,我但是通俗易懂的话,我们就把它说成抽象化成一坨大便, ok, 我 们抽象化成一坨大便之后呢,我们接下来抽象化这一坨大便,我们这坨大便就是 f, 哎,就把它挡住 f 乘上这个括号 i, 是 吧?我们括号 i, 我 们就看了一个整体,我们就看成是这个大便啊,乘上这一坨大便, 那么谁啊?拿我们抽象化这一个特征了之后呢?我们啊就要去找谁能变成这个啊?大便的东西,那么我们去找啊,谁能变成这坨大便呢?我们有两种方法,第一种方法是什么呢?第一种方法是这个连线,从上到下,我们打字,打字啊,找谁能变成 抽象化的大便?一种方法是至上而下而下连线法 啊。第二种方法是自下而上,这种比较难啊,这种比较难,这种是要从后面推到前面啊,后面我们会讲到这种,然后的这种绘画法,绘画法, ok, 那 我们来这种题,第一题是我们用这个连线法,第二题我们用这个退化法,第一题,这种连线法一般都是非常简单的,我们可以直接通过看他的特征来推正向思维,惯性思维,从上面去,一直去找到下面。但是我们第二种方法退化法,我们是不能从头推到结果,我们必须从结果逆推为这一个啊,我们的这个要求, 那我们来看一下谁能变成这坨大便?我们刚才是第一步是抽象化成大便,是吧?这是我们的第二步啊,第二步找谁能变成这坨抽象化的大便?其实我们刚才在别的地方也有做这个步骤,来看一下啊,对话术源法啊,产生视理,找抽象,找大便啊,也可以 整大便啊,抽象化,整这坨大便, ok 啊,抽象化啊,谁能变成这坨抽象化的大便啊?其实它只不过我把它的这个第二步跟第三步啊给大家搞在一起,这找抽象对吧?找大便,然后找谁能变成这坨大便的东西,找万能牌对吧? ok, 我 们来讲继续讲解,那么谁能变成这坨大便呢?我们在这个规则里面找啊,在规则找啊,在规则里找。 ok, 我 们来看一下啊,在规则里面找啊,谁能变成这坨大便啊?我们看一下这坨大便在哪里啊?看到没?在这里,那谁能变成它呢?那么有两种方式啊,方法,一种是退化法,那么我们就退化啊,谁能变成它?我们退化啊,这样子退化成这个,你可以想让它净化,变成这个,然后谁能变成这个鸡呢?我们再进行退化,就变它, 就是我们先退化成这个 t 啊,再退化成这个啊。 e, 这就是我们退化,那么什么是连线法? ok, 我 们先点击到我们的这个橡皮按钮,然后把它进行擦掉,然后再擦掉,然后我们什么是连线法呢?那么我们继续点击我们橡皮,把它进行擦掉, ok, 我 们继续看一下什么是连线法,什么能变成这坨大便?就是这个, 那么他能变成这坨大便,那么谁能变成他呢? ok, 是 我们这个 e 能变成他,所以就是我们的这个 e 啊,吹向 t 连线啊,看到没?好,就变成 t 变成这样, 就是随着变换,我们连线溯源式,随着变 t, 一 能变成 t, 然后 t 再变 t 成 f, 好, 就有连线,就是连线,哎,好,就把它们这条线所经过的地方全部给它推出来,所以就是我们的连线,看到没,一变 t, t 变 t 成 f 啊,一变 t, t 变,嗯, t 乘 f, 就 这一坨,是吧?这就是我们的连线法。 ok, 然后我们要变成这坨大便,是吧?我们第二个推导啊,我们这个已经完了,是这坨推导,我们就啊,从左到右,我们就 t, 我 们就要变成这坨大变,然后这坨大变呢?就是从这个规则里去找,就是这个东西,就是这个 t 乘 f, 我 们把 t 变成 t 乘 f, 然后我们看一下,我们看下,我们看下,我们满足了没有?接下来的话,我们要去变成抽象化,我们继续抽象大便, 我们现在变成这个,哎,啊,我们开始相乘,是吧?我们现在要变成这个啊,啊,从左到右进行一个推导,最左推导,我们需要把这个 f 进行抽象,化成一坨大变,但是现在一坨大变就不需要抽象了,是吧?我们他的规,他的这个侧征啊,他一坨啊,我们就如果只有一坨大便, 我们就不需要进行抽象化的大便,我们就直接找谁能变,谁能变成这个 f 就 可以了,谁能变成这坨屎就可以。 ok, 我 们看谁能变成这坨屎,所以我们就把 t 啊切换掉啊 t, 我 们最后是需要一个 f 了,我们谁能变成这个 f 呢?那么我们会看到连线法, ok, 我 们用连线法或者是退化,退化法比较好一点,谁能变 f 啊? t 能退化变成 f, 我 们退化成 t, ok, 所以 的话,我们接下来谁能代替这个大便?代替这个大便?就是这个 t 能代替这个变成 f, 就是 我们要的最终结果, t 一 减去把这个 t 净化成这一坨大便,嗯,就是 f 乘上 f, ok, 然后怎么设停止,然后继续向右去进行抽象化成大便呢?那么就是满足这个题目是指是吧? ok, 我 们题目是指是一减去 f 乘, ok, 接下来我们是不是看到没?我们这个是已经满足了,是吧?那我们就不动,我们继续向右抽象,它 抽象化它成大便,然后我们需要把这一个看到没?这就是我们看右边的大便,我们需要把它变成什么呢?它的特征是怎么样?就是一个括号,括号大便,括号大便, 如果是只有一个特征,就只能变成一个符号的话,就不需要进行抽象化,那么如果是变成两个特征,你看又有这个括号啊,又有这大便,所以我们就需要把它进行抽象化的大便, ok, 然后的话我们需要去找谁能变成他呢?我们继续去这一个啊,退化法,谁能变成他啊?我们去找去规则里面找大便,看见没有?我们找到这个大便了,是不是他很像他,是吧?然后我们去退化啊,谁能变成他啊?谁能变成他?那么就是我们的 f f, 我 们退化成 f, 退化成 f, 然后的话,我们这个啊还,还有谁能变 f? 我 们不需要了,因为这个 f 能变成它的话, f 能变成它的话,那么我们此时是不是已经有 f 了?我们就不需要再去看一下它能退化成谁,然后得到它,然后再得到它。 假设我们现在不是 f 能获得这个大便,是我们的这个,呃,假设我们这里不是 f, 是 一个 e, 那 么我们就要去找 f 能获得这道这道大变,但是我们没有 f, 我 们就去找谁能变成 e, 我 们继续退化,谁能变成 f, 谁能变成 f, 我 们去退化啊, g 能变成 f, g 能变成 f, 然后 e 能变成 f, a 能变成 t, 然后我们就需要写这个,再写这个啊,我们后面会有 g 啊,写别的,所以我们这里还是我们的这个 f, f, 然后 f 能变成我们的这道大便,我们就继续写 一减 f 乘上, ok, 我 们去找下它的规则变成这个啊,括号 e, 括号 e 是 吧? 啊?接下来的话,我们去啊,再进行一个计划啊,一个变成一坨大便,没有任何规则的,就是变成 i 了,就是单单规则,那么我们就直接去看一下啊,谁啊?接下来我们这个就变成这个啊,大便变成这个,我们谁能获得变成这个?一, 我们接下来 e 是 吧?我们接下来不是说要这坨啊大便了,我们接下来啊,要啊,不,接下来要 i, 要 i 是 吧?要 i, 那 么谁能?就是催化法,我们去找谁能变成这个 i 的 大便的规则,然后我们去看一下谁能变成 i, 我 们看一下 f 能变成 i, 催化法 f 变成 i, 然后 g 能变成 f, g, 啊,就刚才我们说的那个东西,现在就有例子了, t 能变成 f, 然后但是我们只有 e 啊,我们没有 t, 所以 还得继续退化啊,退化,谁能变成 e 呢?谁能变成 t 呢?看到没有?我们的 e 能变成 t, 然后我们有 e 吗?哎,有了是吧?我们继续写减 f 星, 然后我们就变成 i, 它中间要经历这么多步骤啊,跋山涉水, ok, 我 们继续写成 t, 不 能一步到位啊,一步到位,它好像要规则,不能这样写啊。然后变成 f, 好,再变成这个,变成 i, ok, 然后最后什么时候停止呢?就是遇到终结符或者是满足我们的市值的时候,我们就可以停止了。看见没有?接下来这一部分我们仔细看一下是不是跟它是一模一样,所以我们就可以得出结论。故 一减 f 是 它的文法的一个句型,我们就把它搬下来就可以了,得正得正。 呃,然后,呃,第二题就是构造这个语法推导数,那么它是由我们的这个,呃,我们该推导的一个过程,这个句型,我们该说了,这些都句型,这最后是句子来进行一个构造成语法推导数了,是吧?然后我们就它有个规则,就是,呃,随便,那么随就是作为新的根,然后划它的指节点,然后变成什么,什么就为它的指节 啊。其实我个人觉得讲的还是不太行,因为不是我今天做的笔记,所以隔了有点久了,所以看到这笔记可能讲的不是很流畅,所以尽量 ok。 我 们刚说了随便,那么谁就是作为新的根,那么用这个例子来解释一下吧,看到没有?我们一变成了一减 t, 是 吧?那么随便了,就是我们一变成了一减 t, 所以 啊,然后画他的指节点,画他的指节点,那么他的指节点画什么呢?就是变成什么什么?就为他的指节点,看到没有?他变成了一减 t, 那 么一减 t 就是 他要画的这个指节点 啊,比如说这个啊,如果啊,接下来下一个变了,就是随便谁,就是作为根,然后变化了,为这一个直接点啊,看见没有?他变了,这个刚才我们是一减 t, 是 吧?我们看一下他是什么区别,现在是 t 变成了 d 减 f, 那 随便谁就是根,他就是作为根,然后变化,然后就写他的直接点,那直接点写什么呢?就是变化为了什么东西?变化为了什么东西? 就是这个 t 乘 f, t 变 t 乘 f, 那 么 t 乘 f 就 作为直接点画给他。 ok, 既然我们知道了这个规则,我们就可以来去画啊,写题了。 ok, 随便啊,一变一变是什么?随便啊,作为根,然后画它的直接点啊,直接点写什么?写变变了什么,所以就写, ok, 变成了一减 t, 一 减 t, 是吧?然后我们看下谁变了啊?这个变了是吧?啊,他变了,变成了什么呢?变成 d 乘 f, 他 变了,很难的话,做一根画他的直接点,一乘上 f, 是 吧?然后谁变了?看一下这个 d 变了, d 变成什么了? d 变成 f 了,那我们就写它 d 变成 f, 然后继续看啊,谁变了啊? f 变了, f 变成什么了? f 变成了括号一啊,括号, f 变成什么了?括号一括号,然后谁变了?看一下啊,这个一一变了,一变成 t, e 变了, e 变什么? e 变 t, 然后 t 变了, t 变成 f, e 变 f 啊,谁变了? f 变了, f 变成 i, f 变成 i, ok, 这就是他的那个推导数,然后我们这个是不是最多推导数?然后我们用最右推导数 也可以去搞出这样的一个过程,然后再把最右推导数对应的这个数给它画出来。如果他们两个是长的一样啊,那么他就是数的恶意性,如果是一样, 那么他就不具有恶意性,如果长得不一样就具有恶意性。这棵树是由另外一个推倒啊,树推倒而来的。刚才我们是不是从左开始一直推最左的这个啊?一直从最左的这个非终结符一直去变,然后往右开始进行推倒, 然后的话反过来你从最右的推导数啊,最右的非终结符推到最左边上来,就是他的最右推导,然后把最右推导对应的这个数给他搞出来,那么他看一下他们长得一不一样,不一样有恶意性,一样没恶意性啊,走一遍过程吧,可能录的有点久,无所谓了。 ok, 我 们来说说一下他的最右推导, 哎,只有对的一,我们就快一点啊。嗯,就是这个。呃,我们先变成什么呢?我们先要变成抽象,化成,哎,对象先把这个字画不了,所以我们要复制这个点击。 ok, 我 们从我们的开始处开始走到这个,我们要变成什么呢?我们就要从结果来进行往上推,是吧?那 我们要变成这个一减,去这坨,这坨,对,哎,点错了,这坨大变, 先去这坨。我们要采用谁呢?我们采用这个一减 t, 好, 继续推倒,然后我们要变从右开始吧,最右推倒数,最右推倒,那么就从右边开始抽下,那么是什么样的呢?就是这坨大便 f 乘上 i, 我 们要得到这一口东西,那么我们就要变成这坨大便,乘上 这坨大便,那这坨大便有特征了,要带括号了,那么他这怎么做呢?啊?啊,是我们先不带括号吧,还是一样先不要太特征化,不要太细,而是这坨大便这,哎,点错了,这坨大便谁谁是这坨成这坨,那就这个是吧。我们就把 e 减 t 啊,变成这个 t 乘 f, 然后我们继续从右边每次替换最右边的非终结符,那么我们现在满足规则了没有?还没有,是吧,因为它需要这个,我们 f 还是 f, 那 么谁能变成这一坨大边看一下,嘿,是不是它, 它能变成这个,那我们就写 e 减 t, 然后它由谁得来呢?刚好它就成有 f 的 来,那我想一下,我们有 f 吗?这不在这里吗?是吧?我们把这个变成这个, 然后啊,我们接下来变成什么呢?要变成这个 i 是 吧?那么直接变成终结符的话,我们直接找谁能变成 i 呢?啊,我们这个 f 能变成 i, 但是我们有 f 吗?那我们没有 f, 太可惜了,我们只有 e, 那 么我们,呃,我们,我们需要 f 是 吧?然后 f 才能变成 s, 那 么我们怎么获得 f? t 有 t, 我 们就能获得 f, 那 么我们也没 t, 我 们只有 e, 那 么我们看一下谁能获得 t。 哎,看到没有,我们 e 能获得 t, 所以 用连线法 e t 啊 t f 变成 i, 看到没有,从这条线走下来,那么就是这个 e 变 t 变 f, 那 再变成 i 是 吧?好,我们把这个 e 减 t 乘上啊,啊,变,先变 t, 括号一减 t, 心乘上啊,变 f 是 吧?好,括号一,减 t 心乘上啊,是多少了?哎, ok, 是 吧?我们现在看一下啊,看一下满足了没有?还没满足,那么就继续向向,向左,向左前进 啊,但是它满足了这个,所以我们就继续把这个 t 变成这个 f, 那 么如何变成 f 呢?看一下如何变成 f 呢?哦,刚好在这里,是吧?那我们就直接一步到位,把它变成 f, ok, 这就是我们的这个啊,最右推导,然后我们来画一下它的数吧,我们从一变成一减七,一变成一减七 啊,然后先看一下谁变了,看到没?这个也是一样,这个 t 变了, t 变成了这个 t 层 f, 那 么谁变了,谁作为根,它变成什么了啊?什么就作为它的指数, ok, 我 们变成 t 层 f, 然后 t 成 f 之后呢?我们看谁变了, f 变了,变成什么呢?变成括号 e, 是 吧?括号一,然后继续看谁变了,一变了,一变成 t, 谁变了就谁作为根啊,变成什么了?什么就作为指数,变成什么呢?变成 t, t, 然后谁变了? f 变了? t 变了,变成 f, f 变成 i, 然后向左继续看,变成 i, 然后的话, 啊,不对不对,这个有点太快了,我们先要往左推,直到满足四指,我们刚才是到 i 啊,到 i, 到 t, 到 f, 到 i, ok, 它 ok, 满足了,接下来往左推进,那么就是随便看到没有这个 t 变,变了什么变成 f, t 变了,我们就写它的指数是 f, ok, 然后我们就看到,哎,这两个数是不是长得一模一样,那么就说明它不具有啊,不具有恶意性。 嗨,我们老师给的题好像没有收到这个,所以的话呢,我们先看一下我们还有什么概念要讲短语, ok, 接下来就是我们的短语,那么它的核心思想的话就是,呃,每一个节点都是作为数的根,然后从左到右,哎,这个我们刚才讲过了啊,不好意思,我们就直接做题吧, 刚才我们讲过了,是吧?那我们就再看一遍每个节点作为数的根,然后从左到右把叶子节点连起来,从左到右。好,我们先让他做一根,好,从左到右把它叶子节点,是吧?这个叶子节点这个叶子节点这个叶子节点,这个叶子节点,是吧?这个叶子节点。那么我们短语是吧?短语 就是一减 t, 一 减 f 乘上一个 i 一 减 f 乘上一个啊,这也是我们的叶子节点,这也是我们的节点, 一减去 f 乘上一个括号 i 括号。哎,是不是他的第一个句型是不是跟我们的这个啊?构造句型,我们这个题目很像,他就是我们啊, 是吧?这就是我们的一个句型。那么找第二个短语啊,他作为跟他没有叶子节点,那就算了,拜拜,他没有叶子节点,拜拜。这个这个的话,他的叶子节点就是 f 乘上括号 i 括号, f 乘上括号, i 括号。 ok, 我 们找这个作为节点,然后去找它的叶子这样做一根, 然后找它的叶子节点,那么它的叶子节点是什么呢?就是这个 f 字写上,然后我们去找下这个 i 上面的叶子节点,闪一边去。 ok, 然后去找这个, 这个叶子节点是多少来?括号 i 括号括号 i 括号,然后找这个叶子节点,找这个做一根。哎,这个做一根,跟这个做一根,跟这个做一根, 他们的叶子节点是不是都是 i? 所以 我们不需要把一个 i 写三次,我们只需要写一次这个就是我们的所有短语,然后的话这个就是啊短语。接下来我们来写一下我们的记笔,那么我们的记笔他刚才我们的概念,我们来看一下,复习一下啊,直接短语, 我们先找一下直接单元,直接单元是什么呢?啊?直接单元我们也忘记了,是吧?我猜一下,你们肯定忘了一遍,不可能看了就会,或者你有基础,但是我还是要废话一下直接单元,看一下这单元是吧?高度为一的负极结构,我们看下高度为一的负极结构有哪些?接下来用这个数高度为一是吧?哎,这个高度,这个高度肯定不一样,这么老长了是吧? 然后看下这个高度,这个高度啊,也不唯一是吧?哎,这个高度是吧?就唯一是吧?哎,这个高度是吧?也是唯一。那么它的直角短语是吧?就是我们的这个啊,就是它的直角点,它的直角点直,不写了,好吧? ok, 就是 这个 f 就是 i, 这两个就是它的直角短语。然后我们要看下距比,距比的话啊,看一下,看一下,看一下概念吧,最左边的直角短语是吧?啊?最左边的直角短语。那么我们在这里是谁呢?在这里是这个 凹陷是这个是吧?他是最左边的是吧? ok, 那 我们去比,就是我们这个 f, ok, 结束, ok, 我 们来搞一道难的,你就觉得啊,这,这,这太简单了吧? ok, 我 们来搞一道难的。你先看 你用那个方法,那个思维很难做出来的,因为他你正常思维肯定会想着我们去构造一个什么,我们一坨大便去加上另外的大便,是吧?但是这里没有啊,这里只有一大坨,然后加上一个一个加号, ok, 暂停两秒钟,自己去写一下,然后我来讲一下。 呃,这种啊思维就是逆推法,我们啊退化法,退化法啊,怎么做呢?我们去看一下我们要构造这个什么,我们从结果入手,我们先构造出来一个,看一下有哪些人退化成为一坨大便。 e e t 加是吧? ok, 我 们 t e t 加,我们写在右边吧,先写在右边啊,成勾上是吧?我们先把这个给它退化。退化成什么呢?退化成这个什么呢?啊?这个谁?就是啊,退化完看下有没有规则能替换的,我们去找这个规则里面有没有这个特征的大便。找大便, 哎,有吗?好难找是吧?哎呦,不难找,在这里啊,是吧?那我们就把它退换成一了,是吧?然后呢?现在就是 t e 这个东西走好,接下来再走, ok, 我 们 i 是 吧?能退化直接退化,他们把这种退化法叫做归约, 把归约法就是退化成大变, ok, 我 们这个 i 是 不能替换成这个 p, 我 们退化, ok, 变 p, 然后接下来就是我们的 t e 心啊, t e 就是 我们的这个 t e 乘上 p 勾 啊,继续退化,继续退化,那么我们看一下怎么退化 t 一 层 p 勾,我们看有什么特征的相似的啊?我们看 t 啊 t t 一 新 p 勾,我们看新 p 勾,我们看 p, 这个是不是能退化成这个新 p 勾,我们是不是跟这个很像?这是 f p 勾,那么我们就要去把这个新给大家, 嗯, g 新 p 勾啊,我们看一下这一能不能给它退化成这个啊? t t 如果没有的话,我们就看,然后这个这个 p c i p c i 变成什么呢?会变成 t t c t 勾,看一下还有没有规则是跟那一样,哎呀,发现好像还是没有哦, 老规矩,找不到特殊的那个点,那我们就继续进行退化,退化某个单个,我们看一下这个 t 能退化成什么呢? t 能退化成 f t 人推 f t 转化成 f 啊,如果你看不出这个规规矩的话啊,找不到特征化的大便,那我们就切换单个,切换单个来进行逐一的啊,替换 啊,接下来我们看一下这个一,如果找不到,找不到这个啊,找不到这个这个球啊,如果你看不出规规则 t 一 星 p 勾在这个里面的哪个能够进行一个替换,那我们就替换单个的。怎么做呢?就是一把它转化成这个 p e, 是 不是有人 p 能退出来? p, 此时就是变成了 t p c p 勾,然后再进行退化,退化啊,变 f 是 吧,谁能变成 p, 谁能变 p 就是 f。 好, 我们再来看一下 t f p 勾,哎呦,我靠,找到了,找到了这个是吧?啊,我们的 f p 勾是不是跟这个是一样的?那么我们就把这一 f p 勾给它进行退化, 有相似的大便在里面了,如果没有的话,我们就替换单个了,如果有的话,我们就替换整个了。 ok, 我 们来进行替换, t f p 勾, t f c p 勾,是不是就是我们的这个啊?不对,不是他,而是 t f c 出错,看错,是这个啊, t f c 是 不是 这个 p 中间还隔了个心,所以它不能作为特征去替换,去退化,所以就是我们的这一坨啊,这一坨,这一坨进行一个 替换是吧?哎呦,我靠,变直线了,一点都不智能。 ok, 那 我们就把它替换成这个 t, 那 现在的话替换成 t 好, 然后的话这一坨还是一样写下 t 勾, ok, 嗯?然后 t b 勾是吧?我靠,好像跟这个蛮相似的,是吧?蛮相似的,只不过这个 t 要变成啊,要变成这个 f, 是 吧? 所以呢,我们让这个 t 变成这一个一,再变成这一个 p, 看到没有? t 变成一,再变成 p, 是 吧?所以就是我们的转化,转化数元法 t e t 那 我再转化成这个 f, 我 靠,是不是 我们就可以看到 f p 勾是不是跟这个一样?那我们就把这个 f p 勾进行一个替换,就变成一个 f, 就 变成一个 f, 呃,然后这个 f 呢?就换成 f f 勾是吧?能替换成什么?替换成 f, 那 我们就把这个 f 勾是吧?也来替换成 f, 然后呢,这个 f 能替换成什么呢? 能替换成能退化成,就是我们一定要退换成,最后呢?只有剩这个一啊。这个,这个方法就是溯源退化为 e 啊,退为开始符。这个方法名啊,独创啊独创。 ok, 怎么能退化成 f 呢?我们看下第一,第一能退化成 f 是 吧? 哎,点结束了,结束了啊 sorry 啊,那就是什么能对人的 t 啦?什么对人的 t? 看一下。哎,不是的,看一下,看一下,看一下什么对人的 t 一 能变 d 是 吧? 素颜找 t, 素颜找开始是吧? ok, 是 不是只剩下它了?那么我们根据这条链路往上去找,是不是去找,那么我们是不是就能找到这一个?我们这条是这样, 很好, ok, 我 们先来,哎,这个有点难看啊,是吧?我们重新画啊,算了,不重画,就这样,然后这个往上追,是怎么追呢?我们每追一个什么高度就减一了,我们先把左边左侧的所有高度先砍掉,砍木头一样砍一砍一截,是不是矮一截,砍一截,直到砍到这里高度为零的时候,我们再去砍右边的木头。我们听起来是不是有点抽象?我们先开始演示一下, 首先我们是一是吧?推推推推推 f 推推推推勾 t p 勾, ok 啊, t p 勾又能推什么呢?我们继续往上走,往上往上就是能推我们 t f c t o f c p 勾是吧? t f c p 勾就是我们的 e f c p o 啊,接着砍,砍得很舒服,这边砍到这里了是吧?就是 t p c p 勾,这边 t 欸,毛笔芯。 t p c p 星 p 勾,接着砍,砍变成了变成这个 t e 星 p 勾, ok, 接着砍, t e t 星 p 勾啊,砍就变成了 t e t。 加星 p 勾, t e t 加星 p 勾,哎,接着砍, 那我们就把这个也卡了啊,就是 g g 加星 i go t e t 加上星 i o 然后我们来看一下这坨,看一下这坨,看这坨是不是,是不是变魔术啊?你买哄 是不是? t t 加星 i o 它是不是就是我们最后的句型,是不是我们就得正了?然后再去写它的语法数,还有最左最右推导,最右推导的话,你可以根据它的语法数,还有最左最右推导的话,你可以根据它的短语直接短语啊,这个就不说了, 然后的话,下一节课的话,我下一个视频的话,我可能会去讲这个课堂上的一些题目啊。课堂上的话,在老师为了照顾一些学生,他肯定不会为难你搞这么多难的题,因为又不是考研是吧?他肯定会让 大部分人就是能掌握基础知识,然后过过考试不挂科。所以有有兴趣的话可以下一节课来听一下这个如何做题巩固一下。一般啊,学加做题。 ok, 这个点会了就以后就再也不用看了。 ok, see you come on, see you next video。 嗯。