Bird
Raised Fist0
Compiler Designknowledge~5 mins

Yacc/Bison tool overview in Compiler Design - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the primary purpose of Yacc or Bison in compiler design?
Yacc and Bison are tools used to generate a parser, which analyzes the structure of input data based on a defined grammar. They help convert text into a format a computer can understand by checking if the input follows the rules of a language.
Click to reveal answer
beginner
What kind of grammar do Yacc and Bison use to define language syntax?
They use context-free grammars, often written in Backus-Naur Form (BNF), to describe the syntax rules of a language. This helps the parser understand how different parts of the language fit together.
Click to reveal answer
intermediate
How does Bison differ from Yacc?
Bison is a free and more modern replacement for Yacc. It supports more features, better error handling, and is compatible with Yacc grammar files, making it easier to use and extend.
Click to reveal answer
beginner
What is the output of running Yacc or Bison on a grammar file?
The output is usually a C source file that contains the parser code. This code can be compiled and linked with other parts of a compiler or interpreter to process input according to the grammar.
Click to reveal answer
beginner
Why is it important to define tokens when using Yacc or Bison?
Tokens are the basic building blocks or symbols of the language, like words in a sentence. Defining tokens helps the parser recognize meaningful pieces of input before applying grammar rules.
Click to reveal answer
What does Yacc/Bison primarily generate?
AA parser
BA compiler front-end
CA lexer
DAn interpreter
Which grammar type do Yacc and Bison use?
AContext-free grammar
BContext-sensitive grammar
CRegular grammar
DUnrestricted grammar
What language is the output parser code usually written in?
AJava
BC
CPython
DJavaScript
Which tool is a free alternative to Yacc with more features?
ALex
BFlex
CBison
DGCC
Why must tokens be defined before parsing?
ATo speed up compilation
BTo optimize memory usage
CTo generate machine code
DTo identify meaningful input pieces
Explain the role of Yacc or Bison in the process of compiling a programming language.
Think about how a program checks if code follows language rules.
You got /4 concepts.
    Describe the difference between Yacc and Bison and why one might choose Bison.
    Consider licensing and feature improvements.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the primary purpose of the Yacc/Bison tool in compiler design?
      easy
      A. To optimize machine code for faster execution
      B. To generate graphical user interfaces
      C. To convert grammar rules into code that parses language syntax
      D. To manage memory allocation during program execution

      Solution

      1. Step 1: Understand Yacc/Bison role

        Yacc/Bison are tools that take grammar rules and produce code that can parse input based on those rules.
      2. Step 2: Compare options with purpose

        Only To convert grammar rules into code that parses language syntax describes converting grammar rules into parsing code, which matches Yacc/Bison's function.
      3. Final Answer:

        To convert grammar rules into code that parses language syntax -> Option C
      4. Quick Check:

        Yacc/Bison = grammar to parser code [OK]
      Hint: Yacc/Bison turn grammar into code that reads language [OK]
      Common Mistakes:
      • Confusing Yacc/Bison with code optimizers
      • Thinking Yacc/Bison create user interfaces
      • Assuming Yacc/Bison handle memory management
      2. Which of the following is the correct way to define a token in a Yacc/Bison grammar file?
      easy
      A. %token NUMBER
      B. token NUMBER;
      C. #define NUMBER
      D. var NUMBER;

      Solution

      1. Step 1: Recall Yacc/Bison token syntax

        Tokens in Yacc/Bison are declared using the %token directive followed by the token name.
      2. Step 2: Check each option

        Only %token NUMBER uses the correct %token syntax. Others are invalid in Yacc/Bison files.
      3. Final Answer:

        %token NUMBER -> Option A
      4. Quick Check:

        Token declaration uses %token [OK]
      Hint: Tokens start with %token keyword in Yacc/Bison [OK]
      Common Mistakes:
      • Using C or other language syntax for tokens
      • Omitting the % sign before token
      • Confusing token declaration with variable declaration
      3. Given the following Yacc/Bison grammar snippet:
      %token NUMBER
      %%
      expr: expr '+' NUMBER { printf("Sum\n"); };
      
      What will happen when parsing the input "3 + 4"?
      medium
      A. The parser will produce a syntax error
      B. The parser will print "Sum" twice
      C. The parser will print nothing
      D. The parser will print "Sum" once

      Solution

      1. Step 1: Analyze grammar rule

        The rule expr: expr '+' NUMBER triggers action printing "Sum" when matched.
      2. Step 2: Parse input "3 + 4"

        Input matches expr '+' NUMBER once, so action runs once printing "Sum".
      3. Final Answer:

        The parser will print "Sum" once -> Option D
      4. Quick Check:

        One matching rule triggers one print [OK]
      Hint: Each matched rule action runs once per match [OK]
      Common Mistakes:
      • Assuming multiple prints for single input
      • Thinking input causes syntax error
      • Ignoring action code in grammar
      4. Identify the error in this Yacc/Bison grammar snippet:
      %token NUMBER
      %%
      expr: expr '+' NUMBER { printf("Sum\n"); }
          | NUMBER;
      
      medium
      A. Incorrect token declaration syntax
      B. Missing semicolon after first rule action
      C. Missing %start directive
      D. Using printf inside action is invalid

      Solution

      1. Step 1: Check rule syntax

        Each grammar rule must end with a semicolon. The first rule lacks a semicolon after the action block.
      2. Step 2: Verify other parts

        Token declaration is correct, %start is optional if default is used, and printf is allowed in actions.
      3. Final Answer:

        Missing semicolon after first rule action -> Option B
      4. Quick Check:

        Rules end with semicolon [OK]
      Hint: Grammar rules must end with semicolon [OK]
      Common Mistakes:
      • Forgetting semicolon after action block
      • Confusing token syntax errors
      • Assuming printf is disallowed in actions
      5. You want to extend a Yacc/Bison grammar to parse simple arithmetic expressions with addition and multiplication. Which approach correctly handles operator precedence?
      hard
      A. Define separate rules for addition and multiplication and declare precedence using %left and %right directives
      B. Use only one rule combining '+' and '*' without precedence declarations
      C. Declare all tokens as %token without precedence directives
      D. Handle precedence in the lexer instead of grammar

      Solution

      1. Step 1: Understand operator precedence in Yacc/Bison

        Yacc/Bison uses %left, %right, and %nonassoc directives to declare operator precedence and associativity.
      2. Step 2: Evaluate options

        Define separate rules for addition and multiplication and declare precedence using %left and %right directives correctly uses separate rules and precedence declarations. Options B and C ignore precedence, causing incorrect parsing. Handle precedence in the lexer instead of grammar is incorrect because lexer does not handle precedence.
      3. Final Answer:

        Define separate rules for addition and multiplication and declare precedence using %left and %right directives -> Option A
      4. Quick Check:

        Precedence via %left/%right = correct parsing [OK]
      Hint: Use %left/%right to set operator precedence in grammar [OK]
      Common Mistakes:
      • Ignoring precedence causing wrong parse trees
      • Trying to handle precedence in lexer
      • Declaring tokens without precedence directives
      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