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);