CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.
-
Upload
sarah-marilyn-thornton -
Category
Documents
-
view
223 -
download
0
Transcript of CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.
![Page 1: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/1.jpg)
CMSC 330: Organization of Programming Languages
Finite Automata
NFAs DFAs
![Page 2: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/2.jpg)
CMSC 330 2
Review
• How are DFAs and NFAs different?
• When does an NFA accept a string?
• How do we convert from a regular expression to an NFA?
• What is the -closure of a state?
![Page 3: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/3.jpg)
CMSC 330 3
Relating REs to DFAs and NFAs
DFA NFA
RE
cantransform
cantransform
cantransform
(we’ll discuss this next)
![Page 4: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/4.jpg)
CMSC 330 4
Reduction Complexity
• Regular expression to NFA reduction:– O(n)
• NFA to DFA reduction– Intuition: Build DFA where each DFA state
represents a set of NFA states– How many states could there be in the DFA?– Given NFA with n states, DFA may have 2n states– This is not so good, but we can implement DFAs
more easily
![Page 5: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/5.jpg)
CMSC 330 5
NFA DFA reduction
Example:
{A}
{B,D}a
b{C,D}
![Page 6: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/6.jpg)
CMSC 330 6
NFA DFA reduction Algorithm
• Let r0 = -closure(q0), R = {r0},
R = ∅
• While there is an unmarked state ri in R
– Mark ri
– For each a • Let S = {s | {q, a, s} and q ri }
• Let E = -closure(S)• If E R, then R = R E•
R =
R {r
i, a, E}
• Let FR = {ri | s ri with s qf}
Notes: Let (, Q, q0, F
Q, ) be the NFA and (, R, r
0, F
R,
R) be the
DFA. All new states in R are unmarked at creation.
![Page 7: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/7.jpg)
CMSC 330 7
NFA DFA example
{A,E}
R = {{A,E}, }
{B,D,E}a
{B,D,E},
{C,D}
{C,D},
b
b {E}
a
{E}
b
a
Language? All strings that have exactly 1 b and end in b or the string aRegular expression? a*b|a
![Page 8: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/8.jpg)
CMSC 330 8
Practice
Convert the NFA to a DFA:
![Page 9: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/9.jpg)
CMSC 330 9
Equivalence of DFAs and NFAs
• Any string from A to either D or CD in the DFA represents a path from A to D in the original NFA.
![Page 10: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/10.jpg)
CMSC 330 10
Relating RE's to DFAs and NFAs
• Regular expressions, NFAs, and DFAs accept the same languages!
DFA NFA
RE
cantransform
cantransform
cantransform
High-level idea next
![Page 11: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/11.jpg)
CMSC 330 11
Converting from DFAs to REs
• General idea:– Remove states one by one, labeling transitions with
regular expressions– When two states are left (start and final), the
transition label is the regular expression for the DFA
![Page 12: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/12.jpg)
CMSC 330 12
Relating REs to DFAs and NFAs
• Why do we want to convert between these?– Easier to express ideas (regexes/NFAs)– Easier to implement (DFAs)
![Page 13: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/13.jpg)
CMSC 330 13
Implementing DFAscur_state = 0;while (1) {
symbol = getchar();
switch (cur_state) {
case 0: switch (symbol) { case '0': cur_state = 0; break; case '1': cur_state = 1; break; case '\n': printf("rejected\n"); return 0; default: printf("rejected\n"); return 0; } break;
case 1: switch (symbol) { case '0': cur_state = 0; break; case '1': cur_state = 1; break; case '\n': printf("accepted\n"); return 1; default: printf("rejected\n"); return 0; } break;
default: printf("unknown state; I'm confused\n"); break; }}
It's easy to build a program which mimics a DFA
![Page 14: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/14.jpg)
CMSC 330 14
Implementing DFAs (Alternative)
Alternatively, use generic table-driven DFA
– q is just an integer– Represent δ using 2d array or nested hash tables– Represent F as a set
given components (Σ, Q, q0, F, δ) of a DFA:
let q = q0
while (there exists another symbol s of the input string)
q := δ(q, s);
if q ∊ F then
accept
else reject
![Page 15: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/15.jpg)
CMSC 330 15
Run Time of Algorithm
• Given a string s, how long does algorithm take to decide whether s is accepted?– Assume we can compute δ(q0, c) in constant time– Time per string s to determine acceptance is O(|s|)– Can’t get much faster!
• But recall that constructing the DFA from the regular expression A may take O(2|A|) time– But this is usually not the case in practice
• So there’s the initial overhead, but then accepting strings is fast
![Page 16: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/16.jpg)
CMSC 330 16
Regular Expressions in Practice
• Regular expressions are typically “compiled” into tables for the generic algorithm– Can think of this as a simple byte code interpreter
– But really just a representation of (Σ, QA, qA, {fA}, δA), the components of the DFA produced from the RE
![Page 17: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/17.jpg)
CMSC 330 17
Complement of DFA
Given a DFA accepting language L, how can we create a DFA accepting its complement?
(the alphabet = {a,b})
![Page 18: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/18.jpg)
CMSC 330 18
Complement Steps
• Add implicit transitions to a dead state• Change every accepting state to a non-
accepting state and every non-accepting state to an accepting state
• Note: this only works with DFAs - Why?
![Page 19: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/19.jpg)
CMSC 330 19
Practice
Make the DFA which accepts the complement of the language accepted by the DFA below.
S3
![Page 20: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/20.jpg)
CMSC 330
Review and Practice
![Page 21: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/21.jpg)
CMSC 330 21
Deterministic Finite Automaton (DFA)
• A DFA is a 5-tuple (Σ, Q, q0, F, δ) where– Σ is an alphabet– Q is a nonempty set of states
– q0 ∊ Q is the start state
– F ⊆ Q is the set of final states– δ : Q x Σ → Q specifies the DFA's transitions
![Page 22: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/22.jpg)
CMSC 330 22
Nondeterministic Finite Automaton (NFA)
• A NFA is a 5-tuple (Σ, Q, q0, F, δ) where– Σ is an alphabet– Q is a nonempty set of states
– q0 ∊ Q is the start state
– F ⊆ Q is the set of final states– δ : Q x (Σ ∪ {ε}) → Q specifies the NFA's transitions
![Page 23: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/23.jpg)
CMSC 330 23
Practice
Give the English descriptions and the DFA or regular expression of the following languages:
• ((0|1)(0|1)(0|1))*
• (01)*|(10)*|(01)*0|(10)*1
![Page 24: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/24.jpg)
CMSC 330 24
Practice
Give the DFAs for the following languages:• All valid strings including only “A”, “C”, “G”, “T”
and appearing in multiples of 3• All binary strings containing an even, non-zero
length substring of all 1’s• All binary strings containing exactly two 1’s• All binary strings that start and end with the
same number
![Page 25: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/25.jpg)
CMSC 330 25
Practice
• Make the DFA which accepts all strings with a substring of 330
• Take the complement of this DFA
![Page 26: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/26.jpg)
CMSC 330 26
Practice
Draw NFAs for the following regular expressions and languages:
• (0|1)*110*• 101*|111• all binary strings ending in 1 (odd numbers)• (ab*c|d*a|ab)d
![Page 27: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/27.jpg)
CMSC 330 27
Example
• Find the -closure for each of the states in this NFA:
![Page 28: CMSC 330: Organization of Programming Languages Finite Automata NFAs DFAs.](https://reader035.fdocuments.in/reader035/viewer/2022062222/5697bf7c1a28abf838c83f5f/html5/thumbnails/28.jpg)
CMSC 330 28
Practice
Convert to a DFA:
Convert to an NFA and then to a DFA:• (0|1)*11|0*• aba*|(ba|b)