Processing math: 100%
Close
Close Window

Show Source |    | About   «  3.6. Minimizing the Number of States in a DFA   ::   Contents   ::   4.2. Regular Expressions Exercises  »

4.1. Regular Expressions

The Regular Expression (also known as RegEx or RE) is another way to define a language. They are used a lot by practicing programmers for things like defining simple search patterns. This adds another way to define languages along with the ones that we already know: Grammars, DFAs and NFAs. Or, we could just describe the language using an English description. Why do we need another one?

The problem with an English description (or any other language that people speak) is that it is too imprecise, and not something that we can easily implement. Using a DFA or NFA typically requires some sort of graphical editor, and it takes a bit of time to enter all the states and transitions. We will see that regular expressions are easy to type, and they tend to use relatively short descriptions for common languages that we want to represent. Of course, even a relatively small and precise specification for a language can be hard to come up with (or to understand). But at least with a regular expression, it is usually quick and easy to type once you have it.

4.1.1. Definition and Examples of Regular Expressions

1 / 27 Settings
<<<>

This slideshow presents the definition and some examples for Regular Expressions.

Proficient Saving... Error Saving
Server Error
Resubmit

Definition for Regular Expressions (RE): Given Σ,
  1. λ, and all aΣ are RE

  2. If r and s are regular expressions, then

    • r+s is a RE

    • rs is a RE

    • (r) is a RE

    • r is a RE

  3. r is a RE if and only if it can be derived from (1) with a finite number of applications of (2).

4.1.2. Converting a Regular Expression to a NFA

1 / 13 Settings
<<<>

Part 1. Recall that we define the term regular language to mean the languages that are recognized by a DFA. And we know these are the same as the languages recognized by an NFA, because we know that every NFA can be converted to a DFA (and vice versa).

Now, we will show the relationship between regular languages (and thus, DFAs and NFAs) and Regular Expressions.

Proficient Saving... Error Saving
Server Error
Resubmit

Summary: We can convert any NFA to an equivalent NFA with a single final state. This simplifies the rest of the constructions that we will use.

1 / 12 Settings
<<<>

Part 2. In Part 1, we showed how to convert the base case REs ($\lambda$ and any symbol from $\Sigma$) to NFAs. And we showed that any NFA can be converted to an equivalent NFA with a single final state.

Now we will see how to convert more complex REs to an NFA.

Created with Raphaël 2.1.2
Proficient Saving... Error Saving
Server Error
Resubmit


1 / 12 Settings
<<<>

Part 3. Next, we will define a construction for the NFA that can accept the RE $r \cdot s$, given that we have NFAs that are equivalent to $r$ and $s$.

Created with Raphaël 2.1.2
Proficient Saving... Error Saving
Server Error
Resubmit


1 / 12 Settings
<<<>

Part 4. The last operator that we need to implement is the Kleene star ($*$) operator. The operator will concatenate the language with itself zero or more times.

Created with Raphaël 2.1.2
Proficient Saving... Error Saving
Server Error
Resubmit

Summary: We can convert any RE to an NFA. So, all REs accept a regular language.

4.1.3. Regular Expression to NFA Conversion Example

1 / 20 Settings
<<<>

We now have a proof that any RegEx can be converted to a NFA. And we know some mechanics: In particular, we know how to combine two NFAs that represent RegExs into a single NFA using one of the RegEx builder rules. Unfortunately, that does not really help us when faced with a complex RegEx that we want to convert to an NFA. In this frameset, we show an algorithm for doing this.

Created with Raphaël 2.1.2
Created with Raphaël 2.1.2
Proficient Saving... Error Saving
Server Error
Resubmit

4.1.4. Regular Expression to Minimized DFA Example

1 / 30 Settings
<<<>>>

In this example, we will convert the regular expression ab*+c to a minimized DFA.

Proficient Saving... Error Saving
Server Error
Resubmit

4.1.5. Converting Regular Languages to Regular Expressions

1 / 32 Settings
<<<>

Since every regular expression has an NFA that implements it, this means that the regular expressions are a subset of the regular languages. The next question is: Does every regular language have a regular expression?

Perhaps you thought it fairly intuitive to see that any regular expression can be implemented as a NFA. But for most of us, going the other way is not at all obvious. The proof that any NFA can be converted to a regular expression is rather difficult, and we are just going to give a sketch.

Proficient Saving... Error Saving
Server Error
Resubmit

4.1.6. Converting Regular Languages to Regular Expressions Example

0 / 0 Settings
<<<>>>

After removing all nodes that are not final and not start, the resulting Regular Exepression is:

Proficient Saving... Error Saving
Server Error
Resubmit

4.1.7. Summary

We have now demonstrated several things:

  • Any RegEx can be represented by an NFA or a DFA.

  • Any NFA (or DFA) can be represented by a RegEx.

Thus, all languages that can be represented by regular expression are regular, and all regular languages can be represented by a regular expression.

As we noted at the start, regular expressions don’t give us any more power than we already had with DFAs. But they are often easier to write down, as you will see in the following exercises.

   «  3.6. Minimizing the Number of States in a DFA   ::   Contents   ::   4.2. Regular Expressions Exercises  »

nsf
Close Window