Bird
Raised Fist0
Compiler Designknowledge~5 mins

Lex/Flex tool overview in Compiler Design - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the primary purpose of the Lex/Flex tool?
Lex/Flex is used to generate lexical analyzers, which break input text into meaningful tokens for further processing in compilers.
Click to reveal answer
beginner
How does Lex/Flex define patterns to recognize tokens?
Lex/Flex uses regular expressions to specify patterns that match sequences of characters representing tokens.
Click to reveal answer
beginner
What is the output of running Lex/Flex on a specification file?
It produces C source code for a lexical analyzer that can be compiled and used to scan input text.
Click to reveal answer
intermediate
Explain the role of actions in Lex/Flex specifications.
Actions are code snippets executed when a pattern matches; they typically return tokens or perform processing.
Click to reveal answer
intermediate
What is the difference between Lex and Flex?
Flex is a modern, faster, and open-source alternative to the original Lex tool, with compatible syntax and features.
Click to reveal answer
What kind of patterns does Lex/Flex use to identify tokens?
ARegular expressions
BContext-free grammars
CMachine code
DNatural language sentences
What language is the output code from Lex/Flex written in?
AJava
BC
CPython
DAssembly
Which of the following best describes an action in Lex/Flex?
AA pattern to match input
BA compiler optimization
CA type of token
DCode executed when a pattern matches
Flex is considered:
AA modern alternative to Lex
BA parser generator
CAn outdated tool replaced by Lex
DA debugger
What is the main role of a lexical analyzer generated by Lex/Flex?
ATo parse syntax trees
BTo generate machine code
CTo break input into tokens
DTo optimize code
Describe how Lex/Flex uses regular expressions and actions to create a lexical analyzer.
Think about how patterns and code snippets work together in Lex/Flex.
You got /3 concepts.
    Explain the difference between Lex and Flex and why Flex is commonly used today.
    Consider tool history and features.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the primary purpose of the Lex/Flex tool in compiler design?
      easy
      A. To optimize the compiled program
      B. To generate machine code from source code
      C. To break input text into meaningful tokens
      D. To manage memory allocation during execution

      Solution

      1. Step 1: Understand Lex/Flex role

        Lex/Flex is a tool used to scan input text and split it into tokens based on patterns.
      2. Step 2: Differentiate from other compiler parts

        Generating machine code and optimization are done by other compiler stages, not Lex/Flex.
      3. Final Answer:

        To break input text into meaningful tokens -> Option C
      4. Quick Check:

        Lex/Flex = Tokenizer [OK]
      Hint: Lex/Flex splits text into tokens, not code generation [OK]
      Common Mistakes:
      • Confusing Lex/Flex with code generator
      • Thinking Lex/Flex optimizes code
      • Assuming Lex/Flex manages memory
      2. Which of the following is the correct way to define a pattern in a Lex/Flex file?
      easy
      A. action { pattern }
      B. action : pattern
      C. pattern -> action
      D. pattern { action }

      Solution

      1. Step 1: Recall Lex/Flex syntax

        In Lex/Flex, patterns are written first, followed by actions enclosed in braces.
      2. Step 2: Verify option formats

        Only pattern { action } matches the correct syntax: pattern { action }
      3. Final Answer:

        pattern { action } -> Option D
      4. Quick Check:

        Pattern before action with braces [OK]
      Hint: Pattern comes first, then action in braces [OK]
      Common Mistakes:
      • Reversing pattern and action order
      • Using colons or arrows incorrectly
      • Placing action outside braces
      3. Given the Lex/Flex rule:
      [0-9]+ { printf("Number: %s\n", yytext); }
      What will be printed when the input is 123abc?
      medium
      A. Number: 123abc
      B. Number: 123
      C. Number: abc
      D. No output

      Solution

      1. Step 1: Understand the pattern

        The pattern [0-9]+ matches one or more digits only, so it matches '123' at the start.
      2. Step 2: Analyze input processing

        Lex/Flex matches '123' and executes the action printing 'Number: 123'. The 'abc' part does not match this pattern.
      3. Final Answer:

        Number: 123 -> Option B
      4. Quick Check:

        Digits matched only = Number: 123 [OK]
      Hint: Pattern matches digits only, stops before letters [OK]
      Common Mistakes:
      • Assuming whole input matches pattern
      • Including letters in digit pattern
      • Expecting no output for partial matches
      4. Identify the error in this Lex/Flex rule:
      [a-z]+ printf("Word: %s\n", yytext);
      medium
      A. Missing braces around the action
      B. Pattern syntax is incorrect
      C. Missing semicolon after pattern
      D. yytext is undefined

      Solution

      1. Step 1: Check rule syntax

        Lex/Flex requires actions to be enclosed in braces { } after the pattern.
      2. Step 2: Identify missing braces

        The given rule lacks braces around the printf action, causing a syntax error.
      3. Final Answer:

        Missing braces around the action -> Option A
      4. Quick Check:

        Actions need braces { } [OK]
      Hint: Always put actions inside braces { } [OK]
      Common Mistakes:
      • Omitting braces for single actions
      • Confusing pattern syntax with action syntax
      • Assuming semicolon needed after pattern
      5. How can you modify a Lex/Flex rule to ignore whitespace characters (spaces, tabs) while scanning input?
      hard
      A. [ \t\n]+ { /* do nothing to skip whitespace */ }
      B. [ \t\n]+ { printf("Whitespace found\n"); }
      C. [a-z]+ { /* skip whitespace here */ }
      D. Whitespace cannot be ignored in Lex/Flex

      Solution

      1. Step 1: Understand whitespace handling

        To ignore whitespace, define a pattern matching spaces, tabs, newlines with an empty action.
      2. Step 2: Check options for correct ignoring

        [ \t\n]+ { /* do nothing to skip whitespace */ } matches whitespace characters and has an empty action, effectively skipping them.
      3. Final Answer:

        [ \t\n]+ { /* do nothing to skip whitespace */ } -> Option A
      4. Quick Check:

        Empty action skips matched whitespace [OK]
      Hint: Use empty action for whitespace pattern to skip [OK]
      Common Mistakes:
      • Printing message instead of skipping
      • Using wrong pattern for whitespace
      • Believing whitespace cannot be ignored
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard