0% found this document useful (0 votes)
116 views4 pages

Lab - 01 DFA Simulation

This document provides instructions for Lab 01 on DFA simulation. It introduces deterministic finite automata (DFAs) and describes how they can be implemented in software to solve problems like validating email addresses. The objectives are to successfully understand and implement a DFA in code. Students are asked to draw DFAs for regular expressions, determine the languages accepted, and implement the DFAs in code using goto statements and switch statements. Tests cases are provided to validate the implementations.

Uploaded by

SR Reliability
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
116 views4 pages

Lab - 01 DFA Simulation

This document provides instructions for Lab 01 on DFA simulation. It introduces deterministic finite automata (DFAs) and describes how they can be implemented in software to solve problems like validating email addresses. The objectives are to successfully understand and implement a DFA in code. Students are asked to draw DFAs for regular expressions, determine the languages accepted, and implement the DFAs in code using goto statements and switch statements. Tests cases are provided to validate the implementations.

Uploaded by

SR Reliability
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 4

Department of Software Engineering

CSC 344: Compiler Construction (LAB)


Class: BSCS-7
Lab [01]:  DFA Simulation

Instructor: Mr. Saqib Nazir


Lab [01] : DFA Simulation

Introduction

A deterministic finite automaton (DFA)—also known as deterministic finite state


machine—is a finite state machine that accepts/rejects finite strings of symbols and only
produces a unique computation (or run) of the automaton for each input string.
'Deterministic' refers to the uniqueness of the computation. -- Wikipedia

Objectives

1. Successful understanding/implementation DFA in C/C++/Java

Tools/Software Requirement

1. gcc, g++, GNU Make or Visual Studio C++

Description

A DFA is defined as an abstract mathematical concept, but due to the deterministic


nature of a DFA, it is implementable in hardware and software for solving various
problems. For example, a DFA can model software that decides whether or not online
user-input such as email addresses are valid. DFAs recognize exactly the set of regular
languages which are, among other things, useful for doing lexical analysis and pattern
matching.

Practice Task

1. Consider the following Regular Expression:


( (a + b)(a + b) )*
a. Draw a DFA for the above RE.
b. Determine the language accepted by this automaton
c. Implement this DFA in C/C++/Java.
i. Your implementation should validate the input string for alphabet
i.e. ∑ = {a, b, c}, before using it in the DFA.
ii. Your first implementation of DFA should use goto statements only.
iii. Your second implementation of DFA should use switch statement
instead of the goto’s.
d. Test your implementation using the following inputs:
abc, abbc, abcd, abbbc, abbbbc

S0 S1

Language accepted by this DFA is “All words of even length”

CODE:

#include <iostream>

using namespace std;

ifint(valid)
main({) {

char
int index
input[100];
= 0;

ints0:
valid = 1;

intifsize
( index
= 0;== size) {

// Code
coutfor
<<checking
" String isvalidity
Accepted";
of input

do {goto endprogram;

}cout << "\n Enter next character – Press 2 for input termination ";

cin >>
else if (input[size];
input[index] == ‘a’ || input [index] == ‘b’){

if (index++;
input[size] == ‘a’ || input[size] == ‘b’ || input[size] == ‘2’ )

size++;
goto s1;

}else {

s1:valid = 0;

if (cout<<"You
index == size)
entered
{ the wrong input character. Program terminated!";

break;
cout << " String is Rejected";

} goto endprogram;

} while
} ( input[size-1] != ‘2’ || size < 100 );

else if( input[index] == ‘a’ || input[index] == ‘b’) {


Lab Tasks
index++;

goto s0;

}
1. Consider the following Regular Expression:
a(bb)*bc
a. Draw a DFA for the above RE.
b. Determine the language accepted by this automaton
c. Implement this DFA in C/C++/Java.
i. Your implementation should validate the input string for alphabet
i.e. ∑ = {a, b, c}, before using it in the DFA.
ii. Your first implementation of DFA should use goto statements only.
iii. Your second implementation of DFA should use switch statement
instead of the goto’s.
d. Test your implementation using the following inputs:
abc, abbc, abcd, abbbc, abbbbc

2. Consider the following language:

L(M) = {w | w € {a, b}* and contains even number of a’s and b’s}

a. Draw a DFA for the above language


b. Implement this DFA in C/C++/Java.
i. Your implementation should validate the input string for alphabet
i.e. ∑ = {a, b}, before using it in the DFA.
ii. Your first implementation of DFA should use goto statements only.
iii. Your second implementation of DFA should use switch statement
instead of the goto’s.
c. Test your implementation using the following inputs:
aa, ab, aba, abab, aabbaabb

You might also like