Presentation is loading. Please wait.

Presentation is loading. Please wait.

YACC Primer CS 671 January 29, 2008. CS 671 – Spring 2008 1 Yacc Yet Another Compiler Compiler Automatically constructs an LALR(1) parsing table from.

Similar presentations


Presentation on theme: "YACC Primer CS 671 January 29, 2008. CS 671 – Spring 2008 1 Yacc Yet Another Compiler Compiler Automatically constructs an LALR(1) parsing table from."— Presentation transcript:

1 YACC Primer CS 671 January 29, 2008

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

3 CS 671 – Spring 2008 2 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 CS 671 – Spring 2008 3 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 CS 671 – Spring 2008 4 Yacc Grammar Rules Section exp : exp PLUS exp { semantic action } Non-terminal Terminal C code. Executed when parser reduces this rule

6 CS 671 – Spring 2008 5 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 CS 671 – Spring 2008 6 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 CS 671 – Spring 2008 7 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 CS 671 – Spring 2008 8 Must Manage Conflicts % left PLUS; % left TIMES; // TIMES > PLUS E : E PLUS E | E TIMES E |... E → E. + E … E → E  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

10 CS 671 – Spring 2008 9 Precedence Directives E  E * E. + E  E. + E (any) E EE EE+ * E +E EE* E shiftreduce %nonassoc EQ NEQ %left PLUS MINUS %left TIMES DIV %right EXP %left prefers reducing %right prefers shifting %nonassoc error

11 CS 671 – Spring 2008 10 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


Download ppt "YACC Primer CS 671 January 29, 2008. CS 671 – Spring 2008 1 Yacc Yet Another Compiler Compiler Automatically constructs an LALR(1) parsing table from."

Similar presentations


Ads by Google