From f8cfdd5c7eaf251c95cd699623b57f9be255f8ef Mon Sep 17 00:00:00 2001 From: Walcher Date: Fri, 5 Jan 2024 16:29:14 +0100 Subject: [PATCH] add plusOperator, kleeneStar --- src/main/java/ab1/impl/GRUPPE/NFAImpl.java | 66 +++++++++++++++++- .../ab1/impl/GRUPPE/NFAFactoryImpl.class | Bin 506 -> 570 bytes target/classes/ab1/impl/GRUPPE/NFAImpl.class | Bin 2181 -> 3480 bytes 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/src/main/java/ab1/impl/GRUPPE/NFAImpl.java b/src/main/java/ab1/impl/GRUPPE/NFAImpl.java index 7fb4ff1..126069c 100644 --- a/src/main/java/ab1/impl/GRUPPE/NFAImpl.java +++ b/src/main/java/ab1/impl/GRUPPE/NFAImpl.java @@ -32,7 +32,6 @@ public class NFAImpl implements NFA { return this.transitions; } - @Override public Set getAcceptingStates() { @@ -62,6 +61,26 @@ public class NFAImpl implements NFA { } } + // warum gabs die methode nicht schon vorher? weil i a idiot bin und man die direct adden kann. + /* + public void addAllStates(Set states) throws FinalizedStateException { + if (this.isFinalized) { + throw new FinalizedStateException(); + } else { + this.states.addAll(states); + } + } + + public void addAllTransitions(Set transitions) throws FinalizedStateException { + if (this.isFinalized) { + throw new FinalizedStateException(); + } else { + this.transitions.addAll(transitions); + } + } + */ + + // #TODO @Override public NFA union(NFA other) throws FinalizedStateException { @@ -83,13 +102,54 @@ public class NFAImpl implements NFA { // #TODO @Override public NFA kleeneStar() throws FinalizedStateException { - return null; + if (this.isFinalized) { + throw new FinalizedStateException(); + } + + NFAImpl nfa = new NFAImpl(this.initialState); + + // deep copy but without accepting states + nfa.states.addAll(this.states); + nfa.transitions.addAll(this.transitions); + + for (String acceptingState : this.acceptingStates) { + Transition loopBackTransition = + // creating an epsilon transition (null) for each accepting state + new Transition(acceptingState, null, this.initialState); + nfa.transitions.add(loopBackTransition); + } + + // adding the initial state as accepting state + nfa.acceptingStates.add(this.initialState); + + nfa.finalizeAutomaton(); + + return nfa; } // #TODO @Override public NFA plusOperator() throws FinalizedStateException { - return null; + if (this.isFinalized) { + throw new FinalizedStateException(); + } + + NFAImpl nfa = new NFAImpl(this.initialState); + + // simple deep copy + nfa.states.addAll(this.states); + nfa.transitions.addAll(this.transitions); + nfa.acceptingStates.addAll(this.acceptingStates); + + // for each accepting state + for (String acceptingState : this.acceptingStates) { + Transition loopBackTransition = + // creating an epsilon transition (null) for each accepting state + new Transition(acceptingState, null, this.initialState); + nfa.transitions.add(loopBackTransition); + } + + return nfa; } // #TODO diff --git a/target/classes/ab1/impl/GRUPPE/NFAFactoryImpl.class b/target/classes/ab1/impl/GRUPPE/NFAFactoryImpl.class index 4a7c7978da76db3fe4950f65543488447aec03c5..dab8ab8697aba7ccd7924d0bd4b4afe220250b0b 100644 GIT binary patch delta 255 zcmeyxyo-hF)W2Q(7#J9A8DuAN1t@ayFt9RkGct&3_+%xPCFaj8kUhpV+j6pE)lrk&%JZCo#!T-_Ol)vN@xAJr4sD10w?;0|S_5Wng1qWDsCr zV9;k^WME`qU|`kS&cL`4EG@{u0G0-kLJSNHJP-v8!VDq|3=E76q6}hC&AtrG49pA+ z4BWdJ*dw*KGjRIqY=9fV#lXbCz`)7C$-vDZq{qO(pa4+|HHU$Ln?amGf`O5NlYxmr Nl0gdWFln%M82~kn9ku`f delta 193 zcmdnR@{5`4)W2Q(7#J9A86+oi1+Xx)GjLC=R%Ya#IDg0FOh%P@E(RtBMg|@R1~ARa zz{bGHz{kMApwGa_z{tSBz^b*KfpH^PnxBCIEDa(B7#J9MAPN`+8H5-Z7#JCZ8APC( xZ5Wssm>3usICe9zM{Z}}+<>N^lL4e(jDd+kmVto-Y5<5O${+@|R~)QC0sy6R5r_Z) diff --git a/target/classes/ab1/impl/GRUPPE/NFAImpl.class b/target/classes/ab1/impl/GRUPPE/NFAImpl.class index 1affa84fcb11652fbebea89d234202d406b4bbed..6a62af89c69d74150364028d774e2f19bcb07566 100644 GIT binary patch literal 3480 zcmX^0Z`VEs1_oP(N-hQ_24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00SP6iGJPId+^9tLg(9!3W7#3V!g%-n(;efOZyfB;v0KQ~9u+=3iN1|E>6 z%*34FlEji!Mg}1tgu%fjMVWc&*6a*?j0}Qc;nI@K9DR?(;*8+b5-tW_24;{of;
faRol7-Se^85y`Ui`_Ew5_2-EQd1Zi7^B!3DgEhHUfQ`t{ z<6@9wVCH5}Vo+vhP~l-vWl&>e;6->KIJJb4fjKcHg^@v21L9VsfV9?(0%_IYVbEmI zVr1aREJ-a&EXgloWDwKPgs2Al%o8eZ&CQ_0pv%sn$HSn{V8F;Ags=#vgpq+gBeB>o zwE|?X2FQFJ1|uE@V+IpO29`Xqun5d-WS6irn4!cpBtqC3EEpO1K;935hb0$-IfE4_ zX;?Ed*dY4}qQx5GZm`+T8Hq)S$t9^p$bwL1nqgcF91ONR40fP2CYS~db;r_@{M^J6 zP{499IDo8iL<>5&eo)Xk^DwwDxH2-ZC8ne}=HxIkNJ3o%4maogoSf8TPy(>li~?Eb z&coor;K|4!l%87Rh?)u*83bYB0@e#kO&~4aJPbY{Eu878CE%zpW@qqYWMBscil3V! zBLin}W_n&?Noi3kBZD%;^DqN!AY5=*K%H%8&B&k#5k{y2nS}^oYmgci=lqmZQ2Nfy zOZ6+wO-d~aNleNC=bHTF#GJ6iqD&AUD#%ijky*^hAn5}#2}|CyW@O+hE=eqc_<)f? z72T^iT*{Z8T7qy`F(ZQnibkaHWn|F8A!P%06v7m+_xRIOOFZ*3OAw_2YN~{W79#_1 zVoC}^FC&An2D)*YVT=r1h^)@YAb_rdk%2e3Br!SLH?aU3UR?0}Tg=EH2ueFBiGh)U z6cHy)&v_5VlgtX=9gro7BMn#B8l;2=9Q!t6+_Y;BLi=8 zeqM57NormqC>=5~aAoJDrskyvmn0T3GH`1kn5KBSR!Z6c$57&<#<*X-G5!BdBD;Vu(1pA!;}c0l6fGAr>02 z$lhT`H$)qYA&d-h4DnDGq%bgnLrhw03xm{52JYPqa*^8^6!vRvVGz;Y$)L!@5Dtm} zW(H6M2r;mLB9MWd!H|KU!I(jc!4zyfB+#Xyp~b);&5*#5$iT>u#K6G7%)rRckj%iq zz{0@DAjiPSkiy_d*luwgc3U#AGgvY3GuSXlG1%d-I~5$^SnW<@NQc^O#=r>nHxnaz zh=n5=%LMll6GH|=CIcgiPqK(GEtY80vWYM)nP}5;7;>RL-NnEPjy6Bc7#82jpw7tP zqrH# zuwnt3Bgp~_iA&muP|#!GW?*2L#lX%mn}MHU9)mQ)LIzESMGWQ)iy2%QmN6tTEN3WW zSjAAwu$rNPVJ$dBv=~?z3K@97A;Q9t#2^h05oVCjpdlj7kj_xZ5C+Xk{0z+ee;MrA z893M(bbc`ypaf45EO;1npv4*klWuW3hz>&d&Aqr{+qCnlo;0B6fCUEHosUNt(#z4Xl>UjZ2 T1|O`Ny@=4vz{pSz4&Mp@a)gC5 literal 2181 zcmX^0Z`VEs1_oOO8!iSW24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00SE(Q(;PId+^9tLg(9!3W7#3V!g%-n(;efOZyfB;v0KQ~9u+=3iN2BGxS z6367^)Pj=Cy!7Cb#FErvMg~C*O&_oYr6rj;`oXCs)*$ovco_IWhH<8+mOxapGYB#= zu!GF@b8}>5U~$e*No8c<_sPsl^()OyN-YXWOv*`RWDxSnPfpAUODxI+@u7k&B^jB; zj0}=KApKa}X3faJ8JwA(msnC-l*-7UitZ*Gh!eqK5L{A}nU`*DXU)jKm!4V@Qk0li zoLQ2YpI6MtAc3OMIX@>SH5nvj&B&mIL&^s1CWI+qgZa}_OFZ*3OEMF4z`kc>5P@k& zb^{{=Z(>RcLN6nOum-wunqiC#TqSTvGBOCDt6*f{a;*TzN`783JA(=%gET0Z+%oeL zb26(^Q@}2Ot6*dhOiW2ZjYdWWQ4P!x0@=)342ot@tbpSf)$y#Qd71fnAisf~8}K?`b_83QBOa?F^~MluZ+ zGoV=4W&ni)veR^lFwKBy)AWci&6H@<^cf7GJ_WfNlz=gPY6Uh8l6ql2MfRT|5oXvE zFvExlGh7ImVa#BHo)VeYfKwJCCwgKrgOR}$oKHd7SR0(su%twPB#n&FjL67fMue5Y zNIGG`$H-vLU;%Y3Jc(gAHUg{@lKNpfK}pOKlwbuM8Mqmwpk^RSpKT26=w%3&(nr9N Tfgh`8ULrIzFfv$ygVh=U&H6B>