Move oracle table generating facilities to grammar.py

This commit is contained in:
Emi Simpson 2023-03-04 12:47:56 -05:00
parent f813d91736
commit 5e84e50aa2
Signed by: Emi
GPG key ID: A12F2C2FFDC3D847
3 changed files with 18 additions and 17 deletions

View file

@ -1,15 +1,8 @@
""" """
Tools for building an oracle table Tools for building an oracle table
If this module is run directly in python, it will spit out valid python which produces an See `grammar` and `build_oracle.sh` for scripts which actually produce python code. This
oracle table for the grammar defined in `grammar.py`. It's recommended that this be done module only produces an oracle table in python, without outputting it.
using `build_oracle.sh` instead, however, which will build a whole python module
containing the oracle table, complete with imports.
This module can also be used on its own to generate an oracle table on the fly.
Note that, when run directly, this module will refuse to build an oracle table if ANY of
the tests defined within the module fail.
""" """
from emis_funky_funktions import * from emis_funky_funktions import *
@ -331,9 +324,4 @@ def print_oracle_table_enum(
if __name__ == '__main__': if __name__ == '__main__':
import doctest import doctest
from grammar import GRAMMAR, Tok, Variable from grammar import GRAMMAR, Tok, Variable
failure_count, test_count = doctest.testmod() doctest.testmod()
if failure_count:
print('\n\nRefusing to build oracle table due to test failures')
exit(1)
else:
print(print_oracle_table_enum(oracle_table(flip(cur2(isinstance))(Tok), GRAMMAR))) #type: ignore

View file

@ -6,7 +6,7 @@ from grammar import Tok, Variable
oracle_table = ( oracle_table = (
EOF EOF
if python build_oracle.py >> oracle_table.py; then if python grammar.py >> oracle_table.py; then
echo ")" >> oracle_table.py echo ")" >> oracle_table.py
echo "Built oracle_table.py" echo "Built oracle_table.py"
else else

View file

@ -1,3 +1,11 @@
"""
A grammar for parsing CNF files
If this module is run directly in python, it will spit out valid python which produces an
oracle table for the grammar it defines. It's recommended that this be done using
`build_oracle.sh` instead, however, which will build a whole python module containing the
oracle table, complete with imports.
"""
from enum import auto, IntEnum from enum import auto, IntEnum
from re import compile, Pattern from re import compile, Pattern
@ -137,3 +145,8 @@ Func? := OpenP <Term> <CSTerms> CloseP
CSTerms := Comma <Term> <CSTerms> CSTerms := Comma <Term> <CSTerms>
:= ε := ε
""" """
if __name__ == '__main__':
from emis_funky_funktions import cur2, flip
from build_oracle import print_oracle_table_enum, oracle_table
print(print_oracle_table_enum(oracle_table(flip(cur2(isinstance))(Tok), GRAMMAR))) #type: ignore