Skip to content
Snippets Groups Projects
Commit 7dfa27d4 authored by Massimo Riello's avatar Massimo Riello
Browse files

Ancillary parsers can be compiled/executed during the main parser call

parent 4b91efce
Branches
Tags
No related merge requests found
...@@ -1049,13 +1049,38 @@ class SimpleParser(object): ...@@ -1049,13 +1049,38 @@ class SimpleParser(object):
while self.parseStep(): while self.parseStep():
pass pass
def compileParser(simpleParser, metaInfo, metaInfoToKeep):
"""compiles the given simple parser"""
parserBuilder = SimpleParserBuilder(simpleParser, metaInfo, metaInfoToKeep)
if logger.isEnabledFor(logging.DEBUG):
s = StringIO.StringIO()
s.write("matchers:")
parserBuilder.writeMatchers(s, 2)
logger.debug(s.getvalue())
if not parserBuilder.verifyMetaInfo(sys.stderr):
sys.exit(1)
parserBuilder.compile()
if logger.isEnabledFor(logging.DEBUG):
s = StringIO.StringIO()
s.write("compiledMatchers:")
parserBuilder.writeCompiledMatchers(s, 2)
logger.debug(s.getvalue())
return parserBuilder
def runParser(compiledParser, backend, superContext, fIn):
"""parses the open file fIn with the given compiledParser into the backend using superContext as parser SuperContext"""
parser = compiledParser.buildParser(PushbackLineFile(fIn), backend, superContext = superContext)
parser.parse()
def defaultParseFile(parserInfo): def defaultParseFile(parserInfo):
def parseF(parserBuilder, uri, path, backend, superContext): def parseF(parserBuilder, uri, path, backend, superContext):
with open(path, "r") as fIn: with open(path, "r") as fIn:
backend.startedParsingSession(uri, parserInfo) backend.startedParsingSession(uri, parserInfo)
parser = parserBuilder.buildParser(PushbackLineFile(fIn), backend, try:
superContext = superContext) superContext.startedParsing(path)
parser.parse() except AttributeError:
pass
runParser(parserBuilder, backend, superContext, fIn)
backend.finishedParsingSession("ParseSuccess", None) backend.finishedParsingSession("ParseSuccess", None)
return parseF return parseF
...@@ -1152,20 +1177,7 @@ def mainFunction(mainFileDescription, metaInfoEnv, parserInfo, ...@@ -1152,20 +1177,7 @@ def mainFunction(mainFileDescription, metaInfoEnv, parserInfo,
metaInfoToKeep = specializationInfo.get("metaInfoToKeep") metaInfoToKeep = specializationInfo.get("metaInfoToKeep")
# initialize the parser builder # initialize the parser builder
parserBuilder = SimpleParserBuilder(mainFileDescription, metaInfoEnv, metaInfoToKeep) parserBuilder = compileParser(mainFileDescription, metaInfoEnv, metaInfoToKeep)
if logger.isEnabledFor(logging.DEBUG):
s = StringIO.StringIO()
s.write("matchers:")
parserBuilder.writeMatchers(s, 2)
logger.debug(s.getvalue())
if not parserBuilder.verifyMetaInfo(sys.stderr):
sys.exit(1)
parserBuilder.compile()
if logger.isEnabledFor(logging.DEBUG):
s = StringIO.StringIO()
s.write("compiledMatchers:")
parserBuilder.writeCompiledMatchers(s, 2)
logger.debug(s.getvalue())
if fileToParse: if fileToParse:
if writeComma: if writeComma:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment