source: liacs/TPFL2010/assignment3/report.tex@ 269

Last change on this file since 269 was 260, checked in by Rick van der Zwet, 14 years ago

5.14 done!

File size: 11.1 KB
RevLine 
[2]1%
2% $Id: report.tex 571 2008-04-20 17:31:04Z rick $
3%
4
5\documentclass[12pt,a4paper]{article}
6
7\frenchspacing
8\usepackage[english,dutch]{babel}
9\selectlanguage{dutch}
[224]10\usepackage[pdftex]{graphicx}
[2]11\usepackage{url}
12\usepackage{amssymb,amsmath}
[224]13\usepackage{float}
[226]14\usepackage{tikz}
[227]15\usepackage{fixltx2e}
[254]16\usepackage{rotating}
[2]17
[226]18\usetikzlibrary{arrows,decorations.pathmorphing,backgrounds,positioning,fit,petri}
19
20
21
22\setlength\parindent{0pt}
23\setlength\parskip{\baselineskip}
[224]24\floatstyle{ruled}
25\newfloat{algoritm}{thp}{lop}
26\floatname{algoritm}{Algoritme}
27
[242]28\title{Opdracht 3 \\
[224]29\large{Topics on Parsing and Formal Languages - fall 2010}}
[2]30\author{Rick van der Zwet\\
[224]31 \texttt{<hvdzwet@liacs.nl>}}
[2]32\date{\today}
33
[224]34
[2]35\begin{document}
[224]36\newcommand{\DFA}{\emph{DFA}~}
37\newcommand{\qed}{\hfill \ensuremath{\Box}}
[238]38\newcommand{\all}{\Sigma^*}
[253]39\newcommand{\sep}{~|~}
[2]40\maketitle
[224]41\begin{abstract}
42Dit schrijven zal uitwerkingen van opgaven behandelen uit het boek
[242]43\cite{JS2009} gebruikt bij het college. In deze opdracht zullen vijf opgaven
[253]44(1, 5, 6, 8, 14) van hoofdstuk 5 behandeld worden.
[224]45\end{abstract}
[2]46
[242]47\section{Opgave 5.1}
[256]48De grammatica $G$ bestaat uit de volgende producties:
49\begin{equation*}
[253]50\begin{array}{l}
51S \rightarrow AB \sep b \\
52A \rightarrow BC \sep a \\
53B \rightarrow AS \sep CB \sep b \\
54C \rightarrow SS \sep a \\
55\end{array}
[256]56\end{equation*}
[224]57
[253]58Gebruikmakend van het CYK algoritme gaan we aantonen dat $x = babbbab \in L(G)$
59zit. De ondersteunende tabel is van de grootte $6\times6$ omdat dit de lengte
[255]60van het woord $x$ is. In tabel~\ref{tb:opdr1} staat\footnote{Om de \LaTeX~tabel
[256]61automatisch te gegenereren vanuit een woord en een CFG grammatica heb ik
[255]62\url{http://rickvanderzwet.nl/svn/personal/liacs/TPFL2010/assignment3/cyk.py}
63geschreven, vanwege de fouten ik met handwerk maakte.} cel $i,j$ voor welke
64transities er gevolgt moet worden om het
65subwoord $x[i..j]$ te vormen. Omdat de start transitie $S$ in $1,6$ staat zit
66het woord $x$ in $L(G)$. De ontleedboom is te zien in figuur~\ref{fig:opdr1}.
[224]67
[253]68
[254]69\begin{sidewaystable}[htbp]
[253]70\center
[255]71\begin{tabular}{|c||c|c|c|c|c|c|c|}
[253]72\hline
[255]73i\textbackslash j & 1 & 2 & 3 & 4 & 5 & 6 & 7 \\ \hline \hline
74 1 & \begin{tabular}{l} S \\B \\ \end{tabular} & \begin{tabular}{l} A: (B,C,1) \\ \end{tabular} & \begin{tabular}{l} C: (S,S,1) \\S: (A,B,2) \\B: (A,S,2) \\ \end{tabular} & \begin{tabular}{l} A: (B,C,1) \\B: (C,B,3) \\C: (S,S,3) \\ \end{tabular} & \begin{tabular}{l} C: (S,S,1) \\S: (A,B,2),(A,B,4) \\A: (B,C,3) \\B: (A,S,4),(C,B,4) \\ \end{tabular} & \begin{tabular}{l} A: (B,C,5) \\ \end{tabular} & \begin{tabular}{l} A: (B,C,1),(B,C,3),(B,C,4) \\C: (S,S,1),(S,S,5) \\S: (A,B,2),(A,B,4)\\...(A,B,5),(A,B,6) \\B: (A,S,2),(C,B,3)\\...(A,S,4),(C,B,4),(A,S,5)\\...(C,B,5),(A,S,6) \\ \end{tabular} \\ \hline
75 2 & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} A \\C \\ \end{tabular} & \begin{tabular}{l} S: (A,B,2) \\B: (A,S,2),(C,B,2) \\ \end{tabular} & \begin{tabular}{l} C: (S,S,3) \\ \end{tabular} & \begin{tabular}{l} S: (A,B,2) \\B: (C,B,2),(C,B,4) \\A: (B,C,3) \\ \end{tabular} & \begin{tabular}{l} A: (B,C,5) \\ \end{tabular} & \begin{tabular}{l} S: (A,B,2),(A,B,5),(A,B,6) \\B: (A,S,2),(C,B,2),\\...(C,B,4),(A,S,5),(A,S,6) \\A: (B,C,3) \\C: (S,S,5) \\ \end{tabular} \\ \hline
76 3 & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} S \\B \\ \end{tabular} & \begin{tabular}{l} C: (S,S,3) \\ \end{tabular} & \begin{tabular}{l} A: (B,C,3) \\B: (C,B,4) \\ \end{tabular} & \begin{tabular}{l} A: (B,C,5) \\ \end{tabular} & \begin{tabular}{l} A: (B,C,3) \\B: (C,B,4),(A,S,5),(A,S,6) \\S: (A,B,5),(A,B,6) \\ \end{tabular} \\ \hline
77 4 & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} S \\B \\ \end{tabular} & \begin{tabular}{l} C: (S,S,4) \\ \end{tabular} & \begin{tabular}{l} $\emptyset$ \end{tabular} & \begin{tabular}{l} A: (B,C,4) \\C: (S,S,4) \\B: (C,B,5) \\ \end{tabular} \\ \hline
78 5 & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} S \\B \\ \end{tabular} & \begin{tabular}{l} A: (B,C,5) \\ \end{tabular} & \begin{tabular}{l} C: (S,S,5) \\S: (A,B,6) \\B: (A,S,6) \\ \end{tabular} \\ \hline
79 6 & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} A \\C \\ \end{tabular} & \begin{tabular}{l} S: (A,B,6) \\B: (A,S,6),(C,B,6) \\ \end{tabular} \\ \hline
80 7 & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} \end{tabular} & \begin{tabular}{l} S \\B \\ \end{tabular} \\ \hline
[253]81
82\end{tabular}
[255]83\caption{$CYK(L(G),a)$. Algoritme beschreven in \cite{JS2009}[pg.~142]}
84\label{tb:opdr1}
[254]85\end{sidewaystable}
[253]86
[255]87\begin{figure}
88\center
89\begin{tikzpicture}
90 [level distance=10mm,level/.style={sibling distance=40mm/#1}]
91 \node {S}
92 child {node {A}
93 child {node {B}
94 child {node {b}}
95 }
96 child {node {C}
97 child {node {a}}
98 }
99 }
100 child {node {B}
101 child {node {C}
102 child {node {S}
103 child {node {S}
104 child {node {b}
105 }
106 }
107 child {node {S}
108 child {node {b}}
109 }
110 }
111 child {node {S}
112 child {node {b}}
113 }
114 }
115 child {node {B}
116 child {node {A}
117 child {node {a}}
118 }
119 child {node {S}
120 child {node {b}}
121 }
122 }
123 }
124 ;
125\end{tikzpicture}
126\label{fig:opdr1}
127\caption{Ontleedboom voor het woord $babbbab$}
128\end{figure}
129
[242]130\section{Opgave 5.5}
[256]131Om een LL(1) grammatica te generen voor alle woorden in $\{w \in
132\{a,b\}^*~:~|w|_a = |w|_b\}$ is:
133\begin{equation*}
134S \rightarrow aSbS \sep bSaS \sep \emptyset
135\end{equation*}
136Om aan te tonen dat de grammatica correct is, is het eerst belangrijk om te
137zien dat elke keer dat een $a$ genereerd word er ook automatisch een $b$
138genereerd wordt. Deze dus altijd gelijk zijn.
139Om te laten zien dat deze grammatica \emph{alle} woorden in de taal bevat is
140bewijzen we met inductie naar lengte van het woord. Als $|w| = 0$ dan is $w =
141\emptyset$, deze wordt door de taal herkent.
[224]142
[256]143Neem alle woorden tot lengte $2N$ en een gelijk aantal $a$ en $b$ afleidbaar
144zijn van $S$. Neem nu de string $w'$ met een gelijk aantal $a$ en $b$, een
145lengte van $2(N+1)$ en $a$ als begin symbool. In het slechte geval is $2N+2$
146weer nieuw woord doordat je altijd een extra $T$ kan ontwikkelen en die daarna
147laat terminereren. Bijvoorbeeld $abab \rightarrow abaSbS \rightarrow ababSaSbS
148\rightarrow ababab$.
[226]149
[256]150In de betere gevallen bestaat er een $2 \le j \le 2N+2$ zodaning dat $j$
151aangeeft dat $w[1..j]$ een gelijk aantal $a$ en $b$ heeft, zodanig dat de vorm
152van $w' = aw_1bw_2$. Met inductie kunnen we bewijzen dat $w_1$ en $w_2$
153gemaakt kunnen worden van $S$, wat volgt dat $w'$ ook van $S$ gemaakt kan
154worden.
155
[257]156LL(1) eigenschap wordt bereikt, door naar de \emph{FIRST} te kijken, welke
157respectivelijk $\{a\}, \{b\}, \{\emptyset\}$ zijn. De $FOLLOW(S) =
158\{a,b,\emptyset\}$. Deze twee gegevens samen maken dat de LL(1) bereikt wordt,
159welke ook te zijn is in tabel~\ref{tb:opdr5}.
[256]160
[257]161\begin{table}
162\center
163\begin{tabular}{c||c|c|c}
164y \textbackslash x & a & b & \$ \\
165\hline \hline
166S & $S \rightarrow aSbS$ & $S \rightarrow bSaS$ & $S \rightarrow \emptyset$ \\
167a & pop & & \\
168b & & pop & \\
169\# & & & accept \\
170\end{tabular}
171\caption{Ontleedtabel for Opdracht 5.5}
172\label{tb:opdr5}
173\end{table}
174
175
[242]176\section{Opgave 5.6}
[258]177Laat $G$ een \emph{CFG} zijn zonder 'nutteloze symbolen. Als $G$ een LL(1) grammatica is dan en slechts als, voor willekeurig twee ongelijke producties van de vorm $X \rightarrow \alpha$ en $X \rightarrow \beta$, dan is het volgende geldig, als $x,y \in FOLLOW(X)$ dan $FIRST(\alpha x) \cap FIRST(\beta y) = \emptyset$. De symbolen $x$ en $y$ hoeven niet unique te zijn.
[226]178
[258]179$\Rightarrow$ Als $G$ LL(1) dan moet met behulp van '{e}'{e} symbool de juiste
180transitie gekozen worden. Als we bijvoorbeeld in toestand $X$ zijn dan moet
181onze volgende stap (de $FIRST$) unique \footnote{De eigenschap wordt
182afgedwongen door Stelling 5.3.4 en de bovenstaande definitie op
[259]183\cite{JS2009}[pg.~157]} zijn onafhankelijk wat hier achter wordt gezet.
[226]184
[258]185$\Leftarrow$ Als voor alle willekeurige $x$ en $y$ beiden in $FOLLOW(X)$ beiden
186geen gemeenschapelijke start symbool hebben ($FIRST(\alpha x) \cap FIRST(\beta
187y) = \emptyset$), betekend dat de transities $X \rightarrow \alpha$ en $X
188\rightarrow \beta$ door elkaar te onderscheiden zijn door het eerste symbool.
189Omdat dit geldt voor alle transities is de taal dus herkenbaar door enkel het
[259]190eerste symbool in de transities en dus LL(1). Als ze wel een gemeenschapelijk
191start symbool hebben zijn er minimaal 2 symbolen nodig om de taal te herkennen
192en is deze \underline{niet} LL(1).
[258]193
194
[259]195% \section{Opgave 5.8}
196% Een voorbeeld van een LR(0) grammatica waar er een levensvatbare prefix
197% $\gamma$ bestaat en \emph{item}\footnote{Ik kan geen goede vertaling voor item
198% vinden welke de definie \cite{JS2009}[pg.~145] eer aandoet} $A \rightarrow
199% \bullet, B \rightarrow \alpha \bullet \beta$ welke beiden geldig zijn voor
200% $\gamma$.
201\newpage
202\section{Opgave 5.10}
[260]203Een voorbeeld van een grammatica welke wel $LL(k+1)$ is maar niet $LL(k)$, is
204gegeven in context van het aantonen dat voor elke $k > 0$ de $L(k+1)$ talen
205niet de $L(k)$ talen zijn. \cite{STOC69}[pg.~174] en is de grammatica van de
206taal $\{a^n(b^kd|b|cc)^n : n \ge 1\}$:
207\begin{equation*}
[259]208\begin{array}{l}
209S \rightarrow aSA \\
210S \rightarrow aA \\
211A \rightarrow cc \\
212A \rightarrow bB \\
[260]213A \rightarrow \epsilon \\
[259]214B \rightarrow b^{k-1}d \\
215\end{array}
[260]216\end{equation*}
[226]217
218
[242]219\section{Opgave 5.14}
[260]220Laat $G$ een LR(0) grammatica zijn met $A \rightarrow \alpha \bullet, \alpha
221\ne \epsilon$, welke geldig is voor een levensvatbare prefix $\gamma$ er geen
222enkel ander \emph{item} kan geldig zijn voor $\gamma$. Als er een \emph{item}
223van de vorm $A \rightarrow \alpha B$ is levert dit een shift-reduce error op.
224Als er een \emph{item} van de vorm $A \rightarrow \beta \bullet : \alpha \ne
225\beta$ zal het betekenen dat er een \emph{item} 'vooraf' aan gegaan $A
226\rightarrow \bullet \alpha$ \underline{en} $A \rightarrow \bullet \beta$, wat
227niet mogelijk is omdat enkel de eerste geldig kan zijn per definitie.
[226]228
229
[224]230\begin{thebibliography}{1}
231\bibitem[JS2009]{JS2009}Jeffrey Shallit, \emph{A second course in formal
232languages and automata theory }, \emph{Cambridge University Press}, 2009.
[259]233\bibitem[STOC69]{STOC69}Rosenkrantz, D. J. and Stearns, R. E., Properties of
234deterministic top down grammars, Proceedings of the first annual
235ACM symposium on Theory of computing, STOC '69, Marina del Rey,
236California, United States, 165--180
[2]237\end{thebibliography}
238\end{document}
[259]239
Note: See TracBrowser for help on using the repository browser.