🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
lex()和yacc()命令都有调试模式,可以通过debug标识实现: ~~~ lex.lex(debug=True) yacc.yacc(debug=True) ~~~ 正常情况下,调试不仅输出标准错误,对于yacc(),还会给出parser.out文件。这些输出可以通过提供logging对象来精细的控制。下面这个例子增加了对调试信息来源的输出: ~~~ # Set up a logging object import logging logging.basicConfig( level = logging.DEBUG, filename = "parselog.txt", filemode = "w", format = "%(filename)10s:%(lineno)4d:%(message)s" ) log = logging.getLogger() lex.lex(debug=True,debuglog=log) yacc.yacc(debug=True,debuglog=log) ~~~ 如果你提供一个自定义的logger,大量的调试信息可以通过分级来控制。典型的是将调试信息分为DEBUG,INFO,或者WARNING三个级别。 PLY的错误和警告信息通过日志接口提供,可以从errorlog参数中传入日志对象 ~~~ lex.lex(errorlog=log) yacc.yacc(errorlog=log) ~~~ 如果想完全过滤掉警告信息,你除了可以使用带级别过滤功能的日志对象,也可以使用lex和yacc模块都内建的Nulllogger对象。例如: ~~~ yacc.yacc(errorlog=yacc.NullLogger()) ~~~