hws/hw09.tex
author Christian Urban <christian.urban@kcl.ac.uk>
Tue, 04 Apr 2023 22:31:09 +0100
changeset 906 2bf1516d730f
parent 901 33cff35bdc1a
child 916 10f834eb0a9e
permissions -rw-r--r--
updated
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
208
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: 208
diff changeset
     2
\usepackage{../style}
7ed2a25dd115 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 208
diff changeset
     3
\usepackage{../graphics}
459
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
     4
\usepackage{../langs}
906
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
     5
\usepackage{../grammar}
208
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
     6
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
     7
\begin{document}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
     8
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
     9
\section*{Homework 9}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    10
359
db106e5b7c4d updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 314
diff changeset
    11
\HEADER
db106e5b7c4d updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 314
diff changeset
    12
208
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    13
\begin{enumerate}
292
7ed2a25dd115 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 208
diff changeset
    14
\item Describe what is meant by \emph{eliminating tail
459
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    15
      recursion}? When can this optimization be applied and
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    16
      why is it of benefit?
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    17
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    18
\item A programming language has arithmetic expression. For an
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    19
  arithmetic expression the compiler of this language produces the
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    20
  following snippet of JVM code.
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    21
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    22
\begin{lstlisting}[language=JVMIS,numbers=none]
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    23
ldc 1 
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    24
ldc 2 
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    25
ldc 3 
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    26
imul 
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    27
ldc 4 
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    28
ldc 3 
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    29
isub 
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    30
iadd 
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    31
iadd
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    32
\end{lstlisting}
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    33
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    34
  Give the arithmetic expression that produced this code.  Make sure
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    35
  you give all necessary parentheses.
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    36
647
180600c04da2 updated
Christian Urban <urbanc@in.tum.de>
parents: 577
diff changeset
    37
\item Describe what the following JVM instructions do!
459
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    38
647
180600c04da2 updated
Christian Urban <urbanc@in.tum.de>
parents: 577
diff changeset
    39
  
180600c04da2 updated
Christian Urban <urbanc@in.tum.de>
parents: 577
diff changeset
    40
\begin{lstlisting}[language=JVMIS2,numbers=none]
180600c04da2 updated
Christian Urban <urbanc@in.tum.de>
parents: 577
diff changeset
    41
ldc 3    
459
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    42
iload 3
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    43
istore 1
525
a2ee4b11c976 updated
cu
parents: 459
diff changeset
    44
ifeq label
647
180600c04da2 updated
Christian Urban <urbanc@in.tum.de>
parents: 577
diff changeset
    45
if_icmpge label
459
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    46
\end{lstlisting}
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
    47
901
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    48
\item What does the following JVM function calculate?
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    49
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    50
\begin{lstlisting}[language=JVMIS2,numbers=none]    
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    51
.method public static bar(I)I
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    52
.limit locals 1
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    53
.limit stack 9
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    54
   iload 0
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    55
   ldc 0
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    56
   if_icmpne If_else_8
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    57
   ldc 0
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    58
   goto If_end_9
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    59
If_else_8:
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    60
   iload 0
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    61
   ldc 1
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    62
   if_icmpne If_else_10
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    63
   ldc 1
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    64
   goto If_end_11
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    65
If_else_10:
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    66
   iload 0
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    67
   ldc 1
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    68
   isub
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    69
   invokestatic bar(I)I
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    70
   iload 0
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    71
   ldc 2
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    72
   isub
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    73
   invokestatic bar(I)I
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    74
   iadd
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    75
If_end_11:
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    76
If_end_9:
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    77
   ireturn
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    78
.end method  
33cff35bdc1a updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 805
diff changeset
    79
\end{lstlisting}
577
7a437f1f689d updated
Christian Urban <urbanc@in.tum.de>
parents: 525
diff changeset
    80
703
57b3ae5ba5e2 updated
Christian Urban <urbanc@in.tum.de>
parents: 649
diff changeset
    81
\item What does the following LLVM function calculate? Give the
57b3ae5ba5e2 updated
Christian Urban <urbanc@in.tum.de>
parents: 649
diff changeset
    82
  corresponding arithmetic expression .
648
36379b038438 updated
Christian Urban <urbanc@in.tum.de>
parents: 647
diff changeset
    83
36379b038438 updated
Christian Urban <urbanc@in.tum.de>
parents: 647
diff changeset
    84
\begin{lstlisting}[language=LLVM,numbers=none]  
36379b038438 updated
Christian Urban <urbanc@in.tum.de>
parents: 647
diff changeset
    85
define i32 @foo(i32 %a, i32 %b)  {
36379b038438 updated
Christian Urban <urbanc@in.tum.de>
parents: 647
diff changeset
    86
  %1 = mul i32 %a, %a
36379b038438 updated
Christian Urban <urbanc@in.tum.de>
parents: 647
diff changeset
    87
  %2 = mul i32 %a, 2
36379b038438 updated
Christian Urban <urbanc@in.tum.de>
parents: 647
diff changeset
    88
  %3 = mul i32 %2, %b
36379b038438 updated
Christian Urban <urbanc@in.tum.de>
parents: 647
diff changeset
    89
  %4 = add i32 %1, %3
36379b038438 updated
Christian Urban <urbanc@in.tum.de>
parents: 647
diff changeset
    90
  %5 = mul i32 %b, %b
36379b038438 updated
Christian Urban <urbanc@in.tum.de>
parents: 647
diff changeset
    91
  %6 = add i32 %5, %4
36379b038438 updated
Christian Urban <urbanc@in.tum.de>
parents: 647
diff changeset
    92
  ret i32 %6
36379b038438 updated
Christian Urban <urbanc@in.tum.de>
parents: 647
diff changeset
    93
}
36379b038438 updated
Christian Urban <urbanc@in.tum.de>
parents: 647
diff changeset
    94
\end{lstlisting}
36379b038438 updated
Christian Urban <urbanc@in.tum.de>
parents: 647
diff changeset
    95
906
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
    96
\item As an optimisation technique, a compiler might want to detect `dead code' and
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
    97
  not generate anything for this code. Why does this optimisation technique have the
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
    98
  potential of speeding up the run-time of a program? (Hint: On what CPUs are programs
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
    99
  run nowadays?)
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
   100
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
   101
\item In an earlier question, we analysed the advantages of having a lexer-phase
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
   102
  before running the parser (having a lexer is definitely a good thing to have). But you
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
   103
  might wonder if a lexer can also be implemented by a parser and some simple
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
   104
  grammar rules. Consider for example:
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
   105
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
   106
  \begin{plstx}[margin=1cm]
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
   107
    : \meta{S\/} ::= (\meta{Kw\/}\mid \meta{Id\/}\mid \meta{Ws\/}) \cdot \meta{S\/} \;\mid\; \epsilon\\
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
   108
    : \meta{Kw\/} ::= \texttt{if} \mid \texttt{then} \mid \ldots\\
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
   109
    : \meta{Id\/} ::= (\texttt{a} \mid\ldots\mid \texttt{z}) \cdot \meta{Id\/} \;\mid\; \epsilon\\
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
   110
    : \meta{Ws\/} ::= \ldots\\
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
   111
  \end{plstx}
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
   112
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
   113
  What is wrong with implementing a lexer in this way?
2bf1516d730f updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 901
diff changeset
   114
705
bfc8703b1527 updated
Christian Urban <urbanc@in.tum.de>
parents: 703
diff changeset
   115
\item What is the difference between a parse tree and an abstract
bfc8703b1527 updated
Christian Urban <urbanc@in.tum.de>
parents: 703
diff changeset
   116
  syntax tree? Give some simple examples for each of them.
648
36379b038438 updated
Christian Urban <urbanc@in.tum.de>
parents: 647
diff changeset
   117
36379b038438 updated
Christian Urban <urbanc@in.tum.de>
parents: 647
diff changeset
   118
805
526e10d97435 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 705
diff changeset
   119
\item Give a description of how the Brzozowski matcher works. 
526e10d97435 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 705
diff changeset
   120
  The description should be coherent and logical.
577
7a437f1f689d updated
Christian Urban <urbanc@in.tum.de>
parents: 525
diff changeset
   121
805
526e10d97435 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 705
diff changeset
   122
\item Give a description of how a compiler for the While-language can
526e10d97435 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 705
diff changeset
   123
  be implemented. You should assume you are producing code for the JVM.
526e10d97435 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 705
diff changeset
   124
  The description should be coherent and logical.
526e10d97435 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 705
diff changeset
   125
526e10d97435 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents: 705
diff changeset
   126
  
459
780486571e38 updated
Christian Urban <urbanc@in.tum.de>
parents: 359
diff changeset
   127
\item \POSTSCRIPT  
208
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   128
314
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   129
%  \item It is true (I confirmed it) that
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   130
%  
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   131
%  \begin{center} if $\varnothing$ does not occur in $r$
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   132
%  \;\;then\;\;$L(r) \not= \{\}$ 
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   133
%  \end{center}
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   134
%  
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   135
%  \noindent
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   136
%  holds, or equivalently
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   137
%  
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   138
%  \begin{center}
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   139
%  $L(r) = \{\}$ \;\;implies\;\; $\varnothing$ occurs in $r$.
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   140
%  \end{center}
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   141
%  
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   142
%  \noindent
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   143
%  You can prove either version by induction on $r$. The best way to
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   144
%  make more formal what is meant by `$\varnothing$ occurs in $r$', you can define
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   145
%  the following function:
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   146
%  
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   147
%  \begin{center}
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   148
%  \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   149
%  $occurs(\varnothing)$      & $\dn$ & $true$\\
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   150
%  $occurs(\epsilon)$           & $\dn$ &  $f\!alse$\\
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   151
%  $occurs (c)$                    & $\dn$ &  $f\!alse$\\
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   152
%  $occurs (r_1 + r_2)$       & $\dn$ &  $occurs(r_1) \vee occurs(r_2)$\\ 
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   153
%  $occurs (r_1 \cdot r_2)$ & $\dn$ &  $occurs(r_1) \vee occurs(r_2)$\\
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   154
%  $occurs (r^*)$                & $\dn$ & $occurs(r)$ \\
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   155
%  \end{tabular}
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   156
%  \end{center}
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   157
%  
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   158
%  \noindent
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   159
%  Now you can prove 
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   160
%  
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   161
%  \begin{center}
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   162
%  $L(r) = \{\}$ \;\;implies\;\; $occurs(r)$.
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   163
%  \end{center}
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   164
%  
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   165
%  \noindent
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   166
%  The interesting cases are $r_1 + r_2$ and $r^*$.
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   167
%  The other direction is not true, that is if $occurs(r)$ then $L(r) = \{\}$. A counter example
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   168
%  is $\varnothing + a$: although $\varnothing$ occurs in this regular expression, the corresponding
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   169
%  language is not empty. The obvious extension to include the not-regular expression, $\sim r$,
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   170
%  also leads to an incorrect statement. Suppose we add the clause
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   171
%    
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   172
%  \begin{center}
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   173
%  \begin{tabular}{@ {}l@ {\hspace{2mm}}c@ {\hspace{2mm}}l@ {}}
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   174
%  $occurs(\sim r)$      & $\dn$ & $occurs(r)$
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   175
%  \end{tabular}
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   176
%  \end{center}  
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   177
%  
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   178
%  \noindent
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   179
%  to the definition above, then it will not be true that
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   180
%  
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   181
%  \begin{center}
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   182
%  $L(r) = \{\}$ \;\;implies\;\; $occurs(r)$.
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   183
%  \end{center}
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   184
%  
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   185
%  \noindent
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   186
%  Assume the alphabet contains just $a$ and $b$, find a counter example to this
7dd5797a5ffa updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 292
diff changeset
   187
%  property.
208
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   188
  
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   189
\end{enumerate}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   190
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   191
\end{document}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   192
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   193
%%% Local Variables: 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   194
%%% mode: latex
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   195
%%% TeX-master: t
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   196
%%% End: