/*
 *                                                                            
 *  Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) 
 *                                                                            
 *  All rights reserved. This program and the accompanying materials           
 *  are made available under the terms of the Eclipse Public License v1.0       
 *  which accompanies this distribution, and is available at                  
 *  http://www.eclipse.org/legal/epl-v10.html                                 
 *                                                                            
 *  Initial contribution:                                                      
 *     Loetz GmbH & Co. KG                               
 * 
 */

/**
 * 
 *  Implements the OSBP Xtext Blip DSL. It connects the different OSBP models like perspective
 *  to the used BPM models defined with BPMN2.
 *  
 *   
 *  @since  0.9.0
 *  
 *  <p>The Blip Grammar Xtext Syntax Graph<br>
 *  <img src="doc-files/grammar.png" alt="The Blip Grammar Xtext Syntax Graph">
 */
package org.eclipse.osbp.xtext.blip;
