
- Compiler Design - Home
- Compiler Design - Overview
- Compiler Design - Architecture
- Phases
- Compiler Design - Phases
- Compiler Design - Global Optimization
- Compiler Design - Local Optimization
- Lexical Analysis
- Compiler Design - Lexical Analysis
- Compiler Design - Regular Expressions
- Compiler Design - Finite Automata
- Compiler Design - Language Elements
- Compiler Design - Lexical Tokens
- Compiler Design - FSM
- Compiler Design - Lexical Table
- Compiler Design - Sequential Search
- Compiler Design - Binary Search Tree
- Compiler Design - Hash Table
- Syntax Analysis
- Compiler Design - Syntax Analysis
- Compiler Design - Parsing Types
- Compiler Design - Grammars
- Compiler Design - Classes Grammars
- Compiler Design - Pushdown Automata
- Compiler Design - Ambiguous Grammar
- Parsing
- Compiler Design - Top-Down Parser
- Compiler Design - Bottom-Up Parser
- Compiler Design - Simple Grammar
- Compiler Design - Quasi-Simple Grammar
- Compiler Design - LL(1) Grammar
- Error Recovery
- Compiler Design - Error Recovery
- Semantic Analysis
- Compiler Design - Semantic Analysis
- Compiler Design - Symbol Table
- Run Time
- Compiler Design - Run-time Environment
- Code Generation
- Compiler Design - Code Generation
- Converting Atoms to Instructions
- Compiler Design - Transfer of Control
- Compiler Design - Register Allocation
- Forward Transfer of Control
- Reverse Transfer of Control
- Code Optimization
- Compiler Design - Code Optimization
- Compiler Design - Intermediate Code
- Basic Blocks and DAGs
- Control Flow Graph
- Compiler Design - Peephole Optimization
- Implementing Translation Grammars
- Compiler Design - Attributed Grammars
Finite State Machines in Compiler Design
Let us understand the concept of Finite State Machines with the help of an example. Consider how a vending machine works. We might say it starts at a waiting state, accepts a coin, then checks the item selection, and finally, either dispenses the item or asks for more money. This step-by-step process is similar to how computers and compilers process input strings using Finite State Machines (FSMs).
In this chapter, we will explain the basics of FSMs, explore how they work, and also see an example to demonstrate how they can be implemented.
What is a Finite State Machine?
Finite state machines are mathematical models that are used to represent how systems behave. FSMs play an important role in many computer science concepts including lexical analysis and pattern recognition etc.
We can think of an FSM as a kind of a theoretical computer. It has a limited (or "finite") number of states and the FSM moves among these states based on the inputs it receives.
We can visualize an FSM as a flowchart where each circle represents a state. Each arrow represents a transition triggered by an input.

Types of Finite State Machines
There are two types of FSMs −
- Deterministic Finite State Machines (DFSMs) − These have only one possible transition for each input in each state.
- Nondeterministic Finite State Machines (NFSMs) − These can have multiple possible transitions for the same input in each state.
Deterministic FSMs because they are more straightforward and widely used in compiler design. And all DFSMs are equivalent to NFSMs.
Components of a Finite State Machine
A finite state machine consists of a set of components. They are −
- States − These are the different conditions the machine can be in. One state is designated as the starting state, and others can be accepting states. In the above figure there are four states {q1, q2, q3, qf}
- Input Alphabet − This is the set of symbols the FSM can process. In the example they are {0, 1}
- State Transition Function − This tells the machine how to move from one state to another based on an input.
- Accepting States − These are states where the machine recognizes that the input is valid. In the example, it is {qf}
How Does a Finite State Machines Work?
Finite state machines process input strings symbol by symbol. They start in the initial state and transition to new states as they read each symbol. By the time the machine reaches the end of the input. This will either be in an accepting state (if the input is valid) or a rejecting state (if it is not).
Let us use an analogy. Consider a security system that requires a four-digit PIN. Now each digit we enter moves the system to a new state, and only when all four digits match does it unlock the door. If we make a mistake, it rejects the input and resets to the starting state.
Example of a Finite State Machine for Binary Strings
Lets take the example from the text. This FSM accepts binary strings that start with a 1 and end with a 0.
State Diagram
The FSM has four states: A, B, C, and D.
- State A is the starting state.
- State C is the only accepting state.
- States B and D handle intermediate steps.
Here is the diagram from the text −

Starting at A, if the input is 1, the machine moves to B. Now from B, if the input is 0, it transitions to C, which is the accepting state. Any other sequence keeps the machine in a non-accepting state.
How Does It Work?
Consider the input 1010.
The machine starts at A.
- It reads the first symbol, 1, and moves to B.
- It reads the next symbol, 0, and transitions to C.
The next symbol, 1, sends it back to B. But the final 0 takes it back to C. Where it stops in an accepting state.
Representing FSMs in Tables
The same machine can be represented using a table, which makes it easier to keep track of transitions for complex inputs.
For the above example, the table would look like this −
Current State | Input | Next State |
---|---|---|
A | 1 | B |
A | 0 | A |
B | 1 | B |
B | 0 | C |
C (accepting) | 1 | B |
C (accepting) | 0 | C |
This table shows exactly how the machine reacts to different inputs. This is showing there are no ambiguities.
Applications of Finite State Machines
Finite state machines are not just academic exercises; they have real-world uses. Here are a few examples:
- Lexical Analysis − Compilers use FSMs to break down source code into tokens.
- Pattern Matching − Tools like grep and regular expressions rely on FSMs to search for specific patterns in text.
- Control Systems − Devices like elevators and traffic lights use FSMs to handle states like "moving up," "stopping," or "waiting."
- Networking Protocols − FSMs ensure that data packets are sent, received, and acknowledged in the correct order.
Challenges in Implementing Finite State Machines
FSMs are powerful, but they are not without their challenges. Following are the challenges that one has to face while implementing FSMs −
- Complexity − For large systems, the number of states and transitions can become complex.
- Ambiguity − In nondeterministic FSMs, multiple possible transitions can make implementation tricky.
- Error Handling − Showing that invalid inputs are properly rejected requires careful design.
Besides these challenges, FSMs remain one of the most reliable tools for modeling and implementing state-based systems.
Conclusion
Finite state machines play an important role in how computers process input and make decisions. In this chapter, we explained the concept of finite state machines and how they are used in computer science.
We understood the basics including states, inputs, and transitions. Using the example of binary strings that start with a 1 and end with a 0, we saw how FSMs can be represented as diagrams and tables. Finally, we looked at some real-world applications and challenges of using FSMs.