00:00
好,我们继续来生成to数组啊,咱们刚才把这个scanner这个东西写好了。呃,Token的数组很简单,那你现在就可以看见它是一个数组,对吧,然后呃,他这寻找文字啊,就往里放这么一个token啊,然后寻找到这个内幕往里放,寻找到这个好木的,哎,他这个里头也要往里放。啊,它这个东西还是很简单的,那如果遇见井套了一些什么东西对吧?哎,那这个时候实际上呢,它呃嵌它还是欠不了对吧?哎,咱们一会来试一试啊,但是呢,他基本上已经能找到这些东西了啊,咱们现在可以来来试一试。哎,现在可以基本上来试一试啊。好,我们现在打开咱们的编辑器啊,然后咱们现在呢,你看刚才的这些不就是呃scanner,然后要new scanner吗?这个大家呃应该是没有问题,那么现在的话呢。
01:01
就是很关键的了,就是我们这是扫描器啊,然后是new scanner,这没有什么毛病啊,那呃,接下来的话就是这个主主要的这个程序啊,那他现在等于说要把这个token给组建出来,哎,Token这个函数呢,咱们其实可以直接在render中写,因为它算是一个非常重要的一个函数啊,嗯,但也可以提出去,提出去也行啊,咱们再新建一个对吧,新建一个啊,那这个函数就叫做把它变成tokens对吧?哎,那咱们这个函数咱们就起成一个名字叫pass HT,呃,Pass templ。Into啊,To,哎,就变成什么呢,变成tokens。啊,点JS好,那么它这个名字很长,实际上在这个文件当中向外默认暴露啊这个函数。哎,默认暴露这个函数,那默认暴露这个函数的情况下,那这个时候你就会明白哦,我要引的实际上就是刚才那个这个函数咱们创建出来的。
02:05
啊,因为咱们现在是模块化编程。好,那么实际上刚才写的这些呢,就没了。啊,我们就可以删了。给删了啊,因为刚才是为了单元测试,我们测试了那个scanner方法,其实就没了。没了的情况下,这个scanner呢,你你这块用不到,因为你scanner是刚才这个函数在用。所以这个函数再去引这个包啊,引干的。好,那现在的话,你看render的时候,我这个时候是不是就要调这个pass timel的这个东西啊。哎,把它传进去。然后假装他返回了tokens啊,假装他返回了tokens,那所以说我们现在就输出这个tons,那现在这tokens肯定是undein。啊,这没商量,因为你现在调用的这个函数,它是不是没有返回值啊,对吧?哎,所以在这里我们就调用这个part time tos这个函数啊,哎,让咱们这个模板字符串能够变为什么呀,对,能够变为token数组。
03:09
啊,能够变为tons数组这样子的。是吧,哎,变成这样子的一个情况。好,那变成这样的一个情况呢,呃,之后呢,我们现在就可以看一看这个啊,这个函数咱们要写个注释,你看它每一个东西都要能单元测试,一定记住你看刚才scanner写的时候,他能测试最好。对吧,当然咱们scanner跟原版差别还是有一点的,比如说原版的SC它又非常复杂,这块不如老师在这里写的啊,他这块特别复杂,哎,但是老师这块,那他为什么写的复杂,因为他能适应更多的情况啊,咱们的这个模板引擎可能功能偏弱一点。啊,但是呢,这么写是够用的,所以我们就这么写就可以了,好,那这个呢,我们就是说将模板字符串对吧?哎,变为tokens数组,我们这个函数啊,那这个函数我们要将模板字符串变为token数组的话,那肯定要return啊,Return一个数组,那这个我们就管它叫tokens。
04:08
诶,它啊返回,然后它这个东西接一个模板字符串,它接受一个参数是模板字符串啊好,那这个时候我们就首先需要用scanner来去扫描这个模板字符串,这没问题吧。哎,肯定要用这个SC啊,创建扫描器,创建扫描器,那也就是说扫描器是这个函数创建出来的,谁用谁引包啊对吧。把它给搁进去小写啊,然后让咱们这个扫描器工作。啊,那不是还是那个while吗?如果scanner没有到结束对吧?哎,那这个时候我就开始让他去寻找什么,咱们大家琢磨琢磨寻找什么。是不是寻找开始标记啊?啊,那寻找开始标记的话,这个时候呃,它就能返回那些结果啊,返回结果我现在就叫worth。
05:07
那这些结果它是不是在开始标记之前的文字啊,对吧,叫收集开始标记啊,开始标记就是左双大括号。啊,出现之前的所有文字,我们都给它收集到wordss这当中,那这个words是不是就可以进这个talk数组,我们就可以给它push进去啊,因为它说白了就是tag的类型的这个words嘛,对吧,T的风格的这个。啊,这个。啊,咱们之前不是PPT上这块给大家显示的对吧,是T的形式这文字吗?然后是内幕形式的他T的形式他内幕形式他T的他幕型的他对吧,哎是这样子的,然后接下来对它就需要过啊用干过这个,因为现在肯定指向了这个符号对吧?哎过双打括号。
06:03
啊过双大括号。好固商大括号,这个是就是收集起来啊,这个就是收集,这个就是存存起来。按错键了啊。哎,这个就是存起来。啊,这肯定会死循环啊,因为你这个没有,呃,过完收拿货号,你还没有便利完对吧?好,那然后接下来的话,我们就开始干嘛,对,开始的话是这个。反向打括号。啊,那这个时候你又要收集,收集的是words,那反向大括号中间出现的是不是内幕对吧?哎,那有可能它还是个景。啊,它有可能是个景,一会咱们再分析景,反正咱们现在就先收集,哎,然后再存起来,咱们因为你遇见反大括号的时候,这个时候肯定是内幕,当然也有可能是景。啊,我们用内幕存起来它,然后呢,再去过这个反大括号。哎,把这反杂话过了,然后接下来的话就是循环就会继续,他就会再去找啊这个,而咱们写scanner的时候,不是已经判断过他是不是找不到,或者到头了对吧,或者找不到啊,那它循环就会结束。
07:13
所以这个地方就非常的棒啊,那现在的话我们来看一下8080,咱们来看一下啊,看这个talk的数组应该就已经躺在这儿了,诶果然你看。Talking的数组就躺在这儿了,咱们很开心。啊,为什么,因为你一调用的话它就OK了,就我买了一个thing好目的啊,最后还有一个这个空字符串,哎,空字符串那里头是内幕属性。发现了吗?这是为什么,是内幕属性,这是因为我们实际上,嗯,在这里没有判断这个word,哎,最好判断一下这个word。对吧,就是如果这个word存在啊,就是scanner,就是如果因为它会返回空字符串,Words不是空字符串。哎,那我们给它存起来。然后过双大括号啊,然后这个存起来的时候也要判断一下,就是如果words不是空。
08:04
哎,然后再给它存起来,因为它如果是空字符串也会返回咱们那个杆那。啊,死干,他这儿有个后遗症。哎,那这样的话大家看就好多了,我买了一个C好木的啊,对吧,哎,没问题啊。那这个感觉生成成功了,但其实呢还差得远,为什么还差得远呢?因为如果你这里有嵌套啊,咱们比如说啊,你看这模板字符串,咱们在测试的时候改一下这个index。啊,咱们测试的这个模板字符串如果更为复杂,我们从PPT上找一个复杂的带二维的。对吧,哎,比如说这个这个二维数组,或者说一维数组,你就吃不消了,咱们大家看一维数组,实际上呃呃就二维吧,因为二维数组更为复杂。你可以看见这里有两个井号标记,这是一个一对循环,这个爱后这块是不是又是一对循环账?是吧,又是一对循环,那如果模板字符串变成这么复杂的话,你看这个tons现在大概也是正确的。
09:05
啊,其实tos可以把这个空格都去掉,这也是咱们原版的那个,呃,原版的那个就是咱们的那个那个里头功能,但咱们不写这个功能了,就是枝叶的功能,咱们不写,咱们就实现主干功能。啊,那你就可以发现这是text,然后你看这是这一堆对吧,Name student text1堆,然后name,他们点name。对吧,没问题吧,它都拆出来了,拆出来了13个啊,为什么拆出13个咱们也能数出来,第一个是纯字符串,这是第二个啊,咱们对着看对吧,好,第三个是这个力到学生这两个字啊,咱们看力到学生诶果然没问题吧。哎,然后是item name,然后是D爱号,你看然后是井号hobbies,然后是换行服。就是换行符倒立。没问题吧,然后点B,也就是说他他这个时候没有形成二维数组啊,那你说老师咱们之不是说这个东西要编译成为一个二二维数组,甚至更高级的三维数组嘛,因为它数组中的套数组,咱们现在不存在数组中套数组,它就一层,你看对吧,就是这种数组中套数组它没有没有形成。
10:12
啊,并且他的问题是什么呢?他的问题是。他现在这个这个地方是内幕,并没有出现井号。对吧,所以他这个问题很多,就是没有形成二维数的,那二维数组的形成,我们下个视频介绍啊,就是高级的就是给他整合起来啊,我们下一个这个给他,呃,下一个视频咱们介绍,那这个视频我们先去解决,这个地方不应该写内幕,他是不是应该写景啊。对吧,哎,然后他的他的那个名字就没有这个景了。对吧,嘿嘿,明白吗?然后这个地方呢,咱们就应该写杠,就是他这个时候如果是以杠开头,就知道这个地方类型就应该写杠,写杠啊。哎,所以这个时候就要判断一下,这个很简单啊,非常简单,就是这。Words啊好,那咱们现在就判断判断一下,我们现在找到的啊双大括号,那现在就是双大括号。
11:08
啊,那么这这个words啊,这个words就是双大括号中间的东西对吧,然后判断一下它的一个首字符,哎,所以要判断一下就是如果,如果说它的首字符是什么,是井号。对是井号,那这个时候我们存起来的时候,它就不能去存这个啊name。啊,对吧,它就应该存井号wordss,那也不是words,是不是从words的下标为一那项开始存。对吧,下标为一这一项,因为它第零项是井号啊。对吧,哎,从下标为一的下开始存,因为下标为零的项是井号啊。这能理解吧,啊就行。啊,然后呢,再写一个else if就是这个很简单啊,就能把这个类型给它给识别出来,所以大家有老师给你们引导是非常非常幸福的。
12:08
啊,非常非常幸福的啊,因为你如果自己去盘源代码去看一些博客,没有这个视频资料的话,其实是很困难的,然后大家其实没有必要去想说老师我是不是看视频了啊,那我是不是编程水平就没有那么高了。啊,我编我看视频编程水平就没有那么高,不是这样的,因为不是这样的。啊,不是这样的,就是你们一定要学会站在巨人的肩膀上啊,好,然后否则,否则就是不是颈,不是斜杠。那那是不是就是T,而T的这个时候就直接存就行。啊,就直接存就行,因为它没有符号,所以这样的话就报,哎这样的话就对了,哎,但是它这样31行有一个语法错误,我看一看怎么else if。哎,不对,Else啊,这个地方就不能写了,对吧?Else这论乱了,刷新,你看这就对了,你看T的井看见没有,这地方是不是井词students单词,这个地方是不是景,Item pobies,咱们刚才如果不不写的话,就直接没有这if的话,你看那他是不是就还是T的景对吧,就是可能还是内幕啊,但是呢,他刚才是内幕,但是他没有把景给提出来啊,咱们不说刚才了,就说现在。
13:17
哎,那你看有景是不是有有这个,那所以说一会儿咱们下个视频,目的是不是就要把它们形成二维数组,就是形成PPT上这样的啊,第一层就只有三个数组,对吧,然后第二个这个,然后能把这个student折起来,那机理是什么?对,机理就是它在变历的时候遇见井号,然后再遇见下一个这个子丢子,这个出现杠的时候,那中间的全部内容其实都应该是它的子内容。对吧?哎,那他到底怎么实现呢?咱们下个视频讲解,但是不管怎么样,我们现在的这个视频当中,是不是又把咱们代码进行推进了,就是我们能把这个tons给收集起来了,是吧?很幸福吧,诶很幸福啊好,那咱们这个视频就先讲到这儿,同学们呢,多多练习。
我来说两句