Parser - eg. grammar for func. declarations Handles eg: extern/static function_type function(arguments) { body } %start file file : external_definition | file external-definition ; external_definition : function_definition { } | declaration { if marked 'static', be so. otherwise assume 'extern' type function_definition : function_declarator function_body { /* main(void) { ... } */ assume it returns int } | declaration_specifiers function_declarator function_body /* eg. void function(int foo) { ... }, type is 'void' */ }