📖 Scenario: You are building a simple lexical analyzer for a tiny programming language. This analyzer will read a line of code and identify tokens such as keywords, identifiers, and numbers.
🎯 Goal: Create a basic lexical analyzer that can recognize keywords, identifiers, and numbers from a given input string.
📋 What You'll Learn
Create a list of keywords for the language
Set up a sample input string representing a line of code
Write logic to split the input into tokens and classify each token
Output the tokens with their types
💡 Why This Matters
🌍 Real World
Lexical analyzers are the first step in translating programming languages. They break down code into meaningful pieces called tokens.
💼 Career
Understanding lexical analysis is essential for compiler developers, language designers, and anyone working on tools that process code.
Progress0 / 4 steps
1
DATA SETUP: Define keywords and input string
Create a list called keywords with these exact strings: 'if', 'else', 'while', 'return'. Then create a string variable called code_line with the exact value 'if count return 10'.
Compiler Design
Hint
Use square brackets to create the list and quotes for strings.
2
CONFIGURATION: Prepare to split the input into tokens
Create a variable called tokens that splits the string code_line into parts separated by spaces using the split() method.
Compiler Design
Hint
Use the split() method without arguments to split by spaces.
3
CORE LOGIC: Classify each token
Create an empty dictionary called token_types. Then use a for loop with variable token to go through each item in tokens. Inside the loop, use if and elif statements to classify each token as follows: if token is in keywords, set token_types[token] to 'keyword'; else if token consists only of digits (use token.isdigit()), set token_types[token] to 'number'; otherwise, set token_types[token] to 'identifier'.
Compiler Design
Hint
Use token.isdigit() to check if the token is a number.
4
COMPLETION: Finalize the lexical analyzer output
Create a list called result that contains strings combining each token and its type from token_types in the format "token: type". Use a list comprehension with token iterating over tokens.
Compiler Design
Hint
Use a list comprehension with an f-string to format each token and its type.
Practice
(1/5)
1. What is the main job of a lexical analyzer in compiler design?
easy
A. Break input text into meaningful tokens
B. Execute the program code
C. Optimize the compiled code
D. Generate machine code
Solution
Step 1: Understand the role of lexical analyzer
A lexical analyzer reads the input text and divides it into tokens like keywords, identifiers, and symbols.
Step 2: Differentiate from other compiler phases
It does not execute code, optimize, or generate machine code; those are later phases.
Final Answer:
Break input text into meaningful tokens -> Option A
Quick Check:
Lexical analyzer = tokenization [OK]
Hint: Lexical analyzer splits text into tokens [OK]
Common Mistakes:
Confusing lexical analysis with code execution
Thinking it optimizes or generates machine code
Assuming it handles syntax errors
2. Which of the following is a correct way to define a token pattern in a lexical analyzer?
easy
A. token = (123)+
B. token = [a-zA-Z_][a-zA-Z0-9_]*
C. token = {print}
D. token = 123abc
Solution
Step 1: Recognize token pattern syntax
Token patterns use regular expressions; [a-zA-Z_][a-zA-Z0-9_]* matches identifiers starting with letter or underscore.
Step 2: Check other options for correctness
token = (123)+ uses invalid syntax for token pattern; C uses braces incorrectly; D is not a valid pattern.