Vnitřní forma InputDrivenPDA a VisiblyPushdownPDA
Jak byste implementovali Nedeterministický IDPDA? Samozřejmě:
- stavy: set
- počáteční: set
- koncové: set
- vstupní abeceda: set
- zásobníková abeceda: set
- přechodová funkce ???
může být : std::map<std::pair<State,alphabet::Symbol>,std::set>+std::map<alphabet::Symbol,std::pair<std::vectoralphabet::Symbol,std::vectoralphabet::Symbol > >
nebo std::map<std::tuple<State,alphabet::Symbol,std::vectoralphabet::Symbol>,std::set<std::pair<State,std::vectoralphabet::Symbol>>>
nebo uplně něco jiného.
A co API?
nechat addTransition (removeTransition) a getTransitions tak že se co nejvíce podobají surovému zápisu přechodu (1) ... a | X -> Y ... (2) (pokus o ASCII art šipky mezi stavy) a nebo to api přizpůsobit vnitřní reprezentaci?
Na tohle navazuje i otázka jak s VisiblyPushdown kde je vnitřní reprezentace opravdu velmi specifická. A to nemluvím o stromových automatech nebo ještě horších matech.
Můj názor je že udělat reprezentaci InputDrivenPDA pomocí dvou struktur jedna na přechody a druhá na zásobníkovou operaci a přizpůsobit tomu api. Podobně i u VisiblyPushdown s rozdělením na push, pop a local součástky abecedy a přechodové funkce automatů.
V podstatě jsem si to teďka pro sebe sepsal a vy sloužíte jako gumové kachničky ale chtěl bych vědět vaše názory.
Tome nevím jak moc vidíš do těch InputDriven a VisiblyPushdown zásobníkových automatů ale myslím že i kdyby si vůbec nevěděl tak zase znáš napsaný kód.
BTW Radku HeightDeterministic PDA se nedají od obecného nedeterministického PDA poznat jinak než že na ně pustíš determinizaci a buď to dopadne nebo ne viď?