From e3cdee220e127240269a78f562d81e5448320b0b Mon Sep 17 00:00:00 2001 From: Jose Rodriguez Date: Sun, 3 May 2020 02:13:52 +0200 Subject: [PATCH 1/2] Uses PLY 4.0 Also caches objects locally since PLY no longer does it itself. --- api/constants.py | 7 + api/utils.py | 21 + asmlex.py | 2 +- asmparse.py | 2 +- ply/README.md | 283 ++++++ ply/__init__.py | 6 + ply/lex.py | 901 +++++++++++++++++ ply/yacc.py | 2482 ++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 2 - tox.ini | 3 +- zxbasmpplex.py | 2 +- zxbparser.py | 3 +- zxbpp.py | 2 +- zxbpplex.py | 2 +- 14 files changed, 3709 insertions(+), 9 deletions(-) create mode 100644 ply/README.md create mode 100644 ply/__init__.py create mode 100644 ply/lex.py create mode 100644 ply/yacc.py delete mode 100644 requirements.txt diff --git a/api/constants.py b/api/constants.py index c2915346f..ba4aaeb54 100644 --- a/api/constants.py +++ b/api/constants.py @@ -9,6 +9,8 @@ # the GNU General License # ---------------------------------------------------------------------- +import os + from .decorator import classproperty @@ -16,6 +18,11 @@ # Global constants # ------------------------------------------------- +# Path to main ZX Basic compiler executable +ZXBASIC_ROOT = os.path.abspath(os.path.join( + os.path.abspath(os.path.dirname(os.path.abspath(__file__))), os.path.pardir) +) + # ---------------------------------------------------------------------- # Class enums # ---------------------------------------------------------------------- diff --git a/api/utils.py b/api/utils.py index 0cd2684ef..5437aee15 100644 --- a/api/utils.py +++ b/api/utils.py @@ -1,6 +1,10 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +import os +import shelve + +from . import constants from . import global_ from . import errmsg @@ -10,6 +14,9 @@ __doc__ = """Utils module contains many helpers for several task, like reading files or path management""" +SHELVE_PATH = os.path.join(constants.ZXBASIC_ROOT, 'parsetab', 'tabs.dbm') +SHELVE = shelve.open(SHELVE_PATH) + def read_txt_file(fname): """Reads a txt file, regardless of its encoding @@ -97,3 +104,17 @@ def parse_int(str_num): return int(str_num, base) except ValueError: return None + + +def load_object(key): + return SHELVE[key] if key in SHELVE else None + + +def save_object(key, obj): + SHELVE[key] = obj + SHELVE.sync() + return obj + + +def get_or_create(key, fn): + return load_object(key) or save_object(key, fn()) diff --git a/asmlex.py b/asmlex.py index 96fa01db6..0376ab4cb 100755 --- a/asmlex.py +++ b/asmlex.py @@ -429,7 +429,7 @@ def find_column(self, token): # --------------------- PREPROCESSOR FUNCTIONS ------------------- # Needed for states -tmp = lex.lex(object=Lexer(), lextab='parsetab.zxbasmlextab') +tmp = lex.lex(object=Lexer()) if __name__ == '__main__': tmp.input(open(sys.argv[1]).read()) diff --git a/asmparse.py b/asmparse.py index a22358853..33a4818ae 100755 --- a/asmparse.py +++ b/asmparse.py @@ -1541,4 +1541,4 @@ def main(argv): generate_binary(OPTIONS.outputFileName.value, OPTIONS.output_file_type) -parser = yacc.yacc(method='LALR', tabmodule='parsetab.zxbasmtab', debug=OPTIONS.Debug.value > 2) +parser = api.utils.get_or_create('asmparse', lambda: yacc.yacc(debug=OPTIONS.Debug.value > 2)) diff --git a/ply/README.md b/ply/README.md new file mode 100644 index 000000000..787dd46ce --- /dev/null +++ b/ply/README.md @@ -0,0 +1,283 @@ +# PLY (Python Lex-Yacc) + +Copyright (C) 2001-2020 +David M. Beazley (Dabeaz LLC) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the David Beazley or Dabeaz LLC may be used to + endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Introduction +============ + +PLY is a 100% Python implementation of the common parsing tools lex +and yacc. Here are a few highlights: + + - PLY is very closely modeled after traditional lex/yacc. + If you know how to use these tools in C, you will find PLY + to be similar. + + - PLY provides *very* extensive error reporting and diagnostic + information to assist in parser construction. The original + implementation was developed for instructional purposes. As + a result, the system tries to identify the most common types + of errors made by novice users. + + - PLY provides full support for empty productions, error recovery, + precedence specifiers, and moderately ambiguous grammars. + + - Parsing is based on LR-parsing which is fast, memory efficient, + better suited to large grammars, and which has a number of nice + properties when dealing with syntax errors and other parsing problems. + Currently, PLY builds its parsing tables using the LALR(1) + algorithm used in yacc. + + - PLY uses Python introspection features to build lexers and parsers. + This greatly simplifies the task of parser construction since it reduces + the number of files and eliminates the need to run a separate lex/yacc + tool before running your program. + + - PLY can be used to build parsers for "real" programming languages. + Although it is not ultra-fast due to its Python implementation, + PLY can be used to parse grammars consisting of several hundred + rules (as might be found for a language like C). The lexer and LR + parser are also reasonably efficient when parsing typically + sized programs. People have used PLY to build parsers for + C, C++, ADA, and other real programming languages. + +How to Use +========== + +PLY consists of two files : lex.py and yacc.py. These are contained +within the `ply` directory which may also be used as a Python package. +To use PLY, simply copy the `ply` directory to your project and import +lex and yacc from the associated `ply` package. For example: + +```python +from .ply import lex +from .ply import yacc +``` + +Alternatively, you can copy just the files lex.py and yacc.py +individually and use them as modules however you see fit. For example: + +```python +import lex +import yacc +``` + +If you wish, you can use the install.py script to install PLY into +virtual environment. + +PLY has no third-party dependencies. + +The docs/ directory contains complete documentation on how to use +the system. Documentation available at https://ply.readthedocs.io + +The example directory contains several different examples including a +PLY specification for ANSI C as given in K&R 2nd Ed. + +A simple example is found at the end of this document + +Requirements +============ +PLY requires the use of Python 3.6 or greater. However, you should +use the latest Python release if possible. It should work on just +about any platform. + +Note: PLY does not support execution under `python -OO`. It can be +made to work in that mode, but you'll need to change the programming +interface with a decorator. See the documentation for details. + +Resources +========= + +Official Documentation is available at: + +* https://ply.readthedocs.io + +More information about PLY can be obtained on the PLY webpage at: + +* http://www.dabeaz.com/ply + +For a detailed overview of parsing theory, consult the excellent +book "Compilers : Principles, Techniques, and Tools" by Aho, Sethi, and +Ullman. The topics found in "Lex & Yacc" by Levine, Mason, and Brown +may also be useful. + +The GitHub page for PLY can be found at: + +* https://github.com/dabeaz/ply + +Acknowledgments +=============== +A special thanks is in order for all of the students in CS326 who +suffered through about 25 different versions of these tools :-). + +The CHANGES file acknowledges those who have contributed patches. + +Elias Ioup did the first implementation of LALR(1) parsing in PLY-1.x. +Andrew Waters and Markus Schoepflin were instrumental in reporting bugs +and testing a revised LALR(1) implementation for PLY-2.0. + +Example +======= + +Here is a simple example showing a PLY implementation of a calculator +with variables. + +```python +# ----------------------------------------------------------------------------- +# calc.py +# +# A simple calculator with variables. +# ----------------------------------------------------------------------------- + +tokens = ( + 'NAME','NUMBER', + 'PLUS','MINUS','TIMES','DIVIDE','EQUALS', + 'LPAREN','RPAREN', + ) + +# Tokens + +t_PLUS = r'\+' +t_MINUS = r'-' +t_TIMES = r'\*' +t_DIVIDE = r'/' +t_EQUALS = r'=' +t_LPAREN = r'\(' +t_RPAREN = r'\)' +t_NAME = r'[a-zA-Z_][a-zA-Z0-9_]*' + +def t_NUMBER(t): + r'\d+' + t.value = int(t.value) + return t + +# Ignored characters +t_ignore = " \t" + +def t_newline(t): + r'\n+' + t.lexer.lineno += t.value.count("\n") + +def t_error(t): + print(f"Illegal character {t.value[0]!r}") + t.lexer.skip(1) + +# Build the lexer +import ply.lex as lex +lex.lex() + +# Precedence rules for the arithmetic operators +precedence = ( + ('left','PLUS','MINUS'), + ('left','TIMES','DIVIDE'), + ('right','UMINUS'), + ) + +# dictionary of names (for storing variables) +names = { } + +def p_statement_assign(p): + 'statement : NAME EQUALS expression' + names[p[1]] = p[3] + +def p_statement_expr(p): + 'statement : expression' + print(p[1]) + +def p_expression_binop(p): + '''expression : expression PLUS expression + | expression MINUS expression + | expression TIMES expression + | expression DIVIDE expression''' + if p[2] == '+' : p[0] = p[1] + p[3] + elif p[2] == '-': p[0] = p[1] - p[3] + elif p[2] == '*': p[0] = p[1] * p[3] + elif p[2] == '/': p[0] = p[1] / p[3] + +def p_expression_uminus(p): + 'expression : MINUS expression %prec UMINUS' + p[0] = -p[2] + +def p_expression_group(p): + 'expression : LPAREN expression RPAREN' + p[0] = p[2] + +def p_expression_number(p): + 'expression : NUMBER' + p[0] = p[1] + +def p_expression_name(p): + 'expression : NAME' + try: + p[0] = names[p[1]] + except LookupError: + print(f"Undefined name {p[1]!r}") + p[0] = 0 + +def p_error(p): + print(f"Syntax error at {p.value!r}") + +import ply.yacc as yacc +yacc.yacc() + +while True: + try: + s = input('calc > ') + except EOFError: + break + yacc.parse(s) +``` + +Bug Reports and Patches +======================= +My goal with PLY is to simply have a decent lex/yacc implementation +for Python. As a general rule, I don't spend huge amounts of time +working on it unless I receive very specific bug reports and/or +patches to fix problems. At this time, PLY is mature software and new +features are no longer being added. If you think you have found a +bug, please visit the PLY Github page at https://github.com/dabeaz/ply +to report an issue. + +Take a Class! +============= + +If you'd like to learn more about compiler principles and have a go at +implementing a compiler, come take a course. +https://www.dabeaz.com/compiler.html. + +-- Dave + + + + + + + + + diff --git a/ply/__init__.py b/ply/__init__.py new file mode 100644 index 000000000..878386228 --- /dev/null +++ b/ply/__init__.py @@ -0,0 +1,6 @@ +# PLY package +# Author: David Beazley (dave@dabeaz.com) +# https://dabeaz.com/ply/index.html + +__version__ = '4.0' +__all__ = ['lex','yacc'] diff --git a/ply/lex.py b/ply/lex.py new file mode 100644 index 000000000..3b670efca --- /dev/null +++ b/ply/lex.py @@ -0,0 +1,901 @@ +# ----------------------------------------------------------------------------- +# ply: lex.py +# +# Copyright (C) 2001-2020 +# David M. Beazley (Dabeaz LLC) +# All rights reserved. +# +# Latest version: https://github.com/dabeaz/ply +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# * Neither the name of David Beazley or Dabeaz LLC may be used to +# endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ----------------------------------------------------------------------------- + +import re +import sys +import types +import copy +import os +import inspect + +# This tuple contains acceptable string types +StringTypes = (str, bytes) + +# This regular expression is used to match valid token names +_is_identifier = re.compile(r'^[a-zA-Z0-9_]+$') + +# Exception thrown when invalid token encountered and no default error +# handler is defined. +class LexError(Exception): + def __init__(self, message, s): + self.args = (message,) + self.text = s + +# Token class. This class is used to represent the tokens produced. +class LexToken(object): + def __repr__(self): + return f'LexToken({self.type},{self.value!r},{self.lineno},{self.lexpos})' + +# This object is a stand-in for a logging object created by the +# logging module. + +class PlyLogger(object): + def __init__(self, f): + self.f = f + + def critical(self, msg, *args, **kwargs): + self.f.write((msg % args) + '\n') + + def warning(self, msg, *args, **kwargs): + self.f.write('WARNING: ' + (msg % args) + '\n') + + def error(self, msg, *args, **kwargs): + self.f.write('ERROR: ' + (msg % args) + '\n') + + info = critical + debug = critical + +# ----------------------------------------------------------------------------- +# === Lexing Engine === +# +# The following Lexer class implements the lexer runtime. There are only +# a few public methods and attributes: +# +# input() - Store a new string in the lexer +# token() - Get the next token +# clone() - Clone the lexer +# +# lineno - Current line number +# lexpos - Current position in the input string +# ----------------------------------------------------------------------------- + +class Lexer: + def __init__(self): + self.lexre = None # Master regular expression. This is a list of + # tuples (re, findex) where re is a compiled + # regular expression and findex is a list + # mapping regex group numbers to rules + self.lexretext = None # Current regular expression strings + self.lexstatere = {} # Dictionary mapping lexer states to master regexs + self.lexstateretext = {} # Dictionary mapping lexer states to regex strings + self.lexstaterenames = {} # Dictionary mapping lexer states to symbol names + self.lexstate = 'INITIAL' # Current lexer state + self.lexstatestack = [] # Stack of lexer states + self.lexstateinfo = None # State information + self.lexstateignore = {} # Dictionary of ignored characters for each state + self.lexstateerrorf = {} # Dictionary of error functions for each state + self.lexstateeoff = {} # Dictionary of eof functions for each state + self.lexreflags = 0 # Optional re compile flags + self.lexdata = None # Actual input data (as a string) + self.lexpos = 0 # Current position in input text + self.lexlen = 0 # Length of the input text + self.lexerrorf = None # Error rule (if any) + self.lexeoff = None # EOF rule (if any) + self.lextokens = None # List of valid tokens + self.lexignore = '' # Ignored characters + self.lexliterals = '' # Literal characters that can be passed through + self.lexmodule = None # Module + self.lineno = 1 # Current line number + + def clone(self, object=None): + c = copy.copy(self) + + # If the object parameter has been supplied, it means we are attaching the + # lexer to a new object. In this case, we have to rebind all methods in + # the lexstatere and lexstateerrorf tables. + + if object: + newtab = {} + for key, ritem in self.lexstatere.items(): + newre = [] + for cre, findex in ritem: + newfindex = [] + for f in findex: + if not f or not f[0]: + newfindex.append(f) + continue + newfindex.append((getattr(object, f[0].__name__), f[1])) + newre.append((cre, newfindex)) + newtab[key] = newre + c.lexstatere = newtab + c.lexstateerrorf = {} + for key, ef in self.lexstateerrorf.items(): + c.lexstateerrorf[key] = getattr(object, ef.__name__) + c.lexmodule = object + return c + + # ------------------------------------------------------------ + # input() - Push a new string into the lexer + # ------------------------------------------------------------ + def input(self, s): + self.lexdata = s + self.lexpos = 0 + self.lexlen = len(s) + + # ------------------------------------------------------------ + # begin() - Changes the lexing state + # ------------------------------------------------------------ + def begin(self, state): + if state not in self.lexstatere: + raise ValueError(f'Undefined state {state!r}') + self.lexre = self.lexstatere[state] + self.lexretext = self.lexstateretext[state] + self.lexignore = self.lexstateignore.get(state, '') + self.lexerrorf = self.lexstateerrorf.get(state, None) + self.lexeoff = self.lexstateeoff.get(state, None) + self.lexstate = state + + # ------------------------------------------------------------ + # push_state() - Changes the lexing state and saves old on stack + # ------------------------------------------------------------ + def push_state(self, state): + self.lexstatestack.append(self.lexstate) + self.begin(state) + + # ------------------------------------------------------------ + # pop_state() - Restores the previous state + # ------------------------------------------------------------ + def pop_state(self): + self.begin(self.lexstatestack.pop()) + + # ------------------------------------------------------------ + # current_state() - Returns the current lexing state + # ------------------------------------------------------------ + def current_state(self): + return self.lexstate + + # ------------------------------------------------------------ + # skip() - Skip ahead n characters + # ------------------------------------------------------------ + def skip(self, n): + self.lexpos += n + + # ------------------------------------------------------------ + # token() - Return the next token from the Lexer + # + # Note: This function has been carefully implemented to be as fast + # as possible. Don't make changes unless you really know what + # you are doing + # ------------------------------------------------------------ + def token(self): + # Make local copies of frequently referenced attributes + lexpos = self.lexpos + lexlen = self.lexlen + lexignore = self.lexignore + lexdata = self.lexdata + + while lexpos < lexlen: + # This code provides some short-circuit code for whitespace, tabs, and other ignored characters + if lexdata[lexpos] in lexignore: + lexpos += 1 + continue + + # Look for a regular expression match + for lexre, lexindexfunc in self.lexre: + m = lexre.match(lexdata, lexpos) + if not m: + continue + + # Create a token for return + tok = LexToken() + tok.value = m.group() + tok.lineno = self.lineno + tok.lexpos = lexpos + + i = m.lastindex + func, tok.type = lexindexfunc[i] + + if not func: + # If no token type was set, it's an ignored token + if tok.type: + self.lexpos = m.end() + return tok + else: + lexpos = m.end() + break + + lexpos = m.end() + + # If token is processed by a function, call it + + tok.lexer = self # Set additional attributes useful in token rules + self.lexmatch = m + self.lexpos = lexpos + newtok = func(tok) + del tok.lexer + del self.lexmatch + + # Every function must return a token, if nothing, we just move to next token + if not newtok: + lexpos = self.lexpos # This is here in case user has updated lexpos. + lexignore = self.lexignore # This is here in case there was a state change + break + return newtok + else: + # No match, see if in literals + if lexdata[lexpos] in self.lexliterals: + tok = LexToken() + tok.value = lexdata[lexpos] + tok.lineno = self.lineno + tok.type = tok.value + tok.lexpos = lexpos + self.lexpos = lexpos + 1 + return tok + + # No match. Call t_error() if defined. + if self.lexerrorf: + tok = LexToken() + tok.value = self.lexdata[lexpos:] + tok.lineno = self.lineno + tok.type = 'error' + tok.lexer = self + tok.lexpos = lexpos + self.lexpos = lexpos + newtok = self.lexerrorf(tok) + if lexpos == self.lexpos: + # Error method didn't change text position at all. This is an error. + raise LexError(f"Scanning error. Illegal character {lexdata[lexpos]!r}", + lexdata[lexpos:]) + lexpos = self.lexpos + if not newtok: + continue + return newtok + + self.lexpos = lexpos + raise LexError(f"Illegal character {lexdata[lexpos]!r} at index {lexpos}", + lexdata[lexpos:]) + + if self.lexeoff: + tok = LexToken() + tok.type = 'eof' + tok.value = '' + tok.lineno = self.lineno + tok.lexpos = lexpos + tok.lexer = self + self.lexpos = lexpos + newtok = self.lexeoff(tok) + return newtok + + self.lexpos = lexpos + 1 + if self.lexdata is None: + raise RuntimeError('No input string given with input()') + return None + + # Iterator interface + def __iter__(self): + return self + + def __next__(self): + t = self.token() + if t is None: + raise StopIteration + return t + +# ----------------------------------------------------------------------------- +# ==== Lex Builder === +# +# The functions and classes below are used to collect lexing information +# and build a Lexer object from it. +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# _get_regex(func) +# +# Returns the regular expression assigned to a function either as a doc string +# or as a .regex attribute attached by the @TOKEN decorator. +# ----------------------------------------------------------------------------- +def _get_regex(func): + return getattr(func, 'regex', func.__doc__) + +# ----------------------------------------------------------------------------- +# get_caller_module_dict() +# +# This function returns a dictionary containing all of the symbols defined within +# a caller further down the call stack. This is used to get the environment +# associated with the yacc() call if none was provided. +# ----------------------------------------------------------------------------- +def get_caller_module_dict(levels): + f = sys._getframe(levels) + return { **f.f_globals, **f.f_locals } + +# ----------------------------------------------------------------------------- +# _form_master_re() +# +# This function takes a list of all of the regex components and attempts to +# form the master regular expression. Given limitations in the Python re +# module, it may be necessary to break the master regex into separate expressions. +# ----------------------------------------------------------------------------- +def _form_master_re(relist, reflags, ldict, toknames): + if not relist: + return [], [], [] + regex = '|'.join(relist) + try: + lexre = re.compile(regex, reflags) + + # Build the index to function map for the matching engine + lexindexfunc = [None] * (max(lexre.groupindex.values()) + 1) + lexindexnames = lexindexfunc[:] + + for f, i in lexre.groupindex.items(): + handle = ldict.get(f, None) + if type(handle) in (types.FunctionType, types.MethodType): + lexindexfunc[i] = (handle, toknames[f]) + lexindexnames[i] = f + elif handle is not None: + lexindexnames[i] = f + if f.find('ignore_') > 0: + lexindexfunc[i] = (None, None) + else: + lexindexfunc[i] = (None, toknames[f]) + + return [(lexre, lexindexfunc)], [regex], [lexindexnames] + except Exception: + m = (len(relist) // 2) + 1 + llist, lre, lnames = _form_master_re(relist[:m], reflags, ldict, toknames) + rlist, rre, rnames = _form_master_re(relist[m:], reflags, ldict, toknames) + return (llist+rlist), (lre+rre), (lnames+rnames) + +# ----------------------------------------------------------------------------- +# def _statetoken(s,names) +# +# Given a declaration name s of the form "t_" and a dictionary whose keys are +# state names, this function returns a tuple (states,tokenname) where states +# is a tuple of state names and tokenname is the name of the token. For example, +# calling this with s = "t_foo_bar_SPAM" might return (('foo','bar'),'SPAM') +# ----------------------------------------------------------------------------- +def _statetoken(s, names): + parts = s.split('_') + for i, part in enumerate(parts[1:], 1): + if part not in names and part != 'ANY': + break + + if i > 1: + states = tuple(parts[1:i]) + else: + states = ('INITIAL',) + + if 'ANY' in states: + states = tuple(names) + + tokenname = '_'.join(parts[i:]) + return (states, tokenname) + + +# ----------------------------------------------------------------------------- +# LexerReflect() +# +# This class represents information needed to build a lexer as extracted from a +# user's input file. +# ----------------------------------------------------------------------------- +class LexerReflect(object): + def __init__(self, ldict, log=None, reflags=0): + self.ldict = ldict + self.error_func = None + self.tokens = [] + self.reflags = reflags + self.stateinfo = {'INITIAL': 'inclusive'} + self.modules = set() + self.error = False + self.log = PlyLogger(sys.stderr) if log is None else log + + # Get all of the basic information + def get_all(self): + self.get_tokens() + self.get_literals() + self.get_states() + self.get_rules() + + # Validate all of the information + def validate_all(self): + self.validate_tokens() + self.validate_literals() + self.validate_rules() + return self.error + + # Get the tokens map + def get_tokens(self): + tokens = self.ldict.get('tokens', None) + if not tokens: + self.log.error('No token list is defined') + self.error = True + return + + if not isinstance(tokens, (list, tuple)): + self.log.error('tokens must be a list or tuple') + self.error = True + return + + if not tokens: + self.log.error('tokens is empty') + self.error = True + return + + self.tokens = tokens + + # Validate the tokens + def validate_tokens(self): + terminals = {} + for n in self.tokens: + if not _is_identifier.match(n): + self.log.error(f"Bad token name {n!r}") + self.error = True + if n in terminals: + self.log.warning(f"Token {n!r} multiply defined") + terminals[n] = 1 + + # Get the literals specifier + def get_literals(self): + self.literals = self.ldict.get('literals', '') + if not self.literals: + self.literals = '' + + # Validate literals + def validate_literals(self): + try: + for c in self.literals: + if not isinstance(c, StringTypes) or len(c) > 1: + self.log.error(f'Invalid literal {c!r}. Must be a single character') + self.error = True + + except TypeError: + self.log.error('Invalid literals specification. literals must be a sequence of characters') + self.error = True + + def get_states(self): + self.states = self.ldict.get('states', None) + # Build statemap + if self.states: + if not isinstance(self.states, (tuple, list)): + self.log.error('states must be defined as a tuple or list') + self.error = True + else: + for s in self.states: + if not isinstance(s, tuple) or len(s) != 2: + self.log.error("Invalid state specifier %r. Must be a tuple (statename,'exclusive|inclusive')", s) + self.error = True + continue + name, statetype = s + if not isinstance(name, StringTypes): + self.log.error('State name %r must be a string', name) + self.error = True + continue + if not (statetype == 'inclusive' or statetype == 'exclusive'): + self.log.error("State type for state %r must be 'inclusive' or 'exclusive'", name) + self.error = True + continue + if name in self.stateinfo: + self.log.error("State %r already defined", name) + self.error = True + continue + self.stateinfo[name] = statetype + + # Get all of the symbols with a t_ prefix and sort them into various + # categories (functions, strings, error functions, and ignore characters) + + def get_rules(self): + tsymbols = [f for f in self.ldict if f[:2] == 't_'] + + # Now build up a list of functions and a list of strings + self.toknames = {} # Mapping of symbols to token names + self.funcsym = {} # Symbols defined as functions + self.strsym = {} # Symbols defined as strings + self.ignore = {} # Ignore strings by state + self.errorf = {} # Error functions by state + self.eoff = {} # EOF functions by state + + for s in self.stateinfo: + self.funcsym[s] = [] + self.strsym[s] = [] + + if len(tsymbols) == 0: + self.log.error('No rules of the form t_rulename are defined') + self.error = True + return + + for f in tsymbols: + t = self.ldict[f] + states, tokname = _statetoken(f, self.stateinfo) + self.toknames[f] = tokname + + if hasattr(t, '__call__'): + if tokname == 'error': + for s in states: + self.errorf[s] = t + elif tokname == 'eof': + for s in states: + self.eoff[s] = t + elif tokname == 'ignore': + line = t.__code__.co_firstlineno + file = t.__code__.co_filename + self.log.error("%s:%d: Rule %r must be defined as a string", file, line, t.__name__) + self.error = True + else: + for s in states: + self.funcsym[s].append((f, t)) + elif isinstance(t, StringTypes): + if tokname == 'ignore': + for s in states: + self.ignore[s] = t + if '\\' in t: + self.log.warning("%s contains a literal backslash '\\'", f) + + elif tokname == 'error': + self.log.error("Rule %r must be defined as a function", f) + self.error = True + else: + for s in states: + self.strsym[s].append((f, t)) + else: + self.log.error('%s not defined as a function or string', f) + self.error = True + + # Sort the functions by line number + for f in self.funcsym.values(): + f.sort(key=lambda x: x[1].__code__.co_firstlineno) + + # Sort the strings by regular expression length + for s in self.strsym.values(): + s.sort(key=lambda x: len(x[1]), reverse=True) + + # Validate all of the t_rules collected + def validate_rules(self): + for state in self.stateinfo: + # Validate all rules defined by functions + + for fname, f in self.funcsym[state]: + line = f.__code__.co_firstlineno + file = f.__code__.co_filename + module = inspect.getmodule(f) + self.modules.add(module) + + tokname = self.toknames[fname] + if isinstance(f, types.MethodType): + reqargs = 2 + else: + reqargs = 1 + nargs = f.__code__.co_argcount + if nargs > reqargs: + self.log.error("%s:%d: Rule %r has too many arguments", file, line, f.__name__) + self.error = True + continue + + if nargs < reqargs: + self.log.error("%s:%d: Rule %r requires an argument", file, line, f.__name__) + self.error = True + continue + + if not _get_regex(f): + self.log.error("%s:%d: No regular expression defined for rule %r", file, line, f.__name__) + self.error = True + continue + + try: + c = re.compile('(?P<%s>%s)' % (fname, _get_regex(f)), self.reflags) + if c.match(''): + self.log.error("%s:%d: Regular expression for rule %r matches empty string", file, line, f.__name__) + self.error = True + except re.error as e: + self.log.error("%s:%d: Invalid regular expression for rule '%s'. %s", file, line, f.__name__, e) + if '#' in _get_regex(f): + self.log.error("%s:%d. Make sure '#' in rule %r is escaped with '\\#'", file, line, f.__name__) + self.error = True + + # Validate all rules defined by strings + for name, r in self.strsym[state]: + tokname = self.toknames[name] + if tokname == 'error': + self.log.error("Rule %r must be defined as a function", name) + self.error = True + continue + + if tokname not in self.tokens and tokname.find('ignore_') < 0: + self.log.error("Rule %r defined for an unspecified token %s", name, tokname) + self.error = True + continue + + try: + c = re.compile('(?P<%s>%s)' % (name, r), self.reflags) + if (c.match('')): + self.log.error("Regular expression for rule %r matches empty string", name) + self.error = True + except re.error as e: + self.log.error("Invalid regular expression for rule %r. %s", name, e) + if '#' in r: + self.log.error("Make sure '#' in rule %r is escaped with '\\#'", name) + self.error = True + + if not self.funcsym[state] and not self.strsym[state]: + self.log.error("No rules defined for state %r", state) + self.error = True + + # Validate the error function + efunc = self.errorf.get(state, None) + if efunc: + f = efunc + line = f.__code__.co_firstlineno + file = f.__code__.co_filename + module = inspect.getmodule(f) + self.modules.add(module) + + if isinstance(f, types.MethodType): + reqargs = 2 + else: + reqargs = 1 + nargs = f.__code__.co_argcount + if nargs > reqargs: + self.log.error("%s:%d: Rule %r has too many arguments", file, line, f.__name__) + self.error = True + + if nargs < reqargs: + self.log.error("%s:%d: Rule %r requires an argument", file, line, f.__name__) + self.error = True + + for module in self.modules: + self.validate_module(module) + + # ----------------------------------------------------------------------------- + # validate_module() + # + # This checks to see if there are duplicated t_rulename() functions or strings + # in the parser input file. This is done using a simple regular expression + # match on each line in the source code of the given module. + # ----------------------------------------------------------------------------- + + def validate_module(self, module): + try: + lines, linen = inspect.getsourcelines(module) + except IOError: + return + + fre = re.compile(r'\s*def\s+(t_[a-zA-Z_0-9]*)\(') + sre = re.compile(r'\s*(t_[a-zA-Z_0-9]*)\s*=') + + counthash = {} + linen += 1 + for line in lines: + m = fre.match(line) + if not m: + m = sre.match(line) + if m: + name = m.group(1) + prev = counthash.get(name) + if not prev: + counthash[name] = linen + else: + filename = inspect.getsourcefile(module) + self.log.error('%s:%d: Rule %s redefined. Previously defined on line %d', filename, linen, name, prev) + self.error = True + linen += 1 + +# ----------------------------------------------------------------------------- +# lex(module) +# +# Build all of the regular expression rules from definitions in the supplied module +# ----------------------------------------------------------------------------- +def lex(*, module=None, object=None, debug=False, + reflags=int(re.VERBOSE), debuglog=None, errorlog=None): + + global lexer + + ldict = None + stateinfo = {'INITIAL': 'inclusive'} + lexobj = Lexer() + global token, input + + if errorlog is None: + errorlog = PlyLogger(sys.stderr) + + if debug: + if debuglog is None: + debuglog = PlyLogger(sys.stderr) + + # Get the module dictionary used for the lexer + if object: + module = object + + # Get the module dictionary used for the parser + if module: + _items = [(k, getattr(module, k)) for k in dir(module)] + ldict = dict(_items) + # If no __file__ attribute is available, try to obtain it from the __module__ instead + if '__file__' not in ldict: + ldict['__file__'] = sys.modules[ldict['__module__']].__file__ + else: + ldict = get_caller_module_dict(2) + + # Collect parser information from the dictionary + linfo = LexerReflect(ldict, log=errorlog, reflags=reflags) + linfo.get_all() + if linfo.validate_all(): + raise SyntaxError("Can't build lexer") + + # Dump some basic debugging information + if debug: + debuglog.info('lex: tokens = %r', linfo.tokens) + debuglog.info('lex: literals = %r', linfo.literals) + debuglog.info('lex: states = %r', linfo.stateinfo) + + # Build a dictionary of valid token names + lexobj.lextokens = set() + for n in linfo.tokens: + lexobj.lextokens.add(n) + + # Get literals specification + if isinstance(linfo.literals, (list, tuple)): + lexobj.lexliterals = type(linfo.literals[0])().join(linfo.literals) + else: + lexobj.lexliterals = linfo.literals + + lexobj.lextokens_all = lexobj.lextokens | set(lexobj.lexliterals) + + # Get the stateinfo dictionary + stateinfo = linfo.stateinfo + + regexs = {} + # Build the master regular expressions + for state in stateinfo: + regex_list = [] + + # Add rules defined by functions first + for fname, f in linfo.funcsym[state]: + regex_list.append('(?P<%s>%s)' % (fname, _get_regex(f))) + if debug: + debuglog.info("lex: Adding rule %s -> '%s' (state '%s')", fname, _get_regex(f), state) + + # Now add all of the simple rules + for name, r in linfo.strsym[state]: + regex_list.append('(?P<%s>%s)' % (name, r)) + if debug: + debuglog.info("lex: Adding rule %s -> '%s' (state '%s')", name, r, state) + + regexs[state] = regex_list + + # Build the master regular expressions + + if debug: + debuglog.info('lex: ==== MASTER REGEXS FOLLOW ====') + + for state in regexs: + lexre, re_text, re_names = _form_master_re(regexs[state], reflags, ldict, linfo.toknames) + lexobj.lexstatere[state] = lexre + lexobj.lexstateretext[state] = re_text + lexobj.lexstaterenames[state] = re_names + if debug: + for i, text in enumerate(re_text): + debuglog.info("lex: state '%s' : regex[%d] = '%s'", state, i, text) + + # For inclusive states, we need to add the regular expressions from the INITIAL state + for state, stype in stateinfo.items(): + if state != 'INITIAL' and stype == 'inclusive': + lexobj.lexstatere[state].extend(lexobj.lexstatere['INITIAL']) + lexobj.lexstateretext[state].extend(lexobj.lexstateretext['INITIAL']) + lexobj.lexstaterenames[state].extend(lexobj.lexstaterenames['INITIAL']) + + lexobj.lexstateinfo = stateinfo + lexobj.lexre = lexobj.lexstatere['INITIAL'] + lexobj.lexretext = lexobj.lexstateretext['INITIAL'] + lexobj.lexreflags = reflags + + # Set up ignore variables + lexobj.lexstateignore = linfo.ignore + lexobj.lexignore = lexobj.lexstateignore.get('INITIAL', '') + + # Set up error functions + lexobj.lexstateerrorf = linfo.errorf + lexobj.lexerrorf = linfo.errorf.get('INITIAL', None) + if not lexobj.lexerrorf: + errorlog.warning('No t_error rule is defined') + + # Set up eof functions + lexobj.lexstateeoff = linfo.eoff + lexobj.lexeoff = linfo.eoff.get('INITIAL', None) + + # Check state information for ignore and error rules + for s, stype in stateinfo.items(): + if stype == 'exclusive': + if s not in linfo.errorf: + errorlog.warning("No error rule is defined for exclusive state %r", s) + if s not in linfo.ignore and lexobj.lexignore: + errorlog.warning("No ignore rule is defined for exclusive state %r", s) + elif stype == 'inclusive': + if s not in linfo.errorf: + linfo.errorf[s] = linfo.errorf.get('INITIAL', None) + if s not in linfo.ignore: + linfo.ignore[s] = linfo.ignore.get('INITIAL', '') + + # Create global versions of the token() and input() functions + token = lexobj.token + input = lexobj.input + lexer = lexobj + + return lexobj + +# ----------------------------------------------------------------------------- +# runmain() +# +# This runs the lexer as a main program +# ----------------------------------------------------------------------------- + +def runmain(lexer=None, data=None): + if not data: + try: + filename = sys.argv[1] + with open(filename) as f: + data = f.read() + except IndexError: + sys.stdout.write('Reading from standard input (type EOF to end):\n') + data = sys.stdin.read() + + if lexer: + _input = lexer.input + else: + _input = input + _input(data) + if lexer: + _token = lexer.token + else: + _token = token + + while True: + tok = _token() + if not tok: + break + sys.stdout.write(f'({tok.type},{tok.value!r},{tok.lineno},{tok.lexpos})\n') + +# ----------------------------------------------------------------------------- +# @TOKEN(regex) +# +# This decorator function can be used to set the regex expression on a function +# when its docstring might need to be set in an alternative way +# ----------------------------------------------------------------------------- + +def TOKEN(r): + def set_regex(f): + if hasattr(r, '__call__'): + f.regex = _get_regex(r) + else: + f.regex = r + return f + return set_regex diff --git a/ply/yacc.py b/ply/yacc.py new file mode 100644 index 000000000..5a750d73b --- /dev/null +++ b/ply/yacc.py @@ -0,0 +1,2482 @@ +# ----------------------------------------------------------------------------- +# ply: yacc.py +# +# Copyright (C) 2001-2020 +# David M. Beazley (Dabeaz LLC) +# All rights reserved. +# +# Latest version: https://github.com/dabeaz/ply +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# * Neither the name of David Beazley or Dabeaz LLC may be used to +# endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ----------------------------------------------------------------------------- +# +# This implements an LR parser that is constructed from grammar rules defined +# as Python functions. The grammar is specified by supplying the BNF inside +# Python documentation strings. The inspiration for this technique was borrowed +# from John Aycock's Spark parsing system. PLY might be viewed as cross between +# Spark and the GNU bison utility. +# +# The current implementation is only somewhat object-oriented. The +# LR parser itself is defined in terms of an object (which allows multiple +# parsers to co-exist). However, most of the variables used during table +# construction are defined in terms of global variables. Users shouldn't +# notice unless they are trying to define multiple parsers at the same +# time using threads (in which case they should have their head examined). +# +# This implementation supports both SLR and LALR(1) parsing. LALR(1) +# support was originally implemented by Elias Ioup (ezioup@alumni.uchicago.edu), +# using the algorithm found in Aho, Sethi, and Ullman "Compilers: Principles, +# Techniques, and Tools" (The Dragon Book). LALR(1) has since been replaced +# by the more efficient DeRemer and Pennello algorithm. +# +# :::::::: WARNING ::::::: +# +# Construction of LR parsing tables is fairly complicated and expensive. +# To make this module run fast, a *LOT* of work has been put into +# optimization---often at the expensive of readability and what might +# consider to be good Python "coding style." Modify the code at your +# own risk! +# ---------------------------------------------------------------------------- + +import re +import types +import sys +import inspect + +#----------------------------------------------------------------------------- +# === User configurable parameters === +# +# Change these to modify the default behavior of yacc (if you wish) +#----------------------------------------------------------------------------- + +yaccdebug = False # Debugging mode. If set, yacc generates a + # a 'parser.out' file in the current directory + +debug_file = 'parser.out' # Default name of the debugging file +error_count = 3 # Number of symbols that must be shifted to leave recovery mode +resultlimit = 40 # Size limit of results when running in debug mode. + +MAXINT = sys.maxsize + +# This object is a stand-in for a logging object created by the +# logging module. PLY will use this by default to create things +# such as the parser.out file. If a user wants more detailed +# information, they can create their own logging object and pass +# it into PLY. + +class PlyLogger(object): + def __init__(self, f): + self.f = f + + def debug(self, msg, *args, **kwargs): + self.f.write((msg % args) + '\n') + + info = debug + + def warning(self, msg, *args, **kwargs): + self.f.write('WARNING: ' + (msg % args) + '\n') + + def error(self, msg, *args, **kwargs): + self.f.write('ERROR: ' + (msg % args) + '\n') + + critical = debug + +# Null logger is used when no output is generated. Does nothing. +class NullLogger(object): + def __getattribute__(self, name): + return self + + def __call__(self, *args, **kwargs): + return self + +# Exception raised for yacc-related errors +class YaccError(Exception): + pass + +# Format the result message that the parser produces when running in debug mode. +def format_result(r): + repr_str = repr(r) + if '\n' in repr_str: + repr_str = repr(repr_str) + if len(repr_str) > resultlimit: + repr_str = repr_str[:resultlimit] + ' ...' + result = '<%s @ 0x%x> (%s)' % (type(r).__name__, id(r), repr_str) + return result + +# Format stack entries when the parser is running in debug mode +def format_stack_entry(r): + repr_str = repr(r) + if '\n' in repr_str: + repr_str = repr(repr_str) + if len(repr_str) < 16: + return repr_str + else: + return '<%s @ 0x%x>' % (type(r).__name__, id(r)) + +#----------------------------------------------------------------------------- +# === LR Parsing Engine === +# +# The following classes are used for the LR parser itself. These are not +# used during table construction and are independent of the actual LR +# table generation algorithm +#----------------------------------------------------------------------------- + +# This class is used to hold non-terminal grammar symbols during parsing. +# It normally has the following attributes set: +# .type = Grammar symbol type +# .value = Symbol value +# .lineno = Starting line number +# .endlineno = Ending line number (optional, set automatically) +# .lexpos = Starting lex position +# .endlexpos = Ending lex position (optional, set automatically) + +class YaccSymbol: + def __str__(self): + return self.type + + def __repr__(self): + return str(self) + +# This class is a wrapper around the objects actually passed to each +# grammar rule. Index lookup and assignment actually assign the +# .value attribute of the underlying YaccSymbol object. +# The lineno() method returns the line number of a given +# item (or 0 if not defined). The linespan() method returns +# a tuple of (startline,endline) representing the range of lines +# for a symbol. The lexspan() method returns a tuple (lexpos,endlexpos) +# representing the range of positional information for a symbol. + +class YaccProduction: + def __init__(self, s, stack=None): + self.slice = s + self.stack = stack + self.lexer = None + self.parser = None + + def __getitem__(self, n): + if isinstance(n, slice): + return [s.value for s in self.slice[n]] + elif n >= 0: + return self.slice[n].value + else: + return self.stack[n].value + + def __setitem__(self, n, v): + self.slice[n].value = v + + def __getslice__(self, i, j): + return [s.value for s in self.slice[i:j]] + + def __len__(self): + return len(self.slice) + + def lineno(self, n): + return getattr(self.slice[n], 'lineno', 0) + + def set_lineno(self, n, lineno): + self.slice[n].lineno = lineno + + def linespan(self, n): + startline = getattr(self.slice[n], 'lineno', 0) + endline = getattr(self.slice[n], 'endlineno', startline) + return startline, endline + + def lexpos(self, n): + return getattr(self.slice[n], 'lexpos', 0) + + def set_lexpos(self, n, lexpos): + self.slice[n].lexpos = lexpos + + def lexspan(self, n): + startpos = getattr(self.slice[n], 'lexpos', 0) + endpos = getattr(self.slice[n], 'endlexpos', startpos) + return startpos, endpos + + def error(self): + raise SyntaxError + +# ----------------------------------------------------------------------------- +# == LRParser == +# +# The LR Parsing engine. +# ----------------------------------------------------------------------------- + +class LRParser: + def __init__(self, lrtab, errorf): + self.productions = lrtab.lr_productions + self.action = lrtab.lr_action + self.goto = lrtab.lr_goto + self.errorfunc = errorf + self.set_defaulted_states() + self.errorok = True + + def errok(self): + self.errorok = True + + def restart(self): + del self.statestack[:] + del self.symstack[:] + sym = YaccSymbol() + sym.type = '$end' + self.symstack.append(sym) + self.statestack.append(0) + + # Defaulted state support. + # This method identifies parser states where there is only one possible reduction action. + # For such states, the parser can make a choose to make a rule reduction without consuming + # the next look-ahead token. This delayed invocation of the tokenizer can be useful in + # certain kinds of advanced parsing situations where the lexer and parser interact with + # each other or change states (i.e., manipulation of scope, lexer states, etc.). + # + # See: http://www.gnu.org/software/bison/manual/html_node/Default-Reductions.html#Default-Reductions + def set_defaulted_states(self): + self.defaulted_states = {} + for state, actions in self.action.items(): + rules = list(actions.values()) + if len(rules) == 1 and rules[0] < 0: + self.defaulted_states[state] = rules[0] + + def disable_defaulted_states(self): + self.defaulted_states = {} + + # parse(). + # + # This is the core parsing engine. To operate, it requires a lexer object. + # Two options are provided. The debug flag turns on debugging so that you can + # see the various rule reductions and parsing steps. tracking turns on position + # tracking. In this mode, symbols will record the starting/ending line number and + # character index. + + def parse(self, input=None, lexer=None, debug=False, tracking=False): + # If debugging has been specified as a flag, turn it into a logging object + if isinstance(debug, int) and debug: + debug = PlyLogger(sys.stderr) + + lookahead = None # Current lookahead symbol + lookaheadstack = [] # Stack of lookahead symbols + actions = self.action # Local reference to action table (to avoid lookup on self.) + goto = self.goto # Local reference to goto table (to avoid lookup on self.) + prod = self.productions # Local reference to production list (to avoid lookup on self.) + defaulted_states = self.defaulted_states # Local reference to defaulted states + pslice = YaccProduction(None) # Production object passed to grammar rules + errorcount = 0 # Used during error recovery + + if debug: + debug.info('PLY: PARSE DEBUG START') + + # If no lexer was given, we will try to use the lex module + if not lexer: + from . import lex + lexer = lex.lexer + + # Set up the lexer and parser objects on pslice + pslice.lexer = lexer + pslice.parser = self + + # If input was supplied, pass to lexer + if input is not None: + lexer.input(input) + + # Set the token function + get_token = self.token = lexer.token + + # Set up the state and symbol stacks + statestack = self.statestack = [] # Stack of parsing states + symstack = self.symstack = [] # Stack of grammar symbols + pslice.stack = symstack # Put in the production + errtoken = None # Err token + + # The start state is assumed to be (0,$end) + + statestack.append(0) + sym = YaccSymbol() + sym.type = '$end' + symstack.append(sym) + state = 0 + while True: + # Get the next symbol on the input. If a lookahead symbol + # is already set, we just use that. Otherwise, we'll pull + # the next token off of the lookaheadstack or from the lexer + + if debug: + debug.debug('State : %s', state) + + if state not in defaulted_states: + if not lookahead: + if not lookaheadstack: + lookahead = get_token() # Get the next token + else: + lookahead = lookaheadstack.pop() + if not lookahead: + lookahead = YaccSymbol() + lookahead.type = '$end' + + # Check the action table + ltype = lookahead.type + t = actions[state].get(ltype) + else: + t = defaulted_states[state] + if debug: + debug.debug('Defaulted state %s: Reduce using %d', state, -t) + + if debug: + debug.debug('Stack : %s', + ('%s . %s' % (' '.join([xx.type for xx in symstack][1:]), str(lookahead))).lstrip()) + + if t is not None: + if t > 0: + # shift a symbol on the stack + statestack.append(t) + state = t + + if debug: + debug.debug('Action : Shift and goto state %s', t) + + symstack.append(lookahead) + lookahead = None + + # Decrease error count on successful shift + if errorcount: + errorcount -= 1 + continue + + if t < 0: + # reduce a symbol on the stack, emit a production + p = prod[-t] + pname = p.name + plen = p.len + + # Get production function + sym = YaccSymbol() + sym.type = pname # Production name + sym.value = None + + if debug: + if plen: + debug.info('Action : Reduce rule [%s] with %s and goto state %d', p.str, + '['+','.join([format_stack_entry(_v.value) for _v in symstack[-plen:]])+']', + goto[statestack[-1-plen]][pname]) + else: + debug.info('Action : Reduce rule [%s] with %s and goto state %d', p.str, [], + goto[statestack[-1]][pname]) + + if plen: + targ = symstack[-plen-1:] + targ[0] = sym + + if tracking: + t1 = targ[1] + sym.lineno = t1.lineno + sym.lexpos = t1.lexpos + t1 = targ[-1] + sym.endlineno = getattr(t1, 'endlineno', t1.lineno) + sym.endlexpos = getattr(t1, 'endlexpos', t1.lexpos) + + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + # The code enclosed in this section is duplicated + # below as a performance optimization. Make sure + # changes get made in both locations. + + pslice.slice = targ + + try: + # Call the grammar rule with our special slice object + del symstack[-plen:] + self.state = state + p.callable(pslice) + del statestack[-plen:] + if debug: + debug.info('Result : %s', format_result(pslice[0])) + symstack.append(sym) + state = goto[statestack[-1]][pname] + statestack.append(state) + except SyntaxError: + # If an error was set. Enter error recovery state + lookaheadstack.append(lookahead) # Save the current lookahead token + symstack.extend(targ[1:-1]) # Put the production slice back on the stack + statestack.pop() # Pop back one state (before the reduce) + state = statestack[-1] + sym.type = 'error' + sym.value = 'error' + lookahead = sym + errorcount = error_count + self.errorok = False + + continue + + else: + + if tracking: + sym.lineno = lexer.lineno + sym.lexpos = lexer.lexpos + + targ = [sym] + + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + # The code enclosed in this section is duplicated + # above as a performance optimization. Make sure + # changes get made in both locations. + + pslice.slice = targ + + try: + # Call the grammar rule with our special slice object + self.state = state + p.callable(pslice) + if debug: + debug.info('Result : %s', format_result(pslice[0])) + symstack.append(sym) + state = goto[statestack[-1]][pname] + statestack.append(state) + except SyntaxError: + # If an error was set. Enter error recovery state + lookaheadstack.append(lookahead) # Save the current lookahead token + statestack.pop() # Pop back one state (before the reduce) + state = statestack[-1] + sym.type = 'error' + sym.value = 'error' + lookahead = sym + errorcount = error_count + self.errorok = False + + continue + + if t == 0: + n = symstack[-1] + result = getattr(n, 'value', None) + + if debug: + debug.info('Done : Returning %s', format_result(result)) + debug.info('PLY: PARSE DEBUG END') + + return result + + if t is None: + + if debug: + debug.error('Error : %s', + ('%s . %s' % (' '.join([xx.type for xx in symstack][1:]), str(lookahead))).lstrip()) + + # We have some kind of parsing error here. To handle + # this, we are going to push the current token onto + # the tokenstack and replace it with an 'error' token. + # If there are any synchronization rules, they may + # catch it. + # + # In addition to pushing the error token, we call call + # the user defined p_error() function if this is the + # first syntax error. This function is only called if + # errorcount == 0. + if errorcount == 0 or self.errorok: + errorcount = error_count + self.errorok = False + errtoken = lookahead + if errtoken.type == '$end': + errtoken = None # End of file! + if self.errorfunc: + if errtoken and not hasattr(errtoken, 'lexer'): + errtoken.lexer = lexer + self.state = state + tok = self.errorfunc(errtoken) + if self.errorok: + # User must have done some kind of panic + # mode recovery on their own. The + # returned token is the next lookahead + lookahead = tok + errtoken = None + continue + else: + if errtoken: + if hasattr(errtoken, 'lineno'): + lineno = lookahead.lineno + else: + lineno = 0 + if lineno: + sys.stderr.write('yacc: Syntax error at line %d, token=%s\n' % (lineno, errtoken.type)) + else: + sys.stderr.write('yacc: Syntax error, token=%s' % errtoken.type) + else: + sys.stderr.write('yacc: Parse error in input. EOF\n') + return + + else: + errorcount = error_count + + # case 1: the statestack only has 1 entry on it. If we're in this state, the + # entire parse has been rolled back and we're completely hosed. The token is + # discarded and we just keep going. + + if len(statestack) <= 1 and lookahead.type != '$end': + lookahead = None + errtoken = None + state = 0 + # Nuke the pushback stack + del lookaheadstack[:] + continue + + # case 2: the statestack has a couple of entries on it, but we're + # at the end of the file. nuke the top entry and generate an error token + + # Start nuking entries on the stack + if lookahead.type == '$end': + # Whoa. We're really hosed here. Bail out + return + + if lookahead.type != 'error': + sym = symstack[-1] + if sym.type == 'error': + # Hmmm. Error is on top of stack, we'll just nuke input + # symbol and continue + if tracking: + sym.endlineno = getattr(lookahead, 'lineno', sym.lineno) + sym.endlexpos = getattr(lookahead, 'lexpos', sym.lexpos) + lookahead = None + continue + + # Create the error symbol for the first time and make it the new lookahead symbol + t = YaccSymbol() + t.type = 'error' + + if hasattr(lookahead, 'lineno'): + t.lineno = t.endlineno = lookahead.lineno + if hasattr(lookahead, 'lexpos'): + t.lexpos = t.endlexpos = lookahead.lexpos + t.value = lookahead + lookaheadstack.append(lookahead) + lookahead = t + else: + sym = symstack.pop() + if tracking: + lookahead.lineno = sym.lineno + lookahead.lexpos = sym.lexpos + statestack.pop() + state = statestack[-1] + + continue + + # If we'r here, something really bad happened + raise RuntimeError('yacc: internal parser error!!!\n') + +# ----------------------------------------------------------------------------- +# === Grammar Representation === +# +# The following functions, classes, and variables are used to represent and +# manipulate the rules that make up a grammar. +# ----------------------------------------------------------------------------- + +# regex matching identifiers +_is_identifier = re.compile(r'^[a-zA-Z0-9_-]+$') + +# ----------------------------------------------------------------------------- +# class Production: +# +# This class stores the raw information about a single production or grammar rule. +# A grammar rule refers to a specification such as this: +# +# expr : expr PLUS term +# +# Here are the basic attributes defined on all productions +# +# name - Name of the production. For example 'expr' +# prod - A list of symbols on the right side ['expr','PLUS','term'] +# prec - Production precedence level +# number - Production number. +# func - Function that executes on reduce +# file - File where production function is defined +# lineno - Line number where production function is defined +# +# The following attributes are defined or optional. +# +# len - Length of the production (number of symbols on right hand side) +# usyms - Set of unique symbols found in the production +# ----------------------------------------------------------------------------- + +class Production(object): + reduced = 0 + def __init__(self, number, name, prod, precedence=('right', 0), func=None, file='', line=0): + self.name = name + self.prod = tuple(prod) + self.number = number + self.func = func + self.callable = None + self.file = file + self.line = line + self.prec = precedence + + # Internal settings used during table construction + + self.len = len(self.prod) # Length of the production + + # Create a list of unique production symbols used in the production + self.usyms = [] + for s in self.prod: + if s not in self.usyms: + self.usyms.append(s) + + # List of all LR items for the production + self.lr_items = [] + self.lr_next = None + + # Create a string representation + if self.prod: + self.str = '%s -> %s' % (self.name, ' '.join(self.prod)) + else: + self.str = '%s -> ' % self.name + + def __str__(self): + return self.str + + def __repr__(self): + return 'Production(' + str(self) + ')' + + def __len__(self): + return len(self.prod) + + def __nonzero__(self): + return 1 + + def __getitem__(self, index): + return self.prod[index] + + # Return the nth lr_item from the production (or None if at the end) + def lr_item(self, n): + if n > len(self.prod): + return None + p = LRItem(self, n) + # Precompute the list of productions immediately following. + try: + p.lr_after = self.Prodnames[p.prod[n+1]] + except (IndexError, KeyError): + p.lr_after = [] + try: + p.lr_before = p.prod[n-1] + except IndexError: + p.lr_before = None + return p + + # Bind the production function name to a callable + def bind(self, pdict): + if self.func: + self.callable = pdict[self.func] + +# ----------------------------------------------------------------------------- +# class LRItem +# +# This class represents a specific stage of parsing a production rule. For +# example: +# +# expr : expr . PLUS term +# +# In the above, the "." represents the current location of the parse. Here +# basic attributes: +# +# name - Name of the production. For example 'expr' +# prod - A list of symbols on the right side ['expr','.', 'PLUS','term'] +# number - Production number. +# +# lr_next Next LR item. Example, if we are ' expr -> expr . PLUS term' +# then lr_next refers to 'expr -> expr PLUS . term' +# lr_index - LR item index (location of the ".") in the prod list. +# lookaheads - LALR lookahead symbols for this item +# len - Length of the production (number of symbols on right hand side) +# lr_after - List of all productions that immediately follow +# lr_before - Grammar symbol immediately before +# ----------------------------------------------------------------------------- + +class LRItem(object): + def __init__(self, p, n): + self.name = p.name + self.prod = list(p.prod) + self.number = p.number + self.lr_index = n + self.lookaheads = {} + self.prod.insert(n, '.') + self.prod = tuple(self.prod) + self.len = len(self.prod) + self.usyms = p.usyms + + def __str__(self): + if self.prod: + s = '%s -> %s' % (self.name, ' '.join(self.prod)) + else: + s = '%s -> ' % self.name + return s + + def __repr__(self): + return 'LRItem(' + str(self) + ')' + +# ----------------------------------------------------------------------------- +# rightmost_terminal() +# +# Return the rightmost terminal from a list of symbols. Used in add_production() +# ----------------------------------------------------------------------------- +def rightmost_terminal(symbols, terminals): + i = len(symbols) - 1 + while i >= 0: + if symbols[i] in terminals: + return symbols[i] + i -= 1 + return None + +# ----------------------------------------------------------------------------- +# === GRAMMAR CLASS === +# +# The following class represents the contents of the specified grammar along +# with various computed properties such as first sets, follow sets, LR items, etc. +# This data is used for critical parts of the table generation process later. +# ----------------------------------------------------------------------------- + +class GrammarError(YaccError): + pass + +class Grammar(object): + def __init__(self, terminals): + self.Productions = [None] # A list of all of the productions. The first + # entry is always reserved for the purpose of + # building an augmented grammar + + self.Prodnames = {} # A dictionary mapping the names of nonterminals to a list of all + # productions of that nonterminal. + + self.Prodmap = {} # A dictionary that is only used to detect duplicate + # productions. + + self.Terminals = {} # A dictionary mapping the names of terminal symbols to a + # list of the rules where they are used. + + for term in terminals: + self.Terminals[term] = [] + + self.Terminals['error'] = [] + + self.Nonterminals = {} # A dictionary mapping names of nonterminals to a list + # of rule numbers where they are used. + + self.First = {} # A dictionary of precomputed FIRST(x) symbols + + self.Follow = {} # A dictionary of precomputed FOLLOW(x) symbols + + self.Precedence = {} # Precedence rules for each terminal. Contains tuples of the + # form ('right',level) or ('nonassoc', level) or ('left',level) + + self.UsedPrecedence = set() # Precedence rules that were actually used by the grammer. + # This is only used to provide error checking and to generate + # a warning about unused precedence rules. + + self.Start = None # Starting symbol for the grammar + + + def __len__(self): + return len(self.Productions) + + def __getitem__(self, index): + return self.Productions[index] + + # ----------------------------------------------------------------------------- + # set_precedence() + # + # Sets the precedence for a given terminal. assoc is the associativity such as + # 'left','right', or 'nonassoc'. level is a numeric level. + # + # ----------------------------------------------------------------------------- + + def set_precedence(self, term, assoc, level): + assert self.Productions == [None], 'Must call set_precedence() before add_production()' + if term in self.Precedence: + raise GrammarError('Precedence already specified for terminal %r' % term) + if assoc not in ['left', 'right', 'nonassoc']: + raise GrammarError("Associativity must be one of 'left','right', or 'nonassoc'") + self.Precedence[term] = (assoc, level) + + # ----------------------------------------------------------------------------- + # add_production() + # + # Given an action function, this function assembles a production rule and + # computes its precedence level. + # + # The production rule is supplied as a list of symbols. For example, + # a rule such as 'expr : expr PLUS term' has a production name of 'expr' and + # symbols ['expr','PLUS','term']. + # + # Precedence is determined by the precedence of the right-most non-terminal + # or the precedence of a terminal specified by %prec. + # + # A variety of error checks are performed to make sure production symbols + # are valid and that %prec is used correctly. + # ----------------------------------------------------------------------------- + + def add_production(self, prodname, syms, func=None, file='', line=0): + + if prodname in self.Terminals: + raise GrammarError('%s:%d: Illegal rule name %r. Already defined as a token' % (file, line, prodname)) + if prodname == 'error': + raise GrammarError('%s:%d: Illegal rule name %r. error is a reserved word' % (file, line, prodname)) + if not _is_identifier.match(prodname): + raise GrammarError('%s:%d: Illegal rule name %r' % (file, line, prodname)) + + # Look for literal tokens + for n, s in enumerate(syms): + if s[0] in "'\"": + try: + c = eval(s) + if (len(c) > 1): + raise GrammarError('%s:%d: Literal token %s in rule %r may only be a single character' % + (file, line, s, prodname)) + if c not in self.Terminals: + self.Terminals[c] = [] + syms[n] = c + continue + except SyntaxError: + pass + if not _is_identifier.match(s) and s != '%prec': + raise GrammarError('%s:%d: Illegal name %r in rule %r' % (file, line, s, prodname)) + + # Determine the precedence level + if '%prec' in syms: + if syms[-1] == '%prec': + raise GrammarError('%s:%d: Syntax error. Nothing follows %%prec' % (file, line)) + if syms[-2] != '%prec': + raise GrammarError('%s:%d: Syntax error. %%prec can only appear at the end of a grammar rule' % + (file, line)) + precname = syms[-1] + prodprec = self.Precedence.get(precname) + if not prodprec: + raise GrammarError('%s:%d: Nothing known about the precedence of %r' % (file, line, precname)) + else: + self.UsedPrecedence.add(precname) + del syms[-2:] # Drop %prec from the rule + else: + # If no %prec, precedence is determined by the rightmost terminal symbol + precname = rightmost_terminal(syms, self.Terminals) + prodprec = self.Precedence.get(precname, ('right', 0)) + + # See if the rule is already in the rulemap + map = '%s -> %s' % (prodname, syms) + if map in self.Prodmap: + m = self.Prodmap[map] + raise GrammarError('%s:%d: Duplicate rule %s. ' % (file, line, m) + + 'Previous definition at %s:%d' % (m.file, m.line)) + + # From this point on, everything is valid. Create a new Production instance + pnumber = len(self.Productions) + if prodname not in self.Nonterminals: + self.Nonterminals[prodname] = [] + + # Add the production number to Terminals and Nonterminals + for t in syms: + if t in self.Terminals: + self.Terminals[t].append(pnumber) + else: + if t not in self.Nonterminals: + self.Nonterminals[t] = [] + self.Nonterminals[t].append(pnumber) + + # Create a production and add it to the list of productions + p = Production(pnumber, prodname, syms, prodprec, func, file, line) + self.Productions.append(p) + self.Prodmap[map] = p + + # Add to the global productions list + try: + self.Prodnames[prodname].append(p) + except KeyError: + self.Prodnames[prodname] = [p] + + # ----------------------------------------------------------------------------- + # set_start() + # + # Sets the starting symbol and creates the augmented grammar. Production + # rule 0 is S' -> start where start is the start symbol. + # ----------------------------------------------------------------------------- + + def set_start(self, start=None): + if not start: + start = self.Productions[1].name + if start not in self.Nonterminals: + raise GrammarError('start symbol %s undefined' % start) + self.Productions[0] = Production(0, "S'", [start]) + self.Nonterminals[start].append(0) + self.Start = start + + # ----------------------------------------------------------------------------- + # find_unreachable() + # + # Find all of the nonterminal symbols that can't be reached from the starting + # symbol. Returns a list of nonterminals that can't be reached. + # ----------------------------------------------------------------------------- + + def find_unreachable(self): + + # Mark all symbols that are reachable from a symbol s + def mark_reachable_from(s): + if s in reachable: + return + reachable.add(s) + for p in self.Prodnames.get(s, []): + for r in p.prod: + mark_reachable_from(r) + + reachable = set() + mark_reachable_from(self.Productions[0].prod[0]) + return [s for s in self.Nonterminals if s not in reachable] + + # ----------------------------------------------------------------------------- + # infinite_cycles() + # + # This function looks at the various parsing rules and tries to detect + # infinite recursion cycles (grammar rules where there is no possible way + # to derive a string of only terminals). + # ----------------------------------------------------------------------------- + + def infinite_cycles(self): + terminates = {} + + # Terminals: + for t in self.Terminals: + terminates[t] = True + + terminates['$end'] = True + + # Nonterminals: + + # Initialize to false: + for n in self.Nonterminals: + terminates[n] = False + + # Then propagate termination until no change: + while True: + some_change = False + for (n, pl) in self.Prodnames.items(): + # Nonterminal n terminates iff any of its productions terminates. + for p in pl: + # Production p terminates iff all of its rhs symbols terminate. + for s in p.prod: + if not terminates[s]: + # The symbol s does not terminate, + # so production p does not terminate. + p_terminates = False + break + else: + # didn't break from the loop, + # so every symbol s terminates + # so production p terminates. + p_terminates = True + + if p_terminates: + # symbol n terminates! + if not terminates[n]: + terminates[n] = True + some_change = True + # Don't need to consider any more productions for this n. + break + + if not some_change: + break + + infinite = [] + for (s, term) in terminates.items(): + if not term: + if s not in self.Prodnames and s not in self.Terminals and s != 'error': + # s is used-but-not-defined, and we've already warned of that, + # so it would be overkill to say that it's also non-terminating. + pass + else: + infinite.append(s) + + return infinite + + # ----------------------------------------------------------------------------- + # undefined_symbols() + # + # Find all symbols that were used the grammar, but not defined as tokens or + # grammar rules. Returns a list of tuples (sym, prod) where sym in the symbol + # and prod is the production where the symbol was used. + # ----------------------------------------------------------------------------- + def undefined_symbols(self): + result = [] + for p in self.Productions: + if not p: + continue + + for s in p.prod: + if s not in self.Prodnames and s not in self.Terminals and s != 'error': + result.append((s, p)) + return result + + # ----------------------------------------------------------------------------- + # unused_terminals() + # + # Find all terminals that were defined, but not used by the grammar. Returns + # a list of all symbols. + # ----------------------------------------------------------------------------- + def unused_terminals(self): + unused_tok = [] + for s, v in self.Terminals.items(): + if s != 'error' and not v: + unused_tok.append(s) + + return unused_tok + + # ------------------------------------------------------------------------------ + # unused_rules() + # + # Find all grammar rules that were defined, but not used (maybe not reachable) + # Returns a list of productions. + # ------------------------------------------------------------------------------ + + def unused_rules(self): + unused_prod = [] + for s, v in self.Nonterminals.items(): + if not v: + p = self.Prodnames[s][0] + unused_prod.append(p) + return unused_prod + + # ----------------------------------------------------------------------------- + # unused_precedence() + # + # Returns a list of tuples (term,precedence) corresponding to precedence + # rules that were never used by the grammar. term is the name of the terminal + # on which precedence was applied and precedence is a string such as 'left' or + # 'right' corresponding to the type of precedence. + # ----------------------------------------------------------------------------- + + def unused_precedence(self): + unused = [] + for termname in self.Precedence: + if not (termname in self.Terminals or termname in self.UsedPrecedence): + unused.append((termname, self.Precedence[termname][0])) + + return unused + + # ------------------------------------------------------------------------- + # _first() + # + # Compute the value of FIRST1(beta) where beta is a tuple of symbols. + # + # During execution of compute_first1, the result may be incomplete. + # Afterward (e.g., when called from compute_follow()), it will be complete. + # ------------------------------------------------------------------------- + def _first(self, beta): + + # We are computing First(x1,x2,x3,...,xn) + result = [] + for x in beta: + x_produces_empty = False + + # Add all the non- symbols of First[x] to the result. + for f in self.First[x]: + if f == '': + x_produces_empty = True + else: + if f not in result: + result.append(f) + + if x_produces_empty: + # We have to consider the next x in beta, + # i.e. stay in the loop. + pass + else: + # We don't have to consider any further symbols in beta. + break + else: + # There was no 'break' from the loop, + # so x_produces_empty was true for all x in beta, + # so beta produces empty as well. + result.append('') + + return result + + # ------------------------------------------------------------------------- + # compute_first() + # + # Compute the value of FIRST1(X) for all symbols + # ------------------------------------------------------------------------- + def compute_first(self): + if self.First: + return self.First + + # Terminals: + for t in self.Terminals: + self.First[t] = [t] + + self.First['$end'] = ['$end'] + + # Nonterminals: + + # Initialize to the empty set: + for n in self.Nonterminals: + self.First[n] = [] + + # Then propagate symbols until no change: + while True: + some_change = False + for n in self.Nonterminals: + for p in self.Prodnames[n]: + for f in self._first(p.prod): + if f not in self.First[n]: + self.First[n].append(f) + some_change = True + if not some_change: + break + + return self.First + + # --------------------------------------------------------------------- + # compute_follow() + # + # Computes all of the follow sets for every non-terminal symbol. The + # follow set is the set of all symbols that might follow a given + # non-terminal. See the Dragon book, 2nd Ed. p. 189. + # --------------------------------------------------------------------- + def compute_follow(self, start=None): + # If already computed, return the result + if self.Follow: + return self.Follow + + # If first sets not computed yet, do that first. + if not self.First: + self.compute_first() + + # Add '$end' to the follow list of the start symbol + for k in self.Nonterminals: + self.Follow[k] = [] + + if not start: + start = self.Productions[1].name + + self.Follow[start] = ['$end'] + + while True: + didadd = False + for p in self.Productions[1:]: + # Here is the production set + for i, B in enumerate(p.prod): + if B in self.Nonterminals: + # Okay. We got a non-terminal in a production + fst = self._first(p.prod[i+1:]) + hasempty = False + for f in fst: + if f != '' and f not in self.Follow[B]: + self.Follow[B].append(f) + didadd = True + if f == '': + hasempty = True + if hasempty or i == (len(p.prod)-1): + # Add elements of follow(a) to follow(b) + for f in self.Follow[p.name]: + if f not in self.Follow[B]: + self.Follow[B].append(f) + didadd = True + if not didadd: + break + return self.Follow + + + # ----------------------------------------------------------------------------- + # build_lritems() + # + # This function walks the list of productions and builds a complete set of the + # LR items. The LR items are stored in two ways: First, they are uniquely + # numbered and placed in the list _lritems. Second, a linked list of LR items + # is built for each production. For example: + # + # E -> E PLUS E + # + # Creates the list + # + # [E -> . E PLUS E, E -> E . PLUS E, E -> E PLUS . E, E -> E PLUS E . ] + # ----------------------------------------------------------------------------- + + def build_lritems(self): + for p in self.Productions: + lastlri = p + i = 0 + lr_items = [] + while True: + if i > len(p): + lri = None + else: + lri = LRItem(p, i) + # Precompute the list of productions immediately following + try: + lri.lr_after = self.Prodnames[lri.prod[i+1]] + except (IndexError, KeyError): + lri.lr_after = [] + try: + lri.lr_before = lri.prod[i-1] + except IndexError: + lri.lr_before = None + + lastlri.lr_next = lri + if not lri: + break + lr_items.append(lri) + lastlri = lri + i += 1 + p.lr_items = lr_items + +# ----------------------------------------------------------------------------- +# === LR Generator === +# +# The following classes and functions are used to generate LR parsing tables on +# a grammar. +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# digraph() +# traverse() +# +# The following two functions are used to compute set valued functions +# of the form: +# +# F(x) = F'(x) U U{F(y) | x R y} +# +# This is used to compute the values of Read() sets as well as FOLLOW sets +# in LALR(1) generation. +# +# Inputs: X - An input set +# R - A relation +# FP - Set-valued function +# ------------------------------------------------------------------------------ + +def digraph(X, R, FP): + N = {} + for x in X: + N[x] = 0 + stack = [] + F = {} + for x in X: + if N[x] == 0: + traverse(x, N, stack, F, X, R, FP) + return F + +def traverse(x, N, stack, F, X, R, FP): + stack.append(x) + d = len(stack) + N[x] = d + F[x] = FP(x) # F(X) <- F'(x) + + rel = R(x) # Get y's related to x + for y in rel: + if N[y] == 0: + traverse(y, N, stack, F, X, R, FP) + N[x] = min(N[x], N[y]) + for a in F.get(y, []): + if a not in F[x]: + F[x].append(a) + if N[x] == d: + N[stack[-1]] = MAXINT + F[stack[-1]] = F[x] + element = stack.pop() + while element != x: + N[stack[-1]] = MAXINT + F[stack[-1]] = F[x] + element = stack.pop() + +class LALRError(YaccError): + pass + + +# ----------------------------------------------------------------------------- +# == LRTable == +# +# This class implements the LR table generation algorithm. There are no +# public methods. +# ----------------------------------------------------------------------------- + +class LRTable: + def __init__(self, grammar, log=None): + self.grammar = grammar + + # Set up the logger + if not log: + log = NullLogger() + self.log = log + + # Internal attributes + self.lr_action = {} # Action table + self.lr_goto = {} # Goto table + self.lr_productions = grammar.Productions # Copy of grammar Production array + self.lr_goto_cache = {} # Cache of computed gotos + self.lr0_cidhash = {} # Cache of closures + + self._add_count = 0 # Internal counter used to detect cycles + + # Diagnostic information filled in by the table generator + self.sr_conflict = 0 + self.rr_conflict = 0 + self.conflicts = [] # List of conflicts + + self.sr_conflicts = [] + self.rr_conflicts = [] + + # Build the tables + self.grammar.build_lritems() + self.grammar.compute_first() + self.grammar.compute_follow() + self.lr_parse_table() + + # Bind all production function names to callable objects in pdict + def bind_callables(self, pdict): + for p in self.lr_productions: + p.bind(pdict) + + # Compute the LR(0) closure operation on I, where I is a set of LR(0) items. + + def lr0_closure(self, I): + self._add_count += 1 + + # Add everything in I to J + J = I[:] + didadd = True + while didadd: + didadd = False + for j in J: + for x in j.lr_after: + if getattr(x, 'lr0_added', 0) == self._add_count: + continue + # Add B --> .G to J + J.append(x.lr_next) + x.lr0_added = self._add_count + didadd = True + + return J + + # Compute the LR(0) goto function goto(I,X) where I is a set + # of LR(0) items and X is a grammar symbol. This function is written + # in a way that guarantees uniqueness of the generated goto sets + # (i.e. the same goto set will never be returned as two different Python + # objects). With uniqueness, we can later do fast set comparisons using + # id(obj) instead of element-wise comparison. + + def lr0_goto(self, I, x): + # First we look for a previously cached entry + g = self.lr_goto_cache.get((id(I), x)) + if g: + return g + + # Now we generate the goto set in a way that guarantees uniqueness + # of the result + + s = self.lr_goto_cache.get(x) + if not s: + s = {} + self.lr_goto_cache[x] = s + + gs = [] + for p in I: + n = p.lr_next + if n and n.lr_before == x: + s1 = s.get(id(n)) + if not s1: + s1 = {} + s[id(n)] = s1 + gs.append(n) + s = s1 + g = s.get('$end') + if not g: + if gs: + g = self.lr0_closure(gs) + s['$end'] = g + else: + s['$end'] = gs + self.lr_goto_cache[(id(I), x)] = g + return g + + # Compute the LR(0) sets of item function + def lr0_items(self): + C = [self.lr0_closure([self.grammar.Productions[0].lr_next])] + i = 0 + for I in C: + self.lr0_cidhash[id(I)] = i + i += 1 + + # Loop over the items in C and each grammar symbols + i = 0 + while i < len(C): + I = C[i] + i += 1 + + # Collect all of the symbols that could possibly be in the goto(I,X) sets + asyms = {} + for ii in I: + for s in ii.usyms: + asyms[s] = None + + for x in asyms: + g = self.lr0_goto(I, x) + if not g or id(g) in self.lr0_cidhash: + continue + self.lr0_cidhash[id(g)] = len(C) + C.append(g) + + return C + + # ----------------------------------------------------------------------------- + # ==== LALR(1) Parsing ==== + # + # LALR(1) parsing is almost exactly the same as SLR except that instead of + # relying upon Follow() sets when performing reductions, a more selective + # lookahead set that incorporates the state of the LR(0) machine is utilized. + # Thus, we mainly just have to focus on calculating the lookahead sets. + # + # The method used here is due to DeRemer and Pennelo (1982). + # + # DeRemer, F. L., and T. J. Pennelo: "Efficient Computation of LALR(1) + # Lookahead Sets", ACM Transactions on Programming Languages and Systems, + # Vol. 4, No. 4, Oct. 1982, pp. 615-649 + # + # Further details can also be found in: + # + # J. Tremblay and P. Sorenson, "The Theory and Practice of Compiler Writing", + # McGraw-Hill Book Company, (1985). + # + # ----------------------------------------------------------------------------- + + # ----------------------------------------------------------------------------- + # compute_nullable_nonterminals() + # + # Creates a dictionary containing all of the non-terminals that might produce + # an empty production. + # ----------------------------------------------------------------------------- + + def compute_nullable_nonterminals(self): + nullable = set() + num_nullable = 0 + while True: + for p in self.grammar.Productions[1:]: + if p.len == 0: + nullable.add(p.name) + continue + for t in p.prod: + if t not in nullable: + break + else: + nullable.add(p.name) + if len(nullable) == num_nullable: + break + num_nullable = len(nullable) + return nullable + + # ----------------------------------------------------------------------------- + # find_nonterminal_trans(C) + # + # Given a set of LR(0) items, this functions finds all of the non-terminal + # transitions. These are transitions in which a dot appears immediately before + # a non-terminal. Returns a list of tuples of the form (state,N) where state + # is the state number and N is the nonterminal symbol. + # + # The input C is the set of LR(0) items. + # ----------------------------------------------------------------------------- + + def find_nonterminal_transitions(self, C): + trans = [] + for stateno, state in enumerate(C): + for p in state: + if p.lr_index < p.len - 1: + t = (stateno, p.prod[p.lr_index+1]) + if t[1] in self.grammar.Nonterminals: + if t not in trans: + trans.append(t) + return trans + + # ----------------------------------------------------------------------------- + # dr_relation() + # + # Computes the DR(p,A) relationships for non-terminal transitions. The input + # is a tuple (state,N) where state is a number and N is a nonterminal symbol. + # + # Returns a list of terminals. + # ----------------------------------------------------------------------------- + + def dr_relation(self, C, trans, nullable): + state, N = trans + terms = [] + + g = self.lr0_goto(C[state], N) + for p in g: + if p.lr_index < p.len - 1: + a = p.prod[p.lr_index+1] + if a in self.grammar.Terminals: + if a not in terms: + terms.append(a) + + # This extra bit is to handle the start state + if state == 0 and N == self.grammar.Productions[0].prod[0]: + terms.append('$end') + + return terms + + # ----------------------------------------------------------------------------- + # reads_relation() + # + # Computes the READS() relation (p,A) READS (t,C). + # ----------------------------------------------------------------------------- + + def reads_relation(self, C, trans, empty): + # Look for empty transitions + rel = [] + state, N = trans + + g = self.lr0_goto(C[state], N) + j = self.lr0_cidhash.get(id(g), -1) + for p in g: + if p.lr_index < p.len - 1: + a = p.prod[p.lr_index + 1] + if a in empty: + rel.append((j, a)) + + return rel + + # ----------------------------------------------------------------------------- + # compute_lookback_includes() + # + # Determines the lookback and includes relations + # + # LOOKBACK: + # + # This relation is determined by running the LR(0) state machine forward. + # For example, starting with a production "N : . A B C", we run it forward + # to obtain "N : A B C ." We then build a relationship between this final + # state and the starting state. These relationships are stored in a dictionary + # lookdict. + # + # INCLUDES: + # + # Computes the INCLUDE() relation (p,A) INCLUDES (p',B). + # + # This relation is used to determine non-terminal transitions that occur + # inside of other non-terminal transition states. (p,A) INCLUDES (p', B) + # if the following holds: + # + # B -> LAT, where T -> epsilon and p' -L-> p + # + # L is essentially a prefix (which may be empty), T is a suffix that must be + # able to derive an empty string. State p' must lead to state p with the string L. + # + # ----------------------------------------------------------------------------- + + def compute_lookback_includes(self, C, trans, nullable): + lookdict = {} # Dictionary of lookback relations + includedict = {} # Dictionary of include relations + + # Make a dictionary of non-terminal transitions + dtrans = {} + for t in trans: + dtrans[t] = 1 + + # Loop over all transitions and compute lookbacks and includes + for state, N in trans: + lookb = [] + includes = [] + for p in C[state]: + if p.name != N: + continue + + # Okay, we have a name match. We now follow the production all the way + # through the state machine until we get the . on the right hand side + + lr_index = p.lr_index + j = state + while lr_index < p.len - 1: + lr_index = lr_index + 1 + t = p.prod[lr_index] + + # Check to see if this symbol and state are a non-terminal transition + if (j, t) in dtrans: + # Yes. Okay, there is some chance that this is an includes relation + # the only way to know for certain is whether the rest of the + # production derives empty + + li = lr_index + 1 + while li < p.len: + if p.prod[li] in self.grammar.Terminals: + break # No forget it + if p.prod[li] not in nullable: + break + li = li + 1 + else: + # Appears to be a relation between (j,t) and (state,N) + includes.append((j, t)) + + g = self.lr0_goto(C[j], t) # Go to next set + j = self.lr0_cidhash.get(id(g), -1) # Go to next state + + # When we get here, j is the final state, now we have to locate the production + for r in C[j]: + if r.name != p.name: + continue + if r.len != p.len: + continue + i = 0 + # This look is comparing a production ". A B C" with "A B C ." + while i < r.lr_index: + if r.prod[i] != p.prod[i+1]: + break + i = i + 1 + else: + lookb.append((j, r)) + for i in includes: + if i not in includedict: + includedict[i] = [] + includedict[i].append((state, N)) + lookdict[(state, N)] = lookb + + return lookdict, includedict + + # ----------------------------------------------------------------------------- + # compute_read_sets() + # + # Given a set of LR(0) items, this function computes the read sets. + # + # Inputs: C = Set of LR(0) items + # ntrans = Set of nonterminal transitions + # nullable = Set of empty transitions + # + # Returns a set containing the read sets + # ----------------------------------------------------------------------------- + + def compute_read_sets(self, C, ntrans, nullable): + FP = lambda x: self.dr_relation(C, x, nullable) + R = lambda x: self.reads_relation(C, x, nullable) + F = digraph(ntrans, R, FP) + return F + + # ----------------------------------------------------------------------------- + # compute_follow_sets() + # + # Given a set of LR(0) items, a set of non-terminal transitions, a readset, + # and an include set, this function computes the follow sets + # + # Follow(p,A) = Read(p,A) U U {Follow(p',B) | (p,A) INCLUDES (p',B)} + # + # Inputs: + # ntrans = Set of nonterminal transitions + # readsets = Readset (previously computed) + # inclsets = Include sets (previously computed) + # + # Returns a set containing the follow sets + # ----------------------------------------------------------------------------- + + def compute_follow_sets(self, ntrans, readsets, inclsets): + FP = lambda x: readsets[x] + R = lambda x: inclsets.get(x, []) + F = digraph(ntrans, R, FP) + return F + + # ----------------------------------------------------------------------------- + # add_lookaheads() + # + # Attaches the lookahead symbols to grammar rules. + # + # Inputs: lookbacks - Set of lookback relations + # followset - Computed follow set + # + # This function directly attaches the lookaheads to productions contained + # in the lookbacks set + # ----------------------------------------------------------------------------- + + def add_lookaheads(self, lookbacks, followset): + for trans, lb in lookbacks.items(): + # Loop over productions in lookback + for state, p in lb: + if state not in p.lookaheads: + p.lookaheads[state] = [] + f = followset.get(trans, []) + for a in f: + if a not in p.lookaheads[state]: + p.lookaheads[state].append(a) + + # ----------------------------------------------------------------------------- + # add_lalr_lookaheads() + # + # This function does all of the work of adding lookahead information for use + # with LALR parsing + # ----------------------------------------------------------------------------- + + def add_lalr_lookaheads(self, C): + # Determine all of the nullable nonterminals + nullable = self.compute_nullable_nonterminals() + + # Find all non-terminal transitions + trans = self.find_nonterminal_transitions(C) + + # Compute read sets + readsets = self.compute_read_sets(C, trans, nullable) + + # Compute lookback/includes relations + lookd, included = self.compute_lookback_includes(C, trans, nullable) + + # Compute LALR FOLLOW sets + followsets = self.compute_follow_sets(trans, readsets, included) + + # Add all of the lookaheads + self.add_lookaheads(lookd, followsets) + + # ----------------------------------------------------------------------------- + # lr_parse_table() + # + # This function constructs the parse tables for SLR or LALR + # ----------------------------------------------------------------------------- + def lr_parse_table(self): + Productions = self.grammar.Productions + Precedence = self.grammar.Precedence + goto = self.lr_goto # Goto array + action = self.lr_action # Action array + log = self.log # Logger for output + + actionp = {} # Action production array (temporary) + + # Step 1: Construct C = { I0, I1, ... IN}, collection of LR(0) items + # This determines the number of states + + C = self.lr0_items() + self.add_lalr_lookaheads(C) + + # Build the parser table, state by state + st = 0 + for I in C: + # Loop over each production in I + actlist = [] # List of actions + st_action = {} + st_actionp = {} + st_goto = {} + log.info('') + log.info('state %d', st) + log.info('') + for p in I: + log.info(' (%d) %s', p.number, p) + log.info('') + + for p in I: + if p.len == p.lr_index + 1: + if p.name == "S'": + # Start symbol. Accept! + st_action['$end'] = 0 + st_actionp['$end'] = p + else: + # We are at the end of a production. Reduce! + laheads = p.lookaheads[st] + for a in laheads: + actlist.append((a, p, 'reduce using rule %d (%s)' % (p.number, p))) + r = st_action.get(a) + if r is not None: + # Whoa. Have a shift/reduce or reduce/reduce conflict + if r > 0: + # Need to decide on shift or reduce here + # By default we favor shifting. Need to add + # some precedence rules here. + + # Shift precedence comes from the token + sprec, slevel = Precedence.get(a, ('right', 0)) + + # Reduce precedence comes from rule being reduced (p) + rprec, rlevel = Productions[p.number].prec + + if (slevel < rlevel) or ((slevel == rlevel) and (rprec == 'left')): + # We really need to reduce here. + st_action[a] = -p.number + st_actionp[a] = p + if not slevel and not rlevel: + log.info(' ! shift/reduce conflict for %s resolved as reduce', a) + self.sr_conflicts.append((st, a, 'reduce')) + Productions[p.number].reduced += 1 + elif (slevel == rlevel) and (rprec == 'nonassoc'): + st_action[a] = None + else: + # Hmmm. Guess we'll keep the shift + if not rlevel: + log.info(' ! shift/reduce conflict for %s resolved as shift', a) + self.sr_conflicts.append((st, a, 'shift')) + elif r < 0: + # Reduce/reduce conflict. In this case, we favor the rule + # that was defined first in the grammar file + oldp = Productions[-r] + pp = Productions[p.number] + if oldp.line > pp.line: + st_action[a] = -p.number + st_actionp[a] = p + chosenp, rejectp = pp, oldp + Productions[p.number].reduced += 1 + Productions[oldp.number].reduced -= 1 + else: + chosenp, rejectp = oldp, pp + self.rr_conflicts.append((st, chosenp, rejectp)) + log.info(' ! reduce/reduce conflict for %s resolved using rule %d (%s)', + a, st_actionp[a].number, st_actionp[a]) + else: + raise LALRError('Unknown conflict in state %d' % st) + else: + st_action[a] = -p.number + st_actionp[a] = p + Productions[p.number].reduced += 1 + else: + i = p.lr_index + a = p.prod[i+1] # Get symbol right after the "." + if a in self.grammar.Terminals: + g = self.lr0_goto(I, a) + j = self.lr0_cidhash.get(id(g), -1) + if j >= 0: + # We are in a shift state + actlist.append((a, p, 'shift and go to state %d' % j)) + r = st_action.get(a) + if r is not None: + # Whoa have a shift/reduce or shift/shift conflict + if r > 0: + if r != j: + raise LALRError('Shift/shift conflict in state %d' % st) + elif r < 0: + # Do a precedence check. + # - if precedence of reduce rule is higher, we reduce. + # - if precedence of reduce is same and left assoc, we reduce. + # - otherwise we shift + + # Shift precedence comes from the token + sprec, slevel = Precedence.get(a, ('right', 0)) + + # Reduce precedence comes from the rule that could have been reduced + rprec, rlevel = Productions[st_actionp[a].number].prec + + if (slevel > rlevel) or ((slevel == rlevel) and (rprec == 'right')): + # We decide to shift here... highest precedence to shift + Productions[st_actionp[a].number].reduced -= 1 + st_action[a] = j + st_actionp[a] = p + if not rlevel: + log.info(' ! shift/reduce conflict for %s resolved as shift', a) + self.sr_conflicts.append((st, a, 'shift')) + elif (slevel == rlevel) and (rprec == 'nonassoc'): + st_action[a] = None + else: + # Hmmm. Guess we'll keep the reduce + if not slevel and not rlevel: + log.info(' ! shift/reduce conflict for %s resolved as reduce', a) + self.sr_conflicts.append((st, a, 'reduce')) + + else: + raise LALRError('Unknown conflict in state %d' % st) + else: + st_action[a] = j + st_actionp[a] = p + + # Print the actions associated with each terminal + _actprint = {} + for a, p, m in actlist: + if a in st_action: + if p is st_actionp[a]: + log.info(' %-15s %s', a, m) + _actprint[(a, m)] = 1 + log.info('') + # Print the actions that were not used. (debugging) + not_used = 0 + for a, p, m in actlist: + if a in st_action: + if p is not st_actionp[a]: + if not (a, m) in _actprint: + log.debug(' ! %-15s [ %s ]', a, m) + not_used = 1 + _actprint[(a, m)] = 1 + if not_used: + log.debug('') + + # Construct the goto table for this state + + nkeys = {} + for ii in I: + for s in ii.usyms: + if s in self.grammar.Nonterminals: + nkeys[s] = None + for n in nkeys: + g = self.lr0_goto(I, n) + j = self.lr0_cidhash.get(id(g), -1) + if j >= 0: + st_goto[n] = j + log.info(' %-30s shift and go to state %d', n, j) + + action[st] = st_action + actionp[st] = st_actionp + goto[st] = st_goto + st += 1 + +# ----------------------------------------------------------------------------- +# === INTROSPECTION === +# +# The following functions and classes are used to implement the PLY +# introspection features followed by the yacc() function itself. +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# get_caller_module_dict() +# +# This function returns a dictionary containing all of the symbols defined within +# a caller further down the call stack. This is used to get the environment +# associated with the yacc() call if none was provided. +# ----------------------------------------------------------------------------- + +def get_caller_module_dict(levels): + f = sys._getframe(levels) + ldict = f.f_globals.copy() + if f.f_globals != f.f_locals: + ldict.update(f.f_locals) + return ldict + +# ----------------------------------------------------------------------------- +# parse_grammar() +# +# This takes a raw grammar rule string and parses it into production data +# ----------------------------------------------------------------------------- +def parse_grammar(doc, file, line): + grammar = [] + # Split the doc string into lines + pstrings = doc.splitlines() + lastp = None + dline = line + for ps in pstrings: + dline += 1 + p = ps.split() + if not p: + continue + try: + if p[0] == '|': + # This is a continuation of a previous rule + if not lastp: + raise SyntaxError("%s:%d: Misplaced '|'" % (file, dline)) + prodname = lastp + syms = p[1:] + else: + prodname = p[0] + lastp = prodname + syms = p[2:] + assign = p[1] + if assign != ':' and assign != '::=': + raise SyntaxError("%s:%d: Syntax error. Expected ':'" % (file, dline)) + + grammar.append((file, dline, prodname, syms)) + except SyntaxError: + raise + except Exception: + raise SyntaxError('%s:%d: Syntax error in rule %r' % (file, dline, ps.strip())) + + return grammar + +# ----------------------------------------------------------------------------- +# ParserReflect() +# +# This class represents information extracted for building a parser including +# start symbol, error function, tokens, precedence list, action functions, +# etc. +# ----------------------------------------------------------------------------- +class ParserReflect(object): + def __init__(self, pdict, log=None): + self.pdict = pdict + self.start = None + self.error_func = None + self.tokens = None + self.modules = set() + self.grammar = [] + self.error = False + + if log is None: + self.log = PlyLogger(sys.stderr) + else: + self.log = log + + # Get all of the basic information + def get_all(self): + self.get_start() + self.get_error_func() + self.get_tokens() + self.get_precedence() + self.get_pfunctions() + + # Validate all of the information + def validate_all(self): + self.validate_start() + self.validate_error_func() + self.validate_tokens() + self.validate_precedence() + self.validate_pfunctions() + self.validate_modules() + return self.error + + # Compute a signature over the grammar + def signature(self): + parts = [] + try: + if self.start: + parts.append(self.start) + if self.prec: + parts.append(''.join([''.join(p) for p in self.prec])) + if self.tokens: + parts.append(' '.join(self.tokens)) + for f in self.pfuncs: + if f[3]: + parts.append(f[3]) + except (TypeError, ValueError): + pass + return ''.join(parts) + + # ----------------------------------------------------------------------------- + # validate_modules() + # + # This method checks to see if there are duplicated p_rulename() functions + # in the parser module file. Without this function, it is really easy for + # users to make mistakes by cutting and pasting code fragments (and it's a real + # bugger to try and figure out why the resulting parser doesn't work). Therefore, + # we just do a little regular expression pattern matching of def statements + # to try and detect duplicates. + # ----------------------------------------------------------------------------- + + def validate_modules(self): + # Match def p_funcname( + fre = re.compile(r'\s*def\s+(p_[a-zA-Z_0-9]*)\(') + + for module in self.modules: + try: + lines, linen = inspect.getsourcelines(module) + except IOError: + continue + + counthash = {} + for linen, line in enumerate(lines): + linen += 1 + m = fre.match(line) + if m: + name = m.group(1) + prev = counthash.get(name) + if not prev: + counthash[name] = linen + else: + filename = inspect.getsourcefile(module) + self.log.warning('%s:%d: Function %s redefined. Previously defined on line %d', + filename, linen, name, prev) + + # Get the start symbol + def get_start(self): + self.start = self.pdict.get('start') + + # Validate the start symbol + def validate_start(self): + if self.start is not None: + if not isinstance(self.start, str): + self.log.error("'start' must be a string") + + # Look for error handler + def get_error_func(self): + self.error_func = self.pdict.get('p_error') + + # Validate the error function + def validate_error_func(self): + if self.error_func: + if isinstance(self.error_func, types.FunctionType): + ismethod = 0 + elif isinstance(self.error_func, types.MethodType): + ismethod = 1 + else: + self.log.error("'p_error' defined, but is not a function or method") + self.error = True + return + + eline = self.error_func.__code__.co_firstlineno + efile = self.error_func.__code__.co_filename + module = inspect.getmodule(self.error_func) + self.modules.add(module) + + argcount = self.error_func.__code__.co_argcount - ismethod + if argcount != 1: + self.log.error('%s:%d: p_error() requires 1 argument', efile, eline) + self.error = True + + # Get the tokens map + def get_tokens(self): + tokens = self.pdict.get('tokens') + if not tokens: + self.log.error('No token list is defined') + self.error = True + return + + if not isinstance(tokens, (list, tuple)): + self.log.error('tokens must be a list or tuple') + self.error = True + return + + if not tokens: + self.log.error('tokens is empty') + self.error = True + return + + self.tokens = sorted(tokens) + + # Validate the tokens + def validate_tokens(self): + # Validate the tokens. + if 'error' in self.tokens: + self.log.error("Illegal token name 'error'. Is a reserved word") + self.error = True + return + + terminals = set() + for n in self.tokens: + if n in terminals: + self.log.warning('Token %r multiply defined', n) + terminals.add(n) + + # Get the precedence map (if any) + def get_precedence(self): + self.prec = self.pdict.get('precedence') + + # Validate and parse the precedence map + def validate_precedence(self): + preclist = [] + if self.prec: + if not isinstance(self.prec, (list, tuple)): + self.log.error('precedence must be a list or tuple') + self.error = True + return + for level, p in enumerate(self.prec): + if not isinstance(p, (list, tuple)): + self.log.error('Bad precedence table') + self.error = True + return + + if len(p) < 2: + self.log.error('Malformed precedence entry %s. Must be (assoc, term, ..., term)', p) + self.error = True + return + assoc = p[0] + if not isinstance(assoc, str): + self.log.error('precedence associativity must be a string') + self.error = True + return + for term in p[1:]: + if not isinstance(term, str): + self.log.error('precedence items must be strings') + self.error = True + return + preclist.append((term, assoc, level+1)) + self.preclist = preclist + + # Get all p_functions from the grammar + def get_pfunctions(self): + p_functions = [] + for name, item in self.pdict.items(): + if not name.startswith('p_') or name == 'p_error': + continue + if isinstance(item, (types.FunctionType, types.MethodType)): + line = getattr(item, 'co_firstlineno', item.__code__.co_firstlineno) + module = inspect.getmodule(item) + p_functions.append((line, module, name, item.__doc__)) + + # Sort all of the actions by line number; make sure to stringify + # modules to make them sortable, since `line` may not uniquely sort all + # p functions + p_functions.sort(key=lambda p_function: ( + p_function[0], + str(p_function[1]), + p_function[2], + p_function[3])) + self.pfuncs = p_functions + + # Validate all of the p_functions + def validate_pfunctions(self): + grammar = [] + # Check for non-empty symbols + if len(self.pfuncs) == 0: + self.log.error('no rules of the form p_rulename are defined') + self.error = True + return + + for line, module, name, doc in self.pfuncs: + file = inspect.getsourcefile(module) + func = self.pdict[name] + if isinstance(func, types.MethodType): + reqargs = 2 + else: + reqargs = 1 + if func.__code__.co_argcount > reqargs: + self.log.error('%s:%d: Rule %r has too many arguments', file, line, func.__name__) + self.error = True + elif func.__code__.co_argcount < reqargs: + self.log.error('%s:%d: Rule %r requires an argument', file, line, func.__name__) + self.error = True + elif not func.__doc__: + self.log.warning('%s:%d: No documentation string specified in function %r (ignored)', + file, line, func.__name__) + else: + try: + parsed_g = parse_grammar(doc, file, line) + for g in parsed_g: + grammar.append((name, g)) + except SyntaxError as e: + self.log.error(str(e)) + self.error = True + + # Looks like a valid grammar rule + # Mark the file in which defined. + self.modules.add(module) + + # Secondary validation step that looks for p_ definitions that are not functions + # or functions that look like they might be grammar rules. + + for n, v in self.pdict.items(): + if n.startswith('p_') and isinstance(v, (types.FunctionType, types.MethodType)): + continue + if n.startswith('t_'): + continue + if n.startswith('p_') and n != 'p_error': + self.log.warning('%r not defined as a function', n) + if ((isinstance(v, types.FunctionType) and v.__code__.co_argcount == 1) or + (isinstance(v, types.MethodType) and v.__func__.__code__.co_argcount == 2)): + if v.__doc__: + try: + doc = v.__doc__.split(' ') + if doc[1] == ':': + self.log.warning('%s:%d: Possible grammar rule %r defined without p_ prefix', + v.__code__.co_filename, v.__code__.co_firstlineno, n) + except IndexError: + pass + + self.grammar = grammar + +# ----------------------------------------------------------------------------- +# yacc(module) +# +# Build a parser +# ----------------------------------------------------------------------------- + +def yacc(*, debug=yaccdebug, module=None, start=None, + check_recursion=True, optimize=False, debugfile=debug_file, + debuglog=None, errorlog=None): + + # Reference to the parsing method of the last built parser + global parse + + if errorlog is None: + errorlog = PlyLogger(sys.stderr) + + # Get the module dictionary used for the parser + if module: + _items = [(k, getattr(module, k)) for k in dir(module)] + pdict = dict(_items) + # If no __file__ or __package__ attributes are available, try to obtain them + # from the __module__ instead + if '__file__' not in pdict: + pdict['__file__'] = sys.modules[pdict['__module__']].__file__ + if '__package__' not in pdict and '__module__' in pdict: + if hasattr(sys.modules[pdict['__module__']], '__package__'): + pdict['__package__'] = sys.modules[pdict['__module__']].__package__ + else: + pdict = get_caller_module_dict(2) + + # Set start symbol if it's specified directly using an argument + if start is not None: + pdict['start'] = start + + # Collect parser information from the dictionary + pinfo = ParserReflect(pdict, log=errorlog) + pinfo.get_all() + + if pinfo.error: + raise YaccError('Unable to build parser') + + if debuglog is None: + if debug: + try: + debuglog = PlyLogger(open(debugfile, 'w')) + except IOError as e: + errorlog.warning("Couldn't open %r. %s" % (debugfile, e)) + debuglog = NullLogger() + else: + debuglog = NullLogger() + + debuglog.info('Created by PLY (http://www.dabeaz.com/ply)') + + errors = False + + # Validate the parser information + if pinfo.validate_all(): + raise YaccError('Unable to build parser') + + if not pinfo.error_func: + errorlog.warning('no p_error() function is defined') + + # Create a grammar object + grammar = Grammar(pinfo.tokens) + + # Set precedence level for terminals + for term, assoc, level in pinfo.preclist: + try: + grammar.set_precedence(term, assoc, level) + except GrammarError as e: + errorlog.warning('%s', e) + + # Add productions to the grammar + for funcname, gram in pinfo.grammar: + file, line, prodname, syms = gram + try: + grammar.add_production(prodname, syms, funcname, file, line) + except GrammarError as e: + errorlog.error('%s', e) + errors = True + + # Set the grammar start symbols + try: + if start is None: + grammar.set_start(pinfo.start) + else: + grammar.set_start(start) + except GrammarError as e: + errorlog.error(str(e)) + errors = True + + if errors: + raise YaccError('Unable to build parser') + + # Verify the grammar structure + undefined_symbols = grammar.undefined_symbols() + for sym, prod in undefined_symbols: + errorlog.error('%s:%d: Symbol %r used, but not defined as a token or a rule', prod.file, prod.line, sym) + errors = True + + unused_terminals = grammar.unused_terminals() + if unused_terminals: + debuglog.info('') + debuglog.info('Unused terminals:') + debuglog.info('') + for term in unused_terminals: + errorlog.warning('Token %r defined, but not used', term) + debuglog.info(' %s', term) + + # Print out all productions to the debug log + if debug: + debuglog.info('') + debuglog.info('Grammar') + debuglog.info('') + for n, p in enumerate(grammar.Productions): + debuglog.info('Rule %-5d %s', n, p) + + # Find unused non-terminals + unused_rules = grammar.unused_rules() + for prod in unused_rules: + errorlog.warning('%s:%d: Rule %r defined, but not used', prod.file, prod.line, prod.name) + + if len(unused_terminals) == 1: + errorlog.warning('There is 1 unused token') + if len(unused_terminals) > 1: + errorlog.warning('There are %d unused tokens', len(unused_terminals)) + + if len(unused_rules) == 1: + errorlog.warning('There is 1 unused rule') + if len(unused_rules) > 1: + errorlog.warning('There are %d unused rules', len(unused_rules)) + + if debug: + debuglog.info('') + debuglog.info('Terminals, with rules where they appear') + debuglog.info('') + terms = list(grammar.Terminals) + terms.sort() + for term in terms: + debuglog.info('%-20s : %s', term, ' '.join([str(s) for s in grammar.Terminals[term]])) + + debuglog.info('') + debuglog.info('Nonterminals, with rules where they appear') + debuglog.info('') + nonterms = list(grammar.Nonterminals) + nonterms.sort() + for nonterm in nonterms: + debuglog.info('%-20s : %s', nonterm, ' '.join([str(s) for s in grammar.Nonterminals[nonterm]])) + debuglog.info('') + + if check_recursion: + unreachable = grammar.find_unreachable() + for u in unreachable: + errorlog.warning('Symbol %r is unreachable', u) + + infinite = grammar.infinite_cycles() + for inf in infinite: + errorlog.error('Infinite recursion detected for symbol %r', inf) + errors = True + + unused_prec = grammar.unused_precedence() + for term, assoc in unused_prec: + errorlog.error('Precedence rule %r defined for unknown symbol %r', assoc, term) + errors = True + + if errors: + raise YaccError('Unable to build parser') + + # Run the LRTable on the grammar + lr = LRTable(grammar, debuglog) + + if debug: + num_sr = len(lr.sr_conflicts) + + # Report shift/reduce and reduce/reduce conflicts + if num_sr == 1: + errorlog.warning('1 shift/reduce conflict') + elif num_sr > 1: + errorlog.warning('%d shift/reduce conflicts', num_sr) + + num_rr = len(lr.rr_conflicts) + if num_rr == 1: + errorlog.warning('1 reduce/reduce conflict') + elif num_rr > 1: + errorlog.warning('%d reduce/reduce conflicts', num_rr) + + # Write out conflicts to the output file + if debug and (lr.sr_conflicts or lr.rr_conflicts): + debuglog.warning('') + debuglog.warning('Conflicts:') + debuglog.warning('') + + for state, tok, resolution in lr.sr_conflicts: + debuglog.warning('shift/reduce conflict for %s in state %d resolved as %s', tok, state, resolution) + + already_reported = set() + for state, rule, rejected in lr.rr_conflicts: + if (state, id(rule), id(rejected)) in already_reported: + continue + debuglog.warning('reduce/reduce conflict in state %d resolved using rule (%s)', state, rule) + debuglog.warning('rejected rule (%s) in state %d', rejected, state) + errorlog.warning('reduce/reduce conflict in state %d resolved using rule (%s)', state, rule) + errorlog.warning('rejected rule (%s) in state %d', rejected, state) + already_reported.add((state, id(rule), id(rejected))) + + warned_never = [] + for state, rule, rejected in lr.rr_conflicts: + if not rejected.reduced and (rejected not in warned_never): + debuglog.warning('Rule (%s) is never reduced', rejected) + errorlog.warning('Rule (%s) is never reduced', rejected) + warned_never.append(rejected) + + # Build the parser + lr.bind_callables(pinfo.pdict) + parser = LRParser(lr, pinfo.error_func) + + parse = parser.parse + return parser diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 5133b1092..000000000 --- a/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -ply==3.11 - diff --git a/tox.ini b/tox.ini index 5580350df..8f0e5842f 100644 --- a/tox.ini +++ b/tox.ini @@ -7,7 +7,7 @@ deps = pytest pytest-cov pytest-timeout - -rrequirements.txt + commands = py.test \ --cov-report html:htmlcov/{envname} \ @@ -25,6 +25,7 @@ exclude = library/, library-asm/, parsetab/, + ply/, scratch/, .git/ diff --git a/zxbasmpplex.py b/zxbasmpplex.py index 2f126ed4b..eaca6cb1d 100755 --- a/zxbasmpplex.py +++ b/zxbasmpplex.py @@ -421,7 +421,7 @@ def __init__(self): # --------------------- PREPROCESSOR FUNCTIONS ------------------- # Needed for states -tmp = lex.lex(object=Lexer(), lextab='parsetab.zxbasmpplextab') +tmp = lex.lex(object=Lexer()) # ------------------ Test if called from cmd line --------------- if __name__ == '__main__': # For testing purposes diff --git a/zxbparser.py b/zxbparser.py index ead484e40..150eacff2 100755 --- a/zxbparser.py +++ b/zxbparser.py @@ -3458,7 +3458,8 @@ def p_error(p): # ---------------------------------------- # Initialization # ---------------------------------------- -parser = yacc.yacc(method='LALR', tabmodule='parsetab.zxbtab', debug=OPTIONS.Debug.value > 2) +parser = api.utils.get_or_create('zxbparser', lambda: yacc.yacc(debug=OPTIONS.Debug.value > 2)) + ast = None data_ast = None # Global Variables AST optemps = OpcodesTemps() diff --git a/zxbpp.py b/zxbpp.py index 5aaf9819c..95a58b8fc 100755 --- a/zxbpp.py +++ b/zxbpp.py @@ -786,7 +786,7 @@ def main(argv): return global_.has_errors -parser = yacc.yacc(method='LALR', tabmodule='parsetab.zxbpptab') +parser = api.utils.get_or_create('zxbppparse', lambda: yacc.yacc()) parser.defaulted_states = {} ID_TABLE = DefinesTable() diff --git a/zxbpplex.py b/zxbpplex.py index 3812d3278..ee73193d8 100755 --- a/zxbpplex.py +++ b/zxbpplex.py @@ -517,7 +517,7 @@ def __init__(self): # Needed for states -tmp = lex.lex(object=Lexer(), lextab='parsetab.zxbpplextab') +tmp = lex.lex(object=Lexer()) # ------------------ Test if called from cmd line --------------- if __name__ == '__main__': # For testing purposes From 32d9daf80cab4c50ae96e13dac69995055be8686 Mon Sep 17 00:00:00 2001 From: Jose Rodriguez Date: Sun, 3 May 2020 12:06:52 +0200 Subject: [PATCH 2/2] Add precompiled (cached) parsers --- parsetab/tabs.dbm.bak | 3 +++ parsetab/tabs.dbm.dat | Bin 0 -> 1026260 bytes parsetab/tabs.dbm.dir | 3 +++ 3 files changed, 6 insertions(+) create mode 100644 parsetab/tabs.dbm.bak create mode 100644 parsetab/tabs.dbm.dat create mode 100644 parsetab/tabs.dbm.dir diff --git a/parsetab/tabs.dbm.bak b/parsetab/tabs.dbm.bak new file mode 100644 index 000000000..bfa8bac4b --- /dev/null +++ b/parsetab/tabs.dbm.bak @@ -0,0 +1,3 @@ +'zxbppparse', (0, 68810) +'zxbparser', (69120, 707013) +'asmparse', (776192, 250068) diff --git a/parsetab/tabs.dbm.dat b/parsetab/tabs.dbm.dat new file mode 100644 index 0000000000000000000000000000000000000000..75d361ce60c70cc0d36459e2a8b97cf81eabf5b9 GIT binary patch literal 1026260 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.*;OT-b2c5;YOGiAp^?>*?zC%ATbb%x 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%0AKn2OY-jDT* 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 literal 0 HcmV?d00001 diff --git a/parsetab/tabs.dbm.dir b/parsetab/tabs.dbm.dir new file mode 100644 index 000000000..bfa8bac4b --- /dev/null +++ b/parsetab/tabs.dbm.dir @@ -0,0 +1,3 @@ +'zxbppparse', (0, 68810) +'zxbparser', (69120, 707013) +'asmparse', (776192, 250068)