Source code for qnet.misc.parser

# coding=utf-8
#This file is part of QNET.
#
#    QNET is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#   (at your option) any later version.
#
#    QNET is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with QNET.  If not, see <http://www.gnu.org/licenses/>.
#
# Copyright (C) 2012-2013, Nikolas Tezak
#
###########################################################################
"""
Generic Parser class.
"""

from ply import lex, yacc
import os


[docs]class ParsingError(SyntaxError): """ Raised for parsing error. """ pass
[docs]class Parser(object): """ Base class for a lexer/parser that has the _rules defined as methods """ tokens = () precedence = () def __init__(self, **kw): self.debug = kw.get('debug', 0) self.names = {} try: modname = os.path.splitext(os.path.basename(__file__))[0] + "_" + self.__class__.__name__ except: modname = "parser" + "_" + self.__class__.__name__ self.debugfile = modname + ".dbg" self.tabmodule = modname + "_" + "parsetab" # print(self.debugfile, self.tabmodule) # Build the lexer and parser self.lexer = lex.lex(module=self, debug=self.debug) self.parser = yacc.yacc(module=self, debug=self.debug, debugfile=self.debugfile, tabmodule=self.tabmodule)
[docs] def parse(self, inputstring): return self.parser.parse(inputstring, lexer=self.lexer)
[docs] def parse_file(self, filename): with open(filename, 'r') as inputfile: filetext = inputfile.read() return self.parse(filetext)