# Exam 1 Practice Problems

## Problem 1

Define a regular expression that generates the following language over the alphabet {a, b}:

a
aaab
aaabaab
aaabaabaab
...etc...

## Problem 2

Define a regular expression that generates the language over the alphabet {a, b} of all strings containing at most two occurrences of a.

For example, the following strings are members of the language:

ε
a
ba
aba
bbaa
aba

The following strings are not members of the language:

aaa
baabaa
baaaa

## Problem 3

Define a regular expression that generates the language over the alphabet {a, b} of all strings containing an odd number of b's.

For example, the following strings are members of the language:

b
ab
aba
bbabaa

The following strings are not members of the language:

ε
abb
bababb

## Problem 4

Define a regular expression that generates the language over the alphabet {a, b, c} of all strings not containing the substring ba.

For example, the following strings are members of the language:

ε
a
ab
bb
bc
cbc
abbb

The following strings are not members of the language:

ba
baba
aba
ccaabac

## Problem 5

Define a regular expression that generates the language over the alphabet {a, b} of all strings in which the first occurrence of the symbol a (if it occurs in the string at all) is followed by at least one additional a.

For example, the following strings are members of the language:

ε
b
bb
aa
baaba
aaabaa

The following strings are not members of the language:

a
bba
babaa

## Problem 6

Construct a deterministic finite automaton that recognizes the language over the alphabet {a, b} containing all strings with an odd number of b's. [See problem 3 for example strings that should be accepted or rejected.]

## Problem 7

Construct a deterministic finite automaton that recognizes the language over the alphabet {a, b} containing all strings with an even number of a's and an odd number of b's.

For example, the following strings should be accepted by the automaton:

b
aab
aba
baa
bbabaaa

The following strings should be rejected by the automaton:

ε
ab
aabb
abab

## Problem 8

Construct a finite automaton (deterministic or nondeterministic) that recognizes the language over the alphabet {a, b} generated by the regular expression:

(a|ab|abb|abbb)*

For example, the following strings should be accepted by the automaton:

ε
a
aa
aab
abba
abbabbab

The following strings should be rejected by the automaton:

ba
abbbb

## Problem 9

Construct a finite automaton (deterministic or nondeterministic) that recognizes the language over the alphabet {a, b, c} of all strings not containing the substring ba. [See problem 4 for strings that should be accepted and rejected.]

## Problem 10

Construct a deterministic finite automaton that recognizes the language over the alphabet {a, b} of all strings where the number of a's in the string is a multiple of 3.

For example, the following strings should be accepted by the automaton:

ε
bb
ababa
aaba
aaababaa

The following strings should be rejected by the automaton:

a
aba
baaabaa

## Problem 11

Define a context-free grammar that generates the language of all parentheses-enclosed, comma-separated lists. The alphabet of terminal symbols is

( ) , a

A list member can be an a symbol or a nested list. A list with 0 members (empty list) is allowed.

Examples of strings in the language:

()
(a)
(a,a)
((a,a),((a),a))
(a,a,a,(),a,a,a,a)
((((a))),a)

Examples of strings not in the language:

a
a,()
(a))
((a)
(aa)

## Problem 12

Define a context-free grammar that generates the language anbn, the language of n a's followed by n b's. Because n could be 0, the empty string is a member of this language.