Python是一個很好的腳本語言。它甚至讓您使用它自己的解析器和編譯器。這也使您可以訪問不同的其他解析器用於特殊目的,如XML和字符串模板。
但有時,你可能想有自己的解析器。這是什麼pyPEG的。
要獲取有關發生了什麼快速查看,請閱讀這篇文章對如何解析任意語言,pyPEG到XML在我的博客。
什麼是PEG?
PEG是指解析表達式語法。這有點像正則表達式上下文無關語言的想法;一個非常明確的解釋,你會發現關於PEG的維基百科文章。
帶銷,你可以描述相同的語言像BNF(而且他們甚至類似)。
什麼是解析器解釋器?
常見的解析器不使用的PEG和自上而下的分析,但LR(n)或LL(n)和自下而上的分析。這將導致在執行解析器生成器的想法。
由於與LR(n)或LL(N)分析器,你需要計算出一個DFA第一,平時你讓解析器發電機為你做這個。其結果是一個解析器實現為您的BNF語法,為所述輸入。人們可以調用一個解析器生成的BNF一個編譯器解析器實現。
解析器解釋器不工作作為一個解釋,而不應是這樣的編譯器。只要給你的語法作為輸入,並解析語言描述出來的文字。將不會有生成的程序。
使用pyPEG
這意味著:使用pyPEG是很容易;-)如果你已經知道正則表達式,您將學習如何快速使用pyPEG。
一個小樣本
舉個例子:想到一個簡單的語言像這樣的:
功能FAK(N){
 如果(N == 0){// 0! 1定義
 返回1;
 }其他{
 回報N * FAK(N - 1);
 };
}
一個pyPEG該語言看起來像下面的代碼(見示例腳本):
高清評論():返回[re.compile(R“//.*”),re.compile(“/*.*?*/”,re.S)
高清文字():返回re.compile(“*?”r'd * .d的* | | D +')
高清符號():返回re.compile(r“W +”)
DEF運算符():返回re.compile(R“+ | - | * | / | ==”)
DEF操作():返回符號,運營商,[文字,functioncall]
高清表達式():返回[文字,操作,functioncall]
與expressionlist高清():返回表達式,-1,(“,”,表達式)
高清returnstatement():return關鍵字(“回歸”),表達
高清ifstatement():return關鍵字(“如果”),“(”,表達“)”,塊,關鍵詞(“其他”),塊
DEF聲明():返回[ifstatement,returnstatement]“;”
DEF塊():返回“{”,-2,聲明中,“}”
高清PARAMETERLIST():回歸“(”符號,-1,(“,”符號)“。)”
高清functioncall():返回符號“(”的expressionlist“)”
高清功能():return關鍵字(“功能”),符號,PARAMETERLIST,塊
高清simpleLanguage():返回功能
什麼在此版本中是新的:
- 在這是一個清理的釋放。解析的代碼()和撰寫()是固定的。
什麼是1.4版本,新的:
- 在該版本修復了一些bug與packrat解析李>
什麼是1.3版的新:
- 在由符號更換元組在pyAST名(名單)類,這是相當兼容,但支持在編譯器後端更具描述性的代碼了。
什麼是在1.2版本中新的:
- 在使用Unicode錯誤的錯誤處理固定李>
什麼在1.1版本的新:
- 在Unicode支持加入
什麼是在0.46版本新:
- 在pyPEG.print_trace為True
- 在轉換pyPEG到Python 3.x的,現在可以無縫地使用2to3的
- 在該應用可以追溯到可選的語法規則通過設置
- 在pyPEG將輸出此跟踪到stderr。
什麼在0.45版本新:
- 在錯誤修正
什麼是在0.44版本新:
- 在pyPEG現在裝飾與源文件名和行每個pyAST對象號。
要求:
- 在Python中
評論沒有發現