#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define UNCHECKED 0
#define CHECKED 1
#define EMPTYSTACK −1
#define MAXSTACKSIZE 50
#define NOOPERANDS 50
#define NOOPERATORS 50
class SOS
{
public:
int *sos;
int nos;
SOS(int);
void dispSOS();
};
class DFA
{
private:
int maxDFAStates;
int noDFAStates;
int noNFAStates;
int noSymbols;
int nfaStartState;
int nfaFinalState;
int noOperands;
char operands[NOOPERANDS];
int **nfaTransTable;
int **dfaTransTable;
int *dfaStatesChecked;
public:
DFA();
SOS **dfaSOS;
SOS* eClosure(SOS*);
SOS* move(SOS* ss, char b);
void constructSubset();
int isPresent(int a[], int n, int x);
void readNFA(FILE *fp);
void initDFATables();
int findOpdIndex(char r);
void displayNFATransTable();
void displayDFATransTable();
SOS* eClosure(SOS*);
int checkDFAStates(SOS *ss);
int isSOSEqual(SOS *ss1, SOS *ss2);
SOS *sort(SOS *ss);
};
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPG1hbGxvYy5oPgojaW5jbHVkZTxzdHJpbmcuaD4KI2RlZmluZSBVTkNIRUNLRUQgMAojZGVmaW5lIENIRUNLRUQgMQojZGVmaW5lIEVNUFRZU1RBQ0sg4oiSMQojZGVmaW5lIE1BWFNUQUNLU0laRSA1MAojZGVmaW5lIE5PT1BFUkFORFMgNTAKI2RlZmluZSBOT09QRVJBVE9SUyA1MApjbGFzcyBTT1MKewogICAgcHVibGljOgogICAgaW50ICpzb3M7CiAgICBpbnQgbm9zOwogICAgU09TKGludCk7CiAgICB2b2lkIGRpc3BTT1MoKTsKfTsKY2xhc3MgREZBCnsKICAgIHByaXZhdGU6CiAgICAgICAgaW50IG1heERGQVN0YXRlczsKICAgICAgICBpbnQgbm9ERkFTdGF0ZXM7CiAgICAgICAgaW50IG5vTkZBU3RhdGVzOwogICAgICAgIGludCBub1N5bWJvbHM7CiAgICAgICAgaW50IG5mYVN0YXJ0U3RhdGU7CiAgICAgICAgaW50IG5mYUZpbmFsU3RhdGU7CiAgICAgICAgaW50IG5vT3BlcmFuZHM7CiAgICAgICAgY2hhciBvcGVyYW5kc1tOT09QRVJBTkRTXTsKICAgICAgICBpbnQgKipuZmFUcmFuc1RhYmxlOwogICAgICAgIGludCAqKmRmYVRyYW5zVGFibGU7CiAgICAgICAgaW50ICpkZmFTdGF0ZXNDaGVja2VkOwogICAgcHVibGljOgogICAgICAgIERGQSgpOwogICAgICAgIFNPUyAqKmRmYVNPUzsKICAgICAgICBTT1MqIGVDbG9zdXJlKFNPUyopOwogICAgICAgIFNPUyogbW92ZShTT1MqIHNzLCBjaGFyIGIpOwogICAgICAgIHZvaWQgY29uc3RydWN0U3Vic2V0KCk7CiAgICAgICAgaW50IGlzUHJlc2VudChpbnQgYVtdLCBpbnQgbiwgaW50IHgpOwogICAgICAgIHZvaWQgcmVhZE5GQShGSUxFICpmcCk7CiAgICAgICAgdm9pZCBpbml0REZBVGFibGVzKCk7CiAgICAgICAgaW50IGZpbmRPcGRJbmRleChjaGFyIHIpOwogICAgICAgIHZvaWQgZGlzcGxheU5GQVRyYW5zVGFibGUoKTsKICAgICAgICB2b2lkIGRpc3BsYXlERkFUcmFuc1RhYmxlKCk7CiAgICAgICAgU09TKiBlQ2xvc3VyZShTT1MqKTsKICAgICAgICBpbnQgY2hlY2tERkFTdGF0ZXMoU09TICpzcyk7CiAgICAgICAgaW50IGlzU09TRXF1YWwoU09TICpzczEsIFNPUyAqc3MyKTsKICAgICAgICBTT1MgKnNvcnQoU09TICpzcyk7Cn07Cgo=