A theory for graph-based language specification, analysis, and mapping with application to the development of parallel software