DiaDes  0.1
DIAgnosis of Discrete-Event System
Enumerations | Functions | Variables
TagStates.cc File Reference

This file implements the dd-tagstates command that is used to tag a set of states (initial, final) from an automaton (ddaut format) based on regular expressions. More...

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <regex>
#include <unordered_map>
#include <boost/program_options.hpp>
#include <diades/automata/experimental/AutFile.hh>
#include <diades/automata/experimental/DdAutFile.hh>
#include "../AutomataInterface.hh"
#include "diades/automata/experimental/DdAutFileDescriptor.hh"
#include <diades/automata/experimental/Io.hh>

Go to the source code of this file.

Enumerations

enum  Tag {
  final, nofinal, initial, noinitial,
  prefixclosedfinal, swapfinal, swapinitial
}
 

Functions

const string program ("dd-tagstates")
 
const string briefcomment (": this program tags some states based on regular expressions (output file or standard output).")
 
void initialiseOptions (int argc, char *argv[], Poptions::options_description &desc, Poptions::variables_map &vm)
 
void applyTag (DdAutFA &fa, DdAutFA::State state, Tag tag)
 
void getReachable (DdAutFA &fa, CstStMap< char > &mapping, std::regex &reg, DdAutStateManager &sManager, std::list< DdAutFA::State > &acceptors)
 
void tagPredecessors (DdAutFA &fa, std::list< DdAutFA::State > &acceptors, CstStMap< char > &mapping)
 
void setPrefixClosedAcceptorTag (DdAutFA &fa, DdAutStateManager &sManager, std::regex &reg)
 
void tagStates (DdAutFA &fa, DdAutStateManager &sManager, const std::string &expr)
 
size_t tagDdAutStates2 (const string &fileName, const string &output, const std::vector< std::string > &regexp)
 
size_t tagDdAutStates (const string &fileName, const string &output, const std::vector< std::string > &regexp)
 
int main (int argc, char **argv)
 

Variables

const string detailedcomment
 
FileSuffixes suffixes ({"ddaut"})
 
const std::unordered_map< std::string, TagtagOf
 

Detailed Description

This file implements the dd-tagstates command that is used to tag a set of states (initial, final) from an automaton (ddaut format) based on regular expressions.

Author
Yannick Pencolé <yannick.pencole at laas.fr>
Date
14 February 2020, 11:17:40

dd-tagstates tags a set of states to be initial or final based on a regular expression. regular expression are defined as proposed in http://www.cplusplus.com/reference/regex/ECMAScript/

Example 1: set to be acceptor any states such that its label contains the substring 'o.p=ko'

dd-tagstates file.ddaut -r 'final:.*o\.p=ko.*'

Example 2: set to be non-acceptor any states such that its label contains the substring 'o.p=ok'

dd-tagstates file.ddaut -r 'nofinal:.*o\.p=ok.*'

Example 3: set to be initial any states such that its label contains the substring 'init'

dd-tagstates file.ddaut -r 'initial:.*init.*'

Example 4: set to be not initial any states such that its label is 's1' or 's2' or 's3'

dd-tagstates file.ddaut -r 'noinitial:s[1-3]'

Applying Example 5: applying Examples 1-4 in one go. Tagging works from left to right, we tag first 'final:.*o.p=ko.*' then -r 'nofinal:.*o.p=ok.*' so the order matters.

dd-tagstates file.ddaut -r 'final:.*o\.p=ko.*' -r 'nofinal:.*o\.p=ok.*' -r 'initial:.*init.*' -r 'noinitial:s[1-3]'

Example 6: tag a set of states S as acceptors and tag other states so that any prefix of a word accepted by a state of S is also an accepted word.

dd-tagstates file.ddaut -r 'prefix-closed-final:.*o\.p=ko.*'

Example 7: swap the tags of the set of states S: swap-final if the state is final swap to non-final, if the state is final then swap to final. swap-initial if the state is initial swap to non-initial, if the state is non-initial then swap to initial.

dd-tagstates file.ddaut -r 'swap-final:.*o\.p=ko.*' 'swap-initial:.*o\.p=ok.*'

Definition in file TagStates.cc.

Enumeration Type Documentation

◆ Tag

enum Tag
Enumerator
final 
nofinal 
initial 
noinitial 
prefixclosedfinal 
swapfinal 
swapinitial 

Definition at line 160 of file TagStates.cc.

Function Documentation

◆ applyTag()

void applyTag ( DdAutFA fa,
DdAutFA::State  state,
Tag  tag 
)

◆ briefcomment()

const string briefcomment ( ": this program tags some states based on regular expressions (output file or standard output)."  )

Referenced by main().

◆ getReachable()

void getReachable ( DdAutFA fa,
CstStMap< char > &  mapping,
std::regex &  reg,
DdAutStateManager sManager,
std::list< DdAutFA::State > &  acceptors 
)

◆ initialiseOptions()

void initialiseOptions ( int  argc,
char *  argv[],
Poptions::options_description &  desc,
Poptions::variables_map &  vm 
)

Initialise the options of the command present in the command line

Parameters
argc
argv
desc
vm

Definition at line 129 of file TagStates.cc.

References options().

Referenced by main().

◆ main()

int main ( int  argc,
char **  argv 
)

Main file of the dd-dot command

Parameters
argc
argv
Returns
success code (SUCCESS or ERROR_COMMAND_LINE)

Definition at line 381 of file TagStates.cc.

References briefcomment(), detailedcomment, initialiseOptions(), Diades::CmdInterface::printCommandLineError(), printUsage(), program(), and tagDdAutStates().

◆ program()

const string program ( "dd-tagstates"  )

Referenced by main().

◆ setPrefixClosedAcceptorTag()

void setPrefixClosedAcceptorTag ( DdAutFA fa,
DdAutStateManager sManager,
std::regex &  reg 
)

◆ tagDdAutStates()

size_t tagDdAutStates ( const string &  fileName,
const string &  output,
const std::vector< std::string > &  regexp 
)

◆ tagDdAutStates2()

size_t tagDdAutStates2 ( const string &  fileName,
const string &  output,
const std::vector< std::string > &  regexp 
)

◆ tagPredecessors()

void tagPredecessors ( DdAutFA fa,
std::list< DdAutFA::State > &  acceptors,
CstStMap< char > &  mapping 
)

◆ tagStates()

void tagStates ( DdAutFA fa,
DdAutStateManager sManager,
const std::string &  expr 
)

Variable Documentation

◆ detailedcomment

const string detailedcomment

Definition at line 76 of file TagStates.cc.

Referenced by main().

◆ suffixes

FileSuffixes suffixes({"ddaut"})

Referenced by tagDdAutStates().

◆ tagOf

const std::unordered_map<std::string,Tag> tagOf
Initial value:
= {
{"final",final},
{"nofinal",nofinal},
{"initial",initial},
{"noinitial",noinitial},
{"prefix-closed-final",prefixclosedfinal},
{"swap-initial",swapinitial},
{"swap-final",swapfinal}
}

Definition at line 163 of file TagStates.cc.