# FIXME if isinstance(p.lexer, PythonLexer): data = p.lexer.lexer.lexdata pos = p.lexer.lexer.lexpos else: data = p.lexer.lexdata pos = p.lexer.lexpos try: nl = data.rindex("\n", 0, pos) except ValueError: nl = 0 try: nr = data.index("\n", pos) except ValueError: nr = len(data) print(data[nl:nr], file=sys.stderr) print((" " * (pos - nl - 1)) + "^", file=sys.stderr) if p.value is None: raise ParserError("Syntax Error in line %d, unexpected end" % p.lineno) else: raise ParserError("Syntax Error in line %d, unexpected %r" % (p.lineno, p.value)) parser = yacc.yacc(debug=False, write_tables=True, tabmodule="libpie.curly._table", outputdir=os.path.dirname(__file__))
"""exprlist : EXPR | exprlist EXPR """ if len(p) == 2: if p[1]: p[0] = (p[1],) else: p[0] = () else: if p[2]: p[0] = p[1] + (p[2],) else: p[0] = p[1] def p_error(p): if p is None: raise ParserError("Invalid expression (unclosed parenthesis?)") else: raise ParserError(str(p)) parser = yacc.yacc(tabmodule="libpie.code._table", outputdir=os.path.dirname(__file__)) def parse(code): if not code.strip(): code = "map()" parser.parse(code, lexer=lexer) yield from parser.result