Skip to content

General architecture improvement #26

@bygu4

Description

@bygu4

Continuing the finite_automaton redesign I think we should go on and rework the relations of the rest of the modules as well, making the architecture clearer and removing the cyclic imports. For now, I think this is the general design we could try to implement:

general_module_design

In more detail, firstly I think we should build CFG from PDA in the CFG class instead:

def to_cfg(self) -> "cfg.CFG":

Then, I think we should define the PDA intersection with the DFA explicitly, to avoid unnecessary checks, and so that Regex -> ENFA -> DFA transition chain can be used:
def intersection(self, other: Any) -> "PDA":

And also we can do the same thing in the CFG class:
def intersection(self, other: Any) -> "CFG":

On a side note, I think the CFG Variable Converter should take place in the cfg module. To rework it in a stricter way, I think we can move the object classes (i. g. finite_automaton objects, regex objects, etc.) to a separate module, and that way I think we could also avoid some potential design issues.

Moving on to indexed_grammar, I think we should implement the intersection explicitly with FST (in a way similar to CFG):

def intersection(self, other: Any) -> "IndexedGrammar":

In that case the Regex -> ENFA -> FST transition chain could be used. Then we can remove the intersection method from the FST class. I think it shouldn't be there if it returns IndexedGrammar.
Also I would suggest using CFG objects in indexed_grammar, and FA objects in fst to add stricter type annotations.

If you agree with these changes, I would like to take this issue and try to implement them.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions