1 / 11

YACC Primer

YACC Primer. CS 671 January 29, 2008. Yacc. Y et A nother C ompiler C ompiler Automatically constructs an LALR(1) parsing table from a set of grammar rules Yacc/Bison specification:. file.y. parser declarations %% grammar rules %% auxiliary code. bison –vd file.y -or-

Download Presentation

YACC Primer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. YACC Primer CS 671 January 29, 2008

  2. Yacc • Yet Another Compiler Compiler • Automatically constructs an LALR(1) parsing table from a set of grammar rules • Yacc/Bison specification: file.y parser declarations %% grammar rules %% auxiliary code bison –vd file.y -or- yacc –vd file.y y.tab.c y.tab.h y.output

  3. Yacc/Bison • Input: A CFG and a translation scheme – file.y • Output: A parser file.tab.c (bison) or y.tab.c (yacc) • An output file file.output containing the parsing tables (when invoked with –v option) • A file file.tab.h containing declarations (if invoked with –d option) • The parser called yyparse() • Parser expects to use a function called yylex() to get tokens

  4. Yacc Declaration Section • % { • c code • % } • % token PLUS MULTIPLY DIVIDE • % left PLUS MINUS • % left MULT DIV • % nonassoc EQ NEQ LT GT • % prec UMINUS Terminal symbols Assigned enum Placed in f.tab.h

  5. Yacc Grammar Rules Section • exp : exp PLUS exp { semantic action } C code. Executed when parser reduces this rule Non-terminal Terminal

  6. Example Grammar • P  L • S  id := id • S  while id do S • S  begin L end • S  if id then S • S  if id then S else S • L  S • L  L ; S

  7. Corresponding Yacc Specification • %{ • int yylex(void); • %} • % token ID WHILE BEGIN END DO … • % start prog • %% • [please fill in • your solution] P  L S  id := id S  while id do S S  begin L end S  if id then S S  if id then S else S L  S L  L ; S

  8. Conflicts • Yacc reports shift-reduce and reduce-reduce conflicts • Default behavior: • shift/reduce: choose shift • reduce/reduce: uses earlier rule • State 17: shift/reduce conflict • (shift ELSE, reduce 4) • stm: IF ID THEN stm . • stm: IF ID THEN stm . ELSE stm • ELSE shift 19 • . reduce by rule 4 • Resolve all conflicts!! (Use precedence rules)

  9. Must Manage Conflicts • % left PLUS; • % left TIMES; // TIMES > PLUS • E : E PLUS E | E TIMES E | ... E→ E . + E … E→ E  E . + • Rule: in conflict, choose reduce if production symbol higher precedence than shifted symbol; choose shift if vice-versa E→ E + E .  E→ E .  E …

  10. Precedence Directives • E  E * E . + • E  E . + E (any) %nonassoc EQ NEQ %left PLUS MINUS %left TIMES DIV %right EXP E E E E E + E * %left prefers reducing %right prefers shifting %nonassoc error E + E E * E shift reduce

  11. The %prec Directive • %{ declarations of yylex and yyerror %} • % token INT PLUS MINUS TIMES UMINUS • % start exp • % left PLUS MINUS • % left TIMES • % left UMINUS • %% • exp : INT • | exp PLUS exp • | exp MINUS exp • | exp TIMES exp • | MINUS exp %prec UMINUS

More Related