| author | Christian Urban <christian.urban@kcl.ac.uk> | 
| Mon, 30 Oct 2023 18:46:27 +0000 | |
| changeset 950 | 285da21f44c0 | 
| parent 936 | aabd9168c7ac | 
| child 952 | f09d9db4e922 | 
| permissions | -rw-r--r-- | 
| 93 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 1 | \documentclass{article}
 | 
| 292 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 2 | \usepackage{../style}
 | 
| 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 3 | \usepackage{../graphics}
 | 
| 527 | 4 | \usepackage{../grammar}
 | 
| 93 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 5 | |
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 6 | \begin{document}
 | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 7 | |
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
147diff
changeset | 8 | % explain what is a context-free grammar and the language it generates | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
147diff
changeset | 9 | % | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
147diff
changeset | 10 | |
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
147diff
changeset | 11 | |
| 93 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 12 | \section*{Homework 5}
 | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 13 | |
| 359 
db106e5b7c4d
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
322diff
changeset | 14 | \HEADER | 
| 
db106e5b7c4d
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
322diff
changeset | 15 | |
| 
db106e5b7c4d
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
322diff
changeset | 16 | |
| 93 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 17 | \begin{enumerate}
 | 
| 294 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 18 | \item Consider the basic regular expressions | 
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 19 | |
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 20 | \begin{center}
 | 
| 401 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 21 | $r ::= \ZERO \;|\; \ONE \;|\; c \;|\; r_1 + r_2 \;|\; r_1 \cdot r_2 \;|\; r^*$ | 
| 294 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 22 | \end{center}
 | 
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 23 | |
| 401 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 24 | and suppose you want to show a property $P(r)$ for all | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 25 | regular expressions $r$ by structural induction. Write | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 26 | down which cases do you need to analyse. State clearly | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 27 | the induction hypotheses if applicable in a case. | 
| 294 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 28 | |
| 401 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 29 | \item Define a regular expression, written $ALL$, that can | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 30 | match every string. This definition should be in terms | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 31 | of the following extended regular expressions: | 
| 294 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 32 | |
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 33 | \begin{center}
 | 
| 401 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 34 | $r ::= \ZERO \;|\; | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 35 | \ONE \;|\; | 
| 294 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 36 | c \;|\; | 
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 37 | r_1 + r_2 \;|\; | 
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 38 | r_1 \cdot r_2 \;|\; | 
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 39 | r^* \;|\; | 
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 40 | \sim r$ | 
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 41 | \end{center}
 | 
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 42 | |
| 322 
698ed1c96cd0
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
294diff
changeset | 43 | %\item Assume the delimiters for comments are \texttt{$\slash$*}
 | 
| 
698ed1c96cd0
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
294diff
changeset | 44 | %and \texttt{*$\slash$}. Give a regular expression that can
 | 
| 
698ed1c96cd0
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
294diff
changeset | 45 | %recognise comments of the form | 
| 
698ed1c96cd0
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
294diff
changeset | 46 | % | 
| 
698ed1c96cd0
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
294diff
changeset | 47 | %\begin{center}
 | 
| 
698ed1c96cd0
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
294diff
changeset | 48 | %\texttt{$\slash$*~\ldots{}~*$\slash$} 
 | 
| 
698ed1c96cd0
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
294diff
changeset | 49 | %\end{center}
 | 
| 
698ed1c96cd0
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
294diff
changeset | 50 | % | 
| 
698ed1c96cd0
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
294diff
changeset | 51 | %where the three dots stand for arbitrary characters, but not | 
| 
698ed1c96cd0
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
294diff
changeset | 52 | %comment delimiters. | 
| 294 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 53 | |
| 93 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 54 | \item Define the following regular expressions | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 55 | |
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 56 | \begin{center}
 | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 57 | \begin{tabular}{ll}
 | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 58 | $r^+$ & (one or more matches)\\ | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 59 | $r^?$ & (zero or one match)\\ | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 60 | $r^{\{n\}}$ & (exactly $n$ matches)\\
 | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 61 | $r^{\{m, n\}}$ & (at least $m$ and maximal $n$ matches, with the\\
 | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 62 | &  \phantom{(}assumption $m \le n$)\\
 | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 63 | \end{tabular}
 | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 64 | \end{center}
 | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 65 | |
| 294 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 66 | in terms of the usual basic regular expressions | 
| 93 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 67 | |
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 68 | \begin{center}
 | 
| 401 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 69 | $r ::= \ZERO \;|\; \ONE \;|\; c \;|\; r_1 + r_2 \;|\; r_1 \cdot r_2 \;|\; r^*$ | 
| 93 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 70 | \end{center}
 | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 71 | |
| 294 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 72 | \item Give the regular expressions for lexing a language | 
| 401 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 73 |       consisting of identifiers, left-parenthesis \texttt{(},
 | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 74 |       right-parenthesis \texttt{)}, numbers that can be either
 | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 75 |       positive or negative, and the operations \texttt{+},
 | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 76 |       \texttt{-} and \texttt{*}. 
 | 
| 93 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 77 | |
| 401 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 78 | Decide whether the following strings can be lexed in | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 79 | this language? | 
| 147 
4725bba8ef26
added slides
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
102diff
changeset | 80 | |
| 294 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 81 | \begin{enumerate}
 | 
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 82 | \item \texttt{"(a3+3)*b"}
 | 
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 83 | \item \texttt{")()++-33"}
 | 
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 84 | \item \texttt{"(b42/3)*3"}
 | 
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 85 | \end{enumerate}
 | 
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 86 | |
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 87 | In case they can, give the corresponding token sequences. (Hint: | 
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 88 | Observe the maximal munch rule and the priorities of your regular | 
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 89 | expressions that make the process of lexing unambiguous.) | 
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 90 | |
| 602 | 91 | \item Suppose the following context-free grammar $G$ | 
| 527 | 92 | |
| 93 | \begin{plstx}[margin=1cm]
 | |
| 94 |   : \meta{S\/} ::= \meta{A\/}\cdot\meta{S\/}\cdot\meta{B\/} \;\mid\;
 | |
| 95 |                    \meta{B\/}\cdot\meta{S\/}\cdot\meta{A\/} \;\mid\; \epsilon\\
 | |
| 96 |   : \meta{A\/} ::= a \mid \epsilon\\
 | |
| 97 |   : \meta{B\/} ::= b\\
 | |
| 98 | \end{plstx}
 | |
| 99 | ||
| 602 | 100 | where the starting symbol is $\meta{S}$.
 | 
| 101 | Which of the following strings are in the language of $G$? | |
| 527 | 102 | |
| 103 | \begin{itemize}
 | |
| 104 | \item[$\bullet$] $a$ | |
| 105 | \item[$\bullet$] $b$ | |
| 106 | \item[$\bullet$] $ab$ | |
| 107 | \item[$\bullet$] $ba$ | |
| 108 | \item[$\bullet$] $bb$ | |
| 109 | \item[$\bullet$] $baa$ | |
| 619 | 110 | \end{itemize}
 | 
| 111 | ||
| 112 | \item Suppose the following context-free grammar | |
| 113 | ||
| 114 |   \begin{plstx}[margin=1cm]
 | |
| 115 |   : \meta{S\/} ::= a\cdot \meta{S\/}\cdot a\;\mid\;
 | |
| 116 |                    b\cdot \meta{S\/}\cdot b\;\mid\; \epsilon\\
 | |
| 117 |   \end{plstx}
 | |
| 118 | ||
| 119 | Describe which language is generated by this grammar. | |
| 120 | ||
| 936 | 121 | \item Remember we have specified identifiers with regular expressions as | 
| 122 | strings that start with a letter followed by letters, digits and | |
| 123 | underscores. This can also be specified by a grammar rule or rules. | |
| 124 | What would the rule(s) look like for identifiers? | |
| 527 | 125 | |
| 936 | 126 |   \solution{
 | 
| 127 |   \begin{plstx}[margin=1cm]
 | |
| 128 |   : \meta{Id\/} ::= \meta{Let\/}\cdot \meta{R}\\
 | |
| 129 |   : \meta{Let\/} ::= a \;\mid\; \dots \;\mid\; z\\
 | |
| 130 |   : \meta{Dig\/} ::= 0 \;\mid\; \dots \;\mid\; 9\\
 | |
| 131 |   : \meta{R\/} ::= \meta{Let\/} \cdot \meta{R\/} \;\mid\;
 | |
| 132 |                   \meta{Dig\/} \cdot \meta{R\/} \;\mid\;
 | |
| 133 |                   $\_$ \cdot \meta{R\/} \;\mid\; \epsilon\\
 | |
| 134 |   \end{plstx}  
 | |
| 135 | } | |
| 136 | ||
| 137 | \item If we specify keywords, identifiers (see above) and programs | |
| 138 | by grammar rules, are there any problems you need to be careful | |
| 139 | about when using a parser for identifying tokens? | |
| 140 | ||
| 141 |   \solution{Parsers do not have the POSIX rules (e.g.~longest munch
 | |
| 142 | rule) built in. I am not aware that any parser does this out of | |
| 143 | the box and you would need to build in such constraints into the | |
| 144 | grammar rules or parsing mechanism.} | |
| 527 | 145 | |
| 444 
3056a4c071b0
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
401diff
changeset | 146 | \item {\bf(Optional)} Recall the definitions for $Der$ and $der$
 | 
| 401 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 147 | from the lectures. Prove by induction on $r$ the | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 148 | property that | 
| 147 
4725bba8ef26
added slides
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
102diff
changeset | 149 | |
| 
4725bba8ef26
added slides
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
102diff
changeset | 150 | \[ | 
| 
4725bba8ef26
added slides
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
102diff
changeset | 151 | L(der\,c\,r) = Der\,c\,(L(r)) | 
| 
4725bba8ef26
added slides
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
102diff
changeset | 152 | \] | 
| 
4725bba8ef26
added slides
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
102diff
changeset | 153 | |
| 401 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
359diff
changeset | 154 | holds. | 
| 294 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 155 | |
| 444 
3056a4c071b0
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
401diff
changeset | 156 | \item \POSTSCRIPT | 
| 93 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 157 | \end{enumerate}
 | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 158 | |
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 159 | \end{document}
 | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 160 | |
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 161 | %%% Local Variables: | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 162 | %%% mode: latex | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 163 | %%% TeX-master: t | 
| 
4794759139ea
better organised
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 164 | %%% End: |