We reviewed how to create the abstract syntax tree for a variety of rules. The code we developed in class was:
import yacc from mplex import tokens from ast import * def p_prog(t): 'prog : block' t[0]=t[1] def p_declarations_empty(t): 'declarations : empty' t[0]=[] def p_declarations_list(t): 'declarations : declaration SEMICOLON declarations' t[0]=[t[1]]+t[3] def p_declaration(t): '''declaration : var_declaration | fundec''' t[0]=t[1] def p_var_declaration(t): 'var_declaration : VAR ID arraydimensions COLON type' t[0]=decl('var',varid=t[2], vartype=t[5],arraydim=t[3]) def p_fundec(t): 'fundec : FUN ID paramlist COLON type CLPAR funblock CRPAR' t[0]=decl('fun', funid=t[2],funargdecs=t[3],funtype=t[5],funprog=t[7]) def p_expr_1(t): 'expr : expr OR brint_term' t[0]=expr(apply=(t[2],[t[1],t[3]])) # tuple of (OP, explist) def p_expr_2(t): 'expr : brint_term' t[0]=t[1]Last modified by Brett Giles