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

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

多個語法和詞法分析器

在高級的分析器程序中,你可能同時需要多個語法和詞法分析器。

依照規(guī)則行事不會有問題。不過,你需要小心確定所有東西都正確的綁定(hooked up)了。首先,保證將 lex() 和 yacc() 返回的對象保存起來:

lexer  = lex.lex()       # Return lexer object
parser = yacc.yacc()     # Return parser object

接著,在解析時,確保給 parse() 方法一個正確的 lexer 引用:

parser.parse(text,lexer=lexer)

如果遺漏這一步,分析器會使用最新創(chuàng)建的 lexer 對象,這可能不是你希望的。

詞法器和語法器的方法中也可以訪問這些對象。在詞法器中,標記的 lexer 屬性指代的是當前觸發(fā)規(guī)則的詞法器對象:

def t_NUMBER(t):
   r'\d+'
   ...
   print t.lexer           # Show lexer object

在語法器中,lexer 和 parser 屬性指代的是對應的詞法器對象和語法器對象

def p_expr_plus(p):
   'expr : expr PLUS expr'
   ...
   print p.parser          # Show parser object
   print p.lexer           # Show lexer object

如果有必要,lexe r對象和 parser 對象都可以附加其他屬性。例如,你想要有不同的解析器狀態(tài),可以為 parser 對象附加更多的屬性,并在后面用到它們。

上一篇:高級調(diào)試下一篇:PLY 概要