#!/usr/bin/env python3

# To get your _virtual environment_ setup, make sure you have Python 3
# installed and then run the following on a Linux/Mac/Unix system:
#
#   $ python3 -m venv env-playground
#   $ source env-playground/bin/activate
#   $ python3 -m pip install -U pip wheel ply
#

from pprint import pprint

from ply import yacc

from lexer import *


#
# S
#

def p_S(p):
    ''' S : E '''
    print(f'\tS')

#
# E
#

def p_E(p):
    ''' E : T
          | E PLUS T
          | E MINUS T
    '''
    print(f'\tE')

#
# T
#

def p_T(p):
    ''' T : T STAR F
          | T SLASH F
          | F
    '''
    print(f'\tT')

#
# F
#

def p_F(p):
    ''' F : ID
          | NUM
          | LPAREN E RPAREN
    '''
    print(f'\tF')

###########

def p_error(p):
    print(f'Syntax error somewhere...')

parser = yacc.yacc()

def process(data):
    result = parser.parse(data)
    if result:
        print('Result:\n    ', end='')
        pprint(result, indent=4, compact=False)

if __name__ == '__main__':
    if len(sys.argv) > 1:
        for data in sys.argv[1:]:
            print(f'Input: {data}')
            process(data)
    else:
        while True:
            try:
                data = input('parser> ')
            except (EOFError, KeyboardInterrupt):
                break

            if not data:
                continue

            process(data)
