如何防止PLY中的表再生

Mic*_*ael 7 python parsing ply

我在命令行应用程序中使用PLY,我将其打包为要安装的Python egg pip.每次我从命令行运行我的脚本时,都会看到以下消息:

"Generating LALR tables"
Run Code Online (Sandbox Code Playgroud)

此外,parser.out和parsetab.py文件将写入调用脚本的目录.有没有办法用应用程序发送这些文件,以便它不会每次都重新生成表?

小智 11

使用

yacc.yacc(debug=0, write_tables=0)
Run Code Online (Sandbox Code Playgroud)


Mic*_*ael 0

我最终做的就是关闭优化。我正在浏览 PLY 3.4 源代码,并在词法分析器代码中发现了这个小金块:

# If in optimize mode, we write the lextab
if lextab and optimize:
    lexobj.writetab(lextab,outputdir)

return lexobj
Run Code Online (Sandbox Code Playgroud)

通过将构建词法分析器和解析器的代码更改为:

self.lexer = lex.lex(module=self, optimize=False, debug=False, **kwargs)

self.lexer = lex.lex(module=self, optimize=False, debug=False, **kwargs)

我避免了所有文件写出。调试器将.out文件写入目录,Python 文件是标志的结果optimize

虽然这暂时有效,但我不能说我对这种方法完全满意。据推测,采用某种方法来保持优化,同时保持工作目录干净将是一个卓越的解决方案,将带来更好的性能。如果其他人有更好的方法,我非常乐意接受。