詳解PC端微信掃碼註冊和登入執行個體代碼

來源:互聯網
上載者:User
這篇文章詳解PC端掃碼註冊和登入執行個體代碼

寫完詞法部分,又有很多雜事,周末終於有空來實現偉大的文法解析部分了。

擼完代碼之後發現,程式太短了,不算上狀態機器,才186行(含注釋),關鍵代碼不到100行。運行調試過後,發現還行。居然可以解析OneThink裡面的function.php。這個檔案堪稱Php程式的集大成者,裡面什麼妖魔鬼怪都有,調試的時候真是一把辛酸淚。當然我也是不會說的,哈

有鑒於程式太短,所以我準備詳細地來說說,以免大家不太明白其中奧妙:)

我們知道,文法解析一般有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分析器的模型如。

包括兩個棧,其中最首要地工作是產生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!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.