Move oracle table generating facilities to grammar.py
This commit is contained in:
parent
f813d91736
commit
5e84e50aa2
|
@ -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
|
|
|
@ -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
|
||||||
|
|
13
grammar.py
13
grammar.py
|
@ -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
|
Loading…
Reference in a new issue