add working BNF
add test.py to requirements
unit tests yay