diff --git a/info4/kapitel-3/PDA_nach_kfG.ipynb b/info4/kapitel-3/PDA_nach_kfG.ipynb index a5f9cfc16864fb7d8eb15167d33c60f0d90f1bf2..bd2e7f740be66b4903ab1337bc310b9669767aaa 100644 --- a/info4/kapitel-3/PDA_nach_kfG.ipynb +++ b/info4/kapitel-3/PDA_nach_kfG.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 41, "metadata": {}, "outputs": [ { @@ -18,7 +18,7 @@ "Loaded machine: PDA_to_CFG" ] }, - "execution_count": 16, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -28,56 +28,61 @@ "MACHINE PDA_to_CFG\n", "/* Translating a PDA to a CFG */\n", "SETS\n", - " STATES = {z0,z1, symbol}; \n", + " Z = {z0,z1, symbol}; \n", " /* symbol: virtueller Zustand um S und andere Symbole in der Grammatik darzustellen */\n", - " SYMBOLS={a,b, A, BOT, lambda, S} /* BOT = # = bottom of stack*/\n", + " SYMBOLE={a,b, A, BOT, lambda, S} /* BOT = # = Ende vom Keller */\n", "DEFINITIONS\n", - " CFG_Alphabet == (STATES*(SYMBOLS-{lambda})*STATES);\n", + " kfG_Alphabet == (Z*(SYMBOLE \\ {lambda})*Z);\n", " Σ == {a,b};\n", " Γ == {A,BOT};\n", - " ANIMATION_FUNCTION1 == {r,c,i| r=1 ∧ c∈dom(cur) ∧ i=prj1(STATES,SYMBOLS)(prj1(STATES*SYMBOLS,STATES)(cur(c)))};\n", - " ANIMATION_FUNCTION2 == {r,c,i| r=2 ∧ c∈dom(cur) ∧ i=prj2(STATES,SYMBOLS)(prj1(STATES*SYMBOLS,STATES)(cur(c)))};\n", - " ANIMATION_FUNCTION3 == {r,c,i| r=3 ∧ c∈dom(cur) ∧ i=prj2(STATES*SYMBOLS,STATES)(cur(c))};\n", - " ANIMATION_STR_JUSTIFY_LEFT == TRUE;\n", - " SET_PREF_PP_SEQUENCES == TRUE;\n", - " PDA_STATES == (STATES-{symbol});\n", + " PDA_Zustände == (Z-{symbol});\n", "\n", " SYMS(s) == IF (s=lambda) THEN [] ELSE [SYM(s)] END;\n", - " SYM(s) == (symbol,s,symbol);\n", - " TERMINALS == {x|∃t.(t∈Σ ∧ x=SYM(t))}\n", - "CONSTANTS delta, Productions\n", + " SYM(s) == (symbol,s,symbol); // Darstellung eines Symbols als Tripel für die Grammatik\n", + " kfG_TERMINALE == {x|∃t.(t∈Σ ∧ x=SYM(t))};\n", + " \n", + " ANIMATION_FUNCTION1 == {r,c,i| r=1 ∧ c∈dom(cur) ∧ i=prj1(Z,SYMBOLE)(prj1(Z*SYMBOLE,Z)(cur(c)))};\n", + " ANIMATION_FUNCTION2 == {r,c,i| r=2 ∧ c∈dom(cur) ∧ i=prj2(Z,SYMBOLE)(prj1(Z*SYMBOLE,Z)(cur(c)))};\n", + " ANIMATION_FUNCTION3 == {r,c,i| r=3 ∧ c∈dom(cur) ∧ i=prj2(Z*SYMBOLE,Z)(cur(c))};\n", + " ANIMATION_STR_JUSTIFY_LEFT == TRUE;\n", + " SET_PREF_PP_SEQUENCES == TRUE\n", + "CONSTANTS δ, Regeln\n", "PROPERTIES\n", - " /* A PDA accepting {a^mb^m| m≥1} ; Beispiel von Info 4 (Folie 95ff) */\n", - " delta = { (z0,a,BOT) ↦ (z0,[A,BOT]),\n", + " /* Ein PDA für {a^m b^m| m≥1} ; Beispiel von Info 4 (Folie 95ff) */\n", + " δ = { (z0,a,BOT) ↦ (z0,[A,BOT]),\n", " (z0,a,A) ↦ (z0,[A,A]),\n", " (z0,b,A) ↦ (z1,[]),\n", " (z1,lambda,BOT) ↦ (z1,[]),\n", " (z1,b,A) ↦ (z1,[]) } ∧\n", "\n", "\n", - " Productions = /* Punkt 1 Folie 109 */\n", - " { lhs,rhs | ∃z.(z∈PDA_STATES ∧ lhs=SYM(S) ∧ rhs = [(z0,BOT,z)])}\n", + " Regeln = /* Punkt 1 Folie 109 */\n", + " { lhs,rhs | ∃z.(z∈PDA_Zustände ∧ lhs=SYM(S) ∧ rhs = [(z0,BOT,z)])}\n", " ∪\n", " /* Punkt 2 Folie 109 */\n", - " { lhs,rhs | ∃(z,a,A,z2).((z,a,A)↦(z2,[])∈delta ∧\n", + " { lhs,rhs | ∃(z,a,A,z2).((z,a,A)↦(z2,[])∈δ ∧\n", " lhs=(z,A,z2) ∧ rhs = SYMS(a)) }\n", " ∪\n", " /* Punkt 3 Folie 110 */\n", - " { lhs,rhs | ∃(z,a,A,B,z1,z2).((z,a,A)↦(z1,[B])∈delta ∧ z2∈PDA_STATES ∧\n", + " { lhs,rhs | ∃(z,a,A,B,z1,z2).((z,a,A)↦(z1,[B])∈δ ∧ z2∈PDA_Zustände ∧\n", " lhs=(z,A,z2) ∧ rhs = SYMS(a)^[(z1,B,z2)]) }\n", " ∪\n", " /* Punkt 4 Folie 110 */\n", - " { lhs,rhs | ∃(z,a,A,B,C,z1,z2,z3).((z,a,A)↦(z1,[B,C])∈delta ∧ \n", - " z2∈PDA_STATES ∧ z3∈PDA_STATES ∧\n", - " lhs=(z,A,z3) ∧ rhs = SYMS(a)^[(z1,B,z2),(z2,C,z3)]) }\n", + " { lhs,rhs | ∃(z,a,A,B,C,z1,z2,z3).((z,a,A)↦(z1,[B,C])∈δ ∧ \n", + " z2∈PDA_Zustände ∧ \n", + " z3∈PDA_Zustände ∧\n", + " lhs=(z,A,z3) ∧ \n", + " rhs = SYMS(a)^[(z1,B,z2),(z2,C,z3)]) }\n", "VARIABLES cur\n", "INVARIANT\n", - " cur ∈ seq(CFG_Alphabet)\n", - "INITIALISATION cur:=SYMS(S)\n", + " cur ∈ seq(kfG_Alphabet)\n", + "INITIALISATION\n", + " cur:=SYMS(S)\n", "OPERATIONS\n", - " ApplyRule(LHS,RHS,pre,post) = PRE LHS↦RHS ∈ Productions ∧\n", + " // Anwendung einer Grammatikregel\n", + " ApplyRule(LHS,RHS,pre,post) = PRE LHS↦RHS ∈ Regeln ∧\n", " cur = pre^[LHS]^post ∧\n", - " ran(pre) ⊆ TERMINALS /* Links Ableitung */\n", + " ran(pre) ⊆ kfG_TERMINALE /* Links Ableitung */\n", " THEN\n", " cur := pre^RHS^post\n", " END\n", @@ -86,7 +91,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 42, "metadata": {}, "outputs": [ { @@ -95,7 +100,7 @@ "Machine constants set up using operation 0: $setup_constants()" ] }, - "execution_count": 17, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -106,7 +111,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 43, "metadata": {}, "outputs": [ { @@ -115,7 +120,7 @@ "Machine initialised using operation 1: $initialise_machine()" ] }, - "execution_count": 18, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -126,7 +131,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 45, "metadata": {}, "outputs": [ { @@ -138,18 +143,18 @@ "{(z0↦a↦A↦(z0↦[A,A])),(z0↦a↦BOT↦(z0↦[A,BOT])),(z0↦b↦A↦(z1↦[])),(z1↦b↦A↦(z1↦[])),(z1↦lambda↦BOT↦(z1↦[]))}" ] }, - "execution_count": 37, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "delta" + "δ" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 46, "metadata": {}, "outputs": [ { @@ -171,7 +176,7 @@ "<Animation function visualisation>" ] }, - "execution_count": 19, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" }