在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ PLY 概要
高級(jí)調(diào)試
PLY 概要
前言和預(yù)備
如何繼續(xù)
Yacc
使用Python的優(yōu)化模式
語法分析基礎(chǔ)
Lex
多個(gè)語法和詞法分析器
介紹
序言

PLY 概要

PLY 包含兩個(gè)獨(dú)立的模塊:lex.py 和 yacc.py,都定義在 ply 包下。lex.py 模塊用來將輸入字符通過一系列的正則表達(dá)式分解成標(biāo)記序列,yacc.py 通過一些上下文無關(guān)的文法來識(shí)別編程語言語法。yacc.py 使用 LR 解析法,并使用 LALR(1)算法(默認(rèn))或者 SLR 算法生成分析表。

這兩個(gè)工具是為了一起工作的。lex.py 通過向外部提供token()方法作為接口,方法每次會(huì)從輸入中返回下一個(gè)有效的標(biāo)記。yacc.py 將會(huì)不斷的調(diào)用這個(gè)方法來獲取標(biāo)記并匹配語法規(guī)則。yacc.py 的功能通常是生成抽象語法樹(AST),不過,這完全取決于用戶,如果需要,yacc.py 可以直接用來完成簡(jiǎn)單的翻譯。

就像相應(yīng)的 unix 工具,yacc.py 提供了大多數(shù)你期望的特性,其中包括:豐富的錯(cuò)誤檢查、語法驗(yàn)證、支持空產(chǎn)生式、錯(cuò)誤的標(biāo)記、通過優(yōu)先級(jí)規(guī)則解決二義性。事實(shí)上,傳統(tǒng) yacc 能夠做到的 PLY 都應(yīng)該支持。

yacc.py 與 Unix 下的 yacc 的主要不同之處在于,yacc.py 沒有包含一個(gè)獨(dú)立的代碼生成器,而是在 PLY 中依賴反射來構(gòu)建詞法分析器和語法解析器。不像傳統(tǒng)的 lex/yacc 工具需要一個(gè)獨(dú)立的輸入文件,并將之轉(zhuǎn)化成一個(gè)源文件,Python 程序必須是一個(gè)可直接可用的程序,這意味著不能有額外的源文件和特殊的創(chuàng)建步驟(像是那種執(zhí)行 yacc 命令來生成 Python 代碼)。又由于生成分析表開銷較大,PLY 會(huì)緩存生成的分析表,并將它們保存在獨(dú)立的文件中,除非源文件有變化,會(huì)重新生成分析表,否則將從緩存中直接讀取。