def build(self, **kwargs):
"""
Builds the PyCoolParser instance with yaac.yaac() by binding the lexer object and its tokens list in the
current instance scope.
:param kwargs: yaac.yaac() config parameters, complete list:
* debug: Debug mode flag.
* optimize: Optimize mode flag.
* debuglog: Debug log file path; by default parser prints to stderr.
* errorlog: Error log file path; by default parser print to stderr.
* outputdir: Output directory of parsing output; by default the .out file goes in the same directory.
:return: None
"""
# Parse the parameters
if kwargs is None or len(kwargs) == 0:
debug, write_tables, optimize, outputdir, yacctab, debuglog, errorlog = \
self._debug, self._write_tables, self._optimize, self._outputdir, self._yacctab, self._debuglog, \
self._errorlog
else:
debug = kwargs.get("debug", self._debug)
write_tables = kwargs.get("write_tables", self._write_tables)
optimize = kwargs.get("optimize", self._optimize)
outputdir = kwargs.get("outputdir", self._outputdir)
yacctab = kwargs.get("yacctab", self._yacctab)
debuglog = kwargs.get("debuglog", self._debuglog)
errorlog = kwargs.get("errorlog", self._errorlog)
# Build PyCoolLexer
self.lexer = make_lexer(debug=debug, optimize=optimize, outputdir=outputdir, debuglog=debuglog,
errorlog=errorlog)
# Expose tokens collections to this instance scope
self.tokens = self.lexer.tokens
# Build yacc parser
self.parser = yacc.yacc(module=self, write_tables=write_tables, debug=debug, optimize=optimize,
outputdir=outputdir, tabmodule=yacctab, debuglog=debuglog, errorlog=errorlog)
评论列表
文章目录