0% found this document useful (0 votes)
96 views3 pages

Bison Is A General-Purpose Parser Generator That Converts: The Concepts of Bison

Bison is a parser generator that converts context-free grammars into C code. It works like Yacc but is upward compatible, allowing Yacc grammars to work with no changes. A Bison grammar defines a language using BNF notation, specifying syntactic groupings and rules for constructing them. Bison represents nonterminals as lowercase identifiers, terminals as uppercase identifiers or character literals, and grammar rules with Bison syntax expressions. A Bison grammar file has sections for C declarations, Bison declarations, grammar rules, and additional C code.

Uploaded by

AdilKhan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
96 views3 pages

Bison Is A General-Purpose Parser Generator That Converts: The Concepts of Bison

Bison is a parser generator that converts context-free grammars into C code. It works like Yacc but is upward compatible, allowing Yacc grammars to work with no changes. A Bison grammar defines a language using BNF notation, specifying syntactic groupings and rules for constructing them. Bison represents nonterminals as lowercase identifiers, terminals as uppercase identifiers or character literals, and grammar rules with Bison syntax expressions. A Bison grammar file has sections for C declarations, Bison declarations, grammar rules, and additional C code.

Uploaded by

AdilKhan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 3

Introduction

Bison is a general-purpose parser generator that converts


context-free grammar into a C program.
Bison is upward compatible with Yacc: all properly-written Yacc
grammars ought to work with Bison with no change.
Bison was written primarily by Robert Corbett; Richard Stallman
made it Yacc-compatible. Wilfred Hansen of Carnegie Mellon
University added multicharacter string literals and other features.
YACC: Yet another compiler compiler

The Concepts of Bison

In order for Bison to parse a language, it must be described by


a context-free grammar. This means that you specify one or
more syntactic groupings and give rules for constructing them
from their parts.
The most common formal system for presenting such rules for
humans to read is Backus-Naur Form or "BNF", which was
developed in order to specify the language Algol 60. Any
grammar expressed in BNF is a context-free grammar. The input
to Bison is essentially machine-readable BNF.
In the formal grammatical rules for a language, each kind of
syntactic unit or grouping is named by a symbol. Those which are
built by grouping smaller constructs according to grammatical
rules are called nonterminal symbols; those which can't be
subdivided are called terminal symbols or token types. We call
a piece of input corresponding to a single terminal symbol
a token, and a piece corresponding to a single nonterminal
symbol a grouping.
From Formal Rules to Bison Input
A formal grammar is a mathematical construct. To define the language for Bison,
you must write a file expressing the grammar in Bison syntax: a Bison
grammar file. See section Bison Grammar Files.

A nonterminal symbol in the formal grammar is represented in Bison input as an


identifier, like an identifier in C. By convention, it should be in lower case, such
as expr, stmt or declaration.
The Bison representation for a terminal symbol is also called a token type. Token
types as well can be represented as C-like identifiers. By convention, these
identifiers should be upper case to distinguish them from nonterminals: for
example, INTEGER, IDENTIFIER, IF or RETURN. A terminal symbol that stands for a
particular keyword in the language should be named after that keyword converted
to upper case. The terminal symbol error is reserved for error recovery. See
section Symbols, Terminal and Nonterminal.
A terminal symbol can also be represented as a character literal, just like a C
character constant. You should do this whenever a token is just a single character
(parenthesis, plus-sign, etc.): use that same character in a literal as the terminal
symbol for that token.
A third way to represent a terminal symbol is with a C string constant containing
several characters. See section Symbols, Terminal and Nonterminal, for more
information.
The grammar rules also have an expression in Bison syntax. For example, here is
the Bison rule for a C return statement. The semicolon in quotes is a literal
character token, representing part of the C syntax for the statement; the naked
semicolon, and the colon, are Bison punctuation used in every rule.
stmt:

RETURN expr ';'


;

The Overall Layout of a Bison Grammar


The input file for the Bison utility is a Bison grammar file. The general form of a
Bison grammar file is as follows:
%{
C declarations
%}
Bison declarations
%%
Grammar rules
%%
Additional C code

The `%%', `%{' and `%}' are punctuation that appears in every Bison grammar
file to separate the sections.

The C declarations may define types and variables used in the actions. You can
also use preprocessor commands to define macros used there, and use #include to
include header files that do any of these things.
The Bison declarations declare the names of the terminal and nonterminal symbols,
and may also describe operator precedence and the data types of semantic values of
various symbols.
The grammar rules define how to construct each nonterminal symbol from its
parts.
The additional C code can contain any C code you want to use. Often the definition
of the lexical analyzer yylex goes here, plus subroutines called by the actions in the
grammar rules. In a simple program, all the rest of the program can go here.

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy