120_Introducing_bison

120_Introducing_bison - CS143 Summer2011 Handout12...

Info iconThis preview shows pages 1–3. Sign up to view the full content.

View Full Document Right Arrow Icon
CS143 Handout 12 Summer 2011 July 1 st , 2011 Introduction to  bison Handout written by Maggie Johnson and revised by Julie Zelenski. bison  is a parser generator.  It is to parsers what  flex  is to scanners.  You provide the  input of a grammar specification and it generates an LALR(1) parser to recognize  sentences in that grammar.  The name is a great example of a CS in-joke.   bison  is  an  upgraded version of the older tool  yacc , "yet another compiler compiler" and it is  probably the most common of the LALR tools out there.  Our programming projects are  configured to use the updated version  bison , a close relative of the yak, but all of the  features we use are present in the original tool, so this handout serves as a brief  overview of both.   Our course web page include a link to an online bison user’s manual  for those who really want to dig deep and learn everything there is to learn about parser  generators. How It Works bison  is designed for use with C code and generates a parser written in C.  The parser is  configured for use in conjunction with a  flex -generated scanner and relies on standard  shared features (token types,  yylval , etc.) and calls the function  yylex  as a scanner co- routine.  You provide a grammar specification file, which is traditionally named using a  .y  extension.  You invoke  bison  on the  .y  file and it creates the  y.tab.h and  y.tab.c files containing a thousand or so lines of intense C code that implements an  efficient LALR(1) parser for your grammar, including the code for the actions you  specified.  The file provides an extern function  yyparse.y  that will attempt to  successfully parse a valid sentence.  You compile that C file normally, link with the rest  of your code, and you have a parser!  By default, the parser reads from  stdin  and  writes to  stdout , just like a  flex -generated scanner does. % bison myFile.y creates  y.tab.c  of C code for parser % gcc -c y.tab.c compiles parser code % gcc –o parse y.tab.o lex.yy.o –ll -ly link parser, scanner, libraries % ./parse invokes parser, reads from  stdin The Makefiles we provide for the projects will execute the above compilation steps for  you, but it is worthwhile to understand the steps required.
Background image of page 1

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
bison  File Format Your input file is organized as follows (note the intentional similarities to  flex ): %{ Declarations %} Definitions %% Productions %% User subroutines The optional Declarations and User subroutines sections are used for ordinary C code  that you want copied verbatim to the generated C file, declarations are copied to the top 
Background image of page 2
Image of page 3
This is the end of the preview. Sign up to access the rest of the document.

This document was uploaded on 07/18/2011.

Page1 / 11

120_Introducing_bison - CS143 Summer2011 Handout12...

This preview shows document pages 1 - 3. Sign up to view the full document.

View Full Document Right Arrow Icon
Ask a homework question - tutors are online