Rumah > pembangunan bahagian belakang > Tutorial Python > 详解PC端微信扫码注册和登录实例代码

详解PC端微信扫码注册和登录实例代码

高洛峰
Lepaskan: 2017-03-14 13:37:30
asal
5849 orang telah melayarinya

这篇文章详解PC端微信扫码注册和登录实例代码

写完词法部分,又有很多杂事,周末终于有空来实现伟大的语法解析部分了。

撸完代码之后发现,程序太短了,不算上状态机,才186行(含注释),关键代码不到100行。运行调试过后,发现还行。居然可以解析OneThink里面的function.php。这个文件堪称Php程序的集大成者,里面什么妖魔鬼怪都有,调试的时候真是一把辛酸泪。当然我也是不会说的,哈

详解PC端微信扫码注册和登录实例代码

 

有鉴于程序太短,所以我准备详细地来说说,以免大家不太明白其中奥妙:)

我们知道,语法解析一般有LL(1),LR(0),SLR(1),LALR(1),LR(1)等分析方法。比较常见的,就是LL(1),LR(0)

LL这种分析方法是从左到右扫描,最左推导;LR是从左到右扫描,最右推导;LL采用的是预测表,LR采用的是分析表;LR的难度在LL之上,分析能力也在LL之上,而且,LR的变化也更多。所以这样一个玩票的项目,当然要用LR才能稳稳地创(zhuang)新(bi)。

LR分析器的模型如下图。

详解PC端微信扫码注册和登录实例代码

包括两个栈,其中最首要地工作是生成LR分析表。当然我并不准备老老实实地按课本上的经典方法来,如何创(tou)新(lan)呢?这是关键。

我们看SLR(1),LALR(1),LR(1)都是对LR(0)的一种改进,其中最重要的就是那个(1),代表向前查看。为什么要向前看?为了减少分析表的规模。未来有无数的可能性,向前看了,可能性减少了,分析的规模也会大大减少。我们要减少分析的规模就必须向前看,而且看得越多分析表越小,而相反的编程难度也越大。那么,有没有一种方法让我站着把钱赚了,让我不向前看,难度不增加,分析表又减少呢。

有,还真有,这难不倒一个资深懒汉。我们知道,向前看的需求,来源于文法表达式:如A → Abc,它的单个表达式长度越长,不确定性越大。所以,限制方法表达式的最大长度,可以在此长度内保证100%的确定性,也就完全不需要向前看了。我把这种方法命名限长LR,即LLLR(0,n),n>=3。

如此,这次我理所当然地选择LLLR(0,3)做为分析方法,而且为了实现方便,我决定不保存状态,也就不需要生成分析表了,不生成表了,不生成表了……

妈蛋!这也太偷懒了。不保存状态,意味着每次都需要从头搜索,效率呢效率,这是程序员的生命!

稍安勿躁,表达式的最大长度为3,最多搜索3步即可,放心吧,就这么定了。:)

 

这就是100行超简Php编译器的奥秘,如何,够创(zhuang)新(bi)吧。源码在此:converterV0.4.zip Enjoy!

 

Atas ialah kandungan terperinci 详解PC端微信扫码注册和登录实例代码. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan