Mercurial > 14ss.theoinf
comparison notes/tex/grammars.tex @ 21:6a3cdddedcf7
fifth sheet and notes
author | Markus Kaiser <markus.kaiser@in.tum.de> |
---|---|
date | Fri, 16 May 2014 17:14:03 +0200 |
parents | 02e25244ae1f |
children | 334369297f54 |
comparison
equal
deleted
inserted
replaced
20:02e25244ae1f | 21:6a3cdddedcf7 |
---|---|
422 \end{frame} | 422 \end{frame} |
423 } | 423 } |
424 | 424 |
425 \defineUnit{greibach}{% | 425 \defineUnit{greibach}{% |
426 \begin{frame} | 426 \begin{frame} |
427 \frametitle{Greibach Normalform} | 427 \frametitle{Greibach-Normalform} |
428 | 428 |
429 Stuff. | 429 \begin{definition}[Greibach-Normalform] |
430 Eine kontextfreie Grammatik ist in \structure{Greibach-Normalform} (GNF) genau dann wenn alle Produktionen außer $S \to \epsilon$ die Form | |
431 \[ | |
432 A \rightarrow \alert{a\alpha} \quad \text{mit} \quad a \in \Sigma, \alpha \in V^* | |
433 \] | |
434 haben. | |
435 \end{definition} | |
436 | |
437 \vfill | |
438 | |
439 \begin{theorem} | |
440 Zu \alert{jeder} CFG $G$ existiert eine CFG $G'$ in Greibach-Normalform mit | |
441 \[ | |
442 L(G') = L(G) | |
443 \] | |
444 \end{theorem} | |
445 \end{frame} | |
446 | |
447 \begin{frame} | |
448 \frametitle{Einsetzen von Produktionen} | |
449 | |
450 \begin{theorem}[Einsetzen von Produktionen] | |
451 Enthält eine CFG die Produktionen | |
452 \begin{align} | |
453 A &\to \alpha_1 \structure{B} \alpha_2\\ | |
454 \structure{B} &\to \alert{\beta_1} \mid \dots \mid \alert{\beta_k} | |
455 \intertext{so ändert sich die erzeugte Sprache nicht, wenn man $B$ in $A$ \structure{einsetzt}.} | |
456 A &\to \alpha_1 \alert{\beta_1} \alpha_2 \mid \dots \mid \alpha_1 \alert{\beta_k} \alpha_2 | |
457 \end{align} | |
458 \end{theorem} | |
459 | |
460 \vfill | |
461 | |
462 \begin{example} | |
463 Die Grammatik | |
464 \begin{align} | |
465 S &\to a \mid a\structure{B}c \\ | |
466 \structure{B} &\to \alert{b} \mid \alert{bS} | |
467 \intertext{ist äquivalent zur Grammatik} | |
468 S &\to a \mid a\alert{b}c \mid a\alert{bS}c | |
469 \end{align} | |
470 \end{example} | |
471 \end{frame} | |
472 | |
473 \begin{frame} | |
474 \frametitle{Linksrekursive Produktionen} | |
475 | |
476 \begin{definition}[Linksrekursive Produktion] | |
477 Man nennt eine Produktion \structure{linksrekursiv}, wenn sie die Form | |
478 \[ | |
479 \structure{A} \to \structure{A}\alpha_1 \mid \dots \mid \structure{A}\alpha_k \mid \beta_i \mid \dots \mid \beta_l \quad \text{mit} \quad \alpha_i, \beta_i \in \left( V \cup \Sigma \right)^+ | |
480 \] | |
481 hat, wobei die $\beta_i$ nicht mit $A$ beginnen. | |
482 \end{definition} | |
483 | |
484 \vfill | |
485 | |
486 \begin{theorem}[Ersetzen von linksrekursiven Produktionen] | |
487 Sei $A$ eine linksrekursive Produktion einer CFG.\\ | |
488 Dann ändert sich die erzeugte Sprache nicht, wenn wir $A$ \structure{ersetzen} durch | |
489 \begin{align} | |
490 \structure{A} &\to \beta_1 \mid \dots \mid \beta_l \mid \beta_1 \alert{B} \mid \dots \mid \beta_l \alert{B}\\ | |
491 \alert{B} &\to \alpha_1 \mid \dots \mid \alpha_k \mid \alpha_1 \alert{B} \mid \dots \mid \alpha_k \alert{B} | |
492 \end{align} | |
493 \alert{$B$} ist niemals linksrekursiv. | |
494 \end{theorem} | |
495 \end{frame} | |
496 } | |
497 | |
498 \defineUnit{greibachkonstruktion}{% | |
499 \begin{frame} | |
500 \frametitle{GNF Konstruktion} | |
501 | |
502 \begin{block}{GNF Konstruktion} | |
503 Sei $G = (V, \Sigma, P, S)$ eine CFG. | |
504 \begin{enumerate} | |
505 \item<1,2-> \alert{Nummeriere} Nichtterminale | |
506 \item<1,3-> Mache Prduktionen \alert{aufsteigend} und \alert{nicht rekursiv} | |
507 \item<1,5-> \alert{Setze} Produktionen absteigend \alert{ein} | |
508 \end{enumerate} | |
509 \end{block} | |
510 | |
511 \vspace{1em} | |
512 | |
513 \only<2> { | |
514 Benenne alle Nichtterminale \structure{beliebig} um in $A_1, \dots, A_\abs{V}$. | |
515 \begin{align} | |
516 S &\rightarrow Ab, \quad A \rightarrow aAS \mid \epsilon \\ | |
517 \intertext{wird zu} | |
518 A_1 &\to A_2b\\ | |
519 A_2 &\to aA_2A_1 | |
520 \end{align} | |
521 } | |
522 | |
523 \only<3,4> { | |
524 Betrachte alle Produktionen $A_l \to \dots$ in \structure{aufsteigender Reihenfolge}.\\ | |
525 \begin{itemize} | |
526 \item Existieren Produktionen der Form $A_l \to \structure{A_r}\alpha$ mit \alert{$r < l$}, dann setze \structure{$A_r$} in $A_l$ ein. | |
527 \only<3> { | |
528 \begin{align} | |
529 A_1 &\to A_2 \mid a \mid b \\ | |
530 A_2 &\to \structure{A_1}xA_1 | |
531 \intertext{wird zu} | |
532 A_1 &\to a \mid b\\ | |
533 A_2 &\to \structure{A_2}xA_1 \mid \structure{a}xA_1 \mid \structure{b}xA_1 | |
534 \end{align} | |
535 } | |
536 \item Entferne danach alle \structure{linksrekursiven} $A_l$-Produktionen. | |
537 \only<4> { | |
538 \begin{align} | |
539 A_2 &\to A_2\structure{xA_1} \mid \alert{axA_1} \mid \alert{bxA_1} | |
540 \intertext{wird zu} | |
541 A_2 &\to \alert{axA_1} \mid \alert{bxA_1} \mid \alert{axA_1}A_3 \mid \alert{bxA_1}A_3\\ | |
542 A_3 &\to \structure{xA_1} \mid \structure{xA_1}A_3 | |
543 \end{align} | |
544 } | |
545 \end{itemize} | |
546 } | |
547 | |
548 \only<5> { | |
549 Betrachte alle Produktionen $A_l \to \dots$ in \structure{absteigender Reihenfolge}.\\ | |
550 \begin{itemize} | |
551 \item Existieren Produktionen der Form $A_l \to \structure{A_r}\alpha$ mit \alert{$r > l$}, dann setze \structure{$A_r$} in $A_l$ ein. | |
552 \begin{align} | |
553 A_1 &\to a \mid b \mid \structure{A_2} \\ | |
554 A_2 &\to axA_1 \mid bxA_1 \mid axA_1A_3 \mid bxA_1A_3\\ | |
555 A_3 &\to xA_1 \mid xA_1A_3 | |
556 \intertext{$A_1$ wird zu} | |
557 A_1 &\to a \mid b \mid \structure{axA_1} \mid \structure{bxA_1} \mid \structure{axA_1A_3} \mid \structure{bxA_1A_3} | |
558 \end{align} | |
559 \end{itemize} | |
560 | |
561 } | |
430 \end{frame} | 562 \end{frame} |
431 } | 563 } |
432 | 564 |
433 \defineUnit{pda}{% | 565 \defineUnit{pda}{% |
434 \begin{frame} | 566 \begin{frame} |
508 | 640 |
509 \node[state, initial] (q0) {$q_0$}; | 641 \node[state, initial] (q0) {$q_0$}; |
510 \node[state] (q1) [right of = q0] {$q_1$}; | 642 \node[state] (q1) [right of = q0] {$q_1$}; |
511 \node[state] (q2) [right of = q1] {$q_2$}; | 643 \node[state] (q2) [right of = q1] {$q_2$}; |
512 | 644 |
513 \draw[->] (q0) edge [loop above] node {$\epsilon, Z_0/\epsilon$}; | 645 \draw[->] (q0) edge [loop above] node {$\epsilon, Z_0/\epsilon$} (q0); |
514 | 646 |
515 \draw[->] (q0) edge node {$a, Z_0/AZ_0$} (q1); | 647 \draw[->] (q0) edge node {$a, Z_0/AZ_0$} (q1); |
516 \draw[->] (q1) edge node {$\epsilon, A/A$} (q2); | 648 \draw[->] (q1) edge node {$\epsilon, A/A$} (q2); |
517 | 649 |
518 \draw[->] (q1) edge [loop above] node {$a, */A*$} (q1); | 650 \draw[->] (q1) edge [loop above] node {$a, */A*$} (q1); |