Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lfa:lab03-dfa-regexp [2021/10/09 19:31]
pdmatei
lfa:lab03-dfa-regexp [2021/10/16 18:57] (current)
pdmatei
Line 31: Line 31:
 \\ \\
  
-===== 4.2. Regex implementation =====+===== 4.2. Writing Regular Expressions ===== 
 + 
 +**4.2.1.** Write a regular expression for the language of arithmetic expressions containing +, * and numbers. 
 +**Hint:** you can abbreviate $ 0 \cup 1 \cup ... \cup 9 $ by $ [0-9] $ 
 + 
 +**4.2.2.** Write a regular expression for $ L = \{ \omega \text{ in } \text{{0,​1}} ^* \text{ | EVERY sequence of two or more consecutive zeros appears before ANY sequence of two or more consecutive ones} \} $ 
 + 
 +**4.2.3.** Write a DFA for $ L(( 10 \cup 0) ^* ( 1 \cup \epsilon )) $ 
 + 
 +**4.2.4.** Write a regular expression which generates the accepted language of A: 
 + 
 +{{:​lfa:​graf1.png?​200|}} 
 + 
 +**4.2.5.** Simplify the regular expression you found. 
 + 
 +**4.2.6.** Describe as precisely as possible the language generated by $math[(1 \cup 1(01^*0)1)^*] 
 + 
 + 
 +===== 4.3. Regex implementation ​(Python) ​=====
  
 ==== Inheritance and isinstance ==== ==== Inheritance and isinstance ====
Line 78: Line 96:
 </​code>​ </​code>​
  
-**4.2.1.** Write a class hierarchy for Regular Expressions,​ and add the ''​__str__''​ function for each of them. Implement a constructor which reads a Regular Expression in **Prenex form**, from a string. The prenex form is illustrated below via examples:+**4.3.1.** Write a class hierarchy for Regular Expressions,​ and add the ''​__str__''​ function for each of them. Implement a constructor which reads a Regular Expression in **Prenex form**, from a string. The prenex form is illustrated below via examples:
  
 <code Python> <code Python>
Line 98: Line 116:
  
 <hidden More hints> <hidden More hints>
-The following table illustrates the string parsing and stack contents for the last example.+The following table illustrates the string parsing and stack contents ​(ADT style) ​for the last example.
 ^ String contents ^ Stack ^ ^ String contents ^ Stack ^
 | ''​CONCAT STAR UNION a b STAR c''​ |   ​Void ​   |  ​ | ''​CONCAT STAR UNION a b STAR c''​ |   ​Void ​   |  ​
 +| ''​STAR UNION a b STAR c''​ |   ​Push(Concat(?,?​),​Void) ​   |
 +| ''​UNION a b STAR c''​ |   ​Push(Star(?​),​ Push(Concat(?,?​),​Void)) ​ |
 +| ''​a b STAR c''​ |   ​Push(Union(?,?​),​ Push(Star(?​),​ Push(Concat(?,?​),​Void))) ​ |
 +| ''​b STAR c''​ |   ​Push(a,​ Push(Union(?,?​),​ Push(Star(?​),​ Push(Concat(?,?​),​Void)))) ​ |
 +| ''​b STAR c''​ |   ​Push(Union(a,?​),​ Push(Star(?​),​ Push(Concat(?,?​),​Void))) |
 +| ''​STAR c''​ |   ​Push(b,​ Push(Union(a,?​),​ Push(Star(?​),​ Push(Concat(?,?​),​Void)))) |
 +| ''​STAR c''​ |   ​Push(Union(a,​b),​ Push(Star(?​),​ Push(Concat(?,?​),​Void))) |
 +| ''​STAR c''​ |   ​Push(Star(Union(a,​b)),​ Push(Concat(?,?​),​Void))) |
 +| ''​STAR c''​ |   ​Push(Concat(Star(Union(a,​b)),?​),​Void))) |
 +| ''​c''​ |   ​Push(Star(?​),​Push(Concat(Star(Union(a,​b)),?​),​Void)))) |
 +|  |   ​Push(c,​ Push(Star(?​),​Push(Concat(Star(Union(a,​b)),?​),​Void))))) |
 +|  |   ​Push(Star(c),​Push(Concat(Star(Union(a,​b)),?​),​Void)))) |
 +|  |   ​Push(Concat(Star(Union(a,​b)),​Star(c)),​Void)))) |
 +
 +The string has been consumed and the stack holds one expression, thus the result is: ''​Concat(Star(Union(a,​b)),​Star(c))''​.
  
 </​hidden>​ </​hidden>​
  
 +===== 4.4. Regex implementation (Haskell) =====
  
-===== 4.3. Writing Regular Expressions ===== +**4.4.1.** ​Implement ​the ADT ''​Regex''​.
- +
- +
-**4.3.1.** Write a regular expression for the language of arithmetic expressions containing +, * and numbers. +
-**Hint:** you can abbreviate $ 0 \cup 1 \cup ... \cup 9 $ by $ [0-9] $ +
- +
-**4.3.2.** Write a regular expression for $ L = \{ \omega \text{ in } \text{{0,1}} ^* \text{ | every sequence of consecutive zeros appears before ANY sequence of consecutive ones} \} $ +
- +
-**4.3.3.** Write a DFA for $ L(( 10 \cup 0) ^* ( 1 \cup \epsilon )) $ +
- +
-**4.3.4.** Write a regular expression which generates the accepted language of A: +
- +
-{{:​lfa:​graf1.png?​200|}} +
- +
-**4.3.5.** Simplify ​the regular expression you found.+
  
-**4.3.6.** Describe as precisely as possible ​the language generated by $math[(1 \cup 1(01^*0)1)^*]+**4.4.2.** Enrol the type in class ''​Show''​.
  
 +**4.4.3.** Write a function which takes a string containing a regex in prenex form (see the Python exercises) and returns a ''​Regex''​. ***Hint:** use two mutually recursive functions and see the hints regarding the stack from the Python implementation section.