Чтобы иметь несколько парсеров, это не проблема, пожалуйста, проверьте документацию PLY (здесь
http://www.dabeaz.com/ply/ply.html#ply_nn37)
lexer = lex.lex() # Return lexer object
parser = yacc.yacc() # Return parser object
Далее, при разборе убедитесь, что вы предоставляете функции parse () ссылку на лексер, который она должна использовать. Например:
parser.parse(text,lexer=lexer)
Если вы забудете это сделать, парсер будет использовать последний созданный лексер - что не всегда то, что вы хотите.
Итак, вы можете включить некоторые атрибуты
В синтаксическом анализаторе атрибуты "lexer" и "parser" относятся к объектам lexer и parser соответственно.
def p_expr_plus(p):
'expr : expr PLUS expr'
...
print p.parser # Show parser object
print p.lexer # Show lexer object
Более подробную информацию можно найти здесь
http://www.dabeaz.com/ply/ply.html#ply_nn37