Download presentation
Presentation is loading. Please wait.
Published byClara Barnett Modified over 8 years ago
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.