shader_parameter_declaration = "parameter" , name_lower , ":" , type_path ; shader_vertex_input_declaration = "in" , name_lower , ":" , type_path ; shader_vertex_output_declaration = "out" , name_lower , ":" , type_path ; shader_vertex_output_declaration = "out" , "vertex" , name_lower , ":" , type_path ; shader_vertex_parameter = shader_parameter_declaration | shader_vertex_input_declaration | shader_vertex_output_declaration | shader_vertex_output_main_declaration ; shader_vertex_parameters = { shader_vertex_parameter , ";" } ; shader_vertex_output_assignment = "out" , name_lower , "=" , term_path ; shader_vertex_output_assignments = shader_vertex_output_assignment , ";" , { shader_vertex_output_assignments } ; shader_vertex_declaration = "vertex" , name_lower , "is" , shader_vertex_parameters , [ "with" , local_declarations ] , "as" , shader_vertex_output_assignments , "end" ; shader_fragment_input_declaration = "in" , name_lower , ":" , type_path ; shader_fragment_output_declaration = "out" , name_lower , ":" , type_path , "as" , integer_literal ; shader_fragment_parameter = shader_parameter_declaration | shader_fragment_input_declaration | shader_fragment_output_declaration ; shader_fragment_parameters = { shader_fragment_parameter , ";" } ; shader_fragment_discard_declaration = "discard" , "(" , expression , ")" ; shader_fragment_local_declaration = local_declaration | shader_fragment_discard_declaration ; shader_fragment_local_declarations = shader_fragment_local_declaration , ";" , { shader_fragment_local_declarations } ; shader_fragment_output_assignment = "out" , name_lower , "=" , term_path ; shader_fragment_output_assignments = shader_fragment_output_assignment , ";" , { shader_fragment_output_assignments } ; shader_fragment_declaration = "fragment" , name_lower , "is" , shader_fragment_parameters , [ "with" , shader_fragment_local_declarations ] , "as" , shader_fragment_output_assignments , "end" ; shader_program_declaration = "program" , name_lower , "is" , "vertex" , shader_path , ";" , "fragment" , shader_path , ";" , "end" ; shader_declaration = "shader" , ( shader_vertex_declaration | shader_fragment_declaration | shader_program_declaration ) ; shader_declarations = { shader_declaration , ";" } ;