Source code for fuckery.parser

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# XXX Update Docstring
"""
pyFuckery - parser.py
Created on 2/19/17.


"""
# Stdlib
import argparse
import logging
import sys

# Custom Code
from fuckery.constants import GRAMMAR
# Third Party Code
from lark import Lark
from lark import Tree

log = logging.getLogger(__name__)


[docs]def parse_program(s: str) -> Tree: """ Parser a program to generate the lark parse Tree. :param s: Brainfuck program to parse. :return: """ brainfuck_parser = Lark(GRAMMAR, start='program') r = brainfuck_parser.parse(s) return r
# noinspection PyMissingOrEmptyDocstring
[docs]def main(options): # pragma: no cover if not options.verbose: logging.disable(logging.DEBUG) with open(options.input, 'rb') as f: buf = f.read() s = buf.decode() log.debug(f'Parsing: {s}') t = parse_program(s=s) print(t.pretty()) sys.exit(0)
# noinspection PyMissingOrEmptyDocstring
[docs]def makeargpaser(): # pragma: no cover parser = argparse.ArgumentParser(description="Parse a brainfuck file and print out the resulting AST.") parser.add_argument('-i', '--input', dest='input', required=True, type=str, action='store', help='Input file to process') parser.add_argument('-v', '--verbose', dest='verbose', default=False, action='store_true', help='Enable verbose output') return parser
def _main(): # pragma: no cover logging.basicConfig(level=logging.DEBUG, format='%(asctime)s [%(levelname)s] %(message)s [%(filename)s:%(funcName)s]') p = makeargpaser() opts = p.parse_args() main(opts) if __name__ == '__main__': # pragma: no cover _main()